From abe2a9860870e9e6f0f02ef5a2c777c07046efea Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Thu, 4 Jul 2024 13:33:38 +0100 Subject: [PATCH 01/55] chore: update tokenomics implementation address --- .gitleaksignore | 4 +++- docs/configuration.json | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitleaksignore b/.gitleaksignore index 9ece7609..2c35471c 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -109,4 +109,6 @@ c1ebdf6ee1d58b2a7aa8ece47be8aaf70e4768ec:audits/internal4/analysis/contracts/dif 49edd56685ab74767e25b7a427aa5349e1bb3e46:scripts/deployment/globals_mainnet.json:generic-api-key:1 49edd56685ab74767e25b7a427aa5349e1bb3e46:scripts/deployment/globals_mainnet.json:generic-api-key:2 613f448aa91f0679f82affe37db9d9431f3e6071:scripts/deployment/globals_mainnet.json:generic-api-key:1 -613f448aa91f0679f82affe37db9d9431f3e6071:scripts/deployment/globals_mainnet.json:generic-api-key:2 \ No newline at end of file +613f448aa91f0679f82affe37db9d9431f3e6071:scripts/deployment/globals_mainnet.json:generic-api-key:2 +f78d4539c80abb33ea04dce4d561af5302033235:scripts/deployment/staking/globals_sepolia.json:generic-api-key:1 +f78d4539c80abb33ea04dce4d561af5302033235:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 \ No newline at end of file diff --git a/docs/configuration.json b/docs/configuration.json index d6afd484..e01ac5b3 100644 --- a/docs/configuration.json +++ b/docs/configuration.json @@ -10,8 +10,8 @@ }, { "name": "Tokenomics", - "artifact": "abis/0.8.20/Tokenomics.json", - "address": "0xD599ED4a5c45Fa66AA3C474b00701Fd452a2C30e" + "artifact": "abis/0.8.25/Tokenomics.json", + "address": "0x2C1633765c66a7CF0EC801a1046347bBee7344C9" }, { "name": "TokenomicsProxy", From 18f82450ce49a59bc756f72d8d24fbab676c1712 Mon Sep 17 00:00:00 2001 From: AL Date: Fri, 5 Jul 2024 13:55:40 +0100 Subject: [PATCH 02/55] doc: internal audit after fixing C4A --- audits/README.md | 3 + audits/internal5/README.md | 116 +++++++++++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 audits/internal5/README.md diff --git a/audits/README.md b/audits/README.md index d7dce10b..8667cf23 100644 --- a/audits/README.md +++ b/audits/README.md @@ -10,5 +10,8 @@ An internal audit with a focus on depository implementation v.1.0.1 is located i An internal audit with a focus on PoAA Staking is located in this folder: [internal audit 4](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/audits/internal4). +An internal audit with a focus on PoAA Staking fixing after C4A is located in this folder: [internal audit 5](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/audits/internal5). + + ### External audit Audit reports: [v1](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/audits/Autonolas%20Tokenomics%20Smart%20Contract%20Audit.pdf) and [v2](https://sourcehat.com/audits/AutonolasTokenomics/). diff --git a/audits/internal5/README.md b/audits/internal5/README.md new file mode 100644 index 00000000..601ca05c --- /dev/null +++ b/audits/internal5/README.md @@ -0,0 +1,116 @@ +# Internal audit of autonolas-tokenomics +The review has been performed based on the contract code in the following repository:
+`https://github.com/valory-xyz/autonolas-tokenomics`
+commit: `357539f11e3386c18bc9370d4cd20066c7fc0599` or `tag: v1.2.2-pre-internal-audit`
+ +## Objectives +The audit focused on fixing contracts related to PoAA Staking after C4A. + +### Coverage +Hardhat coverage has been performed before the audit and can be found here: +```sh +---------------------------------|----------|----------|----------|----------|----------------| +File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines | +---------------------------------|----------|----------|----------|----------|----------------| + contracts/ | 99.64 | 96.79 | 100 | 98.09 | | + + Dispenser.sol | 98.94 | 90.65 | 100 | 93.86 |... 0,1188,1246 | + + contracts/staking/ | 97.52 | 90.83 | 98.36 | 93.97 | | + ArbitrumDepositProcessorL1.sol | 100 | 96.15 | 100 | 97.14 | 157 | + ArbitrumTargetDispenserL2.sol | 100 | 100 | 100 | 100 | | + DefaultDepositProcessorL1.sol | 100 | 90.63 | 100 | 94.83 | 134,227,235 | + DefaultTargetDispenserL2.sol | 97.5 | 87.8 | 100 | 92.52 |... 459,489,511 | + EthereumDepositProcessor.sol | 85.71 | 88.89 | 100 | 86.11 |... 109,112,114 | + GnosisDepositProcessorL1.sol | 100 | 100 | 100 | 100 | | + GnosisTargetDispenserL2.sol | 100 | 100 | 100 | 100 | | + OptimismDepositProcessorL1.sol | 100 | 100 | 100 | 100 | | + OptimismTargetDispenserL2.sol | 100 | 100 | 100 | 100 | | + PolygonDepositProcessorL1.sol | 91.67 | 80 | 80 | 84.21 | 97,105,110 | + PolygonTargetDispenserL2.sol | 100 | 50 | 100 | 81.82 | 68,73 | + WormholeDepositProcessorL1.sol | 100 | 100 | 100 | 100 | | + WormholeTargetDispenserL2.sol | 100 | 91.67 | 100 | 96.77 | 114 | + +---------------------------------|----------|----------|----------|----------|----------------| +``` +Please, pay attention. + +#### Checking the corrections made after C4A +##### Bridging +67. Withheld tokens could become unsynchronized by using retry-ability of bridging protocols #67 +https://github.com/code-423n4/2024-05-olas-findings/issues/67 +[x] fixed + +54. OptimismTargetDispenserL2:syncWithheldTokens is callable with no sanity check on payloads and can lead to permanent loss of withheld token amounts #54 +https://github.com/code-423n4/2024-05-olas-findings/issues/54 +20. Users will lose all ETH sent as cost parameter in transactions to and from Optimism #20 +https://github.com/code-423n4/2024-05-olas-findings/issues/20 +4. The msg.value - cost for multiple cross-chain bridges are not refunded to users #4 +https://github.com/code-423n4/2024-05-olas-findings/issues/4 +[x] fixed + +32. Refunds for unconsumed gas will be lost due to incorrect refund chain ID #32 +https://github.com/code-423n4/2024-05-olas-findings/issues/32 +[x] fixed + +29. Attacker can cancel claimed staking incentives on Arbitrum #29 +https://github.com/code-423n4/2024-05-olas-findings/issues/29 +[x] fixed + +26. Non-normalized amounts sent via Wormhole lead to failure to redeem incentives #26 +https://github.com/code-423n4/2024-05-olas-findings/issues/26 +[x] fixed + +22. Arbitrary tokens and data can be bridged to GnosisTargetDispenserL2 to manipulate staking incentives #22 +https://github.com/code-423n4/2024-05-olas-findings/issues/22 +[x] fixed + +5. The refundAccount is erroneously set to msg.sender instead of tx.origin when refundAccount specified as address(0) #5 +https://github.com/code-423n4/2024-05-olas-findings/issues/5 +[x] fixed + +##### Dispenser +61. Loss of incentives if total weight in an epoch is zero #61 +https://github.com/code-423n4/2024-05-olas-findings/issues/61 +[x] fixed + +56. In retain function checkpoint nominee function is not called which can cause zero amount of tokens being retained. #56 +https://github.com/code-423n4/2024-05-olas-findings/issues/56 +[x] fixed + +38. Removed nominee doesn't receive staking incentives for the epoch in which they were removed which is against the intended behaviour #38 +https://github.com/code-423n4/2024-05-olas-findings/issues/38 +[x] fixed + +27. Unauthorized claiming of staking incentives for retainer #27 +https://github.com/code-423n4/2024-05-olas-findings/issues/27 +[x] fixed + +##### No need to change the code, just add information to the documentation +59. Changing VoteWeighting contract can result in lost staking incentives #59 +https://github.com/code-423n4/2024-05-olas-findings/issues/59 +[x] fixed + +#### Low issue +107. QA Report #107 +https://github.com/code-423n4/2024-05-olas-findings/issues/107 +``` +[N-44] Missing event for critical changes addNomenee in Dispenser +``` +110. QA Report #110 +https://github.com/code-423n4/2024-05-olas-findings/issues/110 +``` +[NonCritical-9] Missing events in sensitive function setL2TargetDispenser(address l2Dispenser) +``` +113. QA Report #113 +https://github.com/code-423n4/2024-05-olas-findings/issues/113 +``` +[L-08] Use abi.encodeCall() instead of abi.encodeWithSignature()/abi.encodeWithSelector() +grep -r encodeWithSelec ./contracts/ +./contracts/staking/OptimismDepositProcessorL1.sol: bytes memory data = abi.encodeWithSelector(RECEIVE_MESSAGE, abi.encode(targets, stakingIncentives, batchHash)); +./contracts/staking/OptimismTargetDispenserL2.sol: bytes memory data = abi.encodeWithSelector(RECEIVE_MESSAGE, abi.encode(amount, batchHash)); +./contracts/staking/ArbitrumTargetDispenserL2.sol: bytes memory data = abi.encodeWithSelector(RECEIVE_MESSAGE, abi.encode(amount, batchHash)); +./contracts/staking/GnosisTargetDispenserL2.sol: bytes memory data = abi.encodeWithSelector(RECEIVE_MESSAGE, abi.encode(amount, batchHash)); +./contracts/staking/ArbitrumDepositProcessorL1.sol: bytes memory data = abi.encodeWithSelector(RECEIVE_MESSAGE, abi.encode(targets, stakingIncentives, batchHash)); +./contracts/staking/GnosisDepositProcessorL1.sol: bytes memory data = abi.encodeWithSelector(RECEIVE_MESSAGE, abi.encode(targets, stakingIncentives, batchHash)); +``` From dba07d1b1da724c35b62bf05e06865c1e0ac9b09 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 5 Jul 2024 21:15:07 +0100 Subject: [PATCH 03/55] refactor: minimal changes according to internal audit findings --- audits/internal5/README.md | 4 ++++ contracts/Dispenser.sol | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/audits/internal5/README.md b/audits/internal5/README.md index 601ca05c..43d1aa74 100644 --- a/audits/internal5/README.md +++ b/audits/internal5/README.md @@ -97,11 +97,15 @@ https://github.com/code-423n4/2024-05-olas-findings/issues/107 ``` [N-44] Missing event for critical changes addNomenee in Dispenser ``` +[x] fixed + 110. QA Report #110 https://github.com/code-423n4/2024-05-olas-findings/issues/110 ``` [NonCritical-9] Missing events in sensitive function setL2TargetDispenser(address l2Dispenser) ``` +[x] fixed + 113. QA Report #113 https://github.com/code-423n4/2024-05-olas-findings/issues/113 ``` diff --git a/contracts/Dispenser.sol b/contracts/Dispenser.sol index 68c50102..f499bd52 100644 --- a/contracts/Dispenser.sol +++ b/contracts/Dispenser.sol @@ -274,6 +274,8 @@ contract Dispenser { event SetDepositProcessorChainIds(address[] depositProcessors, uint256[] chainIds); event WithheldAmountSynced(uint256 chainId, uint256 amount, uint256 updatedWithheldAmount, bytes32 indexed batchHash); event PauseDispenser(Pause pauseState); + event AddNomineeHash(bytes32 indexed nomineeHash); + event RemoveNomineeHash(bytes32 indexed nomineeHash); // Maximum chain Id as per EVM specs uint256 public constant MAX_EVM_CHAIN_ID = type(uint64).max / 2 - 36; @@ -769,6 +771,8 @@ contract Dispenser { } mapLastClaimedStakingEpochs[nomineeHash] = ITokenomics(tokenomics).epochCounter(); + + emit AddNomineeHash(nomineeHash); } /// @dev Records nominee removal epoch number. @@ -803,6 +807,8 @@ contract Dispenser { // Set the removed nominee epoch number mapRemovedNomineeEpochs[nomineeHash] = eCounter; + + emit RemoveNomineeHash(nomineeHash); } /// @dev Claims incentives for the owner of components / agents. From 45089c57b68e1a334600bcab6e0668071f373f47 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Sat, 6 Jul 2024 07:50:06 +0100 Subject: [PATCH 04/55] fix: correcting removed nominees value adjustments after not issuing incentives for removed nominee epoch --- contracts/Dispenser.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/Dispenser.sol b/contracts/Dispenser.sol index 47cb1ad8..0face1e2 100644 --- a/contracts/Dispenser.sol +++ b/contracts/Dispenser.sol @@ -397,11 +397,11 @@ contract Dispenser { revert Overflow(firstClaimedEpoch, eCounter - 1); } - // Get epoch when the nominee was removed + // Get epoch number when the nominee was removed uint256 epochRemoved = mapRemovedNomineeEpochs[nomineeHash]; - // If the nominee is not removed, its value in the map is always zero, unless removed + // If the nominee is not removed, its value in the map is always zero // The staking contract nominee cannot be removed in the zero-th epoch by default - if (epochRemoved > 1 && firstClaimedEpoch >= epochRemoved) { + if (epochRemoved > 0 && firstClaimedEpoch >= epochRemoved) { revert Overflow(firstClaimedEpoch, epochRemoved - 1); } @@ -410,7 +410,7 @@ contract Dispenser { // Limit last claimed epoch by the number following the nominee removal epoch // The condition for is lastClaimedEpoch strictly > because the lastClaimedEpoch is not included in claiming - if (epochRemoved > 1 && lastClaimedEpoch > epochRemoved) { + if (epochRemoved > 0 && lastClaimedEpoch > epochRemoved) { lastClaimedEpoch = epochRemoved; } From 7eedd6cba2f0dc66fd2e03380652613ca82fbeb2 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Sat, 6 Jul 2024 09:12:44 +0100 Subject: [PATCH 05/55] doc: adding important comment for nominee removal --- contracts/Dispenser.sol | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contracts/Dispenser.sol b/contracts/Dispenser.sol index 0face1e2..a04a7dd1 100644 --- a/contracts/Dispenser.sol +++ b/contracts/Dispenser.sol @@ -767,6 +767,12 @@ contract Dispenser { } /// @dev Records nominee removal epoch number. + /// @notice The staking contract nominee cannot be removed starting from one week before the end of epoch. + /// Since the epoch end time is unknown and the nominee removal is applied in the following week, + /// it is prohibited to remove nominee one week before the foreseen epoch end to correctly reflect + /// the removal epoch number. + /// If the staking contract nominee must not get incentives in the ongoing ending epoch as well, + /// the DAO is advised to use the removeInstance() function in the corresponding StakingFactory contract. /// @param nomineeHash Nominee hash. function removeNominee(bytes32 nomineeHash) external { // Check for the contract ownership From 8805e41372d3766f8dd74ba9e65693533382e4d0 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 12 Jul 2024 12:22:23 +0100 Subject: [PATCH 06/55] refactor: addressing issue L-08 --- contracts/Dispenser.sol | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/contracts/Dispenser.sol b/contracts/Dispenser.sol index 6b10797e..1188970d 100644 --- a/contracts/Dispenser.sol +++ b/contracts/Dispenser.sol @@ -487,6 +487,11 @@ contract Dispenser { } } + // Skip if there are no actual staking targets + if (numActualTargets == 0) { + continue; + } + // Allocate updated arrays accounting only for nonzero staking incentives bytes32[] memory updatedStakingTargets = new bytes32[](numActualTargets); uint256[] memory updatedStakingAmounts = new uint256[](numActualTargets); From fa2c18759543cb049a6726689d8590a76f08f810 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 12 Jul 2024 18:43:25 +0100 Subject: [PATCH 07/55] doc: adding deployment procedure for Tokenomics 1.2.0 --- abis/0.8.25/Dispenser.json | 4 ++-- docs/deployment_v1.2.md | 19 +++++++++++++++++++ scripts/deployment/README.md | 5 ++++- 3 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 docs/deployment_v1.2.md diff --git a/abis/0.8.25/Dispenser.json b/abis/0.8.25/Dispenser.json index 7088a562..f64364ca 100644 --- a/abis/0.8.25/Dispenser.json +++ b/abis/0.8.25/Dispenser.json @@ -990,8 +990,8 @@ "type": "function" } ], - "bytecode": "0x610120604052348015610010575f80fd5b50604051614b01380380614b0183398101604081905261002f91610226565b6002805460ff60a01b1933166001600160a81b031990911617600160a01b1760ff60a81b1916600160a91b1790556001600160a01b038916158061007a57506001600160a01b038816155b8061008c57506001600160a01b038716155b8061009e57506001600160a01b038616155b806100a7575084155b156100c55760405163d92e233d60e01b815260040160405180910390fd5b8315806100d0575082155b806100d9575081155b806100e2575080155b1561010057604051637c946ed760e01b815260040160405180910390fd5b61ffff82111561013357604051637ae5968560e01b81526004810183905261ffff60248201526044015b60405180910390fd5b6001600160601b0381111561016b57604051637ae5968560e01b8152600481018290526001600160601b03602482015260440161012a565b6001600160a01b0398891660c05260038054988a166001600160a01b0319998a1617905560048054978a16978916979097179096556005805495909816949096169390931790955560e0819052604080518082018252828152466020918201908152825180830194909452518383015281518084038301815260609093019091528151910120610100525f9390935560019290925560805260a0526102a5565b80516001600160a01b0381168114610221575f80fd5b919050565b5f805f805f805f805f6101208a8c03121561023f575f80fd5b6102488a61020b565b985061025660208b0161020b565b975061026460408b0161020b565b965061027260608b0161020b565b955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b60805160a05160c05160e0516101005161479361036e5f395f81816103450152818161141401528181611cf50152611d9c01525f8181610671015281816114470152818161169b015281816116cf01528181611d2c01528181611ec60152818161318e01526131f401525f81816101ef015281816109c201528181610ac901528181610e4901528181610f98015281816126a3015281816127b001528181612ae4015261354c01525f818161063e01526118a401525f818161029c015261187001526147935ff3fe6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c36565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c36565b60066020525f908152604090205481565b61030a610305366004613cfe565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613e5e565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a0366004613fde565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b604051610225919061401b565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b366004614041565b611312565b34801561041b575f80fd5b5061030a61042a366004613c36565b6113d1565b34801561043a575f80fd5b5061044e610449366004614066565b611654565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a610488366004613fde565b611b99565b348015610498575f80fd5b506102be6104a7366004613c36565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611ca8565b34801561050a575f80fd5b5061030a610519366004613c36565b61204a565b348015610529575f80fd5b5061030a6105383660046140b0565b6121ed565b348015610548575f80fd5b506102be610557366004613c36565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a6105823660046140c9565b6122aa565b348015610592575f80fd5b5061030a6105a13660046140e9565b61235a565b3480156105b1575f80fd5b506105c56105c0366004614129565b6124c8565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f4366004614189565b6128f9565b348015610604575f80fd5b50610211610613366004613c36565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612a5c565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614007565b148061079b5750600381600381111561079957610799614007565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b919061423c565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190614255565b90505f805f806108d18c8c8c88611654565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a8282614280565b90505f9150610994565b61098e8183614280565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a339190614255565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab19190614299565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614255565b610b449190614280565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612a88565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612c86565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614007565b1480610c9f57506003816003811115610c9d57610c9d614007565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f919061423c565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612f84565b825192955090935091505f9084906002908110610d6357610d636142b8565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b6142b8565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e026142b8565b60200260200101511115611086575f83600181518110610e2457610e246142b8565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba9190614255565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee96142b8565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f809190614299565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110099190614255565b6110139190614280565b905083600181518110611028576110286142b8565b6020026020010151811461107657808460018151811061104a5761104a6142b8565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b6134de565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c36142b8565b6020026020010151856001815181106110de576110de6142b8565b6020026020010151866002815181106110f9576110f96142b8565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f69084906142cc565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614007565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c6919061401b565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906142df565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d611520600185614280565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d9190614255565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f491906142df565b63ffffffff1690505f62093a8061160b83856142cc565b6116159190614280565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5050505f9182526007602052604090912055565b5f805f80865f0361167857604051637c946ed760e01b815260040160405180910390fd5b5f8690036116995760405163d92e233d60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000086036116fb57604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61173f828a613ae7565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b15801561178f575f80fd5b505af11580156117a1573d5f803e3d5ffd5b5083925050505b83811015611b8c575f818152600a602052604090205460ff16611b8457600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa15801561180c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611830919061431d565b606081015190915060ff16156118cf57604081015161ffff16158015611866575060208101516bffffffffffffffffffffffff16155b156118ca5761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118d5565b50611b84565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa15801561191c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119409190614255565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa158015611999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bd91906143a0565b91509150805f03611a05575f858152600a60205260409020805460ff1916600117905583516119fa906bffffffffffffffffffffffff168a6142cc565b985050505050611b84565b83515f9081906bffffffffffffffffffffffff168184821115611a3257611a2c8583614280565b90508491505b6040880151611a4b9061ffff16655af3107a40006143c2565b861015611a8157670de0b6b3a764000086611a6684846142cc565b611a7091906143c2565b611a7a91906143ed565b9250611b6f565b670de0b6b3a7640000611a9487846143c2565b611a9e91906143ed565b9350670de0b6b3a7640000611ab387836143c2565b611abd91906143ed565b925087602001516bffffffffffffffffffffffff16915081841115611af657611ae68285614280565b611af090846142cc565b92508193505b60128f1015611b62575f8f6012611b0d9190614280565b611b1890600a6144e0565b611b2290866143ed565b90508f6012611b319190614280565b611b3c90600a6144e0565b611b4690826143c2565b9050611b528186614280565b611b5c90856142cc565b90945092505b611b6c848f6142cc565b9d505b611b79838e6142cc565b9c5050505050505050505b6001016117a8565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611bfa576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c139085906142cc565b90506bffffffffffffffffffffffff811115611c5757604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611cd7576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d1a907f000000000000000000000000000000000000000000000000000000000000000090613ae7565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611d86575f80fd5b505af1158015611d98573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611f8857600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e44919061431d565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb49190614255565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4f91906143a0565b508351909150611f6e9082906bffffffffffffffffffffffff166143c2565b611f7890866142cc565b9450505050806001019050611dd1565b50611f9b670de0b6b3a7640000826143ed565b90508015611ffd57600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015611fe6575f80fd5b505af1158015611ff8573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b0316331461208a5760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120ab576120ab614007565b14806120c8575060038160038111156120c6576120c6614007565b145b8061213f57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612114573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612138919061423c565b60ff166002145b1561215d576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d191906142df565b5f9283526006602052604090922063ffffffff90921690915550565b6002546001600160a01b0316331461222d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122545760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146122ea5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8115806122f5575080155b1561231357604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b0316331461239a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b038316156123fd576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b03821615612460576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b038116156124c3576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff1611156124fe576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561253257612532614007565b148061254f5750600381600381111561254d5761254d614007565b145b806125c657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561259b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bf919061423c565b60ff166002145b156125e4576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061263190339089908990600401614525565b60408051808303815f875af115801561264c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267091906143a0565b90935091505f8061268184866142cc565b1115612859575f8315612717576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156126f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127149190614255565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af115801561276d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127919190614299565b91508315612857576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156127fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128219190614255565b61282b9190614280565b90508381146128575760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128a0576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b031633146129395760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061294957508051825114155b1561297457815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a2a57818181518110612991576129916142b8565b60200260200101515f036129b857604051637c946ed760e01b815260040160405180910390fd5b8281815181106129ca576129ca6142b8565b602002602001015160085f8484815181106129e7576129e76142b8565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001019050612976565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa5828260405161234e92919061459a565b6024612a71600267ffffffffffffffff6145c7565b612a7b91906145ed565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612b50576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4e9190614299565b505b6024612b65600267ffffffffffffffff6145c7565b612b6f91906145ed565b67ffffffffffffffff168611612c02576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612bce9085908a908a908a90600401614643565b5f604051808303818588803b158015612be5575f80fd5b505af1158015612bf7573d5f803e3d5ffd5b505050505050612c7e565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612c4f90899089908990899060040161467b565b5f604051808303818588803b158015612c66575f80fd5b505af1158015612c78573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612cb557835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612ce457835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d1357835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612f5a57868181518110612d3257612d326142b8565b60200260200101518310612d7657868181518110612d5257612d526142b8565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612d8857612d886142b8565b60200260200101519250858181518110612da457612da46142b8565b6020026020010151515f03612dcc57604051637c946ed760e01b815260040160405180910390fd5b838181518110612dde57612dde6142b8565b602002602001015182612df191906142cc565b91505f600154905080878381518110612e0c57612e0c6142b8565b6020026020010151511115612e5b57868281518110612e2d57612e2d6142b8565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612e7057612e706142b8565b602002602001015151811015612f4c57888481518110612e9257612e926142b8565b60200260200101518181518110612eab57612eab6142b8565b60200260200101515f1c825f1c10612f0c57888481518110612ecf57612ecf6142b8565b60200260200101518181518110612ee857612ee86142b8565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f1e57612f1e6142b8565b60200260200101518181518110612f3757612f376142b8565b60200260200101519150806001019050612e5e565b505050806001019050612d17565b50803414612c7e5760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff811115612fc457612fc4613c4d565b604051908082528060200260200182016040528015612ff757816020015b6060815260200190600190039081612fe25790505b509150845167ffffffffffffffff81111561301457613014613c4d565b60405190808252806020026020018201604052801561303d578160200160208202803683370190505b5090505f5b85518110156134d4575f60085f888481518110613061576130616142b8565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec9190614255565b9050868381518110613100576131006142b8565b60200260200101515167ffffffffffffffff81111561312157613121613c4d565b60405190808252806020026020018201604052801561314a578160200160208202803683370190505b5085848151811061315d5761315d6142b8565b60200260200101819052505f5b87848151811061317c5761317c6142b8565b602002602001015151811015613363577f00000000000000000000000000000000000000000000000000000000000000008885815181106131bf576131bf6142b8565b602002602001015182815181106131d8576131d86142b8565b60200260200101510361322057604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f8061327b8e8e8a8151811061323a5761323a6142b8565b60200260200101518e8b81518110613254576132546142b8565b6020026020010151888151811061326d5761326d6142b8565b602002602001015189611654565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132ab576132ab6142b8565b602002602001015186815181106132c4576132c46142b8565b602002602001018181525050838989815181106132e3576132e36142b8565b602002602001018181516132f791906142cc565b9052508a5184908c905f9061330e5761330e6142b8565b6020026020010181815161332291906142cc565b9052508a5183908c90600290811061333c5761333c6142b8565b6020026020010181815161335091906142cc565b905250506001909301925061316a915050565b505f848481518110613377576133776142b8565b60200260200101511115613486575f60095f8a868151811061339b5761339b6142b8565b602002602001015181526020019081526020015f205490505f811115613484578484815181106133cd576133cd6142b8565b60200260200101518110613426578484815181106133ed576133ed6142b8565b6020026020010151816134009190614280565b90505f858581518110613415576134156142b8565b602002602001018181525050613454565b80858581518110613439576134396142b8565b6020026020010181815161344d9190614280565b9052505f90505b8060095f8b878151811061346a5761346a6142b8565b602002602001015181526020019081526020015f20819055505b505b838381518110613498576134986142b8565b6020026020010151866001815181106134b3576134b36142b8565b602002602001018181516134c791906142cc565b9052505050600101613042565b5093509350939050565b5f5b8651811015613ade575f60085f8984815181106134ff576134ff6142b8565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061353c5761353c6142b8565b60200260200101511115613607577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb8286858151811061358c5761358c6142b8565b60200260200101516040518363ffffffff1660e01b81526004016135c59291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156135e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136059190614299565b505b5f8088848151811061361b5761361b6142b8565b60200260200101515167ffffffffffffffff81111561363c5761363c613c4d565b604051908082528060200260200182016040528015613665578160200160208202803683370190505b5090505f5b89858151811061367c5761367c6142b8565b6020026020010151518110156136fe575f89868151811061369f5761369f6142b8565b602002602001015182815181106136b8576136b86142b8565b602002602001015111156136f65760018282815181106136da576136da6142b8565b911515602092830291909101909101526136f383614699565b92505b60010161366a565b505f8267ffffffffffffffff81111561371957613719613c4d565b604051908082528060200260200182016040528015613742578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561375f5761375f613c4d565b604051908082528060200260200182016040528015613788578160200160208202803683370190505b5090505f805b8c88815181106137a0576137a06142b8565b602002602001015151811015613884578481815181106137c2576137c26142b8565b60200260200101511561387c578c88815181106137e1576137e16142b8565b602002602001015181815181106137fa576137fa6142b8565b6020026020010151848381518110613814576138146142b8565b6020026020010181815250508b8881518110613832576138326142b8565b6020026020010151818151811061384b5761384b6142b8565b6020026020010151838381518110613865576138656142b8565b602090810291909101015261387982614699565b91505b60010161378e565b50602461389a600267ffffffffffffffff6145c7565b6138a491906145ed565b67ffffffffffffffff168d88815181106138c0576138c06142b8565b602002602001015111613a20575f835167ffffffffffffffff8111156138e8576138e8613c4d565b604051908082528060200260200182016040528015613911578160200160208202803683370190505b5090505f5b845181101561396d57848181518110613931576139316142b8565b60200260200101515f1c82828151811061394d5761394d6142b8565b6001600160a01b0390921660209283029190910190910152600101613916565b50866001600160a01b031663bde526618a8a8151811061398f5761398f6142b8565b602002602001015183868f8d815181106139ab576139ab6142b8565b60200260200101518f8e815181106139c5576139c56142b8565b60200260200101516040518663ffffffff1660e01b81526004016139ec94939291906146b1565b5f604051808303818588803b158015613a03575f80fd5b505af1158015613a15573d5f803e3d5ffd5b505050505050613acd565b856001600160a01b03166355442b59898981518110613a4157613a416142b8565b602002602001015185858e8c81518110613a5d57613a5d6142b8565b60200260200101518e8d81518110613a7757613a776142b8565b60200260200101516040518663ffffffff1660e01b8152600401613a9e94939291906146fb565b5f604051808303818588803b158015613ab5575f80fd5b505af1158015613ac7573d5f803e3d5ffd5b50505050505b5050505050508060010190506134e0565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b5e91906142df565b5f86815260066020526040812054945063ffffffff919091169150839003613b9957604051637c946ed760e01b815260040160405180910390fd5b808303613bce5782613bac600183614280565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f85815260076020526040902054600181118015613bec5750808410155b15613bfd5783613bac600183614280565b613c0785856142cc565b9250600181118015613c1857508083115b15613c21578092505b81831115613c2d578192505b50509250929050565b5f60208284031215613c46575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c8a57613c8a613c4d565b604052919050565b5f82601f830112613ca1575f80fd5b813567ffffffffffffffff811115613cbb57613cbb613c4d565b613cce601f8201601f1916602001613c61565b818152846020838601011115613ce2575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d11575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d3c575f80fd5b613d4887828801613c92565b91505092959194509250565b5f67ffffffffffffffff821115613d6d57613d6d613c4d565b5060051b60200190565b5f82601f830112613d86575f80fd5b81356020613d9b613d9683613d54565b613c61565b8083825260208201915060208460051b870101935086841115613dbc575f80fd5b602086015b84811015613dd85780358352918301918301613dc1565b509695505050505050565b5f82601f830112613df2575f80fd5b81356020613e02613d9683613d54565b82815260059290921b84018101918181019086841115613e20575f80fd5b8286015b84811015613dd857803567ffffffffffffffff811115613e42575f80fd5b613e508986838b0101613c92565b845250918301918301613e24565b5f805f805f60a08688031215613e72575f80fd5b8535945067ffffffffffffffff8060208801351115613e8f575f80fd5b613e9f8860208901358901613d77565b94508060408801351115613eb1575f80fd5b6040870135870188601f820112613ec6575f80fd5b613ed3613d968235613d54565b81358082526020808301929160051b8401018b1015613ef0575f80fd5b602083015b6020843560051b850101811015613f8a578481351115613f13575f80fd5b803584018c603f820112613f25575f80fd5b613f35613d966020830135613d54565b602082810135808352908201919060051b83016040018f811115613f57575f80fd5b6040840193505b80841015613f79578335835260209384019390920191613f5e565b508552505060209283019201613ef5565b50955050506060870135811015613f9f575f80fd5b613faf8860608901358901613de3565b92508060808801351115613fc1575f80fd5b50613fd28760808801358801613d77565b90509295509295909350565b5f805f60608486031215613ff0575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061403b57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215614051575f80fd5b81356004811061405f575f80fd5b9392505050565b5f805f8060808587031215614079575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b03811681146140ab575f80fd5b919050565b5f602082840312156140c0575f80fd5b61405f82614095565b5f80604083850312156140da575f80fd5b50508035926020909101359150565b5f805f606084860312156140fb575f80fd5b61410484614095565b925061411260208501614095565b915061412060408501614095565b90509250925092565b5f806040838503121561413a575f80fd5b823567ffffffffffffffff80821115614151575f80fd5b61415d86838701613d77565b93506020850135915080821115614172575f80fd5b5061417f85828601613d77565b9150509250929050565b5f806040838503121561419a575f80fd5b823567ffffffffffffffff808211156141b1575f80fd5b818501915085601f8301126141c4575f80fd5b813560206141d4613d9683613d54565b82815260059290921b840181019181810190898411156141f2575f80fd5b948201945b838610156142175761420886614095565b825294820194908201906141f7565b96505086013592505080821115614172575f80fd5b805160ff811681146140ab575f80fd5b5f6020828403121561424c575f80fd5b61405f8261422c565b5f60208284031215614265575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142935761429361426c565b92915050565b5f602082840312156142a9575f80fd5b8151801515811461405f575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142935761429361426c565b5f602082840312156142ef575f80fd5b815163ffffffff8116811461405f575f80fd5b80516bffffffffffffffffffffffff811681146140ab575f80fd5b5f6080828403121561432d575f80fd5b6040516080810181811067ffffffffffffffff8211171561435057614350613c4d565b60405261435c83614302565b815261436a60208401614302565b6020820152604083015161ffff81168114614383575f80fd5b60408201526143946060840161422c565b60608201529392505050565b5f80604083850312156143b1575f80fd5b505080516020909101519092909150565b80820281158282048414176142935761429361426c565b634e487b7160e01b5f52601260045260245ffd5b5f826143fb576143fb6143d9565b500490565b600181815b8085111561443a57815f19048211156144205761442061426c565b8085161561442d57918102915b93841c9390800290614405565b509250929050565b5f8261445057506001614293565b8161445c57505f614293565b8160018114614472576002811461447c57614498565b6001915050614293565b60ff84111561448d5761448d61426c565b50506001821b614293565b5060208310610133831016604e8410600b84101617156144bb575081810a614293565b6144c58383614400565b805f19048211156144d8576144d861426c565b029392505050565b5f61405f8383614442565b5f815180845260208085019450602084015f5b8381101561451a578151875295820195908201906001016144fe565b509495945050505050565b6001600160a01b0384168152606060208201525f61454660608301856144eb565b828103604084015261455881856144eb565b9695505050505050565b5f815180845260208085019450602084015f5b8381101561451a5781516001600160a01b031687529582019590820190600101614575565b604081525f6145ac6040830185614562565b82810360208401526145be81856144eb565b95945050505050565b5f67ffffffffffffffff808416806145e1576145e16143d9565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561460e5761460e61426c565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f61466a6080830185614615565b905082606083015295945050505050565b848152836020820152608060408201525f61466a6080830185614615565b5f600182016146aa576146aa61426c565b5060010190565b608081525f6146c36080830187614562565b82810360208401526146d581876144eb565b905082810360408401526146e98186614615565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561473357815184529284019290840190600101614717565b505050838103602085015261474881886144eb565b91505082810360408401526146e9818661461556fea2646970667358221220d5ad21b1e3c7f46f079be5de02f8abed25c59cb8c181f76db5750438335cf60864736f6c63430008190033", - "deployedBytecode": "0x6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c36565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c36565b60066020525f908152604090205481565b61030a610305366004613cfe565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613e5e565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a0366004613fde565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b604051610225919061401b565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b366004614041565b611312565b34801561041b575f80fd5b5061030a61042a366004613c36565b6113d1565b34801561043a575f80fd5b5061044e610449366004614066565b611654565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a610488366004613fde565b611b99565b348015610498575f80fd5b506102be6104a7366004613c36565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611ca8565b34801561050a575f80fd5b5061030a610519366004613c36565b61204a565b348015610529575f80fd5b5061030a6105383660046140b0565b6121ed565b348015610548575f80fd5b506102be610557366004613c36565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a6105823660046140c9565b6122aa565b348015610592575f80fd5b5061030a6105a13660046140e9565b61235a565b3480156105b1575f80fd5b506105c56105c0366004614129565b6124c8565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f4366004614189565b6128f9565b348015610604575f80fd5b50610211610613366004613c36565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612a5c565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614007565b148061079b5750600381600381111561079957610799614007565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b919061423c565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190614255565b90505f805f806108d18c8c8c88611654565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a8282614280565b90505f9150610994565b61098e8183614280565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a339190614255565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab19190614299565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614255565b610b449190614280565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612a88565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612c86565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614007565b1480610c9f57506003816003811115610c9d57610c9d614007565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f919061423c565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612f84565b825192955090935091505f9084906002908110610d6357610d636142b8565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b6142b8565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e026142b8565b60200260200101511115611086575f83600181518110610e2457610e246142b8565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba9190614255565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee96142b8565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f809190614299565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110099190614255565b6110139190614280565b905083600181518110611028576110286142b8565b6020026020010151811461107657808460018151811061104a5761104a6142b8565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b6134de565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c36142b8565b6020026020010151856001815181106110de576110de6142b8565b6020026020010151866002815181106110f9576110f96142b8565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f69084906142cc565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614007565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c6919061401b565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906142df565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d611520600185614280565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d9190614255565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f491906142df565b63ffffffff1690505f62093a8061160b83856142cc565b6116159190614280565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5050505f9182526007602052604090912055565b5f805f80865f0361167857604051637c946ed760e01b815260040160405180910390fd5b5f8690036116995760405163d92e233d60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000086036116fb57604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61173f828a613ae7565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b15801561178f575f80fd5b505af11580156117a1573d5f803e3d5ffd5b5083925050505b83811015611b8c575f818152600a602052604090205460ff16611b8457600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa15801561180c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611830919061431d565b606081015190915060ff16156118cf57604081015161ffff16158015611866575060208101516bffffffffffffffffffffffff16155b156118ca5761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118d5565b50611b84565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa15801561191c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119409190614255565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa158015611999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bd91906143a0565b91509150805f03611a05575f858152600a60205260409020805460ff1916600117905583516119fa906bffffffffffffffffffffffff168a6142cc565b985050505050611b84565b83515f9081906bffffffffffffffffffffffff168184821115611a3257611a2c8583614280565b90508491505b6040880151611a4b9061ffff16655af3107a40006143c2565b861015611a8157670de0b6b3a764000086611a6684846142cc565b611a7091906143c2565b611a7a91906143ed565b9250611b6f565b670de0b6b3a7640000611a9487846143c2565b611a9e91906143ed565b9350670de0b6b3a7640000611ab387836143c2565b611abd91906143ed565b925087602001516bffffffffffffffffffffffff16915081841115611af657611ae68285614280565b611af090846142cc565b92508193505b60128f1015611b62575f8f6012611b0d9190614280565b611b1890600a6144e0565b611b2290866143ed565b90508f6012611b319190614280565b611b3c90600a6144e0565b611b4690826143c2565b9050611b528186614280565b611b5c90856142cc565b90945092505b611b6c848f6142cc565b9d505b611b79838e6142cc565b9c5050505050505050505b6001016117a8565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611bfa576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c139085906142cc565b90506bffffffffffffffffffffffff811115611c5757604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611cd7576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d1a907f000000000000000000000000000000000000000000000000000000000000000090613ae7565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611d86575f80fd5b505af1158015611d98573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611f8857600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e44919061431d565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb49190614255565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4f91906143a0565b508351909150611f6e9082906bffffffffffffffffffffffff166143c2565b611f7890866142cc565b9450505050806001019050611dd1565b50611f9b670de0b6b3a7640000826143ed565b90508015611ffd57600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015611fe6575f80fd5b505af1158015611ff8573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b0316331461208a5760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120ab576120ab614007565b14806120c8575060038160038111156120c6576120c6614007565b145b8061213f57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612114573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612138919061423c565b60ff166002145b1561215d576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d191906142df565b5f9283526006602052604090922063ffffffff90921690915550565b6002546001600160a01b0316331461222d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122545760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146122ea5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8115806122f5575080155b1561231357604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b0316331461239a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b038316156123fd576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b03821615612460576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b038116156124c3576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff1611156124fe576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561253257612532614007565b148061254f5750600381600381111561254d5761254d614007565b145b806125c657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561259b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bf919061423c565b60ff166002145b156125e4576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061263190339089908990600401614525565b60408051808303815f875af115801561264c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267091906143a0565b90935091505f8061268184866142cc565b1115612859575f8315612717576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156126f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127149190614255565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af115801561276d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127919190614299565b91508315612857576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156127fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128219190614255565b61282b9190614280565b90508381146128575760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128a0576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b031633146129395760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061294957508051825114155b1561297457815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a2a57818181518110612991576129916142b8565b60200260200101515f036129b857604051637c946ed760e01b815260040160405180910390fd5b8281815181106129ca576129ca6142b8565b602002602001015160085f8484815181106129e7576129e76142b8565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001019050612976565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa5828260405161234e92919061459a565b6024612a71600267ffffffffffffffff6145c7565b612a7b91906145ed565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612b50576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4e9190614299565b505b6024612b65600267ffffffffffffffff6145c7565b612b6f91906145ed565b67ffffffffffffffff168611612c02576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612bce9085908a908a908a90600401614643565b5f604051808303818588803b158015612be5575f80fd5b505af1158015612bf7573d5f803e3d5ffd5b505050505050612c7e565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612c4f90899089908990899060040161467b565b5f604051808303818588803b158015612c66575f80fd5b505af1158015612c78573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612cb557835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612ce457835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d1357835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612f5a57868181518110612d3257612d326142b8565b60200260200101518310612d7657868181518110612d5257612d526142b8565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612d8857612d886142b8565b60200260200101519250858181518110612da457612da46142b8565b6020026020010151515f03612dcc57604051637c946ed760e01b815260040160405180910390fd5b838181518110612dde57612dde6142b8565b602002602001015182612df191906142cc565b91505f600154905080878381518110612e0c57612e0c6142b8565b6020026020010151511115612e5b57868281518110612e2d57612e2d6142b8565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612e7057612e706142b8565b602002602001015151811015612f4c57888481518110612e9257612e926142b8565b60200260200101518181518110612eab57612eab6142b8565b60200260200101515f1c825f1c10612f0c57888481518110612ecf57612ecf6142b8565b60200260200101518181518110612ee857612ee86142b8565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f1e57612f1e6142b8565b60200260200101518181518110612f3757612f376142b8565b60200260200101519150806001019050612e5e565b505050806001019050612d17565b50803414612c7e5760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff811115612fc457612fc4613c4d565b604051908082528060200260200182016040528015612ff757816020015b6060815260200190600190039081612fe25790505b509150845167ffffffffffffffff81111561301457613014613c4d565b60405190808252806020026020018201604052801561303d578160200160208202803683370190505b5090505f5b85518110156134d4575f60085f888481518110613061576130616142b8565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec9190614255565b9050868381518110613100576131006142b8565b60200260200101515167ffffffffffffffff81111561312157613121613c4d565b60405190808252806020026020018201604052801561314a578160200160208202803683370190505b5085848151811061315d5761315d6142b8565b60200260200101819052505f5b87848151811061317c5761317c6142b8565b602002602001015151811015613363577f00000000000000000000000000000000000000000000000000000000000000008885815181106131bf576131bf6142b8565b602002602001015182815181106131d8576131d86142b8565b60200260200101510361322057604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f8061327b8e8e8a8151811061323a5761323a6142b8565b60200260200101518e8b81518110613254576132546142b8565b6020026020010151888151811061326d5761326d6142b8565b602002602001015189611654565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132ab576132ab6142b8565b602002602001015186815181106132c4576132c46142b8565b602002602001018181525050838989815181106132e3576132e36142b8565b602002602001018181516132f791906142cc565b9052508a5184908c905f9061330e5761330e6142b8565b6020026020010181815161332291906142cc565b9052508a5183908c90600290811061333c5761333c6142b8565b6020026020010181815161335091906142cc565b905250506001909301925061316a915050565b505f848481518110613377576133776142b8565b60200260200101511115613486575f60095f8a868151811061339b5761339b6142b8565b602002602001015181526020019081526020015f205490505f811115613484578484815181106133cd576133cd6142b8565b60200260200101518110613426578484815181106133ed576133ed6142b8565b6020026020010151816134009190614280565b90505f858581518110613415576134156142b8565b602002602001018181525050613454565b80858581518110613439576134396142b8565b6020026020010181815161344d9190614280565b9052505f90505b8060095f8b878151811061346a5761346a6142b8565b602002602001015181526020019081526020015f20819055505b505b838381518110613498576134986142b8565b6020026020010151866001815181106134b3576134b36142b8565b602002602001018181516134c791906142cc565b9052505050600101613042565b5093509350939050565b5f5b8651811015613ade575f60085f8984815181106134ff576134ff6142b8565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061353c5761353c6142b8565b60200260200101511115613607577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb8286858151811061358c5761358c6142b8565b60200260200101516040518363ffffffff1660e01b81526004016135c59291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156135e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136059190614299565b505b5f8088848151811061361b5761361b6142b8565b60200260200101515167ffffffffffffffff81111561363c5761363c613c4d565b604051908082528060200260200182016040528015613665578160200160208202803683370190505b5090505f5b89858151811061367c5761367c6142b8565b6020026020010151518110156136fe575f89868151811061369f5761369f6142b8565b602002602001015182815181106136b8576136b86142b8565b602002602001015111156136f65760018282815181106136da576136da6142b8565b911515602092830291909101909101526136f383614699565b92505b60010161366a565b505f8267ffffffffffffffff81111561371957613719613c4d565b604051908082528060200260200182016040528015613742578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561375f5761375f613c4d565b604051908082528060200260200182016040528015613788578160200160208202803683370190505b5090505f805b8c88815181106137a0576137a06142b8565b602002602001015151811015613884578481815181106137c2576137c26142b8565b60200260200101511561387c578c88815181106137e1576137e16142b8565b602002602001015181815181106137fa576137fa6142b8565b6020026020010151848381518110613814576138146142b8565b6020026020010181815250508b8881518110613832576138326142b8565b6020026020010151818151811061384b5761384b6142b8565b6020026020010151838381518110613865576138656142b8565b602090810291909101015261387982614699565b91505b60010161378e565b50602461389a600267ffffffffffffffff6145c7565b6138a491906145ed565b67ffffffffffffffff168d88815181106138c0576138c06142b8565b602002602001015111613a20575f835167ffffffffffffffff8111156138e8576138e8613c4d565b604051908082528060200260200182016040528015613911578160200160208202803683370190505b5090505f5b845181101561396d57848181518110613931576139316142b8565b60200260200101515f1c82828151811061394d5761394d6142b8565b6001600160a01b0390921660209283029190910190910152600101613916565b50866001600160a01b031663bde526618a8a8151811061398f5761398f6142b8565b602002602001015183868f8d815181106139ab576139ab6142b8565b60200260200101518f8e815181106139c5576139c56142b8565b60200260200101516040518663ffffffff1660e01b81526004016139ec94939291906146b1565b5f604051808303818588803b158015613a03575f80fd5b505af1158015613a15573d5f803e3d5ffd5b505050505050613acd565b856001600160a01b03166355442b59898981518110613a4157613a416142b8565b602002602001015185858e8c81518110613a5d57613a5d6142b8565b60200260200101518e8d81518110613a7757613a776142b8565b60200260200101516040518663ffffffff1660e01b8152600401613a9e94939291906146fb565b5f604051808303818588803b158015613ab5575f80fd5b505af1158015613ac7573d5f803e3d5ffd5b50505050505b5050505050508060010190506134e0565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b5e91906142df565b5f86815260066020526040812054945063ffffffff919091169150839003613b9957604051637c946ed760e01b815260040160405180910390fd5b808303613bce5782613bac600183614280565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f85815260076020526040902054600181118015613bec5750808410155b15613bfd5783613bac600183614280565b613c0785856142cc565b9250600181118015613c1857508083115b15613c21578092505b81831115613c2d578192505b50509250929050565b5f60208284031215613c46575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c8a57613c8a613c4d565b604052919050565b5f82601f830112613ca1575f80fd5b813567ffffffffffffffff811115613cbb57613cbb613c4d565b613cce601f8201601f1916602001613c61565b818152846020838601011115613ce2575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d11575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d3c575f80fd5b613d4887828801613c92565b91505092959194509250565b5f67ffffffffffffffff821115613d6d57613d6d613c4d565b5060051b60200190565b5f82601f830112613d86575f80fd5b81356020613d9b613d9683613d54565b613c61565b8083825260208201915060208460051b870101935086841115613dbc575f80fd5b602086015b84811015613dd85780358352918301918301613dc1565b509695505050505050565b5f82601f830112613df2575f80fd5b81356020613e02613d9683613d54565b82815260059290921b84018101918181019086841115613e20575f80fd5b8286015b84811015613dd857803567ffffffffffffffff811115613e42575f80fd5b613e508986838b0101613c92565b845250918301918301613e24565b5f805f805f60a08688031215613e72575f80fd5b8535945067ffffffffffffffff8060208801351115613e8f575f80fd5b613e9f8860208901358901613d77565b94508060408801351115613eb1575f80fd5b6040870135870188601f820112613ec6575f80fd5b613ed3613d968235613d54565b81358082526020808301929160051b8401018b1015613ef0575f80fd5b602083015b6020843560051b850101811015613f8a578481351115613f13575f80fd5b803584018c603f820112613f25575f80fd5b613f35613d966020830135613d54565b602082810135808352908201919060051b83016040018f811115613f57575f80fd5b6040840193505b80841015613f79578335835260209384019390920191613f5e565b508552505060209283019201613ef5565b50955050506060870135811015613f9f575f80fd5b613faf8860608901358901613de3565b92508060808801351115613fc1575f80fd5b50613fd28760808801358801613d77565b90509295509295909350565b5f805f60608486031215613ff0575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061403b57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215614051575f80fd5b81356004811061405f575f80fd5b9392505050565b5f805f8060808587031215614079575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b03811681146140ab575f80fd5b919050565b5f602082840312156140c0575f80fd5b61405f82614095565b5f80604083850312156140da575f80fd5b50508035926020909101359150565b5f805f606084860312156140fb575f80fd5b61410484614095565b925061411260208501614095565b915061412060408501614095565b90509250925092565b5f806040838503121561413a575f80fd5b823567ffffffffffffffff80821115614151575f80fd5b61415d86838701613d77565b93506020850135915080821115614172575f80fd5b5061417f85828601613d77565b9150509250929050565b5f806040838503121561419a575f80fd5b823567ffffffffffffffff808211156141b1575f80fd5b818501915085601f8301126141c4575f80fd5b813560206141d4613d9683613d54565b82815260059290921b840181019181810190898411156141f2575f80fd5b948201945b838610156142175761420886614095565b825294820194908201906141f7565b96505086013592505080821115614172575f80fd5b805160ff811681146140ab575f80fd5b5f6020828403121561424c575f80fd5b61405f8261422c565b5f60208284031215614265575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142935761429361426c565b92915050565b5f602082840312156142a9575f80fd5b8151801515811461405f575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142935761429361426c565b5f602082840312156142ef575f80fd5b815163ffffffff8116811461405f575f80fd5b80516bffffffffffffffffffffffff811681146140ab575f80fd5b5f6080828403121561432d575f80fd5b6040516080810181811067ffffffffffffffff8211171561435057614350613c4d565b60405261435c83614302565b815261436a60208401614302565b6020820152604083015161ffff81168114614383575f80fd5b60408201526143946060840161422c565b60608201529392505050565b5f80604083850312156143b1575f80fd5b505080516020909101519092909150565b80820281158282048414176142935761429361426c565b634e487b7160e01b5f52601260045260245ffd5b5f826143fb576143fb6143d9565b500490565b600181815b8085111561443a57815f19048211156144205761442061426c565b8085161561442d57918102915b93841c9390800290614405565b509250929050565b5f8261445057506001614293565b8161445c57505f614293565b8160018114614472576002811461447c57614498565b6001915050614293565b60ff84111561448d5761448d61426c565b50506001821b614293565b5060208310610133831016604e8410600b84101617156144bb575081810a614293565b6144c58383614400565b805f19048211156144d8576144d861426c565b029392505050565b5f61405f8383614442565b5f815180845260208085019450602084015f5b8381101561451a578151875295820195908201906001016144fe565b509495945050505050565b6001600160a01b0384168152606060208201525f61454660608301856144eb565b828103604084015261455881856144eb565b9695505050505050565b5f815180845260208085019450602084015f5b8381101561451a5781516001600160a01b031687529582019590820190600101614575565b604081525f6145ac6040830185614562565b82810360208401526145be81856144eb565b95945050505050565b5f67ffffffffffffffff808416806145e1576145e16143d9565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561460e5761460e61426c565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f61466a6080830185614615565b905082606083015295945050505050565b848152836020820152608060408201525f61466a6080830185614615565b5f600182016146aa576146aa61426c565b5060010190565b608081525f6146c36080830187614562565b82810360208401526146d581876144eb565b905082810360408401526146e98186614615565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561473357815184529284019290840190600101614717565b505050838103602085015261474881886144eb565b91505082810360408401526146e9818661461556fea2646970667358221220d5ad21b1e3c7f46f079be5de02f8abed25c59cb8c181f76db5750438335cf60864736f6c63430008190033", + "bytecode": "0x610120604052348015610010575f80fd5b50604051614b0e380380614b0e83398101604081905261002f91610226565b6002805460ff60a01b1933166001600160a81b031990911617600160a01b1760ff60a81b1916600160a91b1790556001600160a01b038916158061007a57506001600160a01b038816155b8061008c57506001600160a01b038716155b8061009e57506001600160a01b038616155b806100a7575084155b156100c55760405163d92e233d60e01b815260040160405180910390fd5b8315806100d0575082155b806100d9575081155b806100e2575080155b1561010057604051637c946ed760e01b815260040160405180910390fd5b61ffff82111561013357604051637ae5968560e01b81526004810183905261ffff60248201526044015b60405180910390fd5b6001600160601b0381111561016b57604051637ae5968560e01b8152600481018290526001600160601b03602482015260440161012a565b6001600160a01b0398891660c05260038054988a166001600160a01b0319998a1617905560048054978a16978916979097179096556005805495909816949096169390931790955560e0819052604080518082018252828152466020918201908152825180830194909452518383015281518084038301815260609093019091528151910120610100525f9390935560019290925560805260a0526102a5565b80516001600160a01b0381168114610221575f80fd5b919050565b5f805f805f805f805f6101208a8c03121561023f575f80fd5b6102488a61020b565b985061025660208b0161020b565b975061026460408b0161020b565b965061027260608b0161020b565b955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b60805160a05160c05160e051610100516147a061036e5f395f81816103450152818161141401528181611cf50152611d9c01525f8181610671015281816114470152818161169b015281816116cf01528181611d2c01528181611ec60152818161318e01526131f401525f81816101ef015281816109c201528181610ac901528181610e4901528181610f98015281816126a3015281816127b001528181612ae4015261354c01525f818161063e01526118a401525f818161029c015261187001526147a05ff3fe6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c43565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c43565b60066020525f908152604090205481565b61030a610305366004613d0b565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613e6b565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a0366004613feb565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614028565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b36600461404e565b611312565b34801561041b575f80fd5b5061030a61042a366004613c43565b6113d1565b34801561043a575f80fd5b5061044e610449366004614073565b611654565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a610488366004613feb565b611b99565b348015610498575f80fd5b506102be6104a7366004613c43565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611ca8565b34801561050a575f80fd5b5061030a610519366004613c43565b61204a565b348015610529575f80fd5b5061030a6105383660046140bd565b6121ed565b348015610548575f80fd5b506102be610557366004613c43565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a6105823660046140d6565b6122aa565b348015610592575f80fd5b5061030a6105a13660046140f6565b61235a565b3480156105b1575f80fd5b506105c56105c0366004614136565b6124c8565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f4366004614196565b6128f9565b348015610604575f80fd5b50610211610613366004613c43565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612a5c565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614014565b148061079b5750600381600381111561079957610799614014565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b9190614249565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190614262565b90505f805f806108d18c8c8c88611654565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a828261428d565b90505f9150610994565b61098e818361428d565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a339190614262565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab191906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614262565b610b44919061428d565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612a88565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612c86565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614014565b1480610c9f57506003816003811115610c9d57610c9d614014565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f9190614249565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612f84565b825192955090935091505f9084906002908110610d6357610d636142c5565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b6142c5565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e026142c5565b60200260200101511115611086575f83600181518110610e2457610e246142c5565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba9190614262565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee96142c5565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110099190614262565b611013919061428d565b905083600181518110611028576110286142c5565b6020026020010151811461107657808460018151811061104a5761104a6142c5565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b6134de565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c36142c5565b6020026020010151856001815181106110de576110de6142c5565b6020026020010151866002815181106110f9576110f96142c5565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f69084906142d9565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614014565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c69190614028565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906142ec565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d61152060018561428d565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d9190614262565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f491906142ec565b63ffffffff1690505f62093a8061160b83856142d9565b611615919061428d565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5050505f9182526007602052604090912055565b5f805f80865f0361167857604051637c946ed760e01b815260040160405180910390fd5b5f8690036116995760405163d92e233d60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000086036116fb57604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61173f828a613af4565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b15801561178f575f80fd5b505af11580156117a1573d5f803e3d5ffd5b5083925050505b83811015611b8c575f818152600a602052604090205460ff16611b8457600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa15801561180c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611830919061432a565b606081015190915060ff16156118cf57604081015161ffff16158015611866575060208101516bffffffffffffffffffffffff16155b156118ca5761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118d5565b50611b84565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa15801561191c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119409190614262565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa158015611999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bd91906143ad565b91509150805f03611a05575f858152600a60205260409020805460ff1916600117905583516119fa906bffffffffffffffffffffffff168a6142d9565b985050505050611b84565b83515f9081906bffffffffffffffffffffffff168184821115611a3257611a2c858361428d565b90508491505b6040880151611a4b9061ffff16655af3107a40006143cf565b861015611a8157670de0b6b3a764000086611a6684846142d9565b611a7091906143cf565b611a7a91906143fa565b9250611b6f565b670de0b6b3a7640000611a9487846143cf565b611a9e91906143fa565b9350670de0b6b3a7640000611ab387836143cf565b611abd91906143fa565b925087602001516bffffffffffffffffffffffff16915081841115611af657611ae6828561428d565b611af090846142d9565b92508193505b60128f1015611b62575f8f6012611b0d919061428d565b611b1890600a6144ed565b611b2290866143fa565b90508f6012611b31919061428d565b611b3c90600a6144ed565b611b4690826143cf565b9050611b52818661428d565b611b5c90856142d9565b90945092505b611b6c848f6142d9565b9d505b611b79838e6142d9565b9c5050505050505050505b6001016117a8565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611bfa576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c139085906142d9565b90506bffffffffffffffffffffffff811115611c5757604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611cd7576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d1a907f000000000000000000000000000000000000000000000000000000000000000090613af4565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611d86575f80fd5b505af1158015611d98573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611f8857600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e44919061432a565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb49190614262565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4f91906143ad565b508351909150611f6e9082906bffffffffffffffffffffffff166143cf565b611f7890866142d9565b9450505050806001019050611dd1565b50611f9b670de0b6b3a7640000826143fa565b90508015611ffd57600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015611fe6575f80fd5b505af1158015611ff8573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b0316331461208a5760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120ab576120ab614014565b14806120c8575060038160038111156120c6576120c6614014565b145b8061213f57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612114573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121389190614249565b60ff166002145b1561215d576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d191906142ec565b5f9283526006602052604090922063ffffffff90921690915550565b6002546001600160a01b0316331461222d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122545760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146122ea5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8115806122f5575080155b1561231357604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b0316331461239a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b038316156123fd576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b03821615612460576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b038116156124c3576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff1611156124fe576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561253257612532614014565b148061254f5750600381600381111561254d5761254d614014565b145b806125c657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561259b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bf9190614249565b60ff166002145b156125e4576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061263190339089908990600401614532565b60408051808303815f875af115801561264c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267091906143ad565b90935091505f8061268184866142d9565b1115612859575f8315612717576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156126f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127149190614262565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af115801561276d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061279191906142a6565b91508315612857576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156127fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128219190614262565b61282b919061428d565b90508381146128575760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128a0576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b031633146129395760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061294957508051825114155b1561297457815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a2a57818181518110612991576129916142c5565b60200260200101515f036129b857604051637c946ed760e01b815260040160405180910390fd5b8281815181106129ca576129ca6142c5565b602002602001015160085f8484815181106129e7576129e76142c5565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001019050612976565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa5828260405161234e9291906145a7565b6024612a71600267ffffffffffffffff6145d4565b612a7b91906145fa565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612b50576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4e91906142a6565b505b6024612b65600267ffffffffffffffff6145d4565b612b6f91906145fa565b67ffffffffffffffff168611612c02576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612bce9085908a908a908a90600401614650565b5f604051808303818588803b158015612be5575f80fd5b505af1158015612bf7573d5f803e3d5ffd5b505050505050612c7e565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612c4f908990899089908990600401614688565b5f604051808303818588803b158015612c66575f80fd5b505af1158015612c78573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612cb557835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612ce457835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d1357835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612f5a57868181518110612d3257612d326142c5565b60200260200101518310612d7657868181518110612d5257612d526142c5565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612d8857612d886142c5565b60200260200101519250858181518110612da457612da46142c5565b6020026020010151515f03612dcc57604051637c946ed760e01b815260040160405180910390fd5b838181518110612dde57612dde6142c5565b602002602001015182612df191906142d9565b91505f600154905080878381518110612e0c57612e0c6142c5565b6020026020010151511115612e5b57868281518110612e2d57612e2d6142c5565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612e7057612e706142c5565b602002602001015151811015612f4c57888481518110612e9257612e926142c5565b60200260200101518181518110612eab57612eab6142c5565b60200260200101515f1c825f1c10612f0c57888481518110612ecf57612ecf6142c5565b60200260200101518181518110612ee857612ee86142c5565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f1e57612f1e6142c5565b60200260200101518181518110612f3757612f376142c5565b60200260200101519150806001019050612e5e565b505050806001019050612d17565b50803414612c7e5760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff811115612fc457612fc4613c5a565b604051908082528060200260200182016040528015612ff757816020015b6060815260200190600190039081612fe25790505b509150845167ffffffffffffffff81111561301457613014613c5a565b60405190808252806020026020018201604052801561303d578160200160208202803683370190505b5090505f5b85518110156134d4575f60085f888481518110613061576130616142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec9190614262565b9050868381518110613100576131006142c5565b60200260200101515167ffffffffffffffff81111561312157613121613c5a565b60405190808252806020026020018201604052801561314a578160200160208202803683370190505b5085848151811061315d5761315d6142c5565b60200260200101819052505f5b87848151811061317c5761317c6142c5565b602002602001015151811015613363577f00000000000000000000000000000000000000000000000000000000000000008885815181106131bf576131bf6142c5565b602002602001015182815181106131d8576131d86142c5565b60200260200101510361322057604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f8061327b8e8e8a8151811061323a5761323a6142c5565b60200260200101518e8b81518110613254576132546142c5565b6020026020010151888151811061326d5761326d6142c5565b602002602001015189611654565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132ab576132ab6142c5565b602002602001015186815181106132c4576132c46142c5565b602002602001018181525050838989815181106132e3576132e36142c5565b602002602001018181516132f791906142d9565b9052508a5184908c905f9061330e5761330e6142c5565b6020026020010181815161332291906142d9565b9052508a5183908c90600290811061333c5761333c6142c5565b6020026020010181815161335091906142d9565b905250506001909301925061316a915050565b505f848481518110613377576133776142c5565b60200260200101511115613486575f60095f8a868151811061339b5761339b6142c5565b602002602001015181526020019081526020015f205490505f811115613484578484815181106133cd576133cd6142c5565b60200260200101518110613426578484815181106133ed576133ed6142c5565b602002602001015181613400919061428d565b90505f858581518110613415576134156142c5565b602002602001018181525050613454565b80858581518110613439576134396142c5565b6020026020010181815161344d919061428d565b9052505f90505b8060095f8b878151811061346a5761346a6142c5565b602002602001015181526020019081526020015f20819055505b505b838381518110613498576134986142c5565b6020026020010151866001815181106134b3576134b36142c5565b602002602001018181516134c791906142d9565b9052505050600101613042565b5093509350939050565b5f5b8651811015613aeb575f60085f8984815181106134ff576134ff6142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061353c5761353c6142c5565b60200260200101511115613607577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb8286858151811061358c5761358c6142c5565b60200260200101516040518363ffffffff1660e01b81526004016135c59291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156135e1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061360591906142a6565b505b5f8088848151811061361b5761361b6142c5565b60200260200101515167ffffffffffffffff81111561363c5761363c613c5a565b604051908082528060200260200182016040528015613665578160200160208202803683370190505b5090505f5b89858151811061367c5761367c6142c5565b6020026020010151518110156136fe575f89868151811061369f5761369f6142c5565b602002602001015182815181106136b8576136b86142c5565b602002602001015111156136f65760018282815181106136da576136da6142c5565b911515602092830291909101909101526136f3836146a6565b92505b60010161366a565b50815f0361370e57505050613ae3565b5f8267ffffffffffffffff81111561372857613728613c5a565b604051908082528060200260200182016040528015613751578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561376e5761376e613c5a565b604051908082528060200260200182016040528015613797578160200160208202803683370190505b5090505f805b8c88815181106137af576137af6142c5565b602002602001015151811015613893578481815181106137d1576137d16142c5565b60200260200101511561388b578c88815181106137f0576137f06142c5565b60200260200101518181518110613809576138096142c5565b6020026020010151848381518110613823576138236142c5565b6020026020010181815250508b8881518110613841576138416142c5565b6020026020010151818151811061385a5761385a6142c5565b6020026020010151838381518110613874576138746142c5565b6020908102919091010152613888826146a6565b91505b60010161379d565b5060246138a9600267ffffffffffffffff6145d4565b6138b391906145fa565b67ffffffffffffffff168d88815181106138cf576138cf6142c5565b602002602001015111613a2f575f835167ffffffffffffffff8111156138f7576138f7613c5a565b604051908082528060200260200182016040528015613920578160200160208202803683370190505b5090505f5b845181101561397c57848181518110613940576139406142c5565b60200260200101515f1c82828151811061395c5761395c6142c5565b6001600160a01b0390921660209283029190910190910152600101613925565b50866001600160a01b031663bde526618a8a8151811061399e5761399e6142c5565b602002602001015183868f8d815181106139ba576139ba6142c5565b60200260200101518f8e815181106139d4576139d46142c5565b60200260200101516040518663ffffffff1660e01b81526004016139fb94939291906146be565b5f604051808303818588803b158015613a12575f80fd5b505af1158015613a24573d5f803e3d5ffd5b505050505050613adc565b856001600160a01b03166355442b59898981518110613a5057613a506142c5565b602002602001015185858e8c81518110613a6c57613a6c6142c5565b60200260200101518e8d81518110613a8657613a866142c5565b60200260200101516040518663ffffffff1660e01b8152600401613aad9493929190614708565b5f604051808303818588803b158015613ac4575f80fd5b505af1158015613ad6573d5f803e3d5ffd5b50505050505b5050505050505b6001016134e0565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b6b91906142ec565b5f86815260066020526040812054945063ffffffff919091169150839003613ba657604051637c946ed760e01b815260040160405180910390fd5b808303613bdb5782613bb960018361428d565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f85815260076020526040902054600181118015613bf95750808410155b15613c0a5783613bb960018361428d565b613c1485856142d9565b9250600181118015613c2557508083115b15613c2e578092505b81831115613c3a578192505b50509250929050565b5f60208284031215613c53575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c9757613c97613c5a565b604052919050565b5f82601f830112613cae575f80fd5b813567ffffffffffffffff811115613cc857613cc8613c5a565b613cdb601f8201601f1916602001613c6e565b818152846020838601011115613cef575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d1e575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d49575f80fd5b613d5587828801613c9f565b91505092959194509250565b5f67ffffffffffffffff821115613d7a57613d7a613c5a565b5060051b60200190565b5f82601f830112613d93575f80fd5b81356020613da8613da383613d61565b613c6e565b8083825260208201915060208460051b870101935086841115613dc9575f80fd5b602086015b84811015613de55780358352918301918301613dce565b509695505050505050565b5f82601f830112613dff575f80fd5b81356020613e0f613da383613d61565b82815260059290921b84018101918181019086841115613e2d575f80fd5b8286015b84811015613de557803567ffffffffffffffff811115613e4f575f80fd5b613e5d8986838b0101613c9f565b845250918301918301613e31565b5f805f805f60a08688031215613e7f575f80fd5b8535945067ffffffffffffffff8060208801351115613e9c575f80fd5b613eac8860208901358901613d84565b94508060408801351115613ebe575f80fd5b6040870135870188601f820112613ed3575f80fd5b613ee0613da38235613d61565b81358082526020808301929160051b8401018b1015613efd575f80fd5b602083015b6020843560051b850101811015613f97578481351115613f20575f80fd5b803584018c603f820112613f32575f80fd5b613f42613da36020830135613d61565b602082810135808352908201919060051b83016040018f811115613f64575f80fd5b6040840193505b80841015613f86578335835260209384019390920191613f6b565b508552505060209283019201613f02565b50955050506060870135811015613fac575f80fd5b613fbc8860608901358901613df0565b92508060808801351115613fce575f80fd5b50613fdf8760808801358801613d84565b90509295509295909350565b5f805f60608486031215613ffd575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061404857634e487b7160e01b5f52602160045260245ffd5b91905290565b5f6020828403121561405e575f80fd5b81356004811061406c575f80fd5b9392505050565b5f805f8060808587031215614086575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b03811681146140b8575f80fd5b919050565b5f602082840312156140cd575f80fd5b61406c826140a2565b5f80604083850312156140e7575f80fd5b50508035926020909101359150565b5f805f60608486031215614108575f80fd5b614111846140a2565b925061411f602085016140a2565b915061412d604085016140a2565b90509250925092565b5f8060408385031215614147575f80fd5b823567ffffffffffffffff8082111561415e575f80fd5b61416a86838701613d84565b9350602085013591508082111561417f575f80fd5b5061418c85828601613d84565b9150509250929050565b5f80604083850312156141a7575f80fd5b823567ffffffffffffffff808211156141be575f80fd5b818501915085601f8301126141d1575f80fd5b813560206141e1613da383613d61565b82815260059290921b840181019181810190898411156141ff575f80fd5b948201945b8386101561422457614215866140a2565b82529482019490820190614204565b9650508601359250508082111561417f575f80fd5b805160ff811681146140b8575f80fd5b5f60208284031215614259575f80fd5b61406c82614239565b5f60208284031215614272575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142a0576142a0614279565b92915050565b5f602082840312156142b6575f80fd5b8151801515811461406c575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142a0576142a0614279565b5f602082840312156142fc575f80fd5b815163ffffffff8116811461406c575f80fd5b80516bffffffffffffffffffffffff811681146140b8575f80fd5b5f6080828403121561433a575f80fd5b6040516080810181811067ffffffffffffffff8211171561435d5761435d613c5a565b6040526143698361430f565b81526143776020840161430f565b6020820152604083015161ffff81168114614390575f80fd5b60408201526143a160608401614239565b60608201529392505050565b5f80604083850312156143be575f80fd5b505080516020909101519092909150565b80820281158282048414176142a0576142a0614279565b634e487b7160e01b5f52601260045260245ffd5b5f82614408576144086143e6565b500490565b600181815b8085111561444757815f190482111561442d5761442d614279565b8085161561443a57918102915b93841c9390800290614412565b509250929050565b5f8261445d575060016142a0565b8161446957505f6142a0565b816001811461447f5760028114614489576144a5565b60019150506142a0565b60ff84111561449a5761449a614279565b50506001821b6142a0565b5060208310610133831016604e8410600b84101617156144c8575081810a6142a0565b6144d2838361440d565b805f19048211156144e5576144e5614279565b029392505050565b5f61406c838361444f565b5f815180845260208085019450602084015f5b838110156145275781518752958201959082019060010161450b565b509495945050505050565b6001600160a01b0384168152606060208201525f61455360608301856144f8565b828103604084015261456581856144f8565b9695505050505050565b5f815180845260208085019450602084015f5b838110156145275781516001600160a01b031687529582019590820190600101614582565b604081525f6145b9604083018561456f565b82810360208401526145cb81856144f8565b95945050505050565b5f67ffffffffffffffff808416806145ee576145ee6143e6565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561461b5761461b614279565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6146776080830185614622565b905082606083015295945050505050565b848152836020820152608060408201525f6146776080830185614622565b5f600182016146b7576146b7614279565b5060010190565b608081525f6146d0608083018761456f565b82810360208401526146e281876144f8565b905082810360408401526146f68186614622565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561474057815184529284019290840190600101614724565b505050838103602085015261475581886144f8565b91505082810360408401526146f6818661462256fea264697066735822122041d3326451720723ceafc09161f224b183e6c1c9fd6f1a96e1113c7dec8b6b7e64736f6c63430008190033", + "deployedBytecode": "0x6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c43565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c43565b60066020525f908152604090205481565b61030a610305366004613d0b565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613e6b565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a0366004613feb565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614028565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b36600461404e565b611312565b34801561041b575f80fd5b5061030a61042a366004613c43565b6113d1565b34801561043a575f80fd5b5061044e610449366004614073565b611654565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a610488366004613feb565b611b99565b348015610498575f80fd5b506102be6104a7366004613c43565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611ca8565b34801561050a575f80fd5b5061030a610519366004613c43565b61204a565b348015610529575f80fd5b5061030a6105383660046140bd565b6121ed565b348015610548575f80fd5b506102be610557366004613c43565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a6105823660046140d6565b6122aa565b348015610592575f80fd5b5061030a6105a13660046140f6565b61235a565b3480156105b1575f80fd5b506105c56105c0366004614136565b6124c8565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f4366004614196565b6128f9565b348015610604575f80fd5b50610211610613366004613c43565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612a5c565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614014565b148061079b5750600381600381111561079957610799614014565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b9190614249565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190614262565b90505f805f806108d18c8c8c88611654565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a828261428d565b90505f9150610994565b61098e818361428d565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a339190614262565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab191906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614262565b610b44919061428d565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612a88565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612c86565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614014565b1480610c9f57506003816003811115610c9d57610c9d614014565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f9190614249565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612f84565b825192955090935091505f9084906002908110610d6357610d636142c5565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b6142c5565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e026142c5565b60200260200101511115611086575f83600181518110610e2457610e246142c5565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba9190614262565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee96142c5565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110099190614262565b611013919061428d565b905083600181518110611028576110286142c5565b6020026020010151811461107657808460018151811061104a5761104a6142c5565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b6134de565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c36142c5565b6020026020010151856001815181106110de576110de6142c5565b6020026020010151866002815181106110f9576110f96142c5565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f69084906142d9565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614014565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c69190614028565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906142ec565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d61152060018561428d565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d9190614262565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f491906142ec565b63ffffffff1690505f62093a8061160b83856142d9565b611615919061428d565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5050505f9182526007602052604090912055565b5f805f80865f0361167857604051637c946ed760e01b815260040160405180910390fd5b5f8690036116995760405163d92e233d60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000086036116fb57604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61173f828a613af4565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b15801561178f575f80fd5b505af11580156117a1573d5f803e3d5ffd5b5083925050505b83811015611b8c575f818152600a602052604090205460ff16611b8457600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa15801561180c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611830919061432a565b606081015190915060ff16156118cf57604081015161ffff16158015611866575060208101516bffffffffffffffffffffffff16155b156118ca5761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118d5565b50611b84565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa15801561191c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119409190614262565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa158015611999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bd91906143ad565b91509150805f03611a05575f858152600a60205260409020805460ff1916600117905583516119fa906bffffffffffffffffffffffff168a6142d9565b985050505050611b84565b83515f9081906bffffffffffffffffffffffff168184821115611a3257611a2c858361428d565b90508491505b6040880151611a4b9061ffff16655af3107a40006143cf565b861015611a8157670de0b6b3a764000086611a6684846142d9565b611a7091906143cf565b611a7a91906143fa565b9250611b6f565b670de0b6b3a7640000611a9487846143cf565b611a9e91906143fa565b9350670de0b6b3a7640000611ab387836143cf565b611abd91906143fa565b925087602001516bffffffffffffffffffffffff16915081841115611af657611ae6828561428d565b611af090846142d9565b92508193505b60128f1015611b62575f8f6012611b0d919061428d565b611b1890600a6144ed565b611b2290866143fa565b90508f6012611b31919061428d565b611b3c90600a6144ed565b611b4690826143cf565b9050611b52818661428d565b611b5c90856142d9565b90945092505b611b6c848f6142d9565b9d505b611b79838e6142d9565b9c5050505050505050505b6001016117a8565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611bfa576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c139085906142d9565b90506bffffffffffffffffffffffff811115611c5757604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611cd7576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d1a907f000000000000000000000000000000000000000000000000000000000000000090613af4565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611d86575f80fd5b505af1158015611d98573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611f8857600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e44919061432a565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb49190614262565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4f91906143ad565b508351909150611f6e9082906bffffffffffffffffffffffff166143cf565b611f7890866142d9565b9450505050806001019050611dd1565b50611f9b670de0b6b3a7640000826143fa565b90508015611ffd57600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015611fe6575f80fd5b505af1158015611ff8573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b0316331461208a5760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120ab576120ab614014565b14806120c8575060038160038111156120c6576120c6614014565b145b8061213f57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612114573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121389190614249565b60ff166002145b1561215d576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d191906142ec565b5f9283526006602052604090922063ffffffff90921690915550565b6002546001600160a01b0316331461222d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122545760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146122ea5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8115806122f5575080155b1561231357604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b0316331461239a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b038316156123fd576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b03821615612460576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b038116156124c3576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff1611156124fe576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561253257612532614014565b148061254f5750600381600381111561254d5761254d614014565b145b806125c657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561259b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bf9190614249565b60ff166002145b156125e4576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061263190339089908990600401614532565b60408051808303815f875af115801561264c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267091906143ad565b90935091505f8061268184866142d9565b1115612859575f8315612717576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156126f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127149190614262565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af115801561276d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061279191906142a6565b91508315612857576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156127fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128219190614262565b61282b919061428d565b90508381146128575760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128a0576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b031633146129395760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061294957508051825114155b1561297457815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a2a57818181518110612991576129916142c5565b60200260200101515f036129b857604051637c946ed760e01b815260040160405180910390fd5b8281815181106129ca576129ca6142c5565b602002602001015160085f8484815181106129e7576129e76142c5565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001019050612976565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa5828260405161234e9291906145a7565b6024612a71600267ffffffffffffffff6145d4565b612a7b91906145fa565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612b50576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4e91906142a6565b505b6024612b65600267ffffffffffffffff6145d4565b612b6f91906145fa565b67ffffffffffffffff168611612c02576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612bce9085908a908a908a90600401614650565b5f604051808303818588803b158015612be5575f80fd5b505af1158015612bf7573d5f803e3d5ffd5b505050505050612c7e565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612c4f908990899089908990600401614688565b5f604051808303818588803b158015612c66575f80fd5b505af1158015612c78573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612cb557835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612ce457835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d1357835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612f5a57868181518110612d3257612d326142c5565b60200260200101518310612d7657868181518110612d5257612d526142c5565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612d8857612d886142c5565b60200260200101519250858181518110612da457612da46142c5565b6020026020010151515f03612dcc57604051637c946ed760e01b815260040160405180910390fd5b838181518110612dde57612dde6142c5565b602002602001015182612df191906142d9565b91505f600154905080878381518110612e0c57612e0c6142c5565b6020026020010151511115612e5b57868281518110612e2d57612e2d6142c5565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612e7057612e706142c5565b602002602001015151811015612f4c57888481518110612e9257612e926142c5565b60200260200101518181518110612eab57612eab6142c5565b60200260200101515f1c825f1c10612f0c57888481518110612ecf57612ecf6142c5565b60200260200101518181518110612ee857612ee86142c5565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f1e57612f1e6142c5565b60200260200101518181518110612f3757612f376142c5565b60200260200101519150806001019050612e5e565b505050806001019050612d17565b50803414612c7e5760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff811115612fc457612fc4613c5a565b604051908082528060200260200182016040528015612ff757816020015b6060815260200190600190039081612fe25790505b509150845167ffffffffffffffff81111561301457613014613c5a565b60405190808252806020026020018201604052801561303d578160200160208202803683370190505b5090505f5b85518110156134d4575f60085f888481518110613061576130616142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec9190614262565b9050868381518110613100576131006142c5565b60200260200101515167ffffffffffffffff81111561312157613121613c5a565b60405190808252806020026020018201604052801561314a578160200160208202803683370190505b5085848151811061315d5761315d6142c5565b60200260200101819052505f5b87848151811061317c5761317c6142c5565b602002602001015151811015613363577f00000000000000000000000000000000000000000000000000000000000000008885815181106131bf576131bf6142c5565b602002602001015182815181106131d8576131d86142c5565b60200260200101510361322057604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f8061327b8e8e8a8151811061323a5761323a6142c5565b60200260200101518e8b81518110613254576132546142c5565b6020026020010151888151811061326d5761326d6142c5565b602002602001015189611654565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132ab576132ab6142c5565b602002602001015186815181106132c4576132c46142c5565b602002602001018181525050838989815181106132e3576132e36142c5565b602002602001018181516132f791906142d9565b9052508a5184908c905f9061330e5761330e6142c5565b6020026020010181815161332291906142d9565b9052508a5183908c90600290811061333c5761333c6142c5565b6020026020010181815161335091906142d9565b905250506001909301925061316a915050565b505f848481518110613377576133776142c5565b60200260200101511115613486575f60095f8a868151811061339b5761339b6142c5565b602002602001015181526020019081526020015f205490505f811115613484578484815181106133cd576133cd6142c5565b60200260200101518110613426578484815181106133ed576133ed6142c5565b602002602001015181613400919061428d565b90505f858581518110613415576134156142c5565b602002602001018181525050613454565b80858581518110613439576134396142c5565b6020026020010181815161344d919061428d565b9052505f90505b8060095f8b878151811061346a5761346a6142c5565b602002602001015181526020019081526020015f20819055505b505b838381518110613498576134986142c5565b6020026020010151866001815181106134b3576134b36142c5565b602002602001018181516134c791906142d9565b9052505050600101613042565b5093509350939050565b5f5b8651811015613aeb575f60085f8984815181106134ff576134ff6142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061353c5761353c6142c5565b60200260200101511115613607577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb8286858151811061358c5761358c6142c5565b60200260200101516040518363ffffffff1660e01b81526004016135c59291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156135e1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061360591906142a6565b505b5f8088848151811061361b5761361b6142c5565b60200260200101515167ffffffffffffffff81111561363c5761363c613c5a565b604051908082528060200260200182016040528015613665578160200160208202803683370190505b5090505f5b89858151811061367c5761367c6142c5565b6020026020010151518110156136fe575f89868151811061369f5761369f6142c5565b602002602001015182815181106136b8576136b86142c5565b602002602001015111156136f65760018282815181106136da576136da6142c5565b911515602092830291909101909101526136f3836146a6565b92505b60010161366a565b50815f0361370e57505050613ae3565b5f8267ffffffffffffffff81111561372857613728613c5a565b604051908082528060200260200182016040528015613751578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561376e5761376e613c5a565b604051908082528060200260200182016040528015613797578160200160208202803683370190505b5090505f805b8c88815181106137af576137af6142c5565b602002602001015151811015613893578481815181106137d1576137d16142c5565b60200260200101511561388b578c88815181106137f0576137f06142c5565b60200260200101518181518110613809576138096142c5565b6020026020010151848381518110613823576138236142c5565b6020026020010181815250508b8881518110613841576138416142c5565b6020026020010151818151811061385a5761385a6142c5565b6020026020010151838381518110613874576138746142c5565b6020908102919091010152613888826146a6565b91505b60010161379d565b5060246138a9600267ffffffffffffffff6145d4565b6138b391906145fa565b67ffffffffffffffff168d88815181106138cf576138cf6142c5565b602002602001015111613a2f575f835167ffffffffffffffff8111156138f7576138f7613c5a565b604051908082528060200260200182016040528015613920578160200160208202803683370190505b5090505f5b845181101561397c57848181518110613940576139406142c5565b60200260200101515f1c82828151811061395c5761395c6142c5565b6001600160a01b0390921660209283029190910190910152600101613925565b50866001600160a01b031663bde526618a8a8151811061399e5761399e6142c5565b602002602001015183868f8d815181106139ba576139ba6142c5565b60200260200101518f8e815181106139d4576139d46142c5565b60200260200101516040518663ffffffff1660e01b81526004016139fb94939291906146be565b5f604051808303818588803b158015613a12575f80fd5b505af1158015613a24573d5f803e3d5ffd5b505050505050613adc565b856001600160a01b03166355442b59898981518110613a5057613a506142c5565b602002602001015185858e8c81518110613a6c57613a6c6142c5565b60200260200101518e8d81518110613a8657613a866142c5565b60200260200101516040518663ffffffff1660e01b8152600401613aad9493929190614708565b5f604051808303818588803b158015613ac4575f80fd5b505af1158015613ad6573d5f803e3d5ffd5b50505050505b5050505050505b6001016134e0565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b6b91906142ec565b5f86815260066020526040812054945063ffffffff919091169150839003613ba657604051637c946ed760e01b815260040160405180910390fd5b808303613bdb5782613bb960018361428d565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f85815260076020526040902054600181118015613bf95750808410155b15613c0a5783613bb960018361428d565b613c1485856142d9565b9250600181118015613c2557508083115b15613c2e578092505b81831115613c3a578192505b50509250929050565b5f60208284031215613c53575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c9757613c97613c5a565b604052919050565b5f82601f830112613cae575f80fd5b813567ffffffffffffffff811115613cc857613cc8613c5a565b613cdb601f8201601f1916602001613c6e565b818152846020838601011115613cef575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d1e575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d49575f80fd5b613d5587828801613c9f565b91505092959194509250565b5f67ffffffffffffffff821115613d7a57613d7a613c5a565b5060051b60200190565b5f82601f830112613d93575f80fd5b81356020613da8613da383613d61565b613c6e565b8083825260208201915060208460051b870101935086841115613dc9575f80fd5b602086015b84811015613de55780358352918301918301613dce565b509695505050505050565b5f82601f830112613dff575f80fd5b81356020613e0f613da383613d61565b82815260059290921b84018101918181019086841115613e2d575f80fd5b8286015b84811015613de557803567ffffffffffffffff811115613e4f575f80fd5b613e5d8986838b0101613c9f565b845250918301918301613e31565b5f805f805f60a08688031215613e7f575f80fd5b8535945067ffffffffffffffff8060208801351115613e9c575f80fd5b613eac8860208901358901613d84565b94508060408801351115613ebe575f80fd5b6040870135870188601f820112613ed3575f80fd5b613ee0613da38235613d61565b81358082526020808301929160051b8401018b1015613efd575f80fd5b602083015b6020843560051b850101811015613f97578481351115613f20575f80fd5b803584018c603f820112613f32575f80fd5b613f42613da36020830135613d61565b602082810135808352908201919060051b83016040018f811115613f64575f80fd5b6040840193505b80841015613f86578335835260209384019390920191613f6b565b508552505060209283019201613f02565b50955050506060870135811015613fac575f80fd5b613fbc8860608901358901613df0565b92508060808801351115613fce575f80fd5b50613fdf8760808801358801613d84565b90509295509295909350565b5f805f60608486031215613ffd575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061404857634e487b7160e01b5f52602160045260245ffd5b91905290565b5f6020828403121561405e575f80fd5b81356004811061406c575f80fd5b9392505050565b5f805f8060808587031215614086575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b03811681146140b8575f80fd5b919050565b5f602082840312156140cd575f80fd5b61406c826140a2565b5f80604083850312156140e7575f80fd5b50508035926020909101359150565b5f805f60608486031215614108575f80fd5b614111846140a2565b925061411f602085016140a2565b915061412d604085016140a2565b90509250925092565b5f8060408385031215614147575f80fd5b823567ffffffffffffffff8082111561415e575f80fd5b61416a86838701613d84565b9350602085013591508082111561417f575f80fd5b5061418c85828601613d84565b9150509250929050565b5f80604083850312156141a7575f80fd5b823567ffffffffffffffff808211156141be575f80fd5b818501915085601f8301126141d1575f80fd5b813560206141e1613da383613d61565b82815260059290921b840181019181810190898411156141ff575f80fd5b948201945b8386101561422457614215866140a2565b82529482019490820190614204565b9650508601359250508082111561417f575f80fd5b805160ff811681146140b8575f80fd5b5f60208284031215614259575f80fd5b61406c82614239565b5f60208284031215614272575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142a0576142a0614279565b92915050565b5f602082840312156142b6575f80fd5b8151801515811461406c575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142a0576142a0614279565b5f602082840312156142fc575f80fd5b815163ffffffff8116811461406c575f80fd5b80516bffffffffffffffffffffffff811681146140b8575f80fd5b5f6080828403121561433a575f80fd5b6040516080810181811067ffffffffffffffff8211171561435d5761435d613c5a565b6040526143698361430f565b81526143776020840161430f565b6020820152604083015161ffff81168114614390575f80fd5b60408201526143a160608401614239565b60608201529392505050565b5f80604083850312156143be575f80fd5b505080516020909101519092909150565b80820281158282048414176142a0576142a0614279565b634e487b7160e01b5f52601260045260245ffd5b5f82614408576144086143e6565b500490565b600181815b8085111561444757815f190482111561442d5761442d614279565b8085161561443a57918102915b93841c9390800290614412565b509250929050565b5f8261445d575060016142a0565b8161446957505f6142a0565b816001811461447f5760028114614489576144a5565b60019150506142a0565b60ff84111561449a5761449a614279565b50506001821b6142a0565b5060208310610133831016604e8410600b84101617156144c8575081810a6142a0565b6144d2838361440d565b805f19048211156144e5576144e5614279565b029392505050565b5f61406c838361444f565b5f815180845260208085019450602084015f5b838110156145275781518752958201959082019060010161450b565b509495945050505050565b6001600160a01b0384168152606060208201525f61455360608301856144f8565b828103604084015261456581856144f8565b9695505050505050565b5f815180845260208085019450602084015f5b838110156145275781516001600160a01b031687529582019590820190600101614582565b604081525f6145b9604083018561456f565b82810360208401526145cb81856144f8565b95945050505050565b5f67ffffffffffffffff808416806145ee576145ee6143e6565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561461b5761461b614279565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6146776080830185614622565b905082606083015295945050505050565b848152836020820152608060408201525f6146776080830185614622565b5f600182016146b7576146b7614279565b5060010190565b608081525f6146d0608083018761456f565b82810360208401526146e281876144f8565b905082810360408401526146f68186614622565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561474057815184529284019290840190600101614724565b505050838103602085015261475581886144f8565b91505082810360408401526146f6818661462256fea264697066735822122041d3326451720723ceafc09161f224b183e6c1c9fd6f1a96e1113c7dec8b6b7e64736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/docs/deployment_v1.2.md b/docs/deployment_v1.2.md new file mode 100644 index 00000000..0925d4d0 --- /dev/null +++ b/docs/deployment_v1.2.md @@ -0,0 +1,19 @@ +Steps for deploying the tokenomics version 1.2 contracts are as follows: + +1. EOA to deploy Tokenomics implementation (`TokenomicsThree`); +2. TokenomicsProxy to change Tokenomics implementation calling `changeTokenomicsImplementation(TokenomicsThree)`; +3. EOA to deploy Dispenser (`DispenserTwo`) with VoteWeighting contract being deployed before that in `autonolas-governance`; +4. EOA to deploy staking bridging contracts; +5. EOA to set up correct L1->L2 links for all the bridging contracts calling `setL2TargetDispenser(L2 corresponding contract)`; +6. EOA to transfer ownership rights of Dispenser to Timelock calling `changeOwner(Timelock)`; +7. DAO to change Tokenomics managers calling `changeManagers(ZeroAddress, ZeroAddress, DispenserTwo)`; +8. DAO to change staking parameters in Tokenomics calling `changeStakingParams()`; +9. DAO to enable bridge deposit processors in Dispenser calling `setDepositProcessorChainIds()`. + +Note for updating VoteWeighting contract address in Dispenser, if required at some point of time. +As outlined in the C4R [issue 59](https://github.com/code-423n4/2024-05-olas-findings/issues/59), the following set of +steps must be taken into account in order to avoid possible staking inflation loss: +- Initiate claim of incentives for all the outstanding staking contract, as those are ownerless; +- Pause staking incentives; +- Change VoteWeighting contract; +- Unpause staking incentives. \ No newline at end of file diff --git a/scripts/deployment/README.md b/scripts/deployment/README.md index 1376022f..66b9e2e0 100644 --- a/scripts/deployment/README.md +++ b/scripts/deployment/README.md @@ -1,5 +1,8 @@ # Deployment scripts -This folder contains the scripts to deploy Autonolas tokenomics. These scripts correspond to the steps in the full deployment procedure (as described in [deployment.md](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/docs/deployment.md)). +This folder contains the scripts to deploy Autonolas tokenomics. +These scripts correspond to the steps in the full deployment procedure (as described in [deployment.md](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/docs/deployment.md)). + +For the Tokenomics 1.2, refer to the following deployment procedure: [deployment_v1.2.md](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/docs/deployment_v1.2.md). ## Observations - There are several files with global parameters based on the corresponding network. In order to work with the configuration, please copy `gobals_network.json` file to file the `gobals.json` one, where `network` is the corresponding network. For example: `cp gobals_goerli.json gobals.json`. From a423fb716793702c88604cb4a5959c2d2e53f1de Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 12 Jul 2024 18:58:52 +0100 Subject: [PATCH 08/55] chore: updating Dispenser ABI --- abis/0.8.25/Dispenser.json | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/abis/0.8.25/Dispenser.json b/abis/0.8.25/Dispenser.json index f64364ca..75d8495f 100644 --- a/abis/0.8.25/Dispenser.json +++ b/abis/0.8.25/Dispenser.json @@ -213,6 +213,19 @@ "name": "ZeroValue", "type": "error" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nomineeHash", + "type": "bytes32" + } + ], + "name": "AddNomineeHash", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -264,6 +277,19 @@ "name": "PauseDispenser", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "nomineeHash", + "type": "bytes32" + } + ], + "name": "RemoveNomineeHash", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -990,8 +1016,8 @@ "type": "function" } ], - "bytecode": "0x610120604052348015610010575f80fd5b50604051614b0e380380614b0e83398101604081905261002f91610226565b6002805460ff60a01b1933166001600160a81b031990911617600160a01b1760ff60a81b1916600160a91b1790556001600160a01b038916158061007a57506001600160a01b038816155b8061008c57506001600160a01b038716155b8061009e57506001600160a01b038616155b806100a7575084155b156100c55760405163d92e233d60e01b815260040160405180910390fd5b8315806100d0575082155b806100d9575081155b806100e2575080155b1561010057604051637c946ed760e01b815260040160405180910390fd5b61ffff82111561013357604051637ae5968560e01b81526004810183905261ffff60248201526044015b60405180910390fd5b6001600160601b0381111561016b57604051637ae5968560e01b8152600481018290526001600160601b03602482015260440161012a565b6001600160a01b0398891660c05260038054988a166001600160a01b0319998a1617905560048054978a16978916979097179096556005805495909816949096169390931790955560e0819052604080518082018252828152466020918201908152825180830194909452518383015281518084038301815260609093019091528151910120610100525f9390935560019290925560805260a0526102a5565b80516001600160a01b0381168114610221575f80fd5b919050565b5f805f805f805f805f6101208a8c03121561023f575f80fd5b6102488a61020b565b985061025660208b0161020b565b975061026460408b0161020b565b965061027260608b0161020b565b955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b60805160a05160c05160e051610100516147a061036e5f395f81816103450152818161141401528181611cf50152611d9c01525f8181610671015281816114470152818161169b015281816116cf01528181611d2c01528181611ec60152818161318e01526131f401525f81816101ef015281816109c201528181610ac901528181610e4901528181610f98015281816126a3015281816127b001528181612ae4015261354c01525f818161063e01526118a401525f818161029c015261187001526147a05ff3fe6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c43565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c43565b60066020525f908152604090205481565b61030a610305366004613d0b565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613e6b565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a0366004613feb565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614028565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b36600461404e565b611312565b34801561041b575f80fd5b5061030a61042a366004613c43565b6113d1565b34801561043a575f80fd5b5061044e610449366004614073565b611654565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a610488366004613feb565b611b99565b348015610498575f80fd5b506102be6104a7366004613c43565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611ca8565b34801561050a575f80fd5b5061030a610519366004613c43565b61204a565b348015610529575f80fd5b5061030a6105383660046140bd565b6121ed565b348015610548575f80fd5b506102be610557366004613c43565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a6105823660046140d6565b6122aa565b348015610592575f80fd5b5061030a6105a13660046140f6565b61235a565b3480156105b1575f80fd5b506105c56105c0366004614136565b6124c8565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f4366004614196565b6128f9565b348015610604575f80fd5b50610211610613366004613c43565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612a5c565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614014565b148061079b5750600381600381111561079957610799614014565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b9190614249565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190614262565b90505f805f806108d18c8c8c88611654565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a828261428d565b90505f9150610994565b61098e818361428d565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a339190614262565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab191906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614262565b610b44919061428d565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612a88565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612c86565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614014565b1480610c9f57506003816003811115610c9d57610c9d614014565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f9190614249565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612f84565b825192955090935091505f9084906002908110610d6357610d636142c5565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b6142c5565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e026142c5565b60200260200101511115611086575f83600181518110610e2457610e246142c5565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba9190614262565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee96142c5565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110099190614262565b611013919061428d565b905083600181518110611028576110286142c5565b6020026020010151811461107657808460018151811061104a5761104a6142c5565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b6134de565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c36142c5565b6020026020010151856001815181106110de576110de6142c5565b6020026020010151866002815181106110f9576110f96142c5565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f69084906142d9565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614014565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c69190614028565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906142ec565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d61152060018561428d565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d9190614262565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f491906142ec565b63ffffffff1690505f62093a8061160b83856142d9565b611615919061428d565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5050505f9182526007602052604090912055565b5f805f80865f0361167857604051637c946ed760e01b815260040160405180910390fd5b5f8690036116995760405163d92e233d60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000086036116fb57604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61173f828a613af4565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b15801561178f575f80fd5b505af11580156117a1573d5f803e3d5ffd5b5083925050505b83811015611b8c575f818152600a602052604090205460ff16611b8457600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa15801561180c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611830919061432a565b606081015190915060ff16156118cf57604081015161ffff16158015611866575060208101516bffffffffffffffffffffffff16155b156118ca5761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118d5565b50611b84565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa15801561191c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119409190614262565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa158015611999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bd91906143ad565b91509150805f03611a05575f858152600a60205260409020805460ff1916600117905583516119fa906bffffffffffffffffffffffff168a6142d9565b985050505050611b84565b83515f9081906bffffffffffffffffffffffff168184821115611a3257611a2c858361428d565b90508491505b6040880151611a4b9061ffff16655af3107a40006143cf565b861015611a8157670de0b6b3a764000086611a6684846142d9565b611a7091906143cf565b611a7a91906143fa565b9250611b6f565b670de0b6b3a7640000611a9487846143cf565b611a9e91906143fa565b9350670de0b6b3a7640000611ab387836143cf565b611abd91906143fa565b925087602001516bffffffffffffffffffffffff16915081841115611af657611ae6828561428d565b611af090846142d9565b92508193505b60128f1015611b62575f8f6012611b0d919061428d565b611b1890600a6144ed565b611b2290866143fa565b90508f6012611b31919061428d565b611b3c90600a6144ed565b611b4690826143cf565b9050611b52818661428d565b611b5c90856142d9565b90945092505b611b6c848f6142d9565b9d505b611b79838e6142d9565b9c5050505050505050505b6001016117a8565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611bfa576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c139085906142d9565b90506bffffffffffffffffffffffff811115611c5757604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611cd7576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d1a907f000000000000000000000000000000000000000000000000000000000000000090613af4565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611d86575f80fd5b505af1158015611d98573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611f8857600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e44919061432a565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb49190614262565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4f91906143ad565b508351909150611f6e9082906bffffffffffffffffffffffff166143cf565b611f7890866142d9565b9450505050806001019050611dd1565b50611f9b670de0b6b3a7640000826143fa565b90508015611ffd57600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015611fe6575f80fd5b505af1158015611ff8573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b0316331461208a5760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120ab576120ab614014565b14806120c8575060038160038111156120c6576120c6614014565b145b8061213f57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612114573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121389190614249565b60ff166002145b1561215d576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d191906142ec565b5f9283526006602052604090922063ffffffff90921690915550565b6002546001600160a01b0316331461222d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122545760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146122ea5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8115806122f5575080155b1561231357604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b0316331461239a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b038316156123fd576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b03821615612460576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b038116156124c3576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff1611156124fe576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561253257612532614014565b148061254f5750600381600381111561254d5761254d614014565b145b806125c657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561259b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bf9190614249565b60ff166002145b156125e4576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061263190339089908990600401614532565b60408051808303815f875af115801561264c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267091906143ad565b90935091505f8061268184866142d9565b1115612859575f8315612717576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156126f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127149190614262565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af115801561276d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061279191906142a6565b91508315612857576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156127fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128219190614262565b61282b919061428d565b90508381146128575760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128a0576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b031633146129395760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061294957508051825114155b1561297457815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a2a57818181518110612991576129916142c5565b60200260200101515f036129b857604051637c946ed760e01b815260040160405180910390fd5b8281815181106129ca576129ca6142c5565b602002602001015160085f8484815181106129e7576129e76142c5565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001019050612976565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa5828260405161234e9291906145a7565b6024612a71600267ffffffffffffffff6145d4565b612a7b91906145fa565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612b50576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4e91906142a6565b505b6024612b65600267ffffffffffffffff6145d4565b612b6f91906145fa565b67ffffffffffffffff168611612c02576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612bce9085908a908a908a90600401614650565b5f604051808303818588803b158015612be5575f80fd5b505af1158015612bf7573d5f803e3d5ffd5b505050505050612c7e565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612c4f908990899089908990600401614688565b5f604051808303818588803b158015612c66575f80fd5b505af1158015612c78573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612cb557835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612ce457835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d1357835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612f5a57868181518110612d3257612d326142c5565b60200260200101518310612d7657868181518110612d5257612d526142c5565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612d8857612d886142c5565b60200260200101519250858181518110612da457612da46142c5565b6020026020010151515f03612dcc57604051637c946ed760e01b815260040160405180910390fd5b838181518110612dde57612dde6142c5565b602002602001015182612df191906142d9565b91505f600154905080878381518110612e0c57612e0c6142c5565b6020026020010151511115612e5b57868281518110612e2d57612e2d6142c5565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612e7057612e706142c5565b602002602001015151811015612f4c57888481518110612e9257612e926142c5565b60200260200101518181518110612eab57612eab6142c5565b60200260200101515f1c825f1c10612f0c57888481518110612ecf57612ecf6142c5565b60200260200101518181518110612ee857612ee86142c5565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f1e57612f1e6142c5565b60200260200101518181518110612f3757612f376142c5565b60200260200101519150806001019050612e5e565b505050806001019050612d17565b50803414612c7e5760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff811115612fc457612fc4613c5a565b604051908082528060200260200182016040528015612ff757816020015b6060815260200190600190039081612fe25790505b509150845167ffffffffffffffff81111561301457613014613c5a565b60405190808252806020026020018201604052801561303d578160200160208202803683370190505b5090505f5b85518110156134d4575f60085f888481518110613061576130616142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec9190614262565b9050868381518110613100576131006142c5565b60200260200101515167ffffffffffffffff81111561312157613121613c5a565b60405190808252806020026020018201604052801561314a578160200160208202803683370190505b5085848151811061315d5761315d6142c5565b60200260200101819052505f5b87848151811061317c5761317c6142c5565b602002602001015151811015613363577f00000000000000000000000000000000000000000000000000000000000000008885815181106131bf576131bf6142c5565b602002602001015182815181106131d8576131d86142c5565b60200260200101510361322057604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f8061327b8e8e8a8151811061323a5761323a6142c5565b60200260200101518e8b81518110613254576132546142c5565b6020026020010151888151811061326d5761326d6142c5565b602002602001015189611654565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132ab576132ab6142c5565b602002602001015186815181106132c4576132c46142c5565b602002602001018181525050838989815181106132e3576132e36142c5565b602002602001018181516132f791906142d9565b9052508a5184908c905f9061330e5761330e6142c5565b6020026020010181815161332291906142d9565b9052508a5183908c90600290811061333c5761333c6142c5565b6020026020010181815161335091906142d9565b905250506001909301925061316a915050565b505f848481518110613377576133776142c5565b60200260200101511115613486575f60095f8a868151811061339b5761339b6142c5565b602002602001015181526020019081526020015f205490505f811115613484578484815181106133cd576133cd6142c5565b60200260200101518110613426578484815181106133ed576133ed6142c5565b602002602001015181613400919061428d565b90505f858581518110613415576134156142c5565b602002602001018181525050613454565b80858581518110613439576134396142c5565b6020026020010181815161344d919061428d565b9052505f90505b8060095f8b878151811061346a5761346a6142c5565b602002602001015181526020019081526020015f20819055505b505b838381518110613498576134986142c5565b6020026020010151866001815181106134b3576134b36142c5565b602002602001018181516134c791906142d9565b9052505050600101613042565b5093509350939050565b5f5b8651811015613aeb575f60085f8984815181106134ff576134ff6142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061353c5761353c6142c5565b60200260200101511115613607577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb8286858151811061358c5761358c6142c5565b60200260200101516040518363ffffffff1660e01b81526004016135c59291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156135e1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061360591906142a6565b505b5f8088848151811061361b5761361b6142c5565b60200260200101515167ffffffffffffffff81111561363c5761363c613c5a565b604051908082528060200260200182016040528015613665578160200160208202803683370190505b5090505f5b89858151811061367c5761367c6142c5565b6020026020010151518110156136fe575f89868151811061369f5761369f6142c5565b602002602001015182815181106136b8576136b86142c5565b602002602001015111156136f65760018282815181106136da576136da6142c5565b911515602092830291909101909101526136f3836146a6565b92505b60010161366a565b50815f0361370e57505050613ae3565b5f8267ffffffffffffffff81111561372857613728613c5a565b604051908082528060200260200182016040528015613751578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561376e5761376e613c5a565b604051908082528060200260200182016040528015613797578160200160208202803683370190505b5090505f805b8c88815181106137af576137af6142c5565b602002602001015151811015613893578481815181106137d1576137d16142c5565b60200260200101511561388b578c88815181106137f0576137f06142c5565b60200260200101518181518110613809576138096142c5565b6020026020010151848381518110613823576138236142c5565b6020026020010181815250508b8881518110613841576138416142c5565b6020026020010151818151811061385a5761385a6142c5565b6020026020010151838381518110613874576138746142c5565b6020908102919091010152613888826146a6565b91505b60010161379d565b5060246138a9600267ffffffffffffffff6145d4565b6138b391906145fa565b67ffffffffffffffff168d88815181106138cf576138cf6142c5565b602002602001015111613a2f575f835167ffffffffffffffff8111156138f7576138f7613c5a565b604051908082528060200260200182016040528015613920578160200160208202803683370190505b5090505f5b845181101561397c57848181518110613940576139406142c5565b60200260200101515f1c82828151811061395c5761395c6142c5565b6001600160a01b0390921660209283029190910190910152600101613925565b50866001600160a01b031663bde526618a8a8151811061399e5761399e6142c5565b602002602001015183868f8d815181106139ba576139ba6142c5565b60200260200101518f8e815181106139d4576139d46142c5565b60200260200101516040518663ffffffff1660e01b81526004016139fb94939291906146be565b5f604051808303818588803b158015613a12575f80fd5b505af1158015613a24573d5f803e3d5ffd5b505050505050613adc565b856001600160a01b03166355442b59898981518110613a5057613a506142c5565b602002602001015185858e8c81518110613a6c57613a6c6142c5565b60200260200101518e8d81518110613a8657613a866142c5565b60200260200101516040518663ffffffff1660e01b8152600401613aad9493929190614708565b5f604051808303818588803b158015613ac4575f80fd5b505af1158015613ad6573d5f803e3d5ffd5b50505050505b5050505050505b6001016134e0565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b6b91906142ec565b5f86815260066020526040812054945063ffffffff919091169150839003613ba657604051637c946ed760e01b815260040160405180910390fd5b808303613bdb5782613bb960018361428d565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f85815260076020526040902054600181118015613bf95750808410155b15613c0a5783613bb960018361428d565b613c1485856142d9565b9250600181118015613c2557508083115b15613c2e578092505b81831115613c3a578192505b50509250929050565b5f60208284031215613c53575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c9757613c97613c5a565b604052919050565b5f82601f830112613cae575f80fd5b813567ffffffffffffffff811115613cc857613cc8613c5a565b613cdb601f8201601f1916602001613c6e565b818152846020838601011115613cef575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d1e575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d49575f80fd5b613d5587828801613c9f565b91505092959194509250565b5f67ffffffffffffffff821115613d7a57613d7a613c5a565b5060051b60200190565b5f82601f830112613d93575f80fd5b81356020613da8613da383613d61565b613c6e565b8083825260208201915060208460051b870101935086841115613dc9575f80fd5b602086015b84811015613de55780358352918301918301613dce565b509695505050505050565b5f82601f830112613dff575f80fd5b81356020613e0f613da383613d61565b82815260059290921b84018101918181019086841115613e2d575f80fd5b8286015b84811015613de557803567ffffffffffffffff811115613e4f575f80fd5b613e5d8986838b0101613c9f565b845250918301918301613e31565b5f805f805f60a08688031215613e7f575f80fd5b8535945067ffffffffffffffff8060208801351115613e9c575f80fd5b613eac8860208901358901613d84565b94508060408801351115613ebe575f80fd5b6040870135870188601f820112613ed3575f80fd5b613ee0613da38235613d61565b81358082526020808301929160051b8401018b1015613efd575f80fd5b602083015b6020843560051b850101811015613f97578481351115613f20575f80fd5b803584018c603f820112613f32575f80fd5b613f42613da36020830135613d61565b602082810135808352908201919060051b83016040018f811115613f64575f80fd5b6040840193505b80841015613f86578335835260209384019390920191613f6b565b508552505060209283019201613f02565b50955050506060870135811015613fac575f80fd5b613fbc8860608901358901613df0565b92508060808801351115613fce575f80fd5b50613fdf8760808801358801613d84565b90509295509295909350565b5f805f60608486031215613ffd575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061404857634e487b7160e01b5f52602160045260245ffd5b91905290565b5f6020828403121561405e575f80fd5b81356004811061406c575f80fd5b9392505050565b5f805f8060808587031215614086575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b03811681146140b8575f80fd5b919050565b5f602082840312156140cd575f80fd5b61406c826140a2565b5f80604083850312156140e7575f80fd5b50508035926020909101359150565b5f805f60608486031215614108575f80fd5b614111846140a2565b925061411f602085016140a2565b915061412d604085016140a2565b90509250925092565b5f8060408385031215614147575f80fd5b823567ffffffffffffffff8082111561415e575f80fd5b61416a86838701613d84565b9350602085013591508082111561417f575f80fd5b5061418c85828601613d84565b9150509250929050565b5f80604083850312156141a7575f80fd5b823567ffffffffffffffff808211156141be575f80fd5b818501915085601f8301126141d1575f80fd5b813560206141e1613da383613d61565b82815260059290921b840181019181810190898411156141ff575f80fd5b948201945b8386101561422457614215866140a2565b82529482019490820190614204565b9650508601359250508082111561417f575f80fd5b805160ff811681146140b8575f80fd5b5f60208284031215614259575f80fd5b61406c82614239565b5f60208284031215614272575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142a0576142a0614279565b92915050565b5f602082840312156142b6575f80fd5b8151801515811461406c575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142a0576142a0614279565b5f602082840312156142fc575f80fd5b815163ffffffff8116811461406c575f80fd5b80516bffffffffffffffffffffffff811681146140b8575f80fd5b5f6080828403121561433a575f80fd5b6040516080810181811067ffffffffffffffff8211171561435d5761435d613c5a565b6040526143698361430f565b81526143776020840161430f565b6020820152604083015161ffff81168114614390575f80fd5b60408201526143a160608401614239565b60608201529392505050565b5f80604083850312156143be575f80fd5b505080516020909101519092909150565b80820281158282048414176142a0576142a0614279565b634e487b7160e01b5f52601260045260245ffd5b5f82614408576144086143e6565b500490565b600181815b8085111561444757815f190482111561442d5761442d614279565b8085161561443a57918102915b93841c9390800290614412565b509250929050565b5f8261445d575060016142a0565b8161446957505f6142a0565b816001811461447f5760028114614489576144a5565b60019150506142a0565b60ff84111561449a5761449a614279565b50506001821b6142a0565b5060208310610133831016604e8410600b84101617156144c8575081810a6142a0565b6144d2838361440d565b805f19048211156144e5576144e5614279565b029392505050565b5f61406c838361444f565b5f815180845260208085019450602084015f5b838110156145275781518752958201959082019060010161450b565b509495945050505050565b6001600160a01b0384168152606060208201525f61455360608301856144f8565b828103604084015261456581856144f8565b9695505050505050565b5f815180845260208085019450602084015f5b838110156145275781516001600160a01b031687529582019590820190600101614582565b604081525f6145b9604083018561456f565b82810360208401526145cb81856144f8565b95945050505050565b5f67ffffffffffffffff808416806145ee576145ee6143e6565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561461b5761461b614279565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6146776080830185614622565b905082606083015295945050505050565b848152836020820152608060408201525f6146776080830185614622565b5f600182016146b7576146b7614279565b5060010190565b608081525f6146d0608083018761456f565b82810360208401526146e281876144f8565b905082810360408401526146f68186614622565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561474057815184529284019290840190600101614724565b505050838103602085015261475581886144f8565b91505082810360408401526146f6818661462256fea264697066735822122041d3326451720723ceafc09161f224b183e6c1c9fd6f1a96e1113c7dec8b6b7e64736f6c63430008190033", - "deployedBytecode": "0x6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c43565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c43565b60066020525f908152604090205481565b61030a610305366004613d0b565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613e6b565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a0366004613feb565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614028565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b36600461404e565b611312565b34801561041b575f80fd5b5061030a61042a366004613c43565b6113d1565b34801561043a575f80fd5b5061044e610449366004614073565b611654565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a610488366004613feb565b611b99565b348015610498575f80fd5b506102be6104a7366004613c43565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611ca8565b34801561050a575f80fd5b5061030a610519366004613c43565b61204a565b348015610529575f80fd5b5061030a6105383660046140bd565b6121ed565b348015610548575f80fd5b506102be610557366004613c43565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a6105823660046140d6565b6122aa565b348015610592575f80fd5b5061030a6105a13660046140f6565b61235a565b3480156105b1575f80fd5b506105c56105c0366004614136565b6124c8565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f4366004614196565b6128f9565b348015610604575f80fd5b50610211610613366004613c43565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612a5c565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614014565b148061079b5750600381600381111561079957610799614014565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b9190614249565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf9190614262565b90505f805f806108d18c8c8c88611654565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a828261428d565b90505f9150610994565b61098e818361428d565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a339190614262565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab191906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614262565b610b44919061428d565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612a88565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612c86565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614014565b1480610c9f57506003816003811115610c9d57610c9d614014565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f9190614249565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612f84565b825192955090935091505f9084906002908110610d6357610d636142c5565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b6142c5565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e026142c5565b60200260200101511115611086575f83600181518110610e2457610e246142c5565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba9190614262565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee96142c5565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906142a6565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110099190614262565b611013919061428d565b905083600181518110611028576110286142c5565b6020026020010151811461107657808460018151811061104a5761104a6142c5565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b6134de565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c36142c5565b6020026020010151856001815181106110de576110de6142c5565b6020026020010151866002815181106110f9576110f96142c5565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f69084906142d9565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614014565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c69190614028565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f791906142ec565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d61152060018561428d565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d9190614262565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f491906142ec565b63ffffffff1690505f62093a8061160b83856142d9565b611615919061428d565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5050505f9182526007602052604090912055565b5f805f80865f0361167857604051637c946ed760e01b815260040160405180910390fd5b5f8690036116995760405163d92e233d60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000086036116fb57604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61173f828a613af4565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b15801561178f575f80fd5b505af11580156117a1573d5f803e3d5ffd5b5083925050505b83811015611b8c575f818152600a602052604090205460ff16611b8457600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa15801561180c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611830919061432a565b606081015190915060ff16156118cf57604081015161ffff16158015611866575060208101516bffffffffffffffffffffffff16155b156118ca5761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118d5565b50611b84565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa15801561191c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119409190614262565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa158015611999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bd91906143ad565b91509150805f03611a05575f858152600a60205260409020805460ff1916600117905583516119fa906bffffffffffffffffffffffff168a6142d9565b985050505050611b84565b83515f9081906bffffffffffffffffffffffff168184821115611a3257611a2c858361428d565b90508491505b6040880151611a4b9061ffff16655af3107a40006143cf565b861015611a8157670de0b6b3a764000086611a6684846142d9565b611a7091906143cf565b611a7a91906143fa565b9250611b6f565b670de0b6b3a7640000611a9487846143cf565b611a9e91906143fa565b9350670de0b6b3a7640000611ab387836143cf565b611abd91906143fa565b925087602001516bffffffffffffffffffffffff16915081841115611af657611ae6828561428d565b611af090846142d9565b92508193505b60128f1015611b62575f8f6012611b0d919061428d565b611b1890600a6144ed565b611b2290866143fa565b90508f6012611b31919061428d565b611b3c90600a6144ed565b611b4690826143cf565b9050611b52818661428d565b611b5c90856142d9565b90945092505b611b6c848f6142d9565b9d505b611b79838e6142d9565b9c5050505050505050505b6001016117a8565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611bfa576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c139085906142d9565b90506bffffffffffffffffffffffff811115611c5757604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611cd7576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d1a907f000000000000000000000000000000000000000000000000000000000000000090613af4565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611d86575f80fd5b505af1158015611d98573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611f8857600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e44919061432a565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb49190614262565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f2b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f4f91906143ad565b508351909150611f6e9082906bffffffffffffffffffffffff166143cf565b611f7890866142d9565b9450505050806001019050611dd1565b50611f9b670de0b6b3a7640000826143fa565b90508015611ffd57600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015611fe6575f80fd5b505af1158015611ff8573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b0316331461208a5760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120ab576120ab614014565b14806120c8575060038160038111156120c6576120c6614014565b145b8061213f57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612114573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121389190614249565b60ff166002145b1561215d576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d191906142ec565b5f9283526006602052604090922063ffffffff90921690915550565b6002546001600160a01b0316331461222d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122545760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146122ea5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8115806122f5575080155b1561231357604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b0316331461239a5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b038316156123fd576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b03821615612460576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b038116156124c3576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff1611156124fe576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561253257612532614014565b148061254f5750600381600381111561254d5761254d614014565b145b806125c657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561259b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125bf9190614249565b60ff166002145b156125e4576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061263190339089908990600401614532565b60408051808303815f875af115801561264c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267091906143ad565b90935091505f8061268184866142d9565b1115612859575f8315612717576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156126f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127149190614262565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af115801561276d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061279191906142a6565b91508315612857576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156127fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128219190614262565b61282b919061428d565b90508381146128575760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128a0576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b031633146129395760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061294957508051825114155b1561297457815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a2a57818181518110612991576129916142c5565b60200260200101515f036129b857604051637c946ed760e01b815260040160405180910390fd5b8281815181106129ca576129ca6142c5565b602002602001015160085f8484815181106129e7576129e76142c5565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550806001019050612976565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa5828260405161234e9291906145a7565b6024612a71600267ffffffffffffffff6145d4565b612a7b91906145fa565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612b50576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b4e91906142a6565b505b6024612b65600267ffffffffffffffff6145d4565b612b6f91906145fa565b67ffffffffffffffff168611612c02576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612bce9085908a908a908a90600401614650565b5f604051808303818588803b158015612be5575f80fd5b505af1158015612bf7573d5f803e3d5ffd5b505050505050612c7e565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612c4f908990899089908990600401614688565b5f604051808303818588803b158015612c66575f80fd5b505af1158015612c78573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612cb557835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612ce457835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d1357835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612f5a57868181518110612d3257612d326142c5565b60200260200101518310612d7657868181518110612d5257612d526142c5565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612d8857612d886142c5565b60200260200101519250858181518110612da457612da46142c5565b6020026020010151515f03612dcc57604051637c946ed760e01b815260040160405180910390fd5b838181518110612dde57612dde6142c5565b602002602001015182612df191906142d9565b91505f600154905080878381518110612e0c57612e0c6142c5565b6020026020010151511115612e5b57868281518110612e2d57612e2d6142c5565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612e7057612e706142c5565b602002602001015151811015612f4c57888481518110612e9257612e926142c5565b60200260200101518181518110612eab57612eab6142c5565b60200260200101515f1c825f1c10612f0c57888481518110612ecf57612ecf6142c5565b60200260200101518181518110612ee857612ee86142c5565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f1e57612f1e6142c5565b60200260200101518181518110612f3757612f376142c5565b60200260200101519150806001019050612e5e565b505050806001019050612d17565b50803414612c7e5760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff811115612fc457612fc4613c5a565b604051908082528060200260200182016040528015612ff757816020015b6060815260200190600190039081612fe25790505b509150845167ffffffffffffffff81111561301457613014613c5a565b60405190808252806020026020018201604052801561303d578160200160208202803683370190505b5090505f5b85518110156134d4575f60085f888481518110613061576130616142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ec9190614262565b9050868381518110613100576131006142c5565b60200260200101515167ffffffffffffffff81111561312157613121613c5a565b60405190808252806020026020018201604052801561314a578160200160208202803683370190505b5085848151811061315d5761315d6142c5565b60200260200101819052505f5b87848151811061317c5761317c6142c5565b602002602001015151811015613363577f00000000000000000000000000000000000000000000000000000000000000008885815181106131bf576131bf6142c5565b602002602001015182815181106131d8576131d86142c5565b60200260200101510361322057604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f8061327b8e8e8a8151811061323a5761323a6142c5565b60200260200101518e8b81518110613254576132546142c5565b6020026020010151888151811061326d5761326d6142c5565b602002602001015189611654565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132ab576132ab6142c5565b602002602001015186815181106132c4576132c46142c5565b602002602001018181525050838989815181106132e3576132e36142c5565b602002602001018181516132f791906142d9565b9052508a5184908c905f9061330e5761330e6142c5565b6020026020010181815161332291906142d9565b9052508a5183908c90600290811061333c5761333c6142c5565b6020026020010181815161335091906142d9565b905250506001909301925061316a915050565b505f848481518110613377576133776142c5565b60200260200101511115613486575f60095f8a868151811061339b5761339b6142c5565b602002602001015181526020019081526020015f205490505f811115613484578484815181106133cd576133cd6142c5565b60200260200101518110613426578484815181106133ed576133ed6142c5565b602002602001015181613400919061428d565b90505f858581518110613415576134156142c5565b602002602001018181525050613454565b80858581518110613439576134396142c5565b6020026020010181815161344d919061428d565b9052505f90505b8060095f8b878151811061346a5761346a6142c5565b602002602001015181526020019081526020015f20819055505b505b838381518110613498576134986142c5565b6020026020010151866001815181106134b3576134b36142c5565b602002602001018181516134c791906142d9565b9052505050600101613042565b5093509350939050565b5f5b8651811015613aeb575f60085f8984815181106134ff576134ff6142c5565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061353c5761353c6142c5565b60200260200101511115613607577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb8286858151811061358c5761358c6142c5565b60200260200101516040518363ffffffff1660e01b81526004016135c59291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af11580156135e1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061360591906142a6565b505b5f8088848151811061361b5761361b6142c5565b60200260200101515167ffffffffffffffff81111561363c5761363c613c5a565b604051908082528060200260200182016040528015613665578160200160208202803683370190505b5090505f5b89858151811061367c5761367c6142c5565b6020026020010151518110156136fe575f89868151811061369f5761369f6142c5565b602002602001015182815181106136b8576136b86142c5565b602002602001015111156136f65760018282815181106136da576136da6142c5565b911515602092830291909101909101526136f3836146a6565b92505b60010161366a565b50815f0361370e57505050613ae3565b5f8267ffffffffffffffff81111561372857613728613c5a565b604051908082528060200260200182016040528015613751578160200160208202803683370190505b5090505f8367ffffffffffffffff81111561376e5761376e613c5a565b604051908082528060200260200182016040528015613797578160200160208202803683370190505b5090505f805b8c88815181106137af576137af6142c5565b602002602001015151811015613893578481815181106137d1576137d16142c5565b60200260200101511561388b578c88815181106137f0576137f06142c5565b60200260200101518181518110613809576138096142c5565b6020026020010151848381518110613823576138236142c5565b6020026020010181815250508b8881518110613841576138416142c5565b6020026020010151818151811061385a5761385a6142c5565b6020026020010151838381518110613874576138746142c5565b6020908102919091010152613888826146a6565b91505b60010161379d565b5060246138a9600267ffffffffffffffff6145d4565b6138b391906145fa565b67ffffffffffffffff168d88815181106138cf576138cf6142c5565b602002602001015111613a2f575f835167ffffffffffffffff8111156138f7576138f7613c5a565b604051908082528060200260200182016040528015613920578160200160208202803683370190505b5090505f5b845181101561397c57848181518110613940576139406142c5565b60200260200101515f1c82828151811061395c5761395c6142c5565b6001600160a01b0390921660209283029190910190910152600101613925565b50866001600160a01b031663bde526618a8a8151811061399e5761399e6142c5565b602002602001015183868f8d815181106139ba576139ba6142c5565b60200260200101518f8e815181106139d4576139d46142c5565b60200260200101516040518663ffffffff1660e01b81526004016139fb94939291906146be565b5f604051808303818588803b158015613a12575f80fd5b505af1158015613a24573d5f803e3d5ffd5b505050505050613adc565b856001600160a01b03166355442b59898981518110613a5057613a506142c5565b602002602001015185858e8c81518110613a6c57613a6c6142c5565b60200260200101518e8d81518110613a8657613a866142c5565b60200260200101516040518663ffffffff1660e01b8152600401613aad9493929190614708565b5f604051808303818588803b158015613ac4575f80fd5b505af1158015613ad6573d5f803e3d5ffd5b50505050505b5050505050505b6001016134e0565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b47573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b6b91906142ec565b5f86815260066020526040812054945063ffffffff919091169150839003613ba657604051637c946ed760e01b815260040160405180910390fd5b808303613bdb5782613bb960018361428d565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f85815260076020526040902054600181118015613bf95750808410155b15613c0a5783613bb960018361428d565b613c1485856142d9565b9250600181118015613c2557508083115b15613c2e578092505b81831115613c3a578192505b50509250929050565b5f60208284031215613c53575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613c9757613c97613c5a565b604052919050565b5f82601f830112613cae575f80fd5b813567ffffffffffffffff811115613cc857613cc8613c5a565b613cdb601f8201601f1916602001613c6e565b818152846020838601011115613cef575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d1e575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d49575f80fd5b613d5587828801613c9f565b91505092959194509250565b5f67ffffffffffffffff821115613d7a57613d7a613c5a565b5060051b60200190565b5f82601f830112613d93575f80fd5b81356020613da8613da383613d61565b613c6e565b8083825260208201915060208460051b870101935086841115613dc9575f80fd5b602086015b84811015613de55780358352918301918301613dce565b509695505050505050565b5f82601f830112613dff575f80fd5b81356020613e0f613da383613d61565b82815260059290921b84018101918181019086841115613e2d575f80fd5b8286015b84811015613de557803567ffffffffffffffff811115613e4f575f80fd5b613e5d8986838b0101613c9f565b845250918301918301613e31565b5f805f805f60a08688031215613e7f575f80fd5b8535945067ffffffffffffffff8060208801351115613e9c575f80fd5b613eac8860208901358901613d84565b94508060408801351115613ebe575f80fd5b6040870135870188601f820112613ed3575f80fd5b613ee0613da38235613d61565b81358082526020808301929160051b8401018b1015613efd575f80fd5b602083015b6020843560051b850101811015613f97578481351115613f20575f80fd5b803584018c603f820112613f32575f80fd5b613f42613da36020830135613d61565b602082810135808352908201919060051b83016040018f811115613f64575f80fd5b6040840193505b80841015613f86578335835260209384019390920191613f6b565b508552505060209283019201613f02565b50955050506060870135811015613fac575f80fd5b613fbc8860608901358901613df0565b92508060808801351115613fce575f80fd5b50613fdf8760808801358801613d84565b90509295509295909350565b5f805f60608486031215613ffd575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061404857634e487b7160e01b5f52602160045260245ffd5b91905290565b5f6020828403121561405e575f80fd5b81356004811061406c575f80fd5b9392505050565b5f805f8060808587031215614086575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b03811681146140b8575f80fd5b919050565b5f602082840312156140cd575f80fd5b61406c826140a2565b5f80604083850312156140e7575f80fd5b50508035926020909101359150565b5f805f60608486031215614108575f80fd5b614111846140a2565b925061411f602085016140a2565b915061412d604085016140a2565b90509250925092565b5f8060408385031215614147575f80fd5b823567ffffffffffffffff8082111561415e575f80fd5b61416a86838701613d84565b9350602085013591508082111561417f575f80fd5b5061418c85828601613d84565b9150509250929050565b5f80604083850312156141a7575f80fd5b823567ffffffffffffffff808211156141be575f80fd5b818501915085601f8301126141d1575f80fd5b813560206141e1613da383613d61565b82815260059290921b840181019181810190898411156141ff575f80fd5b948201945b8386101561422457614215866140a2565b82529482019490820190614204565b9650508601359250508082111561417f575f80fd5b805160ff811681146140b8575f80fd5b5f60208284031215614259575f80fd5b61406c82614239565b5f60208284031215614272575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142a0576142a0614279565b92915050565b5f602082840312156142b6575f80fd5b8151801515811461406c575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142a0576142a0614279565b5f602082840312156142fc575f80fd5b815163ffffffff8116811461406c575f80fd5b80516bffffffffffffffffffffffff811681146140b8575f80fd5b5f6080828403121561433a575f80fd5b6040516080810181811067ffffffffffffffff8211171561435d5761435d613c5a565b6040526143698361430f565b81526143776020840161430f565b6020820152604083015161ffff81168114614390575f80fd5b60408201526143a160608401614239565b60608201529392505050565b5f80604083850312156143be575f80fd5b505080516020909101519092909150565b80820281158282048414176142a0576142a0614279565b634e487b7160e01b5f52601260045260245ffd5b5f82614408576144086143e6565b500490565b600181815b8085111561444757815f190482111561442d5761442d614279565b8085161561443a57918102915b93841c9390800290614412565b509250929050565b5f8261445d575060016142a0565b8161446957505f6142a0565b816001811461447f5760028114614489576144a5565b60019150506142a0565b60ff84111561449a5761449a614279565b50506001821b6142a0565b5060208310610133831016604e8410600b84101617156144c8575081810a6142a0565b6144d2838361440d565b805f19048211156144e5576144e5614279565b029392505050565b5f61406c838361444f565b5f815180845260208085019450602084015f5b838110156145275781518752958201959082019060010161450b565b509495945050505050565b6001600160a01b0384168152606060208201525f61455360608301856144f8565b828103604084015261456581856144f8565b9695505050505050565b5f815180845260208085019450602084015f5b838110156145275781516001600160a01b031687529582019590820190600101614582565b604081525f6145b9604083018561456f565b82810360208401526145cb81856144f8565b95945050505050565b5f67ffffffffffffffff808416806145ee576145ee6143e6565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561461b5761461b614279565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6146776080830185614622565b905082606083015295945050505050565b848152836020820152608060408201525f6146776080830185614622565b5f600182016146b7576146b7614279565b5060010190565b608081525f6146d0608083018761456f565b82810360208401526146e281876144f8565b905082810360408401526146f68186614622565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561474057815184529284019290840190600101614724565b505050838103602085015261475581886144f8565b91505082810360408401526146f6818661462256fea264697066735822122041d3326451720723ceafc09161f224b183e6c1c9fd6f1a96e1113c7dec8b6b7e64736f6c63430008190033", + "bytecode": "0x610120604052348015610010575f80fd5b50604051614b5f380380614b5f83398101604081905261002f91610226565b6002805460ff60a01b1933166001600160a81b031990911617600160a01b1760ff60a81b1916600160a91b1790556001600160a01b038916158061007a57506001600160a01b038816155b8061008c57506001600160a01b038716155b8061009e57506001600160a01b038616155b806100a7575084155b156100c55760405163d92e233d60e01b815260040160405180910390fd5b8315806100d0575082155b806100d9575081155b806100e2575080155b1561010057604051637c946ed760e01b815260040160405180910390fd5b61ffff82111561013357604051637ae5968560e01b81526004810183905261ffff60248201526044015b60405180910390fd5b6001600160601b0381111561016b57604051637ae5968560e01b8152600481018290526001600160601b03602482015260440161012a565b6001600160a01b0398891660c05260038054988a166001600160a01b0319998a1617905560048054978a16978916979097179096556005805495909816949096169390931790955560e0819052604080518082018252828152466020918201908152825180830194909452518383015281518084038301815260609093019091528151910120610100525f9390935560019290925560805260a0526102a5565b80516001600160a01b0381168114610221575f80fd5b919050565b5f805f805f805f805f6101208a8c03121561023f575f80fd5b6102488a61020b565b985061025660208b0161020b565b975061026460408b0161020b565b965061027260608b0161020b565b955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b60805160a05160c05160e051610100516147f161036e5f395f81816103450152818161141401528181611d1f0152611dc601525f818161067101528181611447015281816116c5015281816116f901528181611d5601528181611ef0015281816131e1015261324701525f81816101ef015281816109c201528181610ac901528181610e4901528181610f98015281816126f60152818161280301528181612b37015261359f01525f818161063e01526118ce01525f818161029c015261189a01526147f15ff3fe6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c94565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c94565b60066020525f908152604090205481565b61030a610305366004613d5c565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613ebc565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a036600461403c565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614079565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b36600461409f565b611312565b34801561041b575f80fd5b5061030a61042a366004613c94565b6113d1565b34801561043a575f80fd5b5061044e6104493660046140c4565b61167e565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a61048836600461403c565b611bc3565b348015610498575f80fd5b506102be6104a7366004613c94565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611cd2565b34801561050a575f80fd5b5061030a610519366004613c94565b612074565b348015610529575f80fd5b5061030a61053836600461410e565b612240565b348015610548575f80fd5b506102be610557366004613c94565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a610582366004614127565b6122fd565b348015610592575f80fd5b5061030a6105a1366004614147565b6123ad565b3480156105b1575f80fd5b506105c56105c0366004614187565b61251b565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f43660046141e7565b61294c565b348015610604575f80fd5b50610211610613366004613c94565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612aaf565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614065565b148061079b5750600381600381111561079957610799614065565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b919061429a565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf91906142b3565b90505f805f806108d18c8c8c8861167e565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a82826142de565b90505f9150610994565b61098e81836142de565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3391906142b3565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab191906142f7565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a91906142b3565b610b4491906142de565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612adb565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612cd9565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614065565b1480610c9f57506003816003811115610c9d57610c9d614065565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f919061429a565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612fd7565b825192955090935091505f9084906002908110610d6357610d63614316565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b614316565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e02614316565b60200260200101511115611086575f83600181518110610e2457610e24614316565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba91906142b3565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee9614316565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906142f7565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100991906142b3565b61101391906142de565b90508360018151811061102857611028614316565b6020026020010151811461107657808460018151811061104a5761104a614316565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b613531565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c3614316565b6020026020010151856001815181106110de576110de614316565b6020026020010151866002815181106110f9576110f9614316565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f690849061432a565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614065565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c69190614079565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061433d565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d6115206001856142de565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d91906142b3565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f4919061433d565b63ffffffff1690505f62093a8061160b838561432a565b61161591906142de565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5f858152600760205260408082208690555186917f5a6a4aed2babbf3fe4cddce74151568eaac96f250cf910532f6528b1f6ee13d891a25050505050565b5f805f80865f036116a257604051637c946ed760e01b815260040160405180910390fd5b5f8690036116c35760405163d92e233d60e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000860361172557604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f611769828a613b47565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b1580156117b9575f80fd5b505af11580156117cb573d5f803e3d5ffd5b5083925050505b83811015611bb6575f818152600a602052604090205460ff16611bae57600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611836573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185a919061437b565b606081015190915060ff16156118f957604081015161ffff16158015611890575060208101516bffffffffffffffffffffffff16155b156118f45761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118ff565b50611bae565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa158015611946573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196a91906142b3565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa1580156119c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e791906143fe565b91509150805f03611a2f575f858152600a60205260409020805460ff191660011790558351611a24906bffffffffffffffffffffffff168a61432a565b985050505050611bae565b83515f9081906bffffffffffffffffffffffff168184821115611a5c57611a5685836142de565b90508491505b6040880151611a759061ffff16655af3107a4000614420565b861015611aab57670de0b6b3a764000086611a90848461432a565b611a9a9190614420565b611aa4919061444b565b9250611b99565b670de0b6b3a7640000611abe8784614420565b611ac8919061444b565b9350670de0b6b3a7640000611add8783614420565b611ae7919061444b565b925087602001516bffffffffffffffffffffffff16915081841115611b2057611b1082856142de565b611b1a908461432a565b92508193505b60128f1015611b8c575f8f6012611b3791906142de565b611b4290600a61453e565b611b4c908661444b565b90508f6012611b5b91906142de565b611b6690600a61453e565b611b709082614420565b9050611b7c81866142de565b611b86908561432a565b90945092505b611b96848f61432a565b9d505b611ba3838e61432a565b9c5050505050505050505b6001016117d2565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611c24576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c3d90859061432a565b90506bffffffffffffffffffffffff811115611c8157604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611d01576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d44907f000000000000000000000000000000000000000000000000000000000000000090613b47565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611db0575f80fd5b505af1158015611dc2573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611fb257600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e6e919061437b565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611eba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ede91906142b3565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7991906143fe565b508351909150611f989082906bffffffffffffffffffffffff16614420565b611fa2908661432a565b9450505050806001019050611dfb565b50611fc5670de0b6b3a76400008261444b565b9050801561202757600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015612010575f80fd5b505af1158015612022573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b031633146120b45760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120d5576120d5614065565b14806120f2575060038160038111156120f0576120f0614065565b145b8061216957506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561213e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612162919061429a565b60ff166002145b15612187576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fb919061433d565b5f8381526006602052604080822063ffffffff93909316909255905183917f5381b67b592d2dc84b61238222ab88ee04db3b3a082894a445c4e5cfa8ba11be91a25050565b6002546001600160a01b031633146122805760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122a75760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b0316331461233d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b811580612348575080155b1561236657604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b031633146123ed5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b03831615612450576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b038216156124b3576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b03811615612516576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff161115612551576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561258557612585614065565b14806125a2575060038160038111156125a0576125a0614065565b145b8061261957506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156125ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612612919061429a565b60ff166002145b15612637576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061268490339089908990600401614583565b60408051808303815f875af115801561269f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c391906143fe565b90935091505f806126d4848661432a565b11156128ac575f831561276a576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612743573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276791906142b3565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af11580156127c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e491906142f7565b915083156128aa576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612850573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287491906142b3565b61287e91906142de565b90508381146128aa5760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128f3576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b0316331461298c5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061299c57508051825114155b156129c757815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a7d578181815181106129e4576129e4614316565b60200260200101515f03612a0b57604051637c946ed760e01b815260040160405180910390fd5b828181518110612a1d57612a1d614316565b602002602001015160085f848481518110612a3a57612a3a614316565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060010190506129c9565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa582826040516123a19291906145f8565b6024612ac4600267ffffffffffffffff614625565b612ace919061464b565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612ba3576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba191906142f7565b505b6024612bb8600267ffffffffffffffff614625565b612bc2919061464b565b67ffffffffffffffff168611612c55576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612c219085908a908a908a906004016146a1565b5f604051808303818588803b158015612c38575f80fd5b505af1158015612c4a573d5f803e3d5ffd5b505050505050612cd1565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612ca29089908990899089906004016146d9565b5f604051808303818588803b158015612cb9575f80fd5b505af1158015612ccb573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612d0857835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612d3757835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d6657835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612fad57868181518110612d8557612d85614316565b60200260200101518310612dc957868181518110612da557612da5614316565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612ddb57612ddb614316565b60200260200101519250858181518110612df757612df7614316565b6020026020010151515f03612e1f57604051637c946ed760e01b815260040160405180910390fd5b838181518110612e3157612e31614316565b602002602001015182612e44919061432a565b91505f600154905080878381518110612e5f57612e5f614316565b6020026020010151511115612eae57868281518110612e8057612e80614316565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612ec357612ec3614316565b602002602001015151811015612f9f57888481518110612ee557612ee5614316565b60200260200101518181518110612efe57612efe614316565b60200260200101515f1c825f1c10612f5f57888481518110612f2257612f22614316565b60200260200101518181518110612f3b57612f3b614316565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f7157612f71614316565b60200260200101518181518110612f8a57612f8a614316565b60200260200101519150806001019050612eb1565b505050806001019050612d6a565b50803414612cd15760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff81111561301757613017613cab565b60405190808252806020026020018201604052801561304a57816020015b60608152602001906001900390816130355790505b509150845167ffffffffffffffff81111561306757613067613cab565b604051908082528060200260200182016040528015613090578160200160208202803683370190505b5090505f5b8551811015613527575f60085f8884815181106130b4576130b4614316565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561311b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061313f91906142b3565b905086838151811061315357613153614316565b60200260200101515167ffffffffffffffff81111561317457613174613cab565b60405190808252806020026020018201604052801561319d578160200160208202803683370190505b508584815181106131b0576131b0614316565b60200260200101819052505f5b8784815181106131cf576131cf614316565b6020026020010151518110156133b6577f000000000000000000000000000000000000000000000000000000000000000088858151811061321257613212614316565b6020026020010151828151811061322b5761322b614316565b60200260200101510361327357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f806132ce8e8e8a8151811061328d5761328d614316565b60200260200101518e8b815181106132a7576132a7614316565b602002602001015188815181106132c0576132c0614316565b60200260200101518961167e565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132fe576132fe614316565b6020026020010151868151811061331757613317614316565b6020026020010181815250508389898151811061333657613336614316565b6020026020010181815161334a919061432a565b9052508a5184908c905f9061336157613361614316565b60200260200101818151613375919061432a565b9052508a5183908c90600290811061338f5761338f614316565b602002602001018181516133a3919061432a565b90525050600190930192506131bd915050565b505f8484815181106133ca576133ca614316565b602002602001015111156134d9575f60095f8a86815181106133ee576133ee614316565b602002602001015181526020019081526020015f205490505f8111156134d75784848151811061342057613420614316565b602002602001015181106134795784848151811061344057613440614316565b60200260200101518161345391906142de565b90505f85858151811061346857613468614316565b6020026020010181815250506134a7565b8085858151811061348c5761348c614316565b602002602001018181516134a091906142de565b9052505f90505b8060095f8b87815181106134bd576134bd614316565b602002602001015181526020019081526020015f20819055505b505b8383815181106134eb576134eb614316565b60200260200101518660018151811061350657613506614316565b6020026020010181815161351a919061432a565b9052505050600101613095565b5093509350939050565b5f5b8651811015613b3e575f60085f89848151811061355257613552614316565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061358f5761358f614316565b6020026020010151111561365a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb828685815181106135df576135df614316565b60200260200101516040518363ffffffff1660e01b81526004016136189291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af1158015613634573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061365891906142f7565b505b5f8088848151811061366e5761366e614316565b60200260200101515167ffffffffffffffff81111561368f5761368f613cab565b6040519080825280602002602001820160405280156136b8578160200160208202803683370190505b5090505f5b8985815181106136cf576136cf614316565b602002602001015151811015613751575f8986815181106136f2576136f2614316565b6020026020010151828151811061370b5761370b614316565b6020026020010151111561374957600182828151811061372d5761372d614316565b91151560209283029190910190910152613746836146f7565b92505b6001016136bd565b50815f0361376157505050613b36565b5f8267ffffffffffffffff81111561377b5761377b613cab565b6040519080825280602002602001820160405280156137a4578160200160208202803683370190505b5090505f8367ffffffffffffffff8111156137c1576137c1613cab565b6040519080825280602002602001820160405280156137ea578160200160208202803683370190505b5090505f805b8c888151811061380257613802614316565b6020026020010151518110156138e65784818151811061382457613824614316565b6020026020010151156138de578c888151811061384357613843614316565b6020026020010151818151811061385c5761385c614316565b602002602001015184838151811061387657613876614316565b6020026020010181815250508b888151811061389457613894614316565b602002602001015181815181106138ad576138ad614316565b60200260200101518383815181106138c7576138c7614316565b60209081029190910101526138db826146f7565b91505b6001016137f0565b5060246138fc600267ffffffffffffffff614625565b613906919061464b565b67ffffffffffffffff168d888151811061392257613922614316565b602002602001015111613a82575f835167ffffffffffffffff81111561394a5761394a613cab565b604051908082528060200260200182016040528015613973578160200160208202803683370190505b5090505f5b84518110156139cf5784818151811061399357613993614316565b60200260200101515f1c8282815181106139af576139af614316565b6001600160a01b0390921660209283029190910190910152600101613978565b50866001600160a01b031663bde526618a8a815181106139f1576139f1614316565b602002602001015183868f8d81518110613a0d57613a0d614316565b60200260200101518f8e81518110613a2757613a27614316565b60200260200101516040518663ffffffff1660e01b8152600401613a4e949392919061470f565b5f604051808303818588803b158015613a65575f80fd5b505af1158015613a77573d5f803e3d5ffd5b505050505050613b2f565b856001600160a01b03166355442b59898981518110613aa357613aa3614316565b602002602001015185858e8c81518110613abf57613abf614316565b60200260200101518e8d81518110613ad957613ad9614316565b60200260200101516040518663ffffffff1660e01b8152600401613b009493929190614759565b5f604051808303818588803b158015613b17575f80fd5b505af1158015613b29573d5f803e3d5ffd5b50505050505b5050505050505b600101613533565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bbe919061433d565b5f86815260066020526040812054945063ffffffff919091169150839003613bf957604051637c946ed760e01b815260040160405180910390fd5b808303613c2e5782613c0c6001836142de565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f858152600760205260409020548015801590613c4b5750808410155b15613c5c5783613c0c6001836142de565b613c66858561432a565b92505f81118015613c7657508083115b15613c7f578092505b81831115613c8b578192505b50509250929050565b5f60208284031215613ca4575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ce857613ce8613cab565b604052919050565b5f82601f830112613cff575f80fd5b813567ffffffffffffffff811115613d1957613d19613cab565b613d2c601f8201601f1916602001613cbf565b818152846020838601011115613d40575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d6f575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d9a575f80fd5b613da687828801613cf0565b91505092959194509250565b5f67ffffffffffffffff821115613dcb57613dcb613cab565b5060051b60200190565b5f82601f830112613de4575f80fd5b81356020613df9613df483613db2565b613cbf565b8083825260208201915060208460051b870101935086841115613e1a575f80fd5b602086015b84811015613e365780358352918301918301613e1f565b509695505050505050565b5f82601f830112613e50575f80fd5b81356020613e60613df483613db2565b82815260059290921b84018101918181019086841115613e7e575f80fd5b8286015b84811015613e3657803567ffffffffffffffff811115613ea0575f80fd5b613eae8986838b0101613cf0565b845250918301918301613e82565b5f805f805f60a08688031215613ed0575f80fd5b8535945067ffffffffffffffff8060208801351115613eed575f80fd5b613efd8860208901358901613dd5565b94508060408801351115613f0f575f80fd5b6040870135870188601f820112613f24575f80fd5b613f31613df48235613db2565b81358082526020808301929160051b8401018b1015613f4e575f80fd5b602083015b6020843560051b850101811015613fe8578481351115613f71575f80fd5b803584018c603f820112613f83575f80fd5b613f93613df46020830135613db2565b602082810135808352908201919060051b83016040018f811115613fb5575f80fd5b6040840193505b80841015613fd7578335835260209384019390920191613fbc565b508552505060209283019201613f53565b50955050506060870135811015613ffd575f80fd5b61400d8860608901358901613e41565b9250806080880135111561401f575f80fd5b506140308760808801358801613dd5565b90509295509295909350565b5f805f6060848603121561404e575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061409957634e487b7160e01b5f52602160045260245ffd5b91905290565b5f602082840312156140af575f80fd5b8135600481106140bd575f80fd5b9392505050565b5f805f80608085870312156140d7575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b0381168114614109575f80fd5b919050565b5f6020828403121561411e575f80fd5b6140bd826140f3565b5f8060408385031215614138575f80fd5b50508035926020909101359150565b5f805f60608486031215614159575f80fd5b614162846140f3565b9250614170602085016140f3565b915061417e604085016140f3565b90509250925092565b5f8060408385031215614198575f80fd5b823567ffffffffffffffff808211156141af575f80fd5b6141bb86838701613dd5565b935060208501359150808211156141d0575f80fd5b506141dd85828601613dd5565b9150509250929050565b5f80604083850312156141f8575f80fd5b823567ffffffffffffffff8082111561420f575f80fd5b818501915085601f830112614222575f80fd5b81356020614232613df483613db2565b82815260059290921b84018101918181019089841115614250575f80fd5b948201945b8386101561427557614266866140f3565b82529482019490820190614255565b965050860135925050808211156141d0575f80fd5b805160ff81168114614109575f80fd5b5f602082840312156142aa575f80fd5b6140bd8261428a565b5f602082840312156142c3575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142f1576142f16142ca565b92915050565b5f60208284031215614307575f80fd5b815180151581146140bd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142f1576142f16142ca565b5f6020828403121561434d575f80fd5b815163ffffffff811681146140bd575f80fd5b80516bffffffffffffffffffffffff81168114614109575f80fd5b5f6080828403121561438b575f80fd5b6040516080810181811067ffffffffffffffff821117156143ae576143ae613cab565b6040526143ba83614360565b81526143c860208401614360565b6020820152604083015161ffff811681146143e1575f80fd5b60408201526143f26060840161428a565b60608201529392505050565b5f806040838503121561440f575f80fd5b505080516020909101519092909150565b80820281158282048414176142f1576142f16142ca565b634e487b7160e01b5f52601260045260245ffd5b5f8261445957614459614437565b500490565b600181815b8085111561449857815f190482111561447e5761447e6142ca565b8085161561448b57918102915b93841c9390800290614463565b509250929050565b5f826144ae575060016142f1565b816144ba57505f6142f1565b81600181146144d057600281146144da576144f6565b60019150506142f1565b60ff8411156144eb576144eb6142ca565b50506001821b6142f1565b5060208310610133831016604e8410600b8410161715614519575081810a6142f1565b614523838361445e565b805f1904821115614536576145366142ca565b029392505050565b5f6140bd83836144a0565b5f815180845260208085019450602084015f5b838110156145785781518752958201959082019060010161455c565b509495945050505050565b6001600160a01b0384168152606060208201525f6145a46060830185614549565b82810360408401526145b68185614549565b9695505050505050565b5f815180845260208085019450602084015f5b838110156145785781516001600160a01b0316875295820195908201906001016145d3565b604081525f61460a60408301856145c0565b828103602084015261461c8185614549565b95945050505050565b5f67ffffffffffffffff8084168061463f5761463f614437565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561466c5761466c6142ca565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6146c86080830185614673565b905082606083015295945050505050565b848152836020820152608060408201525f6146c86080830185614673565b5f60018201614708576147086142ca565b5060010190565b608081525f61472160808301876145c0565b82810360208401526147338187614549565b905082810360408401526147478186614673565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561479157815184529284019290840190600101614775565b50505083810360208501526147a68188614549565b9150508281036040840152614747818661467356fea2646970667358221220b18c141dc1e94417f54aae9a954aa4f42c6750fda4ac2cdf8f46139f4df5a59f64736f6c63430008190033", + "deployedBytecode": "0x6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c94565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c94565b60066020525f908152604090205481565b61030a610305366004613d5c565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613ebc565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a036600461403c565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614079565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b36600461409f565b611312565b34801561041b575f80fd5b5061030a61042a366004613c94565b6113d1565b34801561043a575f80fd5b5061044e6104493660046140c4565b61167e565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a61048836600461403c565b611bc3565b348015610498575f80fd5b506102be6104a7366004613c94565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611cd2565b34801561050a575f80fd5b5061030a610519366004613c94565b612074565b348015610529575f80fd5b5061030a61053836600461410e565b612240565b348015610548575f80fd5b506102be610557366004613c94565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a610582366004614127565b6122fd565b348015610592575f80fd5b5061030a6105a1366004614147565b6123ad565b3480156105b1575f80fd5b506105c56105c0366004614187565b61251b565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f43660046141e7565b61294c565b348015610604575f80fd5b50610211610613366004613c94565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612aaf565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614065565b148061079b5750600381600381111561079957610799614065565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b919061429a565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf91906142b3565b90505f805f806108d18c8c8c8861167e565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a82826142de565b90505f9150610994565b61098e81836142de565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3391906142b3565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab191906142f7565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a91906142b3565b610b4491906142de565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612adb565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612cd9565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614065565b1480610c9f57506003816003811115610c9d57610c9d614065565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f919061429a565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612fd7565b825192955090935091505f9084906002908110610d6357610d63614316565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b614316565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e02614316565b60200260200101511115611086575f83600181518110610e2457610e24614316565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba91906142b3565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee9614316565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906142f7565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100991906142b3565b61101391906142de565b90508360018151811061102857611028614316565b6020026020010151811461107657808460018151811061104a5761104a614316565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b613531565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c3614316565b6020026020010151856001815181106110de576110de614316565b6020026020010151866002815181106110f9576110f9614316565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f690849061432a565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614065565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c69190614079565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061433d565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d6115206001856142de565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d91906142b3565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f4919061433d565b63ffffffff1690505f62093a8061160b838561432a565b61161591906142de565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5f858152600760205260408082208690555186917f5a6a4aed2babbf3fe4cddce74151568eaac96f250cf910532f6528b1f6ee13d891a25050505050565b5f805f80865f036116a257604051637c946ed760e01b815260040160405180910390fd5b5f8690036116c35760405163d92e233d60e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000860361172557604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f611769828a613b47565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b1580156117b9575f80fd5b505af11580156117cb573d5f803e3d5ffd5b5083925050505b83811015611bb6575f818152600a602052604090205460ff16611bae57600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611836573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185a919061437b565b606081015190915060ff16156118f957604081015161ffff16158015611890575060208101516bffffffffffffffffffffffff16155b156118f45761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118ff565b50611bae565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa158015611946573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196a91906142b3565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa1580156119c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e791906143fe565b91509150805f03611a2f575f858152600a60205260409020805460ff191660011790558351611a24906bffffffffffffffffffffffff168a61432a565b985050505050611bae565b83515f9081906bffffffffffffffffffffffff168184821115611a5c57611a5685836142de565b90508491505b6040880151611a759061ffff16655af3107a4000614420565b861015611aab57670de0b6b3a764000086611a90848461432a565b611a9a9190614420565b611aa4919061444b565b9250611b99565b670de0b6b3a7640000611abe8784614420565b611ac8919061444b565b9350670de0b6b3a7640000611add8783614420565b611ae7919061444b565b925087602001516bffffffffffffffffffffffff16915081841115611b2057611b1082856142de565b611b1a908461432a565b92508193505b60128f1015611b8c575f8f6012611b3791906142de565b611b4290600a61453e565b611b4c908661444b565b90508f6012611b5b91906142de565b611b6690600a61453e565b611b709082614420565b9050611b7c81866142de565b611b86908561432a565b90945092505b611b96848f61432a565b9d505b611ba3838e61432a565b9c5050505050505050505b6001016117d2565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611c24576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c3d90859061432a565b90506bffffffffffffffffffffffff811115611c8157604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611d01576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d44907f000000000000000000000000000000000000000000000000000000000000000090613b47565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611db0575f80fd5b505af1158015611dc2573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611fb257600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e6e919061437b565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611eba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ede91906142b3565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7991906143fe565b508351909150611f989082906bffffffffffffffffffffffff16614420565b611fa2908661432a565b9450505050806001019050611dfb565b50611fc5670de0b6b3a76400008261444b565b9050801561202757600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015612010575f80fd5b505af1158015612022573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b031633146120b45760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120d5576120d5614065565b14806120f2575060038160038111156120f0576120f0614065565b145b8061216957506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561213e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612162919061429a565b60ff166002145b15612187576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fb919061433d565b5f8381526006602052604080822063ffffffff93909316909255905183917f5381b67b592d2dc84b61238222ab88ee04db3b3a082894a445c4e5cfa8ba11be91a25050565b6002546001600160a01b031633146122805760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122a75760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b0316331461233d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b811580612348575080155b1561236657604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b031633146123ed5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b03831615612450576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b038216156124b3576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b03811615612516576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff161115612551576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561258557612585614065565b14806125a2575060038160038111156125a0576125a0614065565b145b8061261957506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156125ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612612919061429a565b60ff166002145b15612637576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061268490339089908990600401614583565b60408051808303815f875af115801561269f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c391906143fe565b90935091505f806126d4848661432a565b11156128ac575f831561276a576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612743573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276791906142b3565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af11580156127c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e491906142f7565b915083156128aa576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612850573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287491906142b3565b61287e91906142de565b90508381146128aa5760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128f3576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b0316331461298c5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061299c57508051825114155b156129c757815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a7d578181815181106129e4576129e4614316565b60200260200101515f03612a0b57604051637c946ed760e01b815260040160405180910390fd5b828181518110612a1d57612a1d614316565b602002602001015160085f848481518110612a3a57612a3a614316565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060010190506129c9565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa582826040516123a19291906145f8565b6024612ac4600267ffffffffffffffff614625565b612ace919061464b565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612ba3576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba191906142f7565b505b6024612bb8600267ffffffffffffffff614625565b612bc2919061464b565b67ffffffffffffffff168611612c55576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612c219085908a908a908a906004016146a1565b5f604051808303818588803b158015612c38575f80fd5b505af1158015612c4a573d5f803e3d5ffd5b505050505050612cd1565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612ca29089908990899089906004016146d9565b5f604051808303818588803b158015612cb9575f80fd5b505af1158015612ccb573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612d0857835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612d3757835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d6657835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612fad57868181518110612d8557612d85614316565b60200260200101518310612dc957868181518110612da557612da5614316565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612ddb57612ddb614316565b60200260200101519250858181518110612df757612df7614316565b6020026020010151515f03612e1f57604051637c946ed760e01b815260040160405180910390fd5b838181518110612e3157612e31614316565b602002602001015182612e44919061432a565b91505f600154905080878381518110612e5f57612e5f614316565b6020026020010151511115612eae57868281518110612e8057612e80614316565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612ec357612ec3614316565b602002602001015151811015612f9f57888481518110612ee557612ee5614316565b60200260200101518181518110612efe57612efe614316565b60200260200101515f1c825f1c10612f5f57888481518110612f2257612f22614316565b60200260200101518181518110612f3b57612f3b614316565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f7157612f71614316565b60200260200101518181518110612f8a57612f8a614316565b60200260200101519150806001019050612eb1565b505050806001019050612d6a565b50803414612cd15760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff81111561301757613017613cab565b60405190808252806020026020018201604052801561304a57816020015b60608152602001906001900390816130355790505b509150845167ffffffffffffffff81111561306757613067613cab565b604051908082528060200260200182016040528015613090578160200160208202803683370190505b5090505f5b8551811015613527575f60085f8884815181106130b4576130b4614316565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561311b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061313f91906142b3565b905086838151811061315357613153614316565b60200260200101515167ffffffffffffffff81111561317457613174613cab565b60405190808252806020026020018201604052801561319d578160200160208202803683370190505b508584815181106131b0576131b0614316565b60200260200101819052505f5b8784815181106131cf576131cf614316565b6020026020010151518110156133b6577f000000000000000000000000000000000000000000000000000000000000000088858151811061321257613212614316565b6020026020010151828151811061322b5761322b614316565b60200260200101510361327357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f806132ce8e8e8a8151811061328d5761328d614316565b60200260200101518e8b815181106132a7576132a7614316565b602002602001015188815181106132c0576132c0614316565b60200260200101518961167e565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132fe576132fe614316565b6020026020010151868151811061331757613317614316565b6020026020010181815250508389898151811061333657613336614316565b6020026020010181815161334a919061432a565b9052508a5184908c905f9061336157613361614316565b60200260200101818151613375919061432a565b9052508a5183908c90600290811061338f5761338f614316565b602002602001018181516133a3919061432a565b90525050600190930192506131bd915050565b505f8484815181106133ca576133ca614316565b602002602001015111156134d9575f60095f8a86815181106133ee576133ee614316565b602002602001015181526020019081526020015f205490505f8111156134d75784848151811061342057613420614316565b602002602001015181106134795784848151811061344057613440614316565b60200260200101518161345391906142de565b90505f85858151811061346857613468614316565b6020026020010181815250506134a7565b8085858151811061348c5761348c614316565b602002602001018181516134a091906142de565b9052505f90505b8060095f8b87815181106134bd576134bd614316565b602002602001015181526020019081526020015f20819055505b505b8383815181106134eb576134eb614316565b60200260200101518660018151811061350657613506614316565b6020026020010181815161351a919061432a565b9052505050600101613095565b5093509350939050565b5f5b8651811015613b3e575f60085f89848151811061355257613552614316565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061358f5761358f614316565b6020026020010151111561365a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb828685815181106135df576135df614316565b60200260200101516040518363ffffffff1660e01b81526004016136189291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af1158015613634573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061365891906142f7565b505b5f8088848151811061366e5761366e614316565b60200260200101515167ffffffffffffffff81111561368f5761368f613cab565b6040519080825280602002602001820160405280156136b8578160200160208202803683370190505b5090505f5b8985815181106136cf576136cf614316565b602002602001015151811015613751575f8986815181106136f2576136f2614316565b6020026020010151828151811061370b5761370b614316565b6020026020010151111561374957600182828151811061372d5761372d614316565b91151560209283029190910190910152613746836146f7565b92505b6001016136bd565b50815f0361376157505050613b36565b5f8267ffffffffffffffff81111561377b5761377b613cab565b6040519080825280602002602001820160405280156137a4578160200160208202803683370190505b5090505f8367ffffffffffffffff8111156137c1576137c1613cab565b6040519080825280602002602001820160405280156137ea578160200160208202803683370190505b5090505f805b8c888151811061380257613802614316565b6020026020010151518110156138e65784818151811061382457613824614316565b6020026020010151156138de578c888151811061384357613843614316565b6020026020010151818151811061385c5761385c614316565b602002602001015184838151811061387657613876614316565b6020026020010181815250508b888151811061389457613894614316565b602002602001015181815181106138ad576138ad614316565b60200260200101518383815181106138c7576138c7614316565b60209081029190910101526138db826146f7565b91505b6001016137f0565b5060246138fc600267ffffffffffffffff614625565b613906919061464b565b67ffffffffffffffff168d888151811061392257613922614316565b602002602001015111613a82575f835167ffffffffffffffff81111561394a5761394a613cab565b604051908082528060200260200182016040528015613973578160200160208202803683370190505b5090505f5b84518110156139cf5784818151811061399357613993614316565b60200260200101515f1c8282815181106139af576139af614316565b6001600160a01b0390921660209283029190910190910152600101613978565b50866001600160a01b031663bde526618a8a815181106139f1576139f1614316565b602002602001015183868f8d81518110613a0d57613a0d614316565b60200260200101518f8e81518110613a2757613a27614316565b60200260200101516040518663ffffffff1660e01b8152600401613a4e949392919061470f565b5f604051808303818588803b158015613a65575f80fd5b505af1158015613a77573d5f803e3d5ffd5b505050505050613b2f565b856001600160a01b03166355442b59898981518110613aa357613aa3614316565b602002602001015185858e8c81518110613abf57613abf614316565b60200260200101518e8d81518110613ad957613ad9614316565b60200260200101516040518663ffffffff1660e01b8152600401613b009493929190614759565b5f604051808303818588803b158015613b17575f80fd5b505af1158015613b29573d5f803e3d5ffd5b50505050505b5050505050505b600101613533565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bbe919061433d565b5f86815260066020526040812054945063ffffffff919091169150839003613bf957604051637c946ed760e01b815260040160405180910390fd5b808303613c2e5782613c0c6001836142de565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f858152600760205260409020548015801590613c4b5750808410155b15613c5c5783613c0c6001836142de565b613c66858561432a565b92505f81118015613c7657508083115b15613c7f578092505b81831115613c8b578192505b50509250929050565b5f60208284031215613ca4575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ce857613ce8613cab565b604052919050565b5f82601f830112613cff575f80fd5b813567ffffffffffffffff811115613d1957613d19613cab565b613d2c601f8201601f1916602001613cbf565b818152846020838601011115613d40575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d6f575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d9a575f80fd5b613da687828801613cf0565b91505092959194509250565b5f67ffffffffffffffff821115613dcb57613dcb613cab565b5060051b60200190565b5f82601f830112613de4575f80fd5b81356020613df9613df483613db2565b613cbf565b8083825260208201915060208460051b870101935086841115613e1a575f80fd5b602086015b84811015613e365780358352918301918301613e1f565b509695505050505050565b5f82601f830112613e50575f80fd5b81356020613e60613df483613db2565b82815260059290921b84018101918181019086841115613e7e575f80fd5b8286015b84811015613e3657803567ffffffffffffffff811115613ea0575f80fd5b613eae8986838b0101613cf0565b845250918301918301613e82565b5f805f805f60a08688031215613ed0575f80fd5b8535945067ffffffffffffffff8060208801351115613eed575f80fd5b613efd8860208901358901613dd5565b94508060408801351115613f0f575f80fd5b6040870135870188601f820112613f24575f80fd5b613f31613df48235613db2565b81358082526020808301929160051b8401018b1015613f4e575f80fd5b602083015b6020843560051b850101811015613fe8578481351115613f71575f80fd5b803584018c603f820112613f83575f80fd5b613f93613df46020830135613db2565b602082810135808352908201919060051b83016040018f811115613fb5575f80fd5b6040840193505b80841015613fd7578335835260209384019390920191613fbc565b508552505060209283019201613f53565b50955050506060870135811015613ffd575f80fd5b61400d8860608901358901613e41565b9250806080880135111561401f575f80fd5b506140308760808801358801613dd5565b90509295509295909350565b5f805f6060848603121561404e575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061409957634e487b7160e01b5f52602160045260245ffd5b91905290565b5f602082840312156140af575f80fd5b8135600481106140bd575f80fd5b9392505050565b5f805f80608085870312156140d7575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b0381168114614109575f80fd5b919050565b5f6020828403121561411e575f80fd5b6140bd826140f3565b5f8060408385031215614138575f80fd5b50508035926020909101359150565b5f805f60608486031215614159575f80fd5b614162846140f3565b9250614170602085016140f3565b915061417e604085016140f3565b90509250925092565b5f8060408385031215614198575f80fd5b823567ffffffffffffffff808211156141af575f80fd5b6141bb86838701613dd5565b935060208501359150808211156141d0575f80fd5b506141dd85828601613dd5565b9150509250929050565b5f80604083850312156141f8575f80fd5b823567ffffffffffffffff8082111561420f575f80fd5b818501915085601f830112614222575f80fd5b81356020614232613df483613db2565b82815260059290921b84018101918181019089841115614250575f80fd5b948201945b8386101561427557614266866140f3565b82529482019490820190614255565b965050860135925050808211156141d0575f80fd5b805160ff81168114614109575f80fd5b5f602082840312156142aa575f80fd5b6140bd8261428a565b5f602082840312156142c3575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142f1576142f16142ca565b92915050565b5f60208284031215614307575f80fd5b815180151581146140bd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142f1576142f16142ca565b5f6020828403121561434d575f80fd5b815163ffffffff811681146140bd575f80fd5b80516bffffffffffffffffffffffff81168114614109575f80fd5b5f6080828403121561438b575f80fd5b6040516080810181811067ffffffffffffffff821117156143ae576143ae613cab565b6040526143ba83614360565b81526143c860208401614360565b6020820152604083015161ffff811681146143e1575f80fd5b60408201526143f26060840161428a565b60608201529392505050565b5f806040838503121561440f575f80fd5b505080516020909101519092909150565b80820281158282048414176142f1576142f16142ca565b634e487b7160e01b5f52601260045260245ffd5b5f8261445957614459614437565b500490565b600181815b8085111561449857815f190482111561447e5761447e6142ca565b8085161561448b57918102915b93841c9390800290614463565b509250929050565b5f826144ae575060016142f1565b816144ba57505f6142f1565b81600181146144d057600281146144da576144f6565b60019150506142f1565b60ff8411156144eb576144eb6142ca565b50506001821b6142f1565b5060208310610133831016604e8410600b8410161715614519575081810a6142f1565b614523838361445e565b805f1904821115614536576145366142ca565b029392505050565b5f6140bd83836144a0565b5f815180845260208085019450602084015f5b838110156145785781518752958201959082019060010161455c565b509495945050505050565b6001600160a01b0384168152606060208201525f6145a46060830185614549565b82810360408401526145b68185614549565b9695505050505050565b5f815180845260208085019450602084015f5b838110156145785781516001600160a01b0316875295820195908201906001016145d3565b604081525f61460a60408301856145c0565b828103602084015261461c8185614549565b95945050505050565b5f67ffffffffffffffff8084168061463f5761463f614437565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561466c5761466c6142ca565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6146c86080830185614673565b905082606083015295945050505050565b848152836020820152608060408201525f6146c86080830185614673565b5f60018201614708576147086142ca565b5060010190565b608081525f61472160808301876145c0565b82810360208401526147338187614549565b905082810360408401526147478186614673565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561479157815184529284019290840190600101614775565b50505083810360208501526147a68188614549565b9150508281036040840152614747818661467356fea2646970667358221220b18c141dc1e94417f54aae9a954aa4f42c6750fda4ac2cdf8f46139f4df5a59f64736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } From 660e67c5b08d58c7205f3dea073965ff63aa04b9 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 12 Jul 2024 19:20:03 +0100 Subject: [PATCH 09/55] test: splitting two time-dependent tests --- test/Tokenomics.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/test/Tokenomics.js b/test/Tokenomics.js index 669e1b80..bc3501ac 100644 --- a/test/Tokenomics.js +++ b/test/Tokenomics.js @@ -1041,7 +1041,7 @@ describe("Tokenomics", async () => { await snapshot.restore(); }); - it("Get to the epoch before the end of the OLAS year and try to change maxBond or epochLen", async () => { + it("Get to two epochs before the end of the OLAS year and try to change epochLen", async () => { // Take a snapshot of the current state of the blockchain const snapshot = await helpers.takeSnapshot(); @@ -1051,7 +1051,7 @@ describe("Tokenomics", async () => { const yearChangeTime = timeLaunch + oneYear; // Get to the time of more than one epoch length before the year change (1.5 epoch length) - let timeEpochBeforeYearChange = yearChangeTime - epochLen - epochLen / 2; + const timeEpochBeforeYearChange = yearChangeTime - epochLen - epochLen / 2; await helpers.time.increaseTo(timeEpochBeforeYearChange); await tokenomics.checkpoint(); @@ -1062,12 +1062,23 @@ describe("Tokenomics", async () => { await helpers.time.increase(epochLen); await tokenomics.checkpoint(); expect(await tokenomics.epochLen()).to.equal(2 * epochLen); - // Restore the state of the blockchain back to the time half of the epoch before one epoch left for the current year - snapshotInternal.restore(); + + // Restore to the state of the snapshot + await snapshot.restore(); + }); + + it("Get to the epoch before the end of the OLAS year and try to change epochLen", async () => { + // Take a snapshot of the current state of the blockchain + const snapshot = await helpers.takeSnapshot(); + + // OLAS starting time + const timeLaunch = Number(await tokenomics.timeLaunch()); + // One year time from the launch + const yearChangeTime = timeLaunch + oneYear; // Get to the time of the half epoch length before the year change // Meaning that the year does not change yet during the current epoch, but it will during the next one - timeEpochBeforeYearChange += epochLen; + const timeEpochBeforeYearChange = yearChangeTime - epochLen / 2; await helpers.time.increaseTo(timeEpochBeforeYearChange); await tokenomics.checkpoint(); From 4d2f26621704280a531d2238c6b059783fc2d430 Mon Sep 17 00:00:00 2001 From: AL Date: Mon, 15 Jul 2024 12:52:21 +0100 Subject: [PATCH 10/55] doc: catch up on changes --- audits/internal5/README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/audits/internal5/README.md b/audits/internal5/README.md index 43d1aa74..b9cafd51 100644 --- a/audits/internal5/README.md +++ b/audits/internal5/README.md @@ -33,7 +33,8 @@ File | % Stmts | % Branch | % Funcs | % Lines |Un ---------------------------------|----------|----------|----------|----------|----------------| ``` -Please, pay attention. +Please, pay attention.
+[x] Noted. Missing 100% is not an obvious problem. #### Checking the corrections made after C4A ##### Bridging @@ -118,3 +119,12 @@ grep -r encodeWithSelec ./contracts/ ./contracts/staking/ArbitrumDepositProcessorL1.sol: bytes memory data = abi.encodeWithSelector(RECEIVE_MESSAGE, abi.encode(targets, stakingIncentives, batchHash)); ./contracts/staking/GnosisDepositProcessorL1.sol: bytes memory data = abi.encodeWithSelector(RECEIVE_MESSAGE, abi.encode(targets, stakingIncentives, batchHash)); ``` +[x] Noted. The fact that codebase hasn't been changed is not a problem. + +### Catch up on changes. 15.07.24 +https://github.com/valory-xyz/autonolas-tokenomics/compare/v1.2.2-pre-internal-audit...v1.2.2-pre-audit
+The changes to the codebase appear to be correct. + + + + From 8b49e18a6c0015a039e4c8c1b2c1b6b97fcacccb Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 15 Jul 2024 13:12:10 +0100 Subject: [PATCH 11/55] chore: Tokenomics V1.2 deployment procedure update --- docs/deployment_v1.2.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/deployment_v1.2.md b/docs/deployment_v1.2.md index 0925d4d0..8f79e6d3 100644 --- a/docs/deployment_v1.2.md +++ b/docs/deployment_v1.2.md @@ -3,12 +3,15 @@ Steps for deploying the tokenomics version 1.2 contracts are as follows: 1. EOA to deploy Tokenomics implementation (`TokenomicsThree`); 2. TokenomicsProxy to change Tokenomics implementation calling `changeTokenomicsImplementation(TokenomicsThree)`; 3. EOA to deploy Dispenser (`DispenserTwo`) with VoteWeighting contract being deployed before that in `autonolas-governance`; -4. EOA to deploy staking bridging contracts; +4. EOA to deploy staking bridging contracts with StakingFactory contract being deployed before that in `autonolas-registries`; 5. EOA to set up correct L1->L2 links for all the bridging contracts calling `setL2TargetDispenser(L2 corresponding contract)`; 6. EOA to transfer ownership rights of Dispenser to Timelock calling `changeOwner(Timelock)`; 7. DAO to change Tokenomics managers calling `changeManagers(ZeroAddress, ZeroAddress, DispenserTwo)`; 8. DAO to change staking parameters in Tokenomics calling `changeStakingParams()`; -9. DAO to enable bridge deposit processors in Dispenser calling `setDepositProcessorChainIds()`. +9. DAO to change Treasury managers calling `changeManagers(ZeroAddress, ZeroAddress, DispenserTwo)`; +10. DAO to enable bridge deposit processors in Dispenser calling `setDepositProcessorChainIds()`; +11. DAO to unpause staking incentives in Dispenser calling `setPauseState(3)`; +12. EOA to transfer ownership rights of all the L2 bridging contracts to Timelock representation calling `changeOwner(Timelock)`. Note for updating VoteWeighting contract address in Dispenser, if required at some point of time. As outlined in the C4R [issue 59](https://github.com/code-423n4/2024-05-olas-findings/issues/59), the following set of From ea6713128995ac18f3911c0214163e2b82896a7f Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 15 Jul 2024 15:14:11 +0100 Subject: [PATCH 12/55] chore: diepenser deployment script --- docs/deployment_v1.2.md | 20 +++++++++++--------- scripts/deployment/deploy_07_dispenser.js | 20 +++++++++++++++----- scripts/deployment/globals_mainnet.json | 2 +- scripts/deployment/verify_07_dispenser.js | 16 +++++++++++++++- 4 files changed, 42 insertions(+), 16 deletions(-) diff --git a/docs/deployment_v1.2.md b/docs/deployment_v1.2.md index 8f79e6d3..3e534d1e 100644 --- a/docs/deployment_v1.2.md +++ b/docs/deployment_v1.2.md @@ -3,15 +3,17 @@ Steps for deploying the tokenomics version 1.2 contracts are as follows: 1. EOA to deploy Tokenomics implementation (`TokenomicsThree`); 2. TokenomicsProxy to change Tokenomics implementation calling `changeTokenomicsImplementation(TokenomicsThree)`; 3. EOA to deploy Dispenser (`DispenserTwo`) with VoteWeighting contract being deployed before that in `autonolas-governance`; -4. EOA to deploy staking bridging contracts with StakingFactory contract being deployed before that in `autonolas-registries`; -5. EOA to set up correct L1->L2 links for all the bridging contracts calling `setL2TargetDispenser(L2 corresponding contract)`; -6. EOA to transfer ownership rights of Dispenser to Timelock calling `changeOwner(Timelock)`; -7. DAO to change Tokenomics managers calling `changeManagers(ZeroAddress, ZeroAddress, DispenserTwo)`; -8. DAO to change staking parameters in Tokenomics calling `changeStakingParams()`; -9. DAO to change Treasury managers calling `changeManagers(ZeroAddress, ZeroAddress, DispenserTwo)`; -10. DAO to enable bridge deposit processors in Dispenser calling `setDepositProcessorChainIds()`; -11. DAO to unpause staking incentives in Dispenser calling `setPauseState(3)`; -12. EOA to transfer ownership rights of all the L2 bridging contracts to Timelock representation calling `changeOwner(Timelock)`. +4. EOA to change Dispenser address in VoteWeighting calling `changeDispenser(DispenserTwo)`; +5. EOA to add a retainer address as a nominee in VoteWeighting; +6. EOA to deploy staking bridging contracts with StakingFactory contract being deployed before that in `autonolas-registries`; +7. EOA to set up correct L1->L2 links for all the bridging contracts calling `setL2TargetDispenser(L2 corresponding contract)`; +8. EOA to transfer ownership rights of Dispenser to Timelock calling `changeOwner(Timelock)`; +9. DAO to change Tokenomics managers calling `changeManagers(ZeroAddress, ZeroAddress, DispenserTwo)`; +10. DAO to change staking parameters in Tokenomics calling `changeStakingParams()`; +11. DAO to change Treasury managers calling `changeManagers(ZeroAddress, ZeroAddress, DispenserTwo)`; +12. DAO to enable bridge deposit processors in Dispenser calling `setDepositProcessorChainIds()`; +13. DAO to unpause staking incentives in Dispenser calling `setPauseState(3)`; +14. EOA to transfer ownership rights of all the L2 bridging contracts to Timelock representation calling `changeOwner(Timelock)`. Note for updating VoteWeighting contract address in Dispenser, if required at some point of time. As outlined in the C4R [issue 59](https://github.com/code-423n4/2024-05-olas-findings/issues/59), the following set of diff --git a/scripts/deployment/deploy_07_dispenser.js b/scripts/deployment/deploy_07_dispenser.js index f62d53f7..9fb45ef4 100644 --- a/scripts/deployment/deploy_07_dispenser.js +++ b/scripts/deployment/deploy_07_dispenser.js @@ -26,25 +26,35 @@ async function main() { console.log("EOA is:", deployer); // Get all the necessary contract addresses + const olasAddress = parsedData.olasAddress; const tokenomicsProxyAddress = parsedData.tokenomicsProxyAddress; const treasuryAddress = parsedData.treasuryAddress; + const voteWeightingAddress = parsedData.voteWeightingAddress; + const retainerAddress = parsedData.retainerAddress; + const maxNumClaimingEpochs = parsedData.maxNumClaimingEpochs; + const maxNumStakingTargets = parsedData.maxNumStakingTargets; + const minStakingWeight = parsedData.minStakingWeight; + const maxStakingIncentive = parsedData.maxStakingIncentive; // Transaction signing and execution console.log("7. EOA to deploy Dispenser"); const Dispenser = await ethers.getContractFactory("Dispenser"); console.log("You are signing the following transaction: Dispenser.connect(EOA).deploy()"); - const dispenser = await Dispenser.connect(EOA).deploy(tokenomicsProxyAddress, treasuryAddress); + const dispenser = await Dispenser.connect(EOA).deploy(olasAddress, tokenomicsProxyAddress, treasuryAddress, + voteWeightingAddress, retainerAddress, maxNumClaimingEpochs, maxNumStakingTargets, minStakingWeight, + maxStakingIncentive); const result = await dispenser.deployed(); - // If on goerli, wait a minute for the transaction completion - if (providerName === "goerli") { - await new Promise(r => setTimeout(r, 60000)); - } // Transaction details console.log("Contract deployment: Dispenser"); console.log("Contract address:", dispenser.address); console.log("Transaction:", result.deployTransaction.hash); + // If on sepolia, wait half a minute for the transaction completion + if (providerName === "sepolia") { + await new Promise(r => setTimeout(r, 30000)); + } + // Contract verification if (parsedData.contractVerification) { const execSync = require("child_process").execSync; diff --git a/scripts/deployment/globals_mainnet.json b/scripts/deployment/globals_mainnet.json index 3f165c8f..a8ef5b0b 100644 --- a/scripts/deployment/globals_mainnet.json +++ b/scripts/deployment/globals_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","veOLASAddress":"0x7e01A500805f8A52Fad229b3015AD130A332B7b3","governorAddress":"0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5","governorTwoAddress":"0x4E3e48bA826b15214FDe72a50BFd17aB286B584E","componentRegistryAddress":"0x15bd56669F57192a97dF41A2aa8f4403e9491776","agentRegistryAddress":"0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112","serviceRegistryAddress":"0x48b6af7B12C71f09e2fC8aF4855De4Ff54e775cA","epochLen":"2592000","donatorBlacklistAddress":"0xE85791B18F5df42163092Acc5C9da1c479AFEa9d","tokenomicsAddress":"0x87f89F94033305791B6269AE2F9cF4e09983E56e","tokenomicsProxyAddress":"0xc096362fa6f4A4B1a9ea68b1043416f3381ce300","treasuryAddress":"0xa0DA53447C0f6C4987964d8463da7e6628B30f82","genericBondCalculatorAddress":"0x1521918961bDBC9Ed4C67a7103D5999e4130E6CB","depositoryAddress":"0x52A043bcebdB2f939BaEF2E8b6F01652290eAB3f","dispenserAddress":"0xeED0000fE94d7cfeF4Dc0CA86a223f0F603A61B8","tokenomicsTwoAddress":"0xD599ED4a5c45Fa66AA3C474b00701Fd452a2C30e","OLAS_ETH_PairAddress":"0x09D1d767eDF8Fa23A64C51fa559E0688E526812F","depositoryTwoAddress":"0xfF8697d8d2998d6AA2e09B405795C6F4BEeB0C81","XOLAS_WXDAI_PairAddress":"0x27df632fd0dcf191C418c803801D521cd579F18e","tokenomicsThreeAddress":"0x2C1633765c66a7CF0EC801a1046347bBee7344C9"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","veOLASAddress":"0x7e01A500805f8A52Fad229b3015AD130A332B7b3","governorAddress":"0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5","governorTwoAddress":"0x4E3e48bA826b15214FDe72a50BFd17aB286B584E","componentRegistryAddress":"0x15bd56669F57192a97dF41A2aa8f4403e9491776","agentRegistryAddress":"0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112","serviceRegistryAddress":"0x48b6af7B12C71f09e2fC8aF4855De4Ff54e775cA","epochLen":"2592000","donatorBlacklistAddress":"0xE85791B18F5df42163092Acc5C9da1c479AFEa9d","tokenomicsAddress":"0x87f89F94033305791B6269AE2F9cF4e09983E56e","tokenomicsProxyAddress":"0xc096362fa6f4A4B1a9ea68b1043416f3381ce300","treasuryAddress":"0xa0DA53447C0f6C4987964d8463da7e6628B30f82","genericBondCalculatorAddress":"0x1521918961bDBC9Ed4C67a7103D5999e4130E6CB","depositoryAddress":"0x52A043bcebdB2f939BaEF2E8b6F01652290eAB3f","dispenserAddress":"0xeED0000fE94d7cfeF4Dc0CA86a223f0F603A61B8","tokenomicsTwoAddress":"0xD599ED4a5c45Fa66AA3C474b00701Fd452a2C30e","OLAS_ETH_PairAddress":"0x09D1d767eDF8Fa23A64C51fa559E0688E526812F","depositoryTwoAddress":"0xfF8697d8d2998d6AA2e09B405795C6F4BEeB0C81","XOLAS_WXDAI_PairAddress":"0x27df632fd0dcf191C418c803801D521cd579F18e","tokenomicsThreeAddress":"0x2C1633765c66a7CF0EC801a1046347bBee7344C9","voteWeightingAddress":"","retainerAddress":"0x000000000000000000000000000000000000000000000000000000000000dEaD","maxNumClaimingEpochs":"1","maxNumStakingTargets":"10","minStakingWeight":"","maxStakingIncentive":""} \ No newline at end of file diff --git a/scripts/deployment/verify_07_dispenser.js b/scripts/deployment/verify_07_dispenser.js index f8cc6de3..b5cdd7e7 100644 --- a/scripts/deployment/verify_07_dispenser.js +++ b/scripts/deployment/verify_07_dispenser.js @@ -4,8 +4,22 @@ const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); const parsedData = JSON.parse(dataFromJSON); const tokenomicsProxyAddress = parsedData.tokenomicsProxyAddress; const treasuryAddress = parsedData.treasuryAddress; +const olasAddress = parsedData.olasAddress; +const voteWeightingAddress = parsedData.voteWeightingAddress; +const retainerAddress = parsedData.retainerAddress; +const maxNumClaimingEpochs = parsedData.maxNumClaimingEpochs; +const maxNumStakingTargets = parsedData.maxNumStakingTargets; +const minStakingWeight = parsedData.minStakingWeight; +const maxStakingIncentive = parsedData.maxStakingIncentive; module.exports = [ + olasAddress, tokenomicsProxyAddress, - treasuryAddress + treasuryAddress, + voteWeightingAddress, + retainerAddress, + maxNumClaimingEpochs, + maxNumStakingTargets, + minStakingWeight, + maxStakingIncentive ]; \ No newline at end of file From 3c5c0643bfa60605d7b91eb4b7a4b80c6f7a1b43 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 15 Jul 2024 16:19:43 +0100 Subject: [PATCH 13/55] chore: deployment scripts --- .gitleaksignore | 2 ++ .../deployment/staking/arbitrum/globals_arbitrum_mainnet.json | 1 + scripts/deployment/staking/globals_mainnet.json | 1 + scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json | 1 + .../staking/optimistic/globals_optimistic_mainnet.json | 1 + scripts/deployment/staking/polygon/globals_polygon_mainnet.json | 1 + 6 files changed, 7 insertions(+) create mode 100644 scripts/deployment/staking/arbitrum/globals_arbitrum_mainnet.json create mode 100644 scripts/deployment/staking/globals_mainnet.json create mode 100644 scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json create mode 100644 scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json create mode 100644 scripts/deployment/staking/polygon/globals_polygon_mainnet.json diff --git a/.gitleaksignore b/.gitleaksignore index cc23e812..60294d1b 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -136,3 +136,5 @@ f78d4539c80abb33ea04dce4d561af5302033235:scripts/deployment/staking/globals_sepo 9fa4b1fb81ba553ed48ef4a9b22c53ecdf4d2242:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 001d71fc7c216c593faebdd3d6f353efaf80605f:scripts/deployment/staking/globals_sepolia.json:generic-api-key:1 001d71fc7c216c593faebdd3d6f353efaf80605f:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 +ea6713128995ac18f3911c0214163e2b82896a7f:scripts/deployment/globals_mainnet.json:generic-api-key:1 +ea6713128995ac18f3911c0214163e2b82896a7f:scripts/deployment/globals_mainnet.json:generic-api-key:2 diff --git a/scripts/deployment/staking/arbitrum/globals_arbitrum_mainnet.json b/scripts/deployment/staking/arbitrum/globals_arbitrum_mainnet.json new file mode 100644 index 00000000..a1476ba6 --- /dev/null +++ b/scripts/deployment/staking/arbitrum/globals_arbitrum_mainnet.json @@ -0,0 +1 @@ +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumOne","networkURL":"https://arb1.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x064F8B858C2A603e1b106a2039f5446D32dc81c1","serviceStakingFactoryAddress":"","timelockAddress":"","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","l1ChainId":"1","arbitrumDepositProcessorL1Address":"","arbitrumTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/globals_mainnet.json b/scripts/deployment/staking/globals_mainnet.json new file mode 100644 index 00000000..8a20c59b --- /dev/null +++ b/scripts/deployment/staking/globals_mainnet.json @@ -0,0 +1 @@ +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","dispenserAddress":"","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoWormholeDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json new file mode 100644 index 00000000..6cfea4ef --- /dev/null +++ b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json @@ -0,0 +1 @@ +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"","timelockAddress":"","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"","gnosisTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json new file mode 100644 index 00000000..f22c6d15 --- /dev/null +++ b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json @@ -0,0 +1 @@ +{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"","timelockAddress":"","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"","optimismTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/polygon/globals_polygon_mainnet.json b/scripts/deployment/staking/polygon/globals_polygon_mainnet.json new file mode 100644 index 00000000..e3f6b464 --- /dev/null +++ b/scripts/deployment/staking/polygon/globals_polygon_mainnet.json @@ -0,0 +1 @@ +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","networkURL":"https://polygon-mainnet.g.alchemy.com/v2/","gasPriceInGwei":"5","olasAddress":"0xFEF5d947472e72Efbb2E388c730B7428406F2F95","serviceStakingFactoryAddress":"","timelockAddress":"","polygonFXChildAddress":"0x8397259c983751DAf40400790063935a11afa28a","l1ChainId":"1","polygonDepositProcessorL1Address":"","polygonTargetDispenserL2Address":""} \ No newline at end of file From 5291640dd50fece12a388b74f72b26323f5b9e59 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 15 Jul 2024 16:22:40 +0100 Subject: [PATCH 14/55] chore: gitleaksignore --- .gitleaksignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitleaksignore b/.gitleaksignore index 60294d1b..23d6369e 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -138,3 +138,5 @@ f78d4539c80abb33ea04dce4d561af5302033235:scripts/deployment/staking/globals_sepo 001d71fc7c216c593faebdd3d6f353efaf80605f:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 ea6713128995ac18f3911c0214163e2b82896a7f:scripts/deployment/globals_mainnet.json:generic-api-key:1 ea6713128995ac18f3911c0214163e2b82896a7f:scripts/deployment/globals_mainnet.json:generic-api-key:2 +1a7a855a853d2bc21e1e9178754a22dae54439f3:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 +1a7a855a853d2bc21e1e9178754a22dae54439f3:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 From 6a6dad9395e0b0e320a64d0ea8530fcfc653775f Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 15 Jul 2024 16:24:20 +0100 Subject: [PATCH 15/55] chore: gitleaksignore --- .gitleaksignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitleaksignore b/.gitleaksignore index 23d6369e..ec28b402 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -140,3 +140,5 @@ ea6713128995ac18f3911c0214163e2b82896a7f:scripts/deployment/globals_mainnet.json ea6713128995ac18f3911c0214163e2b82896a7f:scripts/deployment/globals_mainnet.json:generic-api-key:2 1a7a855a853d2bc21e1e9178754a22dae54439f3:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 1a7a855a853d2bc21e1e9178754a22dae54439f3:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 +3c5c0643bfa60605d7b91eb4b7a4b80c6f7a1b43:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 +3c5c0643bfa60605d7b91eb4b7a4b80c6f7a1b43:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 From 7cf3cd1c5fa705f82f0f33c90538fa6e6892af5b Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Wed, 17 Jul 2024 11:29:21 +0100 Subject: [PATCH 16/55] chore: adding base scripts --- .gitleaksignore | 4 + scripts/deployment/globals_mainnet.json | 2 +- .../arbitrum/send_tokens_and_message.js | 2 +- .../base/deploy_07_base_targer_dispenser.js | 75 +++++++++++++++++++ .../staking/base/globals_base_mainnet.json | 1 + .../base/verify_07_base_target_dispenser.js | 12 +++ .../deploy_07_base_deposit_processor.js | 64 ++++++++++++++++ .../deployment/staking/globals_mainnet.json | 2 +- .../globals_optimistic_mainnet.json | 2 +- .../optimistic/send_tokens_and_message.js | 2 +- .../verify_07_base_deposit_processor.js | 13 ++++ 11 files changed, 174 insertions(+), 5 deletions(-) create mode 100644 scripts/deployment/staking/base/deploy_07_base_targer_dispenser.js create mode 100644 scripts/deployment/staking/base/globals_base_mainnet.json create mode 100644 scripts/deployment/staking/base/verify_07_base_target_dispenser.js create mode 100644 scripts/deployment/staking/deploy_07_base_deposit_processor.js create mode 100644 scripts/deployment/staking/verify_07_base_deposit_processor.js diff --git a/.gitleaksignore b/.gitleaksignore index ec28b402..61107635 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -142,3 +142,7 @@ ea6713128995ac18f3911c0214163e2b82896a7f:scripts/deployment/globals_mainnet.json 1a7a855a853d2bc21e1e9178754a22dae54439f3:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 3c5c0643bfa60605d7b91eb4b7a4b80c6f7a1b43:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 3c5c0643bfa60605d7b91eb4b7a4b80c6f7a1b43:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 +b17bdd0ebae90b769b8756da81d831a70fcb4af3:scripts/deployment/globals_mainnet.json:generic-api-key:1 +b17bdd0ebae90b769b8756da81d831a70fcb4af3:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 +b17bdd0ebae90b769b8756da81d831a70fcb4af3:scripts/deployment/globals_mainnet.json:generic-api-key:2 +b17bdd0ebae90b769b8756da81d831a70fcb4af3:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 diff --git a/scripts/deployment/globals_mainnet.json b/scripts/deployment/globals_mainnet.json index a8ef5b0b..c11ac1ac 100644 --- a/scripts/deployment/globals_mainnet.json +++ b/scripts/deployment/globals_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","veOLASAddress":"0x7e01A500805f8A52Fad229b3015AD130A332B7b3","governorAddress":"0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5","governorTwoAddress":"0x4E3e48bA826b15214FDe72a50BFd17aB286B584E","componentRegistryAddress":"0x15bd56669F57192a97dF41A2aa8f4403e9491776","agentRegistryAddress":"0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112","serviceRegistryAddress":"0x48b6af7B12C71f09e2fC8aF4855De4Ff54e775cA","epochLen":"2592000","donatorBlacklistAddress":"0xE85791B18F5df42163092Acc5C9da1c479AFEa9d","tokenomicsAddress":"0x87f89F94033305791B6269AE2F9cF4e09983E56e","tokenomicsProxyAddress":"0xc096362fa6f4A4B1a9ea68b1043416f3381ce300","treasuryAddress":"0xa0DA53447C0f6C4987964d8463da7e6628B30f82","genericBondCalculatorAddress":"0x1521918961bDBC9Ed4C67a7103D5999e4130E6CB","depositoryAddress":"0x52A043bcebdB2f939BaEF2E8b6F01652290eAB3f","dispenserAddress":"0xeED0000fE94d7cfeF4Dc0CA86a223f0F603A61B8","tokenomicsTwoAddress":"0xD599ED4a5c45Fa66AA3C474b00701Fd452a2C30e","OLAS_ETH_PairAddress":"0x09D1d767eDF8Fa23A64C51fa559E0688E526812F","depositoryTwoAddress":"0xfF8697d8d2998d6AA2e09B405795C6F4BEeB0C81","XOLAS_WXDAI_PairAddress":"0x27df632fd0dcf191C418c803801D521cd579F18e","tokenomicsThreeAddress":"0x2C1633765c66a7CF0EC801a1046347bBee7344C9","voteWeightingAddress":"","retainerAddress":"0x000000000000000000000000000000000000000000000000000000000000dEaD","maxNumClaimingEpochs":"1","maxNumStakingTargets":"10","minStakingWeight":"","maxStakingIncentive":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","veOLASAddress":"0x7e01A500805f8A52Fad229b3015AD130A332B7b3","governorAddress":"0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5","governorTwoAddress":"0x4E3e48bA826b15214FDe72a50BFd17aB286B584E","componentRegistryAddress":"0x15bd56669F57192a97dF41A2aa8f4403e9491776","agentRegistryAddress":"0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112","serviceRegistryAddress":"0x48b6af7B12C71f09e2fC8aF4855De4Ff54e775cA","epochLen":"2592000","donatorBlacklistAddress":"0xE85791B18F5df42163092Acc5C9da1c479AFEa9d","tokenomicsAddress":"0x87f89F94033305791B6269AE2F9cF4e09983E56e","tokenomicsProxyAddress":"0xc096362fa6f4A4B1a9ea68b1043416f3381ce300","treasuryAddress":"0xa0DA53447C0f6C4987964d8463da7e6628B30f82","genericBondCalculatorAddress":"0x1521918961bDBC9Ed4C67a7103D5999e4130E6CB","depositoryAddress":"0x52A043bcebdB2f939BaEF2E8b6F01652290eAB3f","dispenserAddress":"0xeED0000fE94d7cfeF4Dc0CA86a223f0F603A61B8","tokenomicsTwoAddress":"0xD599ED4a5c45Fa66AA3C474b00701Fd452a2C30e","OLAS_ETH_PairAddress":"0x09D1d767eDF8Fa23A64C51fa559E0688E526812F","depositoryTwoAddress":"0xfF8697d8d2998d6AA2e09B405795C6F4BEeB0C81","XOLAS_WXDAI_PairAddress":"0x27df632fd0dcf191C418c803801D521cd579F18e","tokenomicsThreeAddress":"0x2C1633765c66a7CF0EC801a1046347bBee7344C9","voteWeightingAddress":"0x95418b46d5566D3d1ea62C12Aea91227E566c5c1","retainerAddress":"0x000000000000000000000000000000000000000000000000000000000000dEaD","maxNumClaimingEpochs":"1","maxNumStakingTargets":"10","minStakingWeight":"100","maxStakingIncentive":""} \ No newline at end of file diff --git a/scripts/deployment/staking/arbitrum/send_tokens_and_message.js b/scripts/deployment/staking/arbitrum/send_tokens_and_message.js index a691b901..482790f2 100644 --- a/scripts/deployment/staking/arbitrum/send_tokens_and_message.js +++ b/scripts/deployment/staking/arbitrum/send_tokens_and_message.js @@ -163,7 +163,7 @@ const main = async () => { await tx.wait(); // tx back to L1: https://sepolia.arbiscan.io/tx/0xea8119b1030bb223a896680d9c4ea03877beee08927ef1b8a9532ce48db68c55 - // Finalized tx on L1: + // Finalized tx on L1: https://sepolia.etherscan.io/tx/0x5f61dd72b5feb31af563f7af76402e523e1e871bdac7f1a82bb0ffefcd333ebb // Use the following script to finalize L2-L1 transaction: // https://github.com/OffchainLabs/arbitrum-tutorials/blob/master/packages/outbox-execute/scripts/exec.js diff --git a/scripts/deployment/staking/base/deploy_07_base_targer_dispenser.js b/scripts/deployment/staking/base/deploy_07_base_targer_dispenser.js new file mode 100644 index 00000000..13bd32fc --- /dev/null +++ b/scripts/deployment/staking/base/deploy_07_base_targer_dispenser.js @@ -0,0 +1,75 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + + let networkURL = parsedData.networkURL; + if (providerName === "polygon") { + if (!process.env.ALCHEMY_API_KEY_MATIC) { + console.log("set ALCHEMY_API_KEY_MATIC env variable"); + } + networkURL += process.env.ALCHEMY_API_KEY_MATIC; + } else if (providerName === "polygonAmoy") { + if (!process.env.ALCHEMY_API_KEY_AMOY) { + console.log("set ALCHEMY_API_KEY_AMOY env variable"); + return; + } + networkURL += process.env.ALCHEMY_API_KEY_AMOY; + } + + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("7. EOA to deploy OptimismTargetDispenserL2 for Base"); + const OptimismTargetDispenserL2 = await ethers.getContractFactory("OptimismTargetDispenserL2"); + console.log("You are signing the following transaction: OptimismTargetDispenserL2.connect(EOA).deploy()"); + const baseTargetDispenserL2 = await OptimismTargetDispenserL2.connect(EOA).deploy(parsedData.olasAddress, + parsedData.serviceStakingFactoryAddress, parsedData.baseL2CrossDomainMessengerAddress, + parsedData.baseDepositProcessorL1Address, parsedData.l1ChainId); + const result = await baseTargetDispenserL2.deployed(); + + // Transaction details + console.log("Contract deployment: OptimismTargetDispenserL2"); + console.log("Contract address:", baseTargetDispenserL2.address); + console.log("Transaction:", result.deployTransaction.hash); + + // Wait for half a minute for the transaction completion + await new Promise(r => setTimeout(r, 30000)); + + // Writing updated parameters back to the JSON file + parsedData.baseTargetDispenserL2Address = baseTargetDispenserL2.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --constructor-args scripts/deployment/staking/optimistic/verify_07_base_target_dispenser.js --network " + providerName + " " + baseTargetDispenserL2.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/base/globals_base_mainnet.json b/scripts/deployment/staking/base/globals_base_mainnet.json new file mode 100644 index 00000000..c86148c1 --- /dev/null +++ b/scripts/deployment/staking/base/globals_base_mainnet.json @@ -0,0 +1 @@ +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"2","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","serviceStakingFactoryAddress":"","timelockAddress":"","baseL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","baseDepositProcessorL1Address":"","baseTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/base/verify_07_base_target_dispenser.js b/scripts/deployment/staking/base/verify_07_base_target_dispenser.js new file mode 100644 index 00000000..be0fd403 --- /dev/null +++ b/scripts/deployment/staking/base/verify_07_base_target_dispenser.js @@ -0,0 +1,12 @@ +const fs = require("fs"); +const globalsFile = "globals.json"; +const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +const parsedData = JSON.parse(dataFromJSON); + +module.exports = [ + parsedData.olasAddress, + parsedData.serviceStakingFactoryAddress, + parsedData.baseL2CrossDomainMessengerAddress, + parsedData.baseDepositProcessorL1Address, + parsedData.l1ChainId +]; \ No newline at end of file diff --git a/scripts/deployment/staking/deploy_07_base_deposit_processor.js b/scripts/deployment/staking/deploy_07_base_deposit_processor.js new file mode 100644 index 00000000..b2ce30d3 --- /dev/null +++ b/scripts/deployment/staking/deploy_07_base_deposit_processor.js @@ -0,0 +1,64 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + let EOA; + + const provider = await ethers.providers.getDefaultProvider(providerName); + const signers = await ethers.getSigners(); + + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("7. EOA to deploy OptimismDepositProcessorL1 for Base"); + const OptimismDepositProcessorL1 = await ethers.getContractFactory("OptimismDepositProcessorL1"); + console.log("You are signing the following transaction: OptimismDepositProcessorL1.connect(EOA).deploy()"); + const baseDepositProcessorL1 = await OptimismDepositProcessorL1.connect(EOA).deploy(parsedData.olasAddress, + parsedData.dispenserAddress, parsedData.baseL1StandardBridgeProxyAddress, + parsedData.baseL1CrossDomainMessengerProxyAddress, parsedData.baseL2TargetChainId, + parsedData.baseOLASAddress); + const result = await baseDepositProcessorL1.deployed(); + + // Transaction details + console.log("Contract deployment: OptimismDepositProcessorL1"); + console.log("Contract address:", baseDepositProcessorL1.address); + console.log("Transaction:", result.deployTransaction.hash); + + // If on sepolia, wait a minute for the transaction completion + if (providerName === "sepolia") { + await new Promise(r => setTimeout(r, 30000)); + } + + // Writing updated parameters back to the JSON file + parsedData.baseDepositProcessorL1Address = baseDepositProcessorL1.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --constructor-args scripts/deployment/staking/verify_07_base_deposit_processor.js --network " + providerName + " " + baseDepositProcessorL1.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/globals_mainnet.json b/scripts/deployment/staking/globals_mainnet.json index 8a20c59b..c69bd060 100644 --- a/scripts/deployment/staking/globals_mainnet.json +++ b/scripts/deployment/staking/globals_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","dispenserAddress":"","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoWormholeDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","dispenserAddress":"","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoWormholeDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":"","baseL1StandardBridgeProxyAddress":"0x3154Cf16ccdb4C6d922629664174b904d80F2C35","baseL1CrossDomainMessengerProxyAddress":"0x866E82a600A1414e583f7F13623F1aC5d58b0Afa","baseOLASAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","baseL2TargetChainId":"8453"} \ No newline at end of file diff --git a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json index f22c6d15..fb8d8d7c 100644 --- a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json +++ b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"","timelockAddress":"","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"","optimismTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"","timelockAddress":"","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"","optimismTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/optimistic/send_tokens_and_message.js b/scripts/deployment/staking/optimistic/send_tokens_and_message.js index cc8c1dc9..23433dd7 100644 --- a/scripts/deployment/staking/optimistic/send_tokens_and_message.js +++ b/scripts/deployment/staking/optimistic/send_tokens_and_message.js @@ -55,7 +55,7 @@ const main = async () => { await tx.wait(); // tx back: https://sepolia-optimism.etherscan.io/tx/0x08ff60b3ef506e0f34e5941953608fa5bec1a13d7e0a175084245aa622edf7e0 - // tx result: + // tx result: https://sepolia.etherscan.io/tx/0xcd6ad253a6f869899f25f5d69d8261dbabd1fe49d9fce69cbcd3672064bb49dc // https://docs.optimism.io/builders/app-developers/tutorials/cross-dom-solidity#interact-with-the-l2-greeter // https://github.com/t4sk/notes/tree/main/op diff --git a/scripts/deployment/staking/verify_07_base_deposit_processor.js b/scripts/deployment/staking/verify_07_base_deposit_processor.js new file mode 100644 index 00000000..c7855344 --- /dev/null +++ b/scripts/deployment/staking/verify_07_base_deposit_processor.js @@ -0,0 +1,13 @@ +const fs = require("fs"); +const globalsFile = "globals.json"; +const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +const parsedData = JSON.parse(dataFromJSON); + +module.exports = [ + parsedData.olasAddress, + parsedData.dispenserAddress, + parsedData.baseL1StandardBridgeProxyAddress, + parsedData.baseL1CrossDomainMessengerProxyAddress, + parsedData.baseL2TargetChainId, + parsedData.baseOLASAddress +]; \ No newline at end of file From 78ba6ea64e617306bb006b79d7e1828dd83599fa Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Wed, 17 Jul 2024 11:35:03 +0100 Subject: [PATCH 17/55] chore: gitleaksignore --- .gitleaksignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitleaksignore b/.gitleaksignore index 61107635..b316192c 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -146,3 +146,7 @@ b17bdd0ebae90b769b8756da81d831a70fcb4af3:scripts/deployment/globals_mainnet.json b17bdd0ebae90b769b8756da81d831a70fcb4af3:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 b17bdd0ebae90b769b8756da81d831a70fcb4af3:scripts/deployment/globals_mainnet.json:generic-api-key:2 b17bdd0ebae90b769b8756da81d831a70fcb4af3:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 +c5ba11d1b46a6fa9644c0de28b4b0f7b154156ee:scripts/deployment/globals_mainnet.json:generic-api-key:1 +c5ba11d1b46a6fa9644c0de28b4b0f7b154156ee:scripts/deployment/globals_mainnet.json:generic-api-key:2 +c5ba11d1b46a6fa9644c0de28b4b0f7b154156ee:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 +c5ba11d1b46a6fa9644c0de28b4b0f7b154156ee:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 From cfe4b8064bfda91d83bd5bdc5af44f2155859ef3 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Wed, 17 Jul 2024 11:58:37 +0100 Subject: [PATCH 18/55] chore: adding celo deployment scripts --- .gitleaksignore | 4 + .../wormhole/globals_celo_mainnet.json | 2 +- .../wormhole/{ => test}/bridge_new_token.js | 0 .../deploy_00_mock_olas_as_erc20_ownerless.js | 0 .../{ => test}/deploy_01_mock_dispenser.js | 2 +- ...eploy_05_celo_wormhole_targer_dispenser.js | 76 +++++++++++++++++++ ...y_05_polygon_wormhole_deposit_processor.js | 2 +- .../wormhole/test/globals_celo_mainnet.json | 1 + .../{ => test}/globals_polygon_mainnet.json | 0 .../{ => test}/send_tokens_and_message.js | 0 .../{ => test}/verify_01_mock_dispenser.js | 0 ...erify_05_celo_wormhole_target_dispenser.js | 14 ++++ ...y_05_polygon_wormhole_deposit_processor.js | 0 13 files changed, 98 insertions(+), 3 deletions(-) rename scripts/deployment/staking/wormhole/{ => test}/bridge_new_token.js (100%) rename scripts/deployment/staking/wormhole/{ => test}/deploy_00_mock_olas_as_erc20_ownerless.js (100%) rename scripts/deployment/staking/wormhole/{ => test}/deploy_01_mock_dispenser.js (94%) create mode 100644 scripts/deployment/staking/wormhole/test/deploy_05_celo_wormhole_targer_dispenser.js rename scripts/deployment/staking/wormhole/{ => test}/deploy_05_polygon_wormhole_deposit_processor.js (94%) create mode 100644 scripts/deployment/staking/wormhole/test/globals_celo_mainnet.json rename scripts/deployment/staking/wormhole/{ => test}/globals_polygon_mainnet.json (100%) rename scripts/deployment/staking/wormhole/{ => test}/send_tokens_and_message.js (100%) rename scripts/deployment/staking/wormhole/{ => test}/verify_01_mock_dispenser.js (100%) create mode 100644 scripts/deployment/staking/wormhole/test/verify_05_celo_wormhole_target_dispenser.js rename scripts/deployment/staking/wormhole/{ => test}/verify_05_polygon_wormhole_deposit_processor.js (100%) diff --git a/.gitleaksignore b/.gitleaksignore index b316192c..45230bca 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -150,3 +150,7 @@ c5ba11d1b46a6fa9644c0de28b4b0f7b154156ee:scripts/deployment/globals_mainnet.json c5ba11d1b46a6fa9644c0de28b4b0f7b154156ee:scripts/deployment/globals_mainnet.json:generic-api-key:2 c5ba11d1b46a6fa9644c0de28b4b0f7b154156ee:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 c5ba11d1b46a6fa9644c0de28b4b0f7b154156ee:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 +7cf3cd1c5fa705f82f0f33c90538fa6e6892af5b:scripts/deployment/globals_mainnet.json:generic-api-key:1 +7cf3cd1c5fa705f82f0f33c90538fa6e6892af5b:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 +7cf3cd1c5fa705f82f0f33c90538fa6e6892af5b:scripts/deployment/globals_mainnet.json:generic-api-key:2 +7cf3cd1c5fa705f82f0f33c90538fa6e6892af5b:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 diff --git a/scripts/deployment/staking/wormhole/globals_celo_mainnet.json b/scripts/deployment/staking/wormhole/globals_celo_mainnet.json index 2b7b0975..cbaf8205 100644 --- a/scripts/deployment/staking/wormhole/globals_celo_mainnet.json +++ b/scripts/deployment/staking/wormhole/globals_celo_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xb8B338b84cc4E16D1a73B617bfbe8f74a07270E6","serviceStakingFactoryAddress":"0x670Ac235EE13C0B2a5065282bBB0c61cfB354592","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"5","celoWormholeDepositProcessorL1Address":"0x04A0afD079F14D539B17253Ea93563934A024165","celoWormholeTargetDispenserL2Address":"0x17806E2a12d5E0F48C9803cd397DB3F044DA3b77"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"","timelockAddress":"","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"2","celoWormholeDepositProcessorL1Address":"","celoWormholeTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/wormhole/bridge_new_token.js b/scripts/deployment/staking/wormhole/test/bridge_new_token.js similarity index 100% rename from scripts/deployment/staking/wormhole/bridge_new_token.js rename to scripts/deployment/staking/wormhole/test/bridge_new_token.js diff --git a/scripts/deployment/staking/wormhole/deploy_00_mock_olas_as_erc20_ownerless.js b/scripts/deployment/staking/wormhole/test/deploy_00_mock_olas_as_erc20_ownerless.js similarity index 100% rename from scripts/deployment/staking/wormhole/deploy_00_mock_olas_as_erc20_ownerless.js rename to scripts/deployment/staking/wormhole/test/deploy_00_mock_olas_as_erc20_ownerless.js diff --git a/scripts/deployment/staking/wormhole/deploy_01_mock_dispenser.js b/scripts/deployment/staking/wormhole/test/deploy_01_mock_dispenser.js similarity index 94% rename from scripts/deployment/staking/wormhole/deploy_01_mock_dispenser.js rename to scripts/deployment/staking/wormhole/test/deploy_01_mock_dispenser.js index a035270c..a7b7d733 100644 --- a/scripts/deployment/staking/wormhole/deploy_01_mock_dispenser.js +++ b/scripts/deployment/staking/wormhole/test/deploy_01_mock_dispenser.js @@ -63,7 +63,7 @@ async function main() { // Contract verification if (parsedData.contractVerification) { const execSync = require("child_process").execSync; - execSync("npx hardhat verify --constructor-args scripts/deployment/staking/wormhole/verify_01_mock_dispenser.js --network " + providerName + " " + dispenser.address, { encoding: "utf-8" }); + execSync("npx hardhat verify --constructor-args scripts/deployment/staking/wormhole/test/verify_01_mock_dispenser.js --network " + providerName + " " + dispenser.address, { encoding: "utf-8" }); } } diff --git a/scripts/deployment/staking/wormhole/test/deploy_05_celo_wormhole_targer_dispenser.js b/scripts/deployment/staking/wormhole/test/deploy_05_celo_wormhole_targer_dispenser.js new file mode 100644 index 00000000..342a2bbd --- /dev/null +++ b/scripts/deployment/staking/wormhole/test/deploy_05_celo_wormhole_targer_dispenser.js @@ -0,0 +1,76 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + + let networkURL = parsedData.networkURL; + if (providerName === "polygon") { + if (!process.env.ALCHEMY_API_KEY_MATIC) { + console.log("set ALCHEMY_API_KEY_MATIC env variable"); + } + networkURL += process.env.ALCHEMY_API_KEY_MATIC; + } else if (providerName === "polygonAmoy") { + if (!process.env.ALCHEMY_API_KEY_AMOY) { + console.log("set ALCHEMY_API_KEY_AMOY env variable"); + return; + } + networkURL += process.env.ALCHEMY_API_KEY_AMOY; + } + + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("5. EOA to deploy WormholeTargetDispenserL2"); + const WormholeTargetDispenserL2 = await ethers.getContractFactory("WormholeTargetDispenserL2"); + console.log("You are signing the following transaction: WormholeTargetDispenserL2.connect(EOA).deploy()"); + const wormholeTargetDispenserL2 = await WormholeTargetDispenserL2.connect(EOA).deploy(parsedData.olasAddress, + parsedData.serviceStakingFactoryAddress, parsedData.wormholeL2MessageRelayer, + parsedData.celoWormholeDepositProcessorL1Address, parsedData.wormholel1ChainId, + parsedData.wormholeL2CoreAddress, parsedData.wormholeL2TokenRelayerAddress); + const result = await wormholeTargetDispenserL2.deployed(); + + // Transaction details + console.log("Contract deployment: WormholeTargetDispenserL2"); + console.log("Contract address:", wormholeTargetDispenserL2.address); + console.log("Transaction:", result.deployTransaction.hash); + + // Wait for half a minute for the transaction completion + await new Promise(r => setTimeout(r, 30000)); + + // Writing updated parameters back to the JSON file + parsedData.celoWormholeTargetDispenserL2Address = wormholeTargetDispenserL2.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --constructor-args scripts/deployment/staking/wormhole/test/verify_05_celo_wormhole_target_dispenser.js --network " + providerName + " " + wormholeTargetDispenserL2.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/wormhole/deploy_05_polygon_wormhole_deposit_processor.js b/scripts/deployment/staking/wormhole/test/deploy_05_polygon_wormhole_deposit_processor.js similarity index 94% rename from scripts/deployment/staking/wormhole/deploy_05_polygon_wormhole_deposit_processor.js rename to scripts/deployment/staking/wormhole/test/deploy_05_polygon_wormhole_deposit_processor.js index 3b2cc674..b3f41be9 100644 --- a/scripts/deployment/staking/wormhole/deploy_05_polygon_wormhole_deposit_processor.js +++ b/scripts/deployment/staking/wormhole/test/deploy_05_polygon_wormhole_deposit_processor.js @@ -64,7 +64,7 @@ async function main() { // Contract verification if (parsedData.contractVerification) { const execSync = require("child_process").execSync; - execSync("npx hardhat verify --constructor-args scripts/deployment/staking/wormhole/verify_05_polygon_wormhole_deposit_processor.js --network " + providerName + " " + wormholeDepositProcessorL1.address, { encoding: "utf-8" }); + execSync("npx hardhat verify --constructor-args scripts/deployment/staking/wormhole/test/verify_05_polygon_wormhole_deposit_processor.js --network " + providerName + " " + wormholeDepositProcessorL1.address, { encoding: "utf-8" }); } } diff --git a/scripts/deployment/staking/wormhole/test/globals_celo_mainnet.json b/scripts/deployment/staking/wormhole/test/globals_celo_mainnet.json new file mode 100644 index 00000000..2b7b0975 --- /dev/null +++ b/scripts/deployment/staking/wormhole/test/globals_celo_mainnet.json @@ -0,0 +1 @@ +{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xb8B338b84cc4E16D1a73B617bfbe8f74a07270E6","serviceStakingFactoryAddress":"0x670Ac235EE13C0B2a5065282bBB0c61cfB354592","timelockAddress":"0x52370eE170c0E2767B32687166791973a0dE7966","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"5","celoWormholeDepositProcessorL1Address":"0x04A0afD079F14D539B17253Ea93563934A024165","celoWormholeTargetDispenserL2Address":"0x17806E2a12d5E0F48C9803cd397DB3F044DA3b77"} \ No newline at end of file diff --git a/scripts/deployment/staking/wormhole/globals_polygon_mainnet.json b/scripts/deployment/staking/wormhole/test/globals_polygon_mainnet.json similarity index 100% rename from scripts/deployment/staking/wormhole/globals_polygon_mainnet.json rename to scripts/deployment/staking/wormhole/test/globals_polygon_mainnet.json diff --git a/scripts/deployment/staking/wormhole/send_tokens_and_message.js b/scripts/deployment/staking/wormhole/test/send_tokens_and_message.js similarity index 100% rename from scripts/deployment/staking/wormhole/send_tokens_and_message.js rename to scripts/deployment/staking/wormhole/test/send_tokens_and_message.js diff --git a/scripts/deployment/staking/wormhole/verify_01_mock_dispenser.js b/scripts/deployment/staking/wormhole/test/verify_01_mock_dispenser.js similarity index 100% rename from scripts/deployment/staking/wormhole/verify_01_mock_dispenser.js rename to scripts/deployment/staking/wormhole/test/verify_01_mock_dispenser.js diff --git a/scripts/deployment/staking/wormhole/test/verify_05_celo_wormhole_target_dispenser.js b/scripts/deployment/staking/wormhole/test/verify_05_celo_wormhole_target_dispenser.js new file mode 100644 index 00000000..3028f790 --- /dev/null +++ b/scripts/deployment/staking/wormhole/test/verify_05_celo_wormhole_target_dispenser.js @@ -0,0 +1,14 @@ +const fs = require("fs"); +const globalsFile = "globals.json"; +const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +const parsedData = JSON.parse(dataFromJSON); + +module.exports = [ + parsedData.olasAddress, + parsedData.serviceStakingFactoryAddress, + parsedData.wormholeL2MessageRelayer, + parsedData.celoWormholeDepositProcessorL1Address, + parsedData.wormholel1ChainId, + parsedData.wormholeL2CoreAddress, + parsedData.wormholeL2TokenRelayerAddress +]; \ No newline at end of file diff --git a/scripts/deployment/staking/wormhole/verify_05_polygon_wormhole_deposit_processor.js b/scripts/deployment/staking/wormhole/test/verify_05_polygon_wormhole_deposit_processor.js similarity index 100% rename from scripts/deployment/staking/wormhole/verify_05_polygon_wormhole_deposit_processor.js rename to scripts/deployment/staking/wormhole/test/verify_05_polygon_wormhole_deposit_processor.js From 3781d38a34005f64e6a3efeb51ff87eb96a49ebb Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Wed, 17 Jul 2024 12:01:28 +0100 Subject: [PATCH 19/55] chore: gitleaksignore --- .gitleaksignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitleaksignore b/.gitleaksignore index 45230bca..eb52c9bb 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -154,3 +154,7 @@ c5ba11d1b46a6fa9644c0de28b4b0f7b154156ee:scripts/deployment/staking/globals_main 7cf3cd1c5fa705f82f0f33c90538fa6e6892af5b:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 7cf3cd1c5fa705f82f0f33c90538fa6e6892af5b:scripts/deployment/globals_mainnet.json:generic-api-key:2 7cf3cd1c5fa705f82f0f33c90538fa6e6892af5b:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 +38ff93e8e51ef86b6c46872b12e27f67152ec07a:scripts/deployment/staking/wormhole/test/globals_celo_mainnet.json:generic-api-key:1 +38ff93e8e51ef86b6c46872b12e27f67152ec07a:scripts/deployment/staking/wormhole/test/globals_celo_mainnet.json:generic-api-key:2 +38ff93e8e51ef86b6c46872b12e27f67152ec07a:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:1 +38ff93e8e51ef86b6c46872b12e27f67152ec07a:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:2 From b4397875b705404524b2d13aabfa9e4307ff9adc Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Wed, 17 Jul 2024 12:03:36 +0100 Subject: [PATCH 20/55] chore: gitleaksignore --- .gitleaksignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitleaksignore b/.gitleaksignore index eb52c9bb..57793f77 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -158,3 +158,7 @@ c5ba11d1b46a6fa9644c0de28b4b0f7b154156ee:scripts/deployment/staking/globals_main 38ff93e8e51ef86b6c46872b12e27f67152ec07a:scripts/deployment/staking/wormhole/test/globals_celo_mainnet.json:generic-api-key:2 38ff93e8e51ef86b6c46872b12e27f67152ec07a:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:1 38ff93e8e51ef86b6c46872b12e27f67152ec07a:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:2 +cfe4b8064bfda91d83bd5bdc5af44f2155859ef3:scripts/deployment/staking/wormhole/test/globals_celo_mainnet.json:generic-api-key:1 +cfe4b8064bfda91d83bd5bdc5af44f2155859ef3:scripts/deployment/staking/wormhole/test/globals_celo_mainnet.json:generic-api-key:2 +cfe4b8064bfda91d83bd5bdc5af44f2155859ef3:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:1 +cfe4b8064bfda91d83bd5bdc5af44f2155859ef3:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:2 From a65ea20709c4be990ad9074e0a99e7f5b22dd460 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Thu, 18 Jul 2024 17:09:50 +0100 Subject: [PATCH 21/55] chore: adding staking claiming events info --- contracts/Dispenser.sol | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/contracts/Dispenser.sol b/contracts/Dispenser.sol index 0b81d42f..b882b12f 100644 --- a/contracts/Dispenser.sol +++ b/contracts/Dispenser.sol @@ -268,8 +268,11 @@ contract Dispenser { event VoteWeightingUpdated(address indexed voteWeighting); event StakingParamsUpdated(uint256 maxNumClaimingEpochs, uint256 maxNumStakingTargets); event IncentivesClaimed(address indexed owner, uint256 reward, uint256 topUp); - event StakingIncentivesClaimed(address indexed account, uint256 stakingIncentive, uint256 transferAmount, - uint256 returnAmount); + event StakingIncentivesClaimed(address indexed account, uint256 chainId, bytes32 stakingTarget, + uint256 stakingIncentive, uint256 transferAmount, uint256 returnAmount); + event StakingIncentivesBatchClaimed(address indexed account, uint256[] chainIds, bytes32[][] stakingTargets, + uint256[][] stakingIncentives, uint256 totalStakingIncentive, uint256 totalTransferAmount, + uint256 totalReturnAmount); event Retained(address indexed account, uint256 returnAmount); event SetDepositProcessorChainIds(address[] depositProcessors, uint256[] chainIds); event WithheldAmountSynced(uint256 chainId, uint256 amount, uint256 updatedWithheldAmount, bytes32 indexed batchHash); @@ -1114,7 +1117,7 @@ contract Dispenser { _distributeStakingIncentives(chainId, stakingTarget, stakingIncentive, bridgePayload, transferAmount); } - emit StakingIncentivesClaimed(msg.sender, stakingIncentive, transferAmount, returnAmount); + emit StakingIncentivesClaimed(msg.sender, chainId, stakingTarget, stakingIncentive, transferAmount, returnAmount); _locked = 1; } @@ -1193,7 +1196,8 @@ contract Dispenser { valueAmounts); } - emit StakingIncentivesClaimed(msg.sender, totalAmounts[0], totalAmounts[1], totalAmounts[2]); + emit StakingIncentivesBatchClaimed(msg.sender, chainIds, stakingTargets, stakingIncentives, totalAmounts[0], + totalAmounts[1], totalAmounts[2]); _locked = 1; } From 184fb9d03c3cf1e6a37c3346ad8921a18adcb174 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 19 Jul 2024 09:58:29 +0100 Subject: [PATCH 22/55] chore: adding unit types and ids into dev incentives event --- contracts/Dispenser.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/Dispenser.sol b/contracts/Dispenser.sol index b882b12f..8d869a2f 100644 --- a/contracts/Dispenser.sol +++ b/contracts/Dispenser.sol @@ -267,7 +267,7 @@ contract Dispenser { event TreasuryUpdated(address indexed treasury); event VoteWeightingUpdated(address indexed voteWeighting); event StakingParamsUpdated(uint256 maxNumClaimingEpochs, uint256 maxNumStakingTargets); - event IncentivesClaimed(address indexed owner, uint256 reward, uint256 topUp); + event IncentivesClaimed(address indexed owner, uint256 reward, uint256 topUp, uint256[] unitTypes, uint256[] unitIds); event StakingIncentivesClaimed(address indexed account, uint256 chainId, bytes32 stakingTarget, uint256 stakingIncentive, uint256 transferAmount, uint256 returnAmount); event StakingIncentivesBatchClaimed(address indexed account, uint256[] chainIds, bytes32[][] stakingTargets, @@ -877,7 +877,7 @@ contract Dispenser { revert ClaimIncentivesFailed(msg.sender, reward, topUp); } - emit IncentivesClaimed(msg.sender, reward, topUp); + emit IncentivesClaimed(msg.sender, reward, topUp, unitTypes, unitIds); _locked = 1; } From 5ee1475f095b532d91c3a5b9849a357bd50a90cc Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 19 Jul 2024 13:44:38 +0100 Subject: [PATCH 23/55] chore: updating ABI and scripts --- abis/0.8.25/Dispenser.json | 77 ++++++++++++++++++++++++- scripts/deployment/globals_mainnet.json | 2 +- 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/abis/0.8.25/Dispenser.json b/abis/0.8.25/Dispenser.json index 75d8495f..475842a3 100644 --- a/abis/0.8.25/Dispenser.json +++ b/abis/0.8.25/Dispenser.json @@ -246,6 +246,18 @@ "internalType": "uint256", "name": "topUp", "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "unitTypes", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "unitIds", + "type": "uint256[]" } ], "name": "IncentivesClaimed", @@ -337,6 +349,67 @@ "name": "account", "type": "address" }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "chainIds", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "bytes32[][]", + "name": "stakingTargets", + "type": "bytes32[][]" + }, + { + "indexed": false, + "internalType": "uint256[][]", + "name": "stakingIncentives", + "type": "uint256[][]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalStakingIncentive", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalTransferAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalReturnAmount", + "type": "uint256" + } + ], + "name": "StakingIncentivesBatchClaimed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "chainId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "stakingTarget", + "type": "bytes32" + }, { "indexed": false, "internalType": "uint256", @@ -1016,8 +1089,8 @@ "type": "function" } ], - "bytecode": "0x610120604052348015610010575f80fd5b50604051614b5f380380614b5f83398101604081905261002f91610226565b6002805460ff60a01b1933166001600160a81b031990911617600160a01b1760ff60a81b1916600160a91b1790556001600160a01b038916158061007a57506001600160a01b038816155b8061008c57506001600160a01b038716155b8061009e57506001600160a01b038616155b806100a7575084155b156100c55760405163d92e233d60e01b815260040160405180910390fd5b8315806100d0575082155b806100d9575081155b806100e2575080155b1561010057604051637c946ed760e01b815260040160405180910390fd5b61ffff82111561013357604051637ae5968560e01b81526004810183905261ffff60248201526044015b60405180910390fd5b6001600160601b0381111561016b57604051637ae5968560e01b8152600481018290526001600160601b03602482015260440161012a565b6001600160a01b0398891660c05260038054988a166001600160a01b0319998a1617905560048054978a16978916979097179096556005805495909816949096169390931790955560e0819052604080518082018252828152466020918201908152825180830194909452518383015281518084038301815260609093019091528151910120610100525f9390935560019290925560805260a0526102a5565b80516001600160a01b0381168114610221575f80fd5b919050565b5f805f805f805f805f6101208a8c03121561023f575f80fd5b6102488a61020b565b985061025660208b0161020b565b975061026460408b0161020b565b965061027260608b0161020b565b955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b60805160a05160c05160e051610100516147f161036e5f395f81816103450152818161141401528181611d1f0152611dc601525f818161067101528181611447015281816116c5015281816116f901528181611d5601528181611ef0015281816131e1015261324701525f81816101ef015281816109c201528181610ac901528181610e4901528181610f98015281816126f60152818161280301528181612b37015261359f01525f818161063e01526118ce01525f818161029c015261189a01526147f15ff3fe6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c94565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c94565b60066020525f908152604090205481565b61030a610305366004613d5c565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613ebc565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a036600461403c565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614079565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b36600461409f565b611312565b34801561041b575f80fd5b5061030a61042a366004613c94565b6113d1565b34801561043a575f80fd5b5061044e6104493660046140c4565b61167e565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a61048836600461403c565b611bc3565b348015610498575f80fd5b506102be6104a7366004613c94565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611cd2565b34801561050a575f80fd5b5061030a610519366004613c94565b612074565b348015610529575f80fd5b5061030a61053836600461410e565b612240565b348015610548575f80fd5b506102be610557366004613c94565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a610582366004614127565b6122fd565b348015610592575f80fd5b5061030a6105a1366004614147565b6123ad565b3480156105b1575f80fd5b506105c56105c0366004614187565b61251b565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f43660046141e7565b61294c565b348015610604575f80fd5b50610211610613366004613c94565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612aaf565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614065565b148061079b5750600381600381111561079957610799614065565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b919061429a565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf91906142b3565b90505f805f806108d18c8c8c8861167e565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a82826142de565b90505f9150610994565b61098e81836142de565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3391906142b3565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab191906142f7565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a91906142b3565b610b4491906142de565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612adb565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612cd9565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614065565b1480610c9f57506003816003811115610c9d57610c9d614065565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f919061429a565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612fd7565b825192955090935091505f9084906002908110610d6357610d63614316565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b614316565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e02614316565b60200260200101511115611086575f83600181518110610e2457610e24614316565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba91906142b3565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee9614316565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906142f7565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100991906142b3565b61101391906142de565b90508360018151811061102857611028614316565b6020026020010151811461107657808460018151811061104a5761104a614316565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b613531565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c3614316565b6020026020010151856001815181106110de576110de614316565b6020026020010151866002815181106110f9576110f9614316565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f690849061432a565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614065565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c69190614079565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061433d565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d6115206001856142de565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d91906142b3565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f4919061433d565b63ffffffff1690505f62093a8061160b838561432a565b61161591906142de565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5f858152600760205260408082208690555186917f5a6a4aed2babbf3fe4cddce74151568eaac96f250cf910532f6528b1f6ee13d891a25050505050565b5f805f80865f036116a257604051637c946ed760e01b815260040160405180910390fd5b5f8690036116c35760405163d92e233d60e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000860361172557604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f611769828a613b47565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b1580156117b9575f80fd5b505af11580156117cb573d5f803e3d5ffd5b5083925050505b83811015611bb6575f818152600a602052604090205460ff16611bae57600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611836573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185a919061437b565b606081015190915060ff16156118f957604081015161ffff16158015611890575060208101516bffffffffffffffffffffffff16155b156118f45761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118ff565b50611bae565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa158015611946573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196a91906142b3565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa1580156119c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e791906143fe565b91509150805f03611a2f575f858152600a60205260409020805460ff191660011790558351611a24906bffffffffffffffffffffffff168a61432a565b985050505050611bae565b83515f9081906bffffffffffffffffffffffff168184821115611a5c57611a5685836142de565b90508491505b6040880151611a759061ffff16655af3107a4000614420565b861015611aab57670de0b6b3a764000086611a90848461432a565b611a9a9190614420565b611aa4919061444b565b9250611b99565b670de0b6b3a7640000611abe8784614420565b611ac8919061444b565b9350670de0b6b3a7640000611add8783614420565b611ae7919061444b565b925087602001516bffffffffffffffffffffffff16915081841115611b2057611b1082856142de565b611b1a908461432a565b92508193505b60128f1015611b8c575f8f6012611b3791906142de565b611b4290600a61453e565b611b4c908661444b565b90508f6012611b5b91906142de565b611b6690600a61453e565b611b709082614420565b9050611b7c81866142de565b611b86908561432a565b90945092505b611b96848f61432a565b9d505b611ba3838e61432a565b9c5050505050505050505b6001016117d2565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611c24576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c3d90859061432a565b90506bffffffffffffffffffffffff811115611c8157604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611d01576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d44907f000000000000000000000000000000000000000000000000000000000000000090613b47565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611db0575f80fd5b505af1158015611dc2573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611fb257600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e6e919061437b565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611eba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ede91906142b3565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7991906143fe565b508351909150611f989082906bffffffffffffffffffffffff16614420565b611fa2908661432a565b9450505050806001019050611dfb565b50611fc5670de0b6b3a76400008261444b565b9050801561202757600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015612010575f80fd5b505af1158015612022573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b031633146120b45760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120d5576120d5614065565b14806120f2575060038160038111156120f0576120f0614065565b145b8061216957506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561213e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612162919061429a565b60ff166002145b15612187576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fb919061433d565b5f8381526006602052604080822063ffffffff93909316909255905183917f5381b67b592d2dc84b61238222ab88ee04db3b3a082894a445c4e5cfa8ba11be91a25050565b6002546001600160a01b031633146122805760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122a75760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b0316331461233d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b811580612348575080155b1561236657604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b031633146123ed5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b03831615612450576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b038216156124b3576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b03811615612516576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff161115612551576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561258557612585614065565b14806125a2575060038160038111156125a0576125a0614065565b145b8061261957506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156125ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612612919061429a565b60ff166002145b15612637576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061268490339089908990600401614583565b60408051808303815f875af115801561269f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c391906143fe565b90935091505f806126d4848661432a565b11156128ac575f831561276a576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612743573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276791906142b3565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af11580156127c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e491906142f7565b915083156128aa576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612850573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287491906142b3565b61287e91906142de565b90508381146128aa5760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128f3576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b0316331461298c5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061299c57508051825114155b156129c757815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a7d578181815181106129e4576129e4614316565b60200260200101515f03612a0b57604051637c946ed760e01b815260040160405180910390fd5b828181518110612a1d57612a1d614316565b602002602001015160085f848481518110612a3a57612a3a614316565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060010190506129c9565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa582826040516123a19291906145f8565b6024612ac4600267ffffffffffffffff614625565b612ace919061464b565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612ba3576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba191906142f7565b505b6024612bb8600267ffffffffffffffff614625565b612bc2919061464b565b67ffffffffffffffff168611612c55576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612c219085908a908a908a906004016146a1565b5f604051808303818588803b158015612c38575f80fd5b505af1158015612c4a573d5f803e3d5ffd5b505050505050612cd1565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612ca29089908990899089906004016146d9565b5f604051808303818588803b158015612cb9575f80fd5b505af1158015612ccb573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612d0857835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612d3757835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d6657835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612fad57868181518110612d8557612d85614316565b60200260200101518310612dc957868181518110612da557612da5614316565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612ddb57612ddb614316565b60200260200101519250858181518110612df757612df7614316565b6020026020010151515f03612e1f57604051637c946ed760e01b815260040160405180910390fd5b838181518110612e3157612e31614316565b602002602001015182612e44919061432a565b91505f600154905080878381518110612e5f57612e5f614316565b6020026020010151511115612eae57868281518110612e8057612e80614316565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612ec357612ec3614316565b602002602001015151811015612f9f57888481518110612ee557612ee5614316565b60200260200101518181518110612efe57612efe614316565b60200260200101515f1c825f1c10612f5f57888481518110612f2257612f22614316565b60200260200101518181518110612f3b57612f3b614316565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f7157612f71614316565b60200260200101518181518110612f8a57612f8a614316565b60200260200101519150806001019050612eb1565b505050806001019050612d6a565b50803414612cd15760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff81111561301757613017613cab565b60405190808252806020026020018201604052801561304a57816020015b60608152602001906001900390816130355790505b509150845167ffffffffffffffff81111561306757613067613cab565b604051908082528060200260200182016040528015613090578160200160208202803683370190505b5090505f5b8551811015613527575f60085f8884815181106130b4576130b4614316565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561311b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061313f91906142b3565b905086838151811061315357613153614316565b60200260200101515167ffffffffffffffff81111561317457613174613cab565b60405190808252806020026020018201604052801561319d578160200160208202803683370190505b508584815181106131b0576131b0614316565b60200260200101819052505f5b8784815181106131cf576131cf614316565b6020026020010151518110156133b6577f000000000000000000000000000000000000000000000000000000000000000088858151811061321257613212614316565b6020026020010151828151811061322b5761322b614316565b60200260200101510361327357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f806132ce8e8e8a8151811061328d5761328d614316565b60200260200101518e8b815181106132a7576132a7614316565b602002602001015188815181106132c0576132c0614316565b60200260200101518961167e565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132fe576132fe614316565b6020026020010151868151811061331757613317614316565b6020026020010181815250508389898151811061333657613336614316565b6020026020010181815161334a919061432a565b9052508a5184908c905f9061336157613361614316565b60200260200101818151613375919061432a565b9052508a5183908c90600290811061338f5761338f614316565b602002602001018181516133a3919061432a565b90525050600190930192506131bd915050565b505f8484815181106133ca576133ca614316565b602002602001015111156134d9575f60095f8a86815181106133ee576133ee614316565b602002602001015181526020019081526020015f205490505f8111156134d75784848151811061342057613420614316565b602002602001015181106134795784848151811061344057613440614316565b60200260200101518161345391906142de565b90505f85858151811061346857613468614316565b6020026020010181815250506134a7565b8085858151811061348c5761348c614316565b602002602001018181516134a091906142de565b9052505f90505b8060095f8b87815181106134bd576134bd614316565b602002602001015181526020019081526020015f20819055505b505b8383815181106134eb576134eb614316565b60200260200101518660018151811061350657613506614316565b6020026020010181815161351a919061432a565b9052505050600101613095565b5093509350939050565b5f5b8651811015613b3e575f60085f89848151811061355257613552614316565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061358f5761358f614316565b6020026020010151111561365a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb828685815181106135df576135df614316565b60200260200101516040518363ffffffff1660e01b81526004016136189291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af1158015613634573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061365891906142f7565b505b5f8088848151811061366e5761366e614316565b60200260200101515167ffffffffffffffff81111561368f5761368f613cab565b6040519080825280602002602001820160405280156136b8578160200160208202803683370190505b5090505f5b8985815181106136cf576136cf614316565b602002602001015151811015613751575f8986815181106136f2576136f2614316565b6020026020010151828151811061370b5761370b614316565b6020026020010151111561374957600182828151811061372d5761372d614316565b91151560209283029190910190910152613746836146f7565b92505b6001016136bd565b50815f0361376157505050613b36565b5f8267ffffffffffffffff81111561377b5761377b613cab565b6040519080825280602002602001820160405280156137a4578160200160208202803683370190505b5090505f8367ffffffffffffffff8111156137c1576137c1613cab565b6040519080825280602002602001820160405280156137ea578160200160208202803683370190505b5090505f805b8c888151811061380257613802614316565b6020026020010151518110156138e65784818151811061382457613824614316565b6020026020010151156138de578c888151811061384357613843614316565b6020026020010151818151811061385c5761385c614316565b602002602001015184838151811061387657613876614316565b6020026020010181815250508b888151811061389457613894614316565b602002602001015181815181106138ad576138ad614316565b60200260200101518383815181106138c7576138c7614316565b60209081029190910101526138db826146f7565b91505b6001016137f0565b5060246138fc600267ffffffffffffffff614625565b613906919061464b565b67ffffffffffffffff168d888151811061392257613922614316565b602002602001015111613a82575f835167ffffffffffffffff81111561394a5761394a613cab565b604051908082528060200260200182016040528015613973578160200160208202803683370190505b5090505f5b84518110156139cf5784818151811061399357613993614316565b60200260200101515f1c8282815181106139af576139af614316565b6001600160a01b0390921660209283029190910190910152600101613978565b50866001600160a01b031663bde526618a8a815181106139f1576139f1614316565b602002602001015183868f8d81518110613a0d57613a0d614316565b60200260200101518f8e81518110613a2757613a27614316565b60200260200101516040518663ffffffff1660e01b8152600401613a4e949392919061470f565b5f604051808303818588803b158015613a65575f80fd5b505af1158015613a77573d5f803e3d5ffd5b505050505050613b2f565b856001600160a01b03166355442b59898981518110613aa357613aa3614316565b602002602001015185858e8c81518110613abf57613abf614316565b60200260200101518e8d81518110613ad957613ad9614316565b60200260200101516040518663ffffffff1660e01b8152600401613b009493929190614759565b5f604051808303818588803b158015613b17575f80fd5b505af1158015613b29573d5f803e3d5ffd5b50505050505b5050505050505b600101613533565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bbe919061433d565b5f86815260066020526040812054945063ffffffff919091169150839003613bf957604051637c946ed760e01b815260040160405180910390fd5b808303613c2e5782613c0c6001836142de565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f858152600760205260409020548015801590613c4b5750808410155b15613c5c5783613c0c6001836142de565b613c66858561432a565b92505f81118015613c7657508083115b15613c7f578092505b81831115613c8b578192505b50509250929050565b5f60208284031215613ca4575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ce857613ce8613cab565b604052919050565b5f82601f830112613cff575f80fd5b813567ffffffffffffffff811115613d1957613d19613cab565b613d2c601f8201601f1916602001613cbf565b818152846020838601011115613d40575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d6f575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d9a575f80fd5b613da687828801613cf0565b91505092959194509250565b5f67ffffffffffffffff821115613dcb57613dcb613cab565b5060051b60200190565b5f82601f830112613de4575f80fd5b81356020613df9613df483613db2565b613cbf565b8083825260208201915060208460051b870101935086841115613e1a575f80fd5b602086015b84811015613e365780358352918301918301613e1f565b509695505050505050565b5f82601f830112613e50575f80fd5b81356020613e60613df483613db2565b82815260059290921b84018101918181019086841115613e7e575f80fd5b8286015b84811015613e3657803567ffffffffffffffff811115613ea0575f80fd5b613eae8986838b0101613cf0565b845250918301918301613e82565b5f805f805f60a08688031215613ed0575f80fd5b8535945067ffffffffffffffff8060208801351115613eed575f80fd5b613efd8860208901358901613dd5565b94508060408801351115613f0f575f80fd5b6040870135870188601f820112613f24575f80fd5b613f31613df48235613db2565b81358082526020808301929160051b8401018b1015613f4e575f80fd5b602083015b6020843560051b850101811015613fe8578481351115613f71575f80fd5b803584018c603f820112613f83575f80fd5b613f93613df46020830135613db2565b602082810135808352908201919060051b83016040018f811115613fb5575f80fd5b6040840193505b80841015613fd7578335835260209384019390920191613fbc565b508552505060209283019201613f53565b50955050506060870135811015613ffd575f80fd5b61400d8860608901358901613e41565b9250806080880135111561401f575f80fd5b506140308760808801358801613dd5565b90509295509295909350565b5f805f6060848603121561404e575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061409957634e487b7160e01b5f52602160045260245ffd5b91905290565b5f602082840312156140af575f80fd5b8135600481106140bd575f80fd5b9392505050565b5f805f80608085870312156140d7575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b0381168114614109575f80fd5b919050565b5f6020828403121561411e575f80fd5b6140bd826140f3565b5f8060408385031215614138575f80fd5b50508035926020909101359150565b5f805f60608486031215614159575f80fd5b614162846140f3565b9250614170602085016140f3565b915061417e604085016140f3565b90509250925092565b5f8060408385031215614198575f80fd5b823567ffffffffffffffff808211156141af575f80fd5b6141bb86838701613dd5565b935060208501359150808211156141d0575f80fd5b506141dd85828601613dd5565b9150509250929050565b5f80604083850312156141f8575f80fd5b823567ffffffffffffffff8082111561420f575f80fd5b818501915085601f830112614222575f80fd5b81356020614232613df483613db2565b82815260059290921b84018101918181019089841115614250575f80fd5b948201945b8386101561427557614266866140f3565b82529482019490820190614255565b965050860135925050808211156141d0575f80fd5b805160ff81168114614109575f80fd5b5f602082840312156142aa575f80fd5b6140bd8261428a565b5f602082840312156142c3575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142f1576142f16142ca565b92915050565b5f60208284031215614307575f80fd5b815180151581146140bd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142f1576142f16142ca565b5f6020828403121561434d575f80fd5b815163ffffffff811681146140bd575f80fd5b80516bffffffffffffffffffffffff81168114614109575f80fd5b5f6080828403121561438b575f80fd5b6040516080810181811067ffffffffffffffff821117156143ae576143ae613cab565b6040526143ba83614360565b81526143c860208401614360565b6020820152604083015161ffff811681146143e1575f80fd5b60408201526143f26060840161428a565b60608201529392505050565b5f806040838503121561440f575f80fd5b505080516020909101519092909150565b80820281158282048414176142f1576142f16142ca565b634e487b7160e01b5f52601260045260245ffd5b5f8261445957614459614437565b500490565b600181815b8085111561449857815f190482111561447e5761447e6142ca565b8085161561448b57918102915b93841c9390800290614463565b509250929050565b5f826144ae575060016142f1565b816144ba57505f6142f1565b81600181146144d057600281146144da576144f6565b60019150506142f1565b60ff8411156144eb576144eb6142ca565b50506001821b6142f1565b5060208310610133831016604e8410600b8410161715614519575081810a6142f1565b614523838361445e565b805f1904821115614536576145366142ca565b029392505050565b5f6140bd83836144a0565b5f815180845260208085019450602084015f5b838110156145785781518752958201959082019060010161455c565b509495945050505050565b6001600160a01b0384168152606060208201525f6145a46060830185614549565b82810360408401526145b68185614549565b9695505050505050565b5f815180845260208085019450602084015f5b838110156145785781516001600160a01b0316875295820195908201906001016145d3565b604081525f61460a60408301856145c0565b828103602084015261461c8185614549565b95945050505050565b5f67ffffffffffffffff8084168061463f5761463f614437565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561466c5761466c6142ca565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6146c86080830185614673565b905082606083015295945050505050565b848152836020820152608060408201525f6146c86080830185614673565b5f60018201614708576147086142ca565b5060010190565b608081525f61472160808301876145c0565b82810360208401526147338187614549565b905082810360408401526147478186614673565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561479157815184529284019290840190600101614775565b50505083810360208501526147a68188614549565b9150508281036040840152614747818661467356fea2646970667358221220b18c141dc1e94417f54aae9a954aa4f42c6750fda4ac2cdf8f46139f4df5a59f64736f6c63430008190033", - "deployedBytecode": "0x6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613c94565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613c94565b60066020525f908152604090205481565b61030a610305366004613d5c565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613ebc565b610be6565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a036600461403c565b611148565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614079565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b36600461409f565b611312565b34801561041b575f80fd5b5061030a61042a366004613c94565b6113d1565b34801561043a575f80fd5b5061044e6104493660046140c4565b61167e565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a61048836600461403c565b611bc3565b348015610498575f80fd5b506102be6104a7366004613c94565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611cd2565b34801561050a575f80fd5b5061030a610519366004613c94565b612074565b348015610529575f80fd5b5061030a61053836600461410e565b612240565b348015610548575f80fd5b506102be610557366004613c94565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a610582366004614127565b6122fd565b348015610592575f80fd5b5061030a6105a1366004614147565b6123ad565b3480156105b1575f80fd5b506105c56105c0366004614187565b61251b565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f43660046141e7565b61294c565b348015610604575f80fd5b50610211610613366004613c94565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612aaf565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614065565b148061079b5750600381600381111561079957610799614065565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b919061429a565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf91906142b3565b90505f805f806108d18c8c8c8861167e565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a82826142de565b90505f9150610994565b61098e81836142de565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3391906142b3565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab191906142f7565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a91906142b3565b610b4491906142de565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612adb565b505b604080518681526020810183905290810185905233907f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f2809060600160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c15576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c3484848484612cd9565b5f5480861115610c6157604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c8257610c82614065565b1480610c9f57506003816003811115610c9d57610c9d614065565b145b80610d1657506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610ceb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0f919061429a565b60ff166002145b15610d34576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d448a8a8a612fd7565b825192955090935091505f9084906002908110610d6357610d63614316565b60200260200101511115610def5760035483516001600160a01b039091169063bc291e129085906002908110610d9b57610d9b614316565b60200260200101516040518263ffffffff1660e01b8152600401610dc191815260200190565b5f604051808303815f87803b158015610dd8575f80fd5b505af1158015610dea573d5f803e3d5ffd5b505050505b5f835f81518110610e0257610e02614316565b60200260200101511115611086575f83600181518110610e2457610e24614316565b60200260200101511115611078576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eba91906142b3565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ee957610ee9614316565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8091906142f7565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fe5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100991906142b3565b61101391906142de565b90508360018151811061102857611028614316565b6020026020010151811461107657808460018151811061104a5761104a614316565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110868989848a858b613531565b336001600160a01b03167f02b21954a7bf2d6a171db9a87b430a3723605c554db00adcb95b26ce8464f280845f815181106110c3576110c3614316565b6020026020010151856001815181106110de576110de614316565b6020026020010151866002815181106110f9576110f9614316565b6020026020010151604051611121939291909283526020830191909152604082015260600190565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b031633146111885760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611193575081155b8061119c575080155b156111ba57604051637c946ed760e01b815260040160405180910390fd5b4683036111dd57604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f690849061432a565b90506bffffffffffffffffffffffff81111561123a57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b1575f80fd5b505af11580156112c3573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113525760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139257611392614065565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c69190614079565b60405180910390a150565b6005546001600160a01b031633146114115760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061433d565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d6115206001856142de565b6040518263ffffffff1660e01b815260040161153e91815260200190565b602060405180830381865afa158015611559573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061157d91906142b3565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f4919061433d565b63ffffffff1690505f62093a8061160b838561432a565b61161591906142de565b905080421061164057604051637ae5968560e01b815242600482015260248101829052604401610754565b5f858152600760205260408082208690555186917f5a6a4aed2babbf3fe4cddce74151568eaac96f250cf910532f6528b1f6ee13d891a25050505050565b5f805f80865f036116a257604051637c946ed760e01b815260040160405180910390fd5b5f8690036116c35760405163d92e233d60e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000860361172557604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f611769828a613b47565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b1580156117b9575f80fd5b505af11580156117cb573d5f803e3d5ffd5b5083925050505b83811015611bb6575f818152600a602052604090205460ff16611bae57600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611836573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185a919061437b565b606081015190915060ff16156118f957604081015161ffff16158015611890575060208101516bffffffffffffffffffffffff16155b156118f45761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b6118ff565b50611bae565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa158015611946573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196a91906142b3565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa1580156119c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e791906143fe565b91509150805f03611a2f575f858152600a60205260409020805460ff191660011790558351611a24906bffffffffffffffffffffffff168a61432a565b985050505050611bae565b83515f9081906bffffffffffffffffffffffff168184821115611a5c57611a5685836142de565b90508491505b6040880151611a759061ffff16655af3107a4000614420565b861015611aab57670de0b6b3a764000086611a90848461432a565b611a9a9190614420565b611aa4919061444b565b9250611b99565b670de0b6b3a7640000611abe8784614420565b611ac8919061444b565b9350670de0b6b3a7640000611add8783614420565b611ae7919061444b565b925087602001516bffffffffffffffffffffffff16915081841115611b2057611b1082856142de565b611b1a908461432a565b92508193505b60128f1015611b8c575f8f6012611b3791906142de565b611b4290600a61453e565b611b4c908661444b565b90508f6012611b5b91906142de565b611b6690600a61453e565b611b709082614420565b9050611b7c81866142de565b611b86908561432a565b90945092505b611b96848f61432a565b9d505b611ba3838e61432a565b9c5050505050505050505b6001016117d2565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611c24576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c3d90859061432a565b90506bffffffffffffffffffffffff811115611c8157604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611303565b6002546001600160a01b90910460ff161115611d01576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d44907f000000000000000000000000000000000000000000000000000000000000000090613b47565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611db0575f80fd5b505af1158015611dc2573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611fb257600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e6e919061437b565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611eba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ede91906142b3565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7991906143fe565b508351909150611f989082906bffffffffffffffffffffffff16614420565b611fa2908661432a565b9450505050806001019050611dfb565b50611fc5670de0b6b3a76400008261444b565b9050801561202757600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015612010575f80fd5b505af1158015612022573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b031633146120b45760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120d5576120d5614065565b14806120f2575060038160038111156120f0576120f0614065565b145b8061216957506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af115801561213e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612162919061429a565b60ff166002145b15612187576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fb919061433d565b5f8381526006602052604080822063ffffffff93909316909255905183917f5381b67b592d2dc84b61238222ab88ee04db3b3a082894a445c4e5cfa8ba11be91a25050565b6002546001600160a01b031633146122805760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122a75760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b0316331461233d5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b811580612348575080155b1561236657604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b031633146123ed5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b03831615612450576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b038216156124b3576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b03811615612516576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff161115612551576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561258557612585614065565b14806125a2575060038160038111156125a0576125a0614065565b145b8061261957506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156125ee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612612919061429a565b60ff166002145b15612637576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f549061268490339089908990600401614583565b60408051808303815f875af115801561269f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c391906143fe565b90935091505f806126d4848661432a565b11156128ac575f831561276a576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612743573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276791906142b3565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af11580156127c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e491906142f7565b915083156128aa576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612850573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287491906142b3565b61287e91906142de565b90508381146128aa5760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128f3576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b604080518581526020810185905233917f928890dff971de1394b7440848938a868d83445d2f7fb4b07938ae626c7cb130910160405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b0316331461298c5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b8151158061299c57508051825114155b156129c757815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a7d578181815181106129e4576129e4614316565b60200260200101515f03612a0b57604051637c946ed760e01b815260040160405180910390fd5b828181518110612a1d57612a1d614316565b602002602001015160085f848481518110612a3a57612a3a614316565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060010190506129c9565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa582826040516123a19291906145f8565b6024612ac4600267ffffffffffffffff614625565b612ace919061464b565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612ba3576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba191906142f7565b505b6024612bb8600267ffffffffffffffff614625565b612bc2919061464b565b67ffffffffffffffff168611612c55576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612c219085908a908a908a906004016146a1565b5f604051808303818588803b158015612c38575f80fd5b505af1158015612c4a573d5f803e3d5ffd5b505050505050612cd1565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612ca29089908990899089906004016146d9565b5f604051808303818588803b158015612cb9575f80fd5b505af1158015612ccb573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612d0857835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612d3757835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d6657835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612fad57868181518110612d8557612d85614316565b60200260200101518310612dc957868181518110612da557612da5614316565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612ddb57612ddb614316565b60200260200101519250858181518110612df757612df7614316565b6020026020010151515f03612e1f57604051637c946ed760e01b815260040160405180910390fd5b838181518110612e3157612e31614316565b602002602001015182612e44919061432a565b91505f600154905080878381518110612e5f57612e5f614316565b6020026020010151511115612eae57868281518110612e8057612e80614316565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612ec357612ec3614316565b602002602001015151811015612f9f57888481518110612ee557612ee5614316565b60200260200101518181518110612efe57612efe614316565b60200260200101515f1c825f1c10612f5f57888481518110612f2257612f22614316565b60200260200101518181518110612f3b57612f3b614316565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f7157612f71614316565b60200260200101518181518110612f8a57612f8a614316565b60200260200101519150806001019050612eb1565b505050806001019050612d6a565b50803414612cd15760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff81111561301757613017613cab565b60405190808252806020026020018201604052801561304a57816020015b60608152602001906001900390816130355790505b509150845167ffffffffffffffff81111561306757613067613cab565b604051908082528060200260200182016040528015613090578160200160208202803683370190505b5090505f5b8551811015613527575f60085f8884815181106130b4576130b4614316565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561311b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061313f91906142b3565b905086838151811061315357613153614316565b60200260200101515167ffffffffffffffff81111561317457613174613cab565b60405190808252806020026020018201604052801561319d578160200160208202803683370190505b508584815181106131b0576131b0614316565b60200260200101819052505f5b8784815181106131cf576131cf614316565b6020026020010151518110156133b6577f000000000000000000000000000000000000000000000000000000000000000088858151811061321257613212614316565b6020026020010151828151811061322b5761322b614316565b60200260200101510361327357604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f806132ce8e8e8a8151811061328d5761328d614316565b60200260200101518e8b815181106132a7576132a7614316565b602002602001015188815181106132c0576132c0614316565b60200260200101518961167e565b5f8181526006602052604090208290558d519397509195509350915084908b908a9081106132fe576132fe614316565b6020026020010151868151811061331757613317614316565b6020026020010181815250508389898151811061333657613336614316565b6020026020010181815161334a919061432a565b9052508a5184908c905f9061336157613361614316565b60200260200101818151613375919061432a565b9052508a5183908c90600290811061338f5761338f614316565b602002602001018181516133a3919061432a565b90525050600190930192506131bd915050565b505f8484815181106133ca576133ca614316565b602002602001015111156134d9575f60095f8a86815181106133ee576133ee614316565b602002602001015181526020019081526020015f205490505f8111156134d75784848151811061342057613420614316565b602002602001015181106134795784848151811061344057613440614316565b60200260200101518161345391906142de565b90505f85858151811061346857613468614316565b6020026020010181815250506134a7565b8085858151811061348c5761348c614316565b602002602001018181516134a091906142de565b9052505f90505b8060095f8b87815181106134bd576134bd614316565b602002602001015181526020019081526020015f20819055505b505b8383815181106134eb576134eb614316565b60200260200101518660018151811061350657613506614316565b6020026020010181815161351a919061432a565b9052505050600101613095565b5093509350939050565b5f5b8651811015613b3e575f60085f89848151811061355257613552614316565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061358f5761358f614316565b6020026020010151111561365a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb828685815181106135df576135df614316565b60200260200101516040518363ffffffff1660e01b81526004016136189291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af1158015613634573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061365891906142f7565b505b5f8088848151811061366e5761366e614316565b60200260200101515167ffffffffffffffff81111561368f5761368f613cab565b6040519080825280602002602001820160405280156136b8578160200160208202803683370190505b5090505f5b8985815181106136cf576136cf614316565b602002602001015151811015613751575f8986815181106136f2576136f2614316565b6020026020010151828151811061370b5761370b614316565b6020026020010151111561374957600182828151811061372d5761372d614316565b91151560209283029190910190910152613746836146f7565b92505b6001016136bd565b50815f0361376157505050613b36565b5f8267ffffffffffffffff81111561377b5761377b613cab565b6040519080825280602002602001820160405280156137a4578160200160208202803683370190505b5090505f8367ffffffffffffffff8111156137c1576137c1613cab565b6040519080825280602002602001820160405280156137ea578160200160208202803683370190505b5090505f805b8c888151811061380257613802614316565b6020026020010151518110156138e65784818151811061382457613824614316565b6020026020010151156138de578c888151811061384357613843614316565b6020026020010151818151811061385c5761385c614316565b602002602001015184838151811061387657613876614316565b6020026020010181815250508b888151811061389457613894614316565b602002602001015181815181106138ad576138ad614316565b60200260200101518383815181106138c7576138c7614316565b60209081029190910101526138db826146f7565b91505b6001016137f0565b5060246138fc600267ffffffffffffffff614625565b613906919061464b565b67ffffffffffffffff168d888151811061392257613922614316565b602002602001015111613a82575f835167ffffffffffffffff81111561394a5761394a613cab565b604051908082528060200260200182016040528015613973578160200160208202803683370190505b5090505f5b84518110156139cf5784818151811061399357613993614316565b60200260200101515f1c8282815181106139af576139af614316565b6001600160a01b0390921660209283029190910190910152600101613978565b50866001600160a01b031663bde526618a8a815181106139f1576139f1614316565b602002602001015183868f8d81518110613a0d57613a0d614316565b60200260200101518f8e81518110613a2757613a27614316565b60200260200101516040518663ffffffff1660e01b8152600401613a4e949392919061470f565b5f604051808303818588803b158015613a65575f80fd5b505af1158015613a77573d5f803e3d5ffd5b505050505050613b2f565b856001600160a01b03166355442b59898981518110613aa357613aa3614316565b602002602001015185858e8c81518110613abf57613abf614316565b60200260200101518e8d81518110613ad957613ad9614316565b60200260200101516040518663ffffffff1660e01b8152600401613b009493929190614759565b5f604051808303818588803b158015613b17575f80fd5b505af1158015613b29573d5f803e3d5ffd5b50505050505b5050505050505b600101613533565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bbe919061433d565b5f86815260066020526040812054945063ffffffff919091169150839003613bf957604051637c946ed760e01b815260040160405180910390fd5b808303613c2e5782613c0c6001836142de565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f858152600760205260409020548015801590613c4b5750808410155b15613c5c5783613c0c6001836142de565b613c66858561432a565b92505f81118015613c7657508083115b15613c7f578092505b81831115613c8b578192505b50509250929050565b5f60208284031215613ca4575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613ce857613ce8613cab565b604052919050565b5f82601f830112613cff575f80fd5b813567ffffffffffffffff811115613d1957613d19613cab565b613d2c601f8201601f1916602001613cbf565b818152846020838601011115613d40575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d6f575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613d9a575f80fd5b613da687828801613cf0565b91505092959194509250565b5f67ffffffffffffffff821115613dcb57613dcb613cab565b5060051b60200190565b5f82601f830112613de4575f80fd5b81356020613df9613df483613db2565b613cbf565b8083825260208201915060208460051b870101935086841115613e1a575f80fd5b602086015b84811015613e365780358352918301918301613e1f565b509695505050505050565b5f82601f830112613e50575f80fd5b81356020613e60613df483613db2565b82815260059290921b84018101918181019086841115613e7e575f80fd5b8286015b84811015613e3657803567ffffffffffffffff811115613ea0575f80fd5b613eae8986838b0101613cf0565b845250918301918301613e82565b5f805f805f60a08688031215613ed0575f80fd5b8535945067ffffffffffffffff8060208801351115613eed575f80fd5b613efd8860208901358901613dd5565b94508060408801351115613f0f575f80fd5b6040870135870188601f820112613f24575f80fd5b613f31613df48235613db2565b81358082526020808301929160051b8401018b1015613f4e575f80fd5b602083015b6020843560051b850101811015613fe8578481351115613f71575f80fd5b803584018c603f820112613f83575f80fd5b613f93613df46020830135613db2565b602082810135808352908201919060051b83016040018f811115613fb5575f80fd5b6040840193505b80841015613fd7578335835260209384019390920191613fbc565b508552505060209283019201613f53565b50955050506060870135811015613ffd575f80fd5b61400d8860608901358901613e41565b9250806080880135111561401f575f80fd5b506140308760808801358801613dd5565b90509295509295909350565b5f805f6060848603121561404e575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b602081016004831061409957634e487b7160e01b5f52602160045260245ffd5b91905290565b5f602082840312156140af575f80fd5b8135600481106140bd575f80fd5b9392505050565b5f805f80608085870312156140d7575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b0381168114614109575f80fd5b919050565b5f6020828403121561411e575f80fd5b6140bd826140f3565b5f8060408385031215614138575f80fd5b50508035926020909101359150565b5f805f60608486031215614159575f80fd5b614162846140f3565b9250614170602085016140f3565b915061417e604085016140f3565b90509250925092565b5f8060408385031215614198575f80fd5b823567ffffffffffffffff808211156141af575f80fd5b6141bb86838701613dd5565b935060208501359150808211156141d0575f80fd5b506141dd85828601613dd5565b9150509250929050565b5f80604083850312156141f8575f80fd5b823567ffffffffffffffff8082111561420f575f80fd5b818501915085601f830112614222575f80fd5b81356020614232613df483613db2565b82815260059290921b84018101918181019089841115614250575f80fd5b948201945b8386101561427557614266866140f3565b82529482019490820190614255565b965050860135925050808211156141d0575f80fd5b805160ff81168114614109575f80fd5b5f602082840312156142aa575f80fd5b6140bd8261428a565b5f602082840312156142c3575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156142f1576142f16142ca565b92915050565b5f60208284031215614307575f80fd5b815180151581146140bd575f80fd5b634e487b7160e01b5f52603260045260245ffd5b808201808211156142f1576142f16142ca565b5f6020828403121561434d575f80fd5b815163ffffffff811681146140bd575f80fd5b80516bffffffffffffffffffffffff81168114614109575f80fd5b5f6080828403121561438b575f80fd5b6040516080810181811067ffffffffffffffff821117156143ae576143ae613cab565b6040526143ba83614360565b81526143c860208401614360565b6020820152604083015161ffff811681146143e1575f80fd5b60408201526143f26060840161428a565b60608201529392505050565b5f806040838503121561440f575f80fd5b505080516020909101519092909150565b80820281158282048414176142f1576142f16142ca565b634e487b7160e01b5f52601260045260245ffd5b5f8261445957614459614437565b500490565b600181815b8085111561449857815f190482111561447e5761447e6142ca565b8085161561448b57918102915b93841c9390800290614463565b509250929050565b5f826144ae575060016142f1565b816144ba57505f6142f1565b81600181146144d057600281146144da576144f6565b60019150506142f1565b60ff8411156144eb576144eb6142ca565b50506001821b6142f1565b5060208310610133831016604e8410600b8410161715614519575081810a6142f1565b614523838361445e565b805f1904821115614536576145366142ca565b029392505050565b5f6140bd83836144a0565b5f815180845260208085019450602084015f5b838110156145785781518752958201959082019060010161455c565b509495945050505050565b6001600160a01b0384168152606060208201525f6145a46060830185614549565b82810360408401526145b68185614549565b9695505050505050565b5f815180845260208085019450602084015f5b838110156145785781516001600160a01b0316875295820195908201906001016145d3565b604081525f61460a60408301856145c0565b828103602084015261461c8185614549565b95945050505050565b5f67ffffffffffffffff8084168061463f5761463f614437565b92169190910492915050565b67ffffffffffffffff82811682821603908082111561466c5761466c6142ca565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f6146c86080830185614673565b905082606083015295945050505050565b848152836020820152608060408201525f6146c86080830185614673565b5f60018201614708576147086142ca565b5060010190565b608081525f61472160808301876145c0565b82810360208401526147338187614549565b905082810360408401526147478186614673565b91505082606083015295945050505050565b608080825285519082018190525f9060209060a0840190828901845b8281101561479157815184529284019290840190600101614775565b50505083810360208501526147a68188614549565b9150508281036040840152614747818661467356fea2646970667358221220b18c141dc1e94417f54aae9a954aa4f42c6750fda4ac2cdf8f46139f4df5a59f64736f6c63430008190033", + "bytecode": "0x610120604052348015610010575f80fd5b50604051614c6a380380614c6a83398101604081905261002f91610226565b6002805460ff60a01b1933166001600160a81b031990911617600160a01b1760ff60a81b1916600160a91b1790556001600160a01b038916158061007a57506001600160a01b038816155b8061008c57506001600160a01b038716155b8061009e57506001600160a01b038616155b806100a7575084155b156100c55760405163d92e233d60e01b815260040160405180910390fd5b8315806100d0575082155b806100d9575081155b806100e2575080155b1561010057604051637c946ed760e01b815260040160405180910390fd5b61ffff82111561013357604051637ae5968560e01b81526004810183905261ffff60248201526044015b60405180910390fd5b6001600160601b0381111561016b57604051637ae5968560e01b8152600481018290526001600160601b03602482015260440161012a565b6001600160a01b0398891660c05260038054988a166001600160a01b0319998a1617905560048054978a16978916979097179096556005805495909816949096169390931790955560e0819052604080518082018252828152466020918201908152825180830194909452518383015281518084038301815260609093019091528151910120610100525f9390935560019290925560805260a0526102a5565b80516001600160a01b0381168114610221575f80fd5b919050565b5f805f805f805f805f6101208a8c03121561023f575f80fd5b6102488a61020b565b985061025660208b0161020b565b975061026460408b0161020b565b965061027260608b0161020b565b955060808a0151945060a08a0151935060c08a0151925060e08a015191506101008a015190509295985092959850929598565b60805160a05160c05160e051610100516148fc61036e5f395f81816103450152818161141701528181611d220152611dc901525f81816106710152818161144a015281816116c8015281816116fc01528181611d5901528181611ef3015281816131f0015261325601525f81816101ef015281816109c201528181610ac901528181610e5701528181610fa6015281816126f90152818161280601528181612b4601526135ae01525f818161063e01526118d101525f818161029c015261189d01526148fc5ff3fe6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613ca3565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613ca3565b60066020525f908152604090205481565b61030a610305366004613d6b565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613ecb565b610bf4565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a036600461404b565b61114b565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614088565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b3660046140ae565b611315565b34801561041b575f80fd5b5061030a61042a366004613ca3565b6113d4565b34801561043a575f80fd5b5061044e6104493660046140d3565b611681565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a61048836600461404b565b611bc6565b348015610498575f80fd5b506102be6104a7366004613ca3565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611cd5565b34801561050a575f80fd5b5061030a610519366004613ca3565b612077565b348015610529575f80fd5b5061030a61053836600461411d565b612243565b348015610548575f80fd5b506102be610557366004613ca3565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a610582366004614136565b612300565b348015610592575f80fd5b5061030a6105a1366004614156565b6123b0565b3480156105b1575f80fd5b506105c56105c0366004614196565b61251e565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f43660046141f6565b61295b565b348015610604575f80fd5b50610211610613366004613ca3565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612abe565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614074565b148061079b5750600381600381111561079957610799614074565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b91906142a9565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf91906142c2565b90505f805f806108d18c8c8c88611681565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a82826142ed565b90505f9150610994565b61098e81836142ed565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3391906142c2565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab19190614306565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a91906142c2565b610b4491906142ed565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612aea565b505b604080518d8152602081018d9052908101869052606081018290526080810185905233907f4095040bd441bb6761c0f983f93688032932a70ea67c45acf217522134d0e90c9060a00160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c23576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c4284848484612ce8565b5f5480861115610c6f57604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c9057610c90614074565b1480610cad57506003816003811115610cab57610cab614074565b145b80610d2457506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610cf9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1d91906142a9565b60ff166002145b15610d42576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d528a8a8a612fe6565b825192955090935091505f9084906002908110610d7157610d71614325565b60200260200101511115610dfd5760035483516001600160a01b039091169063bc291e129085906002908110610da957610da9614325565b60200260200101516040518263ffffffff1660e01b8152600401610dcf91815260200190565b5f604051808303815f87803b158015610de6575f80fd5b505af1158015610df8573d5f803e3d5ffd5b505050505b5f835f81518110610e1057610e10614325565b60200260200101511115611094575f83600181518110610e3257610e32614325565b60200260200101511115611086576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610ea4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec891906142c2565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ef757610ef7614325565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8e9190614306565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610ff3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101791906142c2565b61102191906142ed565b90508360018151811061103657611036614325565b6020026020010151811461108457808460018151811061105857611058614325565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110948989848a858b613540565b336001600160a01b03167f4e8f98bab2ce9f2ab5649073958662ae3277689fdf749865832601431e3153ac8a8a85875f815181106110d4576110d4614325565b6020026020010151886001815181106110ef576110ef614325565b60200260200101518960028151811061110a5761110a614325565b6020026020010151604051611124969594939291906143ee565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b0316331461118b5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611196575081155b8061119f575080155b156111bd57604051637c946ed760e01b815260040160405180910390fd5b4683036111e057604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f9908490614484565b90506bffffffffffffffffffffffff81111561123d57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b4575f80fd5b505af11580156112c6573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113555760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139557611395614074565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c99190614088565b60405180910390a150565b6005546001600160a01b031633146114145760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147657604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fa9190614497565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d6115236001856142ed565b6040518263ffffffff1660e01b815260040161154191815260200190565b602060405180830381865afa15801561155c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158091906142c2565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f79190614497565b63ffffffff1690505f62093a8061160e8385614484565b61161891906142ed565b905080421061164357604051637ae5968560e01b815242600482015260248101829052604401610754565b5f858152600760205260408082208690555186917f5a6a4aed2babbf3fe4cddce74151568eaac96f250cf910532f6528b1f6ee13d891a25050505050565b5f805f80865f036116a557604051637c946ed760e01b815260040160405180910390fd5b5f8690036116c65760405163d92e233d60e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000860361172857604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61176c828a613b56565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b1580156117bc575f80fd5b505af11580156117ce573d5f803e3d5ffd5b5083925050505b83811015611bb9575f818152600a602052604090205460ff16611bb157600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611839573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185d91906144d5565b606081015190915060ff16156118fc57604081015161ffff16158015611893575060208101516bffffffffffffffffffffffff16155b156118f75761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b611902565b50611bb1565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa158015611949573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196d91906142c2565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa1580156119c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ea9190614558565b91509150805f03611a32575f858152600a60205260409020805460ff191660011790558351611a27906bffffffffffffffffffffffff168a614484565b985050505050611bb1565b83515f9081906bffffffffffffffffffffffff168184821115611a5f57611a5985836142ed565b90508491505b6040880151611a789061ffff16655af3107a400061457a565b861015611aae57670de0b6b3a764000086611a938484614484565b611a9d919061457a565b611aa791906145a5565b9250611b9c565b670de0b6b3a7640000611ac1878461457a565b611acb91906145a5565b9350670de0b6b3a7640000611ae0878361457a565b611aea91906145a5565b925087602001516bffffffffffffffffffffffff16915081841115611b2357611b1382856142ed565b611b1d9084614484565b92508193505b60128f1015611b8f575f8f6012611b3a91906142ed565b611b4590600a614698565b611b4f90866145a5565b90508f6012611b5e91906142ed565b611b6990600a614698565b611b73908261457a565b9050611b7f81866142ed565b611b899085614484565b90945092505b611b99848f614484565b9d505b611ba6838e614484565b9c5050505050505050505b6001016117d5565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611c27576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c40908590614484565b90506bffffffffffffffffffffffff811115611c8457604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611306565b6002546001600160a01b90910460ff161115611d04576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d47907f000000000000000000000000000000000000000000000000000000000000000090613b56565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611db3575f80fd5b505af1158015611dc5573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611fb557600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7191906144d5565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611ebd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ee191906142c2565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7c9190614558565b508351909150611f9b9082906bffffffffffffffffffffffff1661457a565b611fa59086614484565b9450505050806001019050611dfe565b50611fc8670de0b6b3a7640000826145a5565b9050801561202a57600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015612013575f80fd5b505af1158015612025573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b031633146120b75760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120d8576120d8614074565b14806120f5575060038160038111156120f3576120f3614074565b145b8061216c57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612141573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061216591906142a9565b60ff166002145b1561218a576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fe9190614497565b5f8381526006602052604080822063ffffffff93909316909255905183917f5381b67b592d2dc84b61238222ab88ee04db3b3a082894a445c4e5cfa8ba11be91a25050565b6002546001600160a01b031633146122835760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122aa5760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146123405760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b81158061234b575080155b1561236957604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b031633146123f05760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b03831615612453576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b038216156124b6576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b03811615612519576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff161115612554576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561258857612588614074565b14806125a5575060038160038111156125a3576125a3614074565b145b8061261c57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156125f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061261591906142a9565b60ff166002145b1561263a576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f5490612687903390899089906004016146a3565b60408051808303815f875af11580156126a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c69190614558565b90935091505f806126d78486614484565b11156128af575f831561276d576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612746573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276a91906142c2565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af11580156127c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e79190614306565b915083156128ad576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612853573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287791906142c2565b61288191906142ed565b90508381146128ad5760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128f6576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b336001600160a01b03167fbe9ae4aaa6e41ee5c966cad91e78ec7202d0062fe8c9564b28629a614003cf828585898960405161293594939291906146e0565b60405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b0316331461299b5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b815115806129ab57508051825114155b156129d657815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a8c578181815181106129f3576129f3614325565b60200260200101515f03612a1a57604051637c946ed760e01b815260040160405180910390fd5b828181518110612a2c57612a2c614325565b602002602001015160085f848481518110612a4957612a49614325565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060010190506129d8565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa582826040516123a4929190614753565b6024612ad3600267ffffffffffffffff614780565b612add91906147a6565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612bb2576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb09190614306565b505b6024612bc7600267ffffffffffffffff614780565b612bd191906147a6565b67ffffffffffffffff168611612c64576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612c309085908a908a908a906004016147fc565b5f604051808303818588803b158015612c47575f80fd5b505af1158015612c59573d5f803e3d5ffd5b505050505050612ce0565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612cb1908990899089908990600401614834565b5f604051808303818588803b158015612cc8575f80fd5b505af1158015612cda573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612d1757835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612d4657835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d7557835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612fbc57868181518110612d9457612d94614325565b60200260200101518310612dd857868181518110612db457612db4614325565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612dea57612dea614325565b60200260200101519250858181518110612e0657612e06614325565b6020026020010151515f03612e2e57604051637c946ed760e01b815260040160405180910390fd5b838181518110612e4057612e40614325565b602002602001015182612e539190614484565b91505f600154905080878381518110612e6e57612e6e614325565b6020026020010151511115612ebd57868281518110612e8f57612e8f614325565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612ed257612ed2614325565b602002602001015151811015612fae57888481518110612ef457612ef4614325565b60200260200101518181518110612f0d57612f0d614325565b60200260200101515f1c825f1c10612f6e57888481518110612f3157612f31614325565b60200260200101518181518110612f4a57612f4a614325565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f8057612f80614325565b60200260200101518181518110612f9957612f99614325565b60200260200101519150806001019050612ec0565b505050806001019050612d79565b50803414612ce05760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff81111561302657613026613cba565b60405190808252806020026020018201604052801561305957816020015b60608152602001906001900390816130445790505b509150845167ffffffffffffffff81111561307657613076613cba565b60405190808252806020026020018201604052801561309f578160200160208202803683370190505b5090505f5b8551811015613536575f60085f8884815181106130c3576130c3614325565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561312a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061314e91906142c2565b905086838151811061316257613162614325565b60200260200101515167ffffffffffffffff81111561318357613183613cba565b6040519080825280602002602001820160405280156131ac578160200160208202803683370190505b508584815181106131bf576131bf614325565b60200260200101819052505f5b8784815181106131de576131de614325565b6020026020010151518110156133c5577f000000000000000000000000000000000000000000000000000000000000000088858151811061322157613221614325565b6020026020010151828151811061323a5761323a614325565b60200260200101510361328257604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f806132dd8e8e8a8151811061329c5761329c614325565b60200260200101518e8b815181106132b6576132b6614325565b602002602001015188815181106132cf576132cf614325565b602002602001015189611681565b5f8181526006602052604090208290558d519397509195509350915084908b908a90811061330d5761330d614325565b6020026020010151868151811061332657613326614325565b6020026020010181815250508389898151811061334557613345614325565b602002602001018181516133599190614484565b9052508a5184908c905f9061337057613370614325565b602002602001018181516133849190614484565b9052508a5183908c90600290811061339e5761339e614325565b602002602001018181516133b29190614484565b90525050600190930192506131cc915050565b505f8484815181106133d9576133d9614325565b602002602001015111156134e8575f60095f8a86815181106133fd576133fd614325565b602002602001015181526020019081526020015f205490505f8111156134e65784848151811061342f5761342f614325565b602002602001015181106134885784848151811061344f5761344f614325565b60200260200101518161346291906142ed565b90505f85858151811061347757613477614325565b6020026020010181815250506134b6565b8085858151811061349b5761349b614325565b602002602001018181516134af91906142ed565b9052505f90505b8060095f8b87815181106134cc576134cc614325565b602002602001015181526020019081526020015f20819055505b505b8383815181106134fa576134fa614325565b60200260200101518660018151811061351557613515614325565b602002602001018181516135299190614484565b90525050506001016130a4565b5093509350939050565b5f5b8651811015613b4d575f60085f89848151811061356157613561614325565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061359e5761359e614325565b60200260200101511115613669577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb828685815181106135ee576135ee614325565b60200260200101516040518363ffffffff1660e01b81526004016136279291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af1158015613643573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136679190614306565b505b5f8088848151811061367d5761367d614325565b60200260200101515167ffffffffffffffff81111561369e5761369e613cba565b6040519080825280602002602001820160405280156136c7578160200160208202803683370190505b5090505f5b8985815181106136de576136de614325565b602002602001015151811015613760575f89868151811061370157613701614325565b6020026020010151828151811061371a5761371a614325565b6020026020010151111561375857600182828151811061373c5761373c614325565b9115156020928302919091019091015261375583614852565b92505b6001016136cc565b50815f0361377057505050613b45565b5f8267ffffffffffffffff81111561378a5761378a613cba565b6040519080825280602002602001820160405280156137b3578160200160208202803683370190505b5090505f8367ffffffffffffffff8111156137d0576137d0613cba565b6040519080825280602002602001820160405280156137f9578160200160208202803683370190505b5090505f805b8c888151811061381157613811614325565b6020026020010151518110156138f55784818151811061383357613833614325565b6020026020010151156138ed578c888151811061385257613852614325565b6020026020010151818151811061386b5761386b614325565b602002602001015184838151811061388557613885614325565b6020026020010181815250508b88815181106138a3576138a3614325565b602002602001015181815181106138bc576138bc614325565b60200260200101518383815181106138d6576138d6614325565b60209081029190910101526138ea82614852565b91505b6001016137ff565b50602461390b600267ffffffffffffffff614780565b61391591906147a6565b67ffffffffffffffff168d888151811061393157613931614325565b602002602001015111613a91575f835167ffffffffffffffff81111561395957613959613cba565b604051908082528060200260200182016040528015613982578160200160208202803683370190505b5090505f5b84518110156139de578481815181106139a2576139a2614325565b60200260200101515f1c8282815181106139be576139be614325565b6001600160a01b0390921660209283029190910190910152600101613987565b50866001600160a01b031663bde526618a8a81518110613a0057613a00614325565b602002602001015183868f8d81518110613a1c57613a1c614325565b60200260200101518f8e81518110613a3657613a36614325565b60200260200101516040518663ffffffff1660e01b8152600401613a5d949392919061486a565b5f604051808303818588803b158015613a74575f80fd5b505af1158015613a86573d5f803e3d5ffd5b505050505050613b3e565b856001600160a01b03166355442b59898981518110613ab257613ab2614325565b602002602001015185858e8c81518110613ace57613ace614325565b60200260200101518e8d81518110613ae857613ae8614325565b60200260200101516040518663ffffffff1660e01b8152600401613b0f94939291906148b4565b5f604051808303818588803b158015613b26575f80fd5b505af1158015613b38573d5f803e3d5ffd5b50505050505b5050505050505b600101613542565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ba9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bcd9190614497565b5f86815260066020526040812054945063ffffffff919091169150839003613c0857604051637c946ed760e01b815260040160405180910390fd5b808303613c3d5782613c1b6001836142ed565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f858152600760205260409020548015801590613c5a5750808410155b15613c6b5783613c1b6001836142ed565b613c758585614484565b92505f81118015613c8557508083115b15613c8e578092505b81831115613c9a578192505b50509250929050565b5f60208284031215613cb3575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613cf757613cf7613cba565b604052919050565b5f82601f830112613d0e575f80fd5b813567ffffffffffffffff811115613d2857613d28613cba565b613d3b601f8201601f1916602001613cce565b818152846020838601011115613d4f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d7e575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613da9575f80fd5b613db587828801613cff565b91505092959194509250565b5f67ffffffffffffffff821115613dda57613dda613cba565b5060051b60200190565b5f82601f830112613df3575f80fd5b81356020613e08613e0383613dc1565b613cce565b8083825260208201915060208460051b870101935086841115613e29575f80fd5b602086015b84811015613e455780358352918301918301613e2e565b509695505050505050565b5f82601f830112613e5f575f80fd5b81356020613e6f613e0383613dc1565b82815260059290921b84018101918181019086841115613e8d575f80fd5b8286015b84811015613e4557803567ffffffffffffffff811115613eaf575f80fd5b613ebd8986838b0101613cff565b845250918301918301613e91565b5f805f805f60a08688031215613edf575f80fd5b8535945067ffffffffffffffff8060208801351115613efc575f80fd5b613f0c8860208901358901613de4565b94508060408801351115613f1e575f80fd5b6040870135870188601f820112613f33575f80fd5b613f40613e038235613dc1565b81358082526020808301929160051b8401018b1015613f5d575f80fd5b602083015b6020843560051b850101811015613ff7578481351115613f80575f80fd5b803584018c603f820112613f92575f80fd5b613fa2613e036020830135613dc1565b602082810135808352908201919060051b83016040018f811115613fc4575f80fd5b6040840193505b80841015613fe6578335835260209384019390920191613fcb565b508552505060209283019201613f62565b5095505050606087013581101561400c575f80fd5b61401c8860608901358901613e50565b9250806080880135111561402e575f80fd5b5061403f8760808801358801613de4565b90509295509295909350565b5f805f6060848603121561405d575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106140a857634e487b7160e01b5f52602160045260245ffd5b91905290565b5f602082840312156140be575f80fd5b8135600481106140cc575f80fd5b9392505050565b5f805f80608085870312156140e6575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b0381168114614118575f80fd5b919050565b5f6020828403121561412d575f80fd5b6140cc82614102565b5f8060408385031215614147575f80fd5b50508035926020909101359150565b5f805f60608486031215614168575f80fd5b61417184614102565b925061417f60208501614102565b915061418d60408501614102565b90509250925092565b5f80604083850312156141a7575f80fd5b823567ffffffffffffffff808211156141be575f80fd5b6141ca86838701613de4565b935060208501359150808211156141df575f80fd5b506141ec85828601613de4565b9150509250929050565b5f8060408385031215614207575f80fd5b823567ffffffffffffffff8082111561421e575f80fd5b818501915085601f830112614231575f80fd5b81356020614241613e0383613dc1565b82815260059290921b8401810191818101908984111561425f575f80fd5b948201945b838610156142845761427586614102565b82529482019490820190614264565b965050860135925050808211156141df575f80fd5b805160ff81168114614118575f80fd5b5f602082840312156142b9575f80fd5b6140cc82614299565b5f602082840312156142d2575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115614300576143006142d9565b92915050565b5f60208284031215614316575f80fd5b815180151581146140cc575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b838110156143685781518752958201959082019060010161434c565b509495945050505050565b5f82825180855260208086019550808260051b8401018186015f5b848110156143e157858303601f190189528151805180855290850190858501905f5b818110156143cc578351835292870192918701916001016143b0565b5050998501999350509083019060010161438e565b5090979650505050505050565b60c081525f61440060c0830189614339565b6020838203818501528189518084528284019150828160051b850101838c015f5b8381101561444f57601f1987840301855261443d838351614339565b94860194925090850190600101614421565b50508681036040880152614463818c614373565b606088019a909a525050505060808301949094525060a00152509392505050565b80820180821115614300576143006142d9565b5f602082840312156144a7575f80fd5b815163ffffffff811681146140cc575f80fd5b80516bffffffffffffffffffffffff81168114614118575f80fd5b5f608082840312156144e5575f80fd5b6040516080810181811067ffffffffffffffff8211171561450857614508613cba565b604052614514836144ba565b8152614522602084016144ba565b6020820152604083015161ffff8116811461453b575f80fd5b604082015261454c60608401614299565b60608201529392505050565b5f8060408385031215614569575f80fd5b505080516020909101519092909150565b8082028115828204841417614300576143006142d9565b634e487b7160e01b5f52601260045260245ffd5b5f826145b3576145b3614591565b500490565b600181815b808511156145f257815f19048211156145d8576145d86142d9565b808516156145e557918102915b93841c93908002906145bd565b509250929050565b5f8261460857506001614300565b8161461457505f614300565b816001811461462a576002811461463457614650565b6001915050614300565b60ff841115614645576146456142d9565b50506001821b614300565b5060208310610133831016604e8410600b8410161715614673575081810a614300565b61467d83836145b8565b805f1904821115614690576146906142d9565b029392505050565b5f6140cc83836145fa565b6001600160a01b0384168152606060208201525f6146c46060830185614339565b82810360408401526146d68185614339565b9695505050505050565b848152836020820152608060408201525f6146fe6080830185614339565b82810360608401526147108185614339565b979650505050505050565b5f815180845260208085019450602084015f5b838110156143685781516001600160a01b03168752958201959082019060010161472e565b604081525f614765604083018561471b565b82810360208401526147778185614339565b95945050505050565b5f67ffffffffffffffff8084168061479a5761479a614591565b92169190910492915050565b67ffffffffffffffff8281168282160390808211156147c7576147c76142d9565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f61482360808301856147ce565b905082606083015295945050505050565b848152836020820152608060408201525f61482360808301856147ce565b5f60018201614863576148636142d9565b5060010190565b608081525f61487c608083018761471b565b828103602084015261488e8187614339565b905082810360408401526148a281866147ce565b91505082606083015295945050505050565b608081525f61487c608083018761433956fea26469706673582212204f62b365dfacc16118c8e0397d13c78fb01e19f895ea8e406a87973c6c961c4c64736f6c63430008190033", + "deployedBytecode": "0x6080604052600436106101da575f3560e01c806379bc81dd116100fd578063bc7d5c5c11610092578063dcb5ccc411610062578063dcb5ccc4146105f9578063e09177781461062d578063e6be59e714610660578063f4da12ba14610693575f80fd5b8063bc7d5c5c14610568578063d529779314610587578063d7accbcc146105a6578063d8bf69bf146105da575f80fd5b80639649a35c116100cd5780639649a35c146104eb578063a5edd4fc146104ff578063a6f9dae11461051e578063bb78678f1461053d575f80fd5b806379bc81dd1461046e5780638513e77d1461048d5780638833c205146104b85780638da5cb5b146104cc575f80fd5b80633c18d1dd1161017357806361d027b31161014357806361d027b3146103d257806363096509146103f157806363c4d28e14610410578063777e49c91461042f575f80fd5b80633c18d1dd146103345780634ac7251d146103675780635a55a482146103865780635c975abb146103a5575f80fd5b80632ad923dc116101ae5780632ad923dc146102cc5780632c0f3f29146102f757806334be5af41461030c5780633907196c14610321575f80fd5b806231d115146101de5780630d17db111461022e5780630d3241ee1461026c5780632a3bb6931461028b575b5f80fd5b3480156101e9575f80fd5b506102117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610239575f80fd5b5061025c610248366004613ca3565b600a6020525f908152604090205460ff1681565b6040519015158152602001610225565b348015610277575f80fd5b50600554610211906001600160a01b031681565b348015610296575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610225565b3480156102d7575f80fd5b506102be6102e6366004613ca3565b60066020525f908152604090205481565b61030a610305366004613d6b565b6106a7565b005b348015610317575f80fd5b506102be60015481565b61030a61032f366004613ecb565b610bf4565b34801561033f575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b348015610372575f80fd5b50600354610211906001600160a01b031681565b348015610391575f80fd5b5061030a6103a036600461404b565b61114b565b3480156103b0575f80fd5b506002546103c590600160a81b900460ff1681565b6040516102259190614088565b3480156103dd575f80fd5b50600454610211906001600160a01b031681565b3480156103fc575f80fd5b5061030a61040b3660046140ae565b611315565b34801561041b575f80fd5b5061030a61042a366004613ca3565b6113d4565b34801561043a575f80fd5b5061044e6104493660046140d3565b611681565b604080519485526020850193909352918301526060820152608001610225565b348015610479575f80fd5b5061030a61048836600461404b565b611bc6565b348015610498575f80fd5b506102be6104a7366004613ca3565b60076020525f908152604090205481565b3480156104c3575f80fd5b506102be5f5481565b3480156104d7575f80fd5b50600254610211906001600160a01b031681565b3480156104f6575f80fd5b5061030a611cd5565b34801561050a575f80fd5b5061030a610519366004613ca3565b612077565b348015610529575f80fd5b5061030a61053836600461411d565b612243565b348015610548575f80fd5b506102be610557366004613ca3565b60096020525f908152604090205481565b348015610573575f80fd5b5061030a610582366004614136565b612300565b348015610592575f80fd5b5061030a6105a1366004614156565b6123b0565b3480156105b1575f80fd5b506105c56105c0366004614196565b61251e565b60408051928352602083019190915201610225565b3480156105e5575f80fd5b5061030a6105f43660046141f6565b61295b565b348015610604575f80fd5b50610211610613366004613ca3565b60086020525f90815260409020546001600160a01b031681565b348015610638575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066b575f80fd5b506102be7f000000000000000000000000000000000000000000000000000000000000000081565b34801561069e575f80fd5b506102be612abe565b6002546001600160a01b90910460ff1611156106d6576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f83900361070a57604051637c946ed760e01b815260040160405180910390fd5b5f82900361072b5760405163d92e233d60e01b815260040160405180910390fd5b5f548085111561075d57604051637ae5968560e01b815260048101869052602481018290526044015b60405180910390fd5b60028054600160a81b900460ff169081600381111561077e5761077e614074565b148061079b5750600381600381111561079957610799614074565b145b8061081257506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156107e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080b91906142a9565b60ff166002145b15610830576040516313d0ff5960e31b815260040160405180910390fd5b5f8581526008602090815260408083205481517fa8b2ae0200000000000000000000000000000000000000000000000000000000815291516001600160a01b039091169392849263a8b2ae0292600480830193928290030181865afa15801561089b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bf91906142c2565b90505f805f806108d18c8c8c88611681565b5f81815260066020526040902082905592965090945092509050821561094b57600354604051635e148f0960e11b8152600481018590526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015610934575f80fd5b505af1158015610946573d5f803e3d5ffd5b505050505b5f8415610b8157505f8b815260096020526040902054849080156109a5578181106109845761097a82826142ed565b90505f9150610994565b61098e81836142ed565b91505f90505b5f8d81526009602052604090208190555b8115610b72576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3391906142c2565b60048054604051637ff796ab60e01b815230928101929092525f6024830152604482018690529192506001600160a01b0390911690637ff796ab906064016020604051808303815f875af1158015610a8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab19190614306565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610b16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a91906142c2565b610b4491906142ed565b9050828114610b705760405163312b003360e01b81526004810182905260248101849052604401610754565b505b610b7f8d8d888e86612aea565b505b604080518d8152602081018d9052908101869052606081018290526080810185905233907f4095040bd441bb6761c0f983f93688032932a70ea67c45acf217522134d0e90c9060a00160405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050505050565b6002546001600160a01b90910460ff161115610c23576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179055610c4284848484612ce8565b5f5480861115610c6f57604051637ae5968560e01b81526004810187905260248101829052604401610754565b60028054600160a81b900460ff1690816003811115610c9057610c90614074565b1480610cad57506003816003811115610cab57610cab614074565b145b80610d2457506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015610cf9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1d91906142a9565b60ff166002145b15610d42576040516313d0ff5960e31b815260040160405180910390fd5b6060806060610d528a8a8a612fe6565b825192955090935091505f9084906002908110610d7157610d71614325565b60200260200101511115610dfd5760035483516001600160a01b039091169063bc291e129085906002908110610da957610da9614325565b60200260200101516040518263ffffffff1660e01b8152600401610dcf91815260200190565b5f604051808303815f87803b158015610de6575f80fd5b505af1158015610df8573d5f803e3d5ffd5b505050505b5f835f81518110610e1057610e10614325565b60200260200101511115611094575f83600181518110610e3257610e32614325565b60200260200101511115611086576040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610ea4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec891906142c2565b60045485519192506001600160a01b031690637ff796ab9030905f9088906001908110610ef757610ef7614325565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064016020604051808303815f875af1158015610f6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8e9190614306565b506040516370a0823160e01b815230600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610ff3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101791906142c2565b61102191906142ed565b90508360018151811061103657611036614325565b6020026020010151811461108457808460018151811061105857611058614325565b602002602001015160405163312b003360e01b8152600401610754929190918252602082015260400190565b505b6110948989848a858b613540565b336001600160a01b03167f4e8f98bab2ce9f2ab5649073958662ae3277689fdf749865832601431e3153ac8a8a85875f815181106110d4576110d4614325565b6020026020010151886001815181106110ef576110ef614325565b60200260200101518960028151811061110a5761110a614325565b6020026020010151604051611124969594939291906143ee565b60405180910390a250506002805460ff60a01b1916600160a01b1790555050505050505050565b6002546001600160a01b0316331461118b5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b821580611196575081155b8061119f575080155b156111bd57604051637c946ed760e01b815260040160405180910390fd5b4683036111e057604051633881b68960e01b815260048101849052602401610754565b5f838152600960205260408120546111f9908490614484565b90506bffffffffffffffffffffffff81111561123d57604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f8481526009602090815260408083208490556008909152908190205490517fac65ded2000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0390911690819063ac65ded2906024015f604051808303815f87803b1580156112b4575f80fd5b505af11580156112c6573d5f803e3d5ffd5b505060408051888152602081018890529081018590528592507f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97591506060015b60405180910390a25050505050565b6002546001600160a01b031633146113555760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b600280548291907fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b83600381111561139557611395614074565b02179055507fa814f27828c0243d429ea8c7033cb10f0c825b9466fdc04f63e0cca26c28eb8a816040516113c99190614088565b60405180910390a150565b6005546001600160a01b031633146114145760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b807f00000000000000000000000000000000000000000000000000000000000000000361147657604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b600354604080517f14b19c5a00000000000000000000000000000000000000000000000000000000815290515f926001600160a01b0316916314b19c5a9160048083019260209291908290030181865afa1580156114d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fa9190614497565b60035463ffffffff9190911691505f906001600160a01b031663d4ee9f8d6115236001856142ed565b6040518263ffffffff1660e01b815260040161154191815260200190565b602060405180830381865afa15801561155c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158091906142c2565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663d2b3996f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f79190614497565b63ffffffff1690505f62093a8061160e8385614484565b61161891906142ed565b905080421061164357604051637ae5968560e01b815242600482015260248101829052604401610754565b5f858152600760205260408082208690555186917f5a6a4aed2babbf3fe4cddce74151568eaac96f250cf910532f6528b1f6ee13d891a25050505050565b5f805f80865f036116a557604051637c946ed760e01b815260040160405180910390fd5b5f8690036116c65760405163d92e233d60e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000860361172857604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5060408051808201825286815260209081018881528251808301899052905181840152825180820384018152606090910190925281519101205f61176c828a613b56565b6005546040516317d5e89d60e31b8152600481018b9052602481018c90529195509192506001600160a01b039091169063beaf44e8906044015f604051808303815f87803b1580156117bc575f80fd5b505af11580156117ce573d5f803e3d5ffd5b5083925050505b83811015611bb9575f818152600a602052604090205460ff16611bb157600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611839573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185d91906144d5565b606081015190915060ff16156118fc57604081015161ffff16158015611893575060208101516bffffffffffffffffffffffff16155b156118f75761ffff7f00000000000000000000000000000000000000000000000000000000000000001660408201526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201525b611902565b50611bb1565b60035460405163d4ee9f8d60e01b8152600481018490525f916001600160a01b03169063d4ee9f8d90602401602060405180830381865afa158015611949573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061196d91906142c2565b600554604051630c88d47f60e41b8152600481018d9052602481018e9052604481018390529192505f9182916001600160a01b03169063c88d47f0906064016040805180830381865afa1580156119c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ea9190614558565b91509150805f03611a32575f858152600a60205260409020805460ff191660011790558351611a27906bffffffffffffffffffffffff168a614484565b985050505050611bb1565b83515f9081906bffffffffffffffffffffffff168184821115611a5f57611a5985836142ed565b90508491505b6040880151611a789061ffff16655af3107a400061457a565b861015611aae57670de0b6b3a764000086611a938484614484565b611a9d919061457a565b611aa791906145a5565b9250611b9c565b670de0b6b3a7640000611ac1878461457a565b611acb91906145a5565b9350670de0b6b3a7640000611ae0878361457a565b611aea91906145a5565b925087602001516bffffffffffffffffffffffff16915081841115611b2357611b1382856142ed565b611b1d9084614484565b92508193505b60128f1015611b8f575f8f6012611b3a91906142ed565b611b4590600a614698565b611b4f90866145a5565b90508f6012611b5e91906142ed565b611b6990600a614698565b611b73908261457a565b9050611b7f81866142ed565b611b899085614484565b90945092505b611b99848f614484565b9d505b611ba6838e614484565b9c5050505050505050505b6001016117d5565b5050945094509450949050565b5f838152600860205260409020546001600160a01b0316338114611c27576040517fdeeeedec0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0382166024820152604401610754565b5f84815260096020526040812054611c40908590614484565b90506bffffffffffffffffffffffff811115611c8457604051637ae5968560e01b8152600481018290526bffffffffffffffffffffffff6024820152604401610754565b5f85815260096020908152604091829020839055815187815290810186905290810182905283907f2192822efd68ddf583804c65675b73a59694e672cab1758eb6714613f932a97590606001611306565b6002546001600160a01b90910460ff161115611d04576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b1790555f80548190611d47907f000000000000000000000000000000000000000000000000000000000000000090613b56565b6005546040516317d5e89d60e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201529294509092506001600160a01b03169063beaf44e8906044015f604051808303815f87803b158015611db3575f80fd5b505af1158015611dc5573d5f803e3d5ffd5b50507f00000000000000000000000000000000000000000000000000000000000000005f90815260066020526040812084905591508390505b82811015611fb557600354604051631ddf133560e01b8152600481018390525f916001600160a01b031690631ddf133590602401608060405180830381865afa158015611e4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e7191906144d5565b60035460405163d4ee9f8d60e01b8152600481018590529192505f916001600160a01b039091169063d4ee9f8d90602401602060405180830381865afa158015611ebd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ee191906142c2565b600554604051630c88d47f60e41b81527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604481018390529192505f916001600160a01b039091169063c88d47f0906064016040805180830381865afa158015611f58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7c9190614558565b508351909150611f9b9082906bffffffffffffffffffffffff1661457a565b611fa59086614484565b9450505050806001019050611dfe565b50611fc8670de0b6b3a7640000826145a5565b9050801561202a57600354604051635e148f0960e11b8152600481018390526001600160a01b039091169063bc291e12906024015f604051808303815f87803b158015612013575f80fd5b505af1158015612025573d5f803e3d5ffd5b505050505b60405181815233907f2a8de497d698d6869cb0844411788378e76214d03a541eec6ba514b795d9f42e9060200160405180910390a250506002805460ff60a01b1916600160a01b17905550565b6005546001600160a01b031633146120b75760055460405163312d21ff60e11b81523360048201526001600160a01b039091166024820152604401610754565b60028054600160a81b900460ff16908160038111156120d8576120d8614074565b14806120f5575060038160038111156120f3576120f3614074565b145b8061216c57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af1158015612141573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061216591906142a9565b60ff166002145b1561218a576040516313d0ff5960e31b815260040160405180910390fd5b60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121fe9190614497565b5f8381526006602052604080822063ffffffff93909316909255905183917f5381b67b592d2dc84b61238222ab88ee04db3b3a082894a445c4e5cfa8ba11be91a25050565b6002546001600160a01b031633146122835760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b0381166122aa5760405163d92e233d60e01b815260040160405180910390fd5b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f4ffd725fc4a22075e9ec71c59edf9c38cdeb588a91b24fc5b61388c5be41282b905f90a250565b6002546001600160a01b031633146123405760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b81158061234b575080155b1561236957604051637c946ed760e01b815260040160405180910390fd5b5f829055600181905560408051838152602081018390527f61f6c4cc9665a257352c0b46189ffc2ae6fbbc11e155ff20901217ff203a517e91015b60405180910390a15050565b6002546001600160a01b031633146123f05760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b6001600160a01b03831615612453576003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385169081179091556040517f4672fe7e13cfb163442d0b729b5733fb3efafc66cbe3677eac9940eb41c284c2905f90a25b6001600160a01b038216156124b6576004805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091556040517f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d1905f90a25b6001600160a01b03811615612519576005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f04a606379838ed6fc83fd189eea9d1835b5eff05035c4b74622911ea2ae6b217905f90a25b505050565b5f806001600260149054906101000a900460ff1660ff161115612554576040516345f5ce8b60e11b815260040160405180910390fd5b6002805460ff60a01b1916600160a11b179081905560ff600160a81b90910416600181600381111561258857612588614074565b14806125a5575060038160038111156125a3576125a3614074565b145b8061261c57506004805460408051635c975abb60e01b815290516001600160a01b0390921692635c975abb92828201926020929082900301815f875af11580156125f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061261591906142a9565b60ff166002145b1561263a576040516313d0ff5960e31b815260040160405180910390fd5b6003546040517f2e070f540000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e070f5490612687903390899089906004016146a3565b60408051808303815f875af11580156126a2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c69190614558565b90935091505f806126d78486614484565b11156128af575f831561276d576040516370a0823160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612746573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276a91906142c2565b90505b60048054604051637ff796ab60e01b8152339281019290925260248201879052604482018690526001600160a01b031690637ff796ab906064016020604051808303815f875af11580156127c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127e79190614306565b915083156128ad576040516370a0823160e01b815233600482015281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612853573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287791906142c2565b61288191906142ed565b90508381146128ad5760405163312b003360e01b81526004810182905260248101859052604401610754565b505b806128f6576040517f942dc9da0000000000000000000000000000000000000000000000000000000081523360048201526024810185905260448101849052606401610754565b336001600160a01b03167fbe9ae4aaa6e41ee5c966cad91e78ec7202d0062fe8c9564b28629a614003cf828585898960405161293594939291906146e0565b60405180910390a250506002805460ff60a01b1916600160a01b17905590939092509050565b6002546001600160a01b0316331461299b5760025460405163521eb56d60e11b81523360048201526001600160a01b039091166024820152604401610754565b815115806129ab57508051825114155b156129d657815181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f5b8151811015612a8c578181815181106129f3576129f3614325565b60200260200101515f03612a1a57604051637c946ed760e01b815260040160405180910390fd5b828181518110612a2c57612a2c614325565b602002602001015160085f848481518110612a4957612a49614325565b602002602001015181526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508060010190506129d8565b507fe87460f6c400fa0166984512586d7bdf03a3230bbadf9651f27f08716dd77fa582826040516123a4929190614753565b6024612ad3600267ffffffffffffffff614780565b612add91906147a6565b67ffffffffffffffff1681565b5f858152600860205260409020546001600160a01b03168115612bb2576040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af1158015612b8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb09190614306565b505b6024612bc7600267ffffffffffffffff614780565b612bd191906147a6565b67ffffffffffffffff168611612c64576040517fb2267a7b00000000000000000000000000000000000000000000000000000000815285906001600160a01b0383169063b2267a7b903490612c309085908a908a908a906004016147fc565b5f604051808303818588803b158015612c47575f80fd5b505af1158015612c59573d5f803e3d5ffd5b505050505050612ce0565b6040517f6585ecdc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821690636585ecdc903490612cb1908990899089908990600401614834565b5f604051808303818588803b158015612cc8575f80fd5b505af1158015612cda573d5f803e3d5ffd5b50505050505b505050505050565b8251845114612d1757835183516040516308151c1160e41b815260048101929092526024820152604401610754565b8151845114612d4657835182516040516308151c1160e41b815260048101929092526024820152604401610754565b8051845114612d7557835181516040516308151c1160e41b815260048101929092526024820152604401610754565b5f805f5b8651811015612fbc57868181518110612d9457612d94614325565b60200260200101518310612dd857868181518110612db457612db4614325565b6020026020010151604051633881b68960e01b815260040161075491815260200190565b868181518110612dea57612dea614325565b60200260200101519250858181518110612e0657612e06614325565b6020026020010151515f03612e2e57604051637c946ed760e01b815260040160405180910390fd5b838181518110612e4057612e40614325565b602002602001015182612e539190614484565b91505f600154905080878381518110612e6e57612e6e614325565b6020026020010151511115612ebd57868281518110612e8f57612e8f614325565b60200260200101515181604051637ae5968560e01b8152600401610754929190918252602082015260400190565b5f805b888481518110612ed257612ed2614325565b602002602001015151811015612fae57888481518110612ef457612ef4614325565b60200260200101518181518110612f0d57612f0d614325565b60200260200101515f1c825f1c10612f6e57888481518110612f3157612f31614325565b60200260200101518181518110612f4a57612f4a614325565b6020026020010151604051636aba776560e11b815260040161075491815260200190565b888481518110612f8057612f80614325565b60200260200101518181518110612f9957612f99614325565b60200260200101519150806001019050612ec0565b505050806001019050612d79565b50803414612ce05760405163312b003360e01b815234600482015260248101829052604401610754565b6040805160038082526080820190925260609182918291602082018380368337019050509250845167ffffffffffffffff81111561302657613026613cba565b60405190808252806020026020018201604052801561305957816020015b60608152602001906001900390816130445790505b509150845167ffffffffffffffff81111561307657613076613cba565b60405190808252806020026020018201604052801561309f578160200160208202803683370190505b5090505f5b8551811015613536575f60085f8884815181106130c3576130c3614325565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f816001600160a01b031663a8b2ae026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561312a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061314e91906142c2565b905086838151811061316257613162614325565b60200260200101515167ffffffffffffffff81111561318357613183613cba565b6040519080825280602002602001820160405280156131ac578160200160208202803683370190505b508584815181106131bf576131bf614325565b60200260200101819052505f5b8784815181106131de576131de614325565b6020026020010151518110156133c5577f000000000000000000000000000000000000000000000000000000000000000088858151811061322157613221614325565b6020026020010151828151811061323a5761323a614325565b60200260200101510361328257604051636aba776560e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152602401610754565b5f805f806132dd8e8e8a8151811061329c5761329c614325565b60200260200101518e8b815181106132b6576132b6614325565b602002602001015188815181106132cf576132cf614325565b602002602001015189611681565b5f8181526006602052604090208290558d519397509195509350915084908b908a90811061330d5761330d614325565b6020026020010151868151811061332657613326614325565b6020026020010181815250508389898151811061334557613345614325565b602002602001018181516133599190614484565b9052508a5184908c905f9061337057613370614325565b602002602001018181516133849190614484565b9052508a5183908c90600290811061339e5761339e614325565b602002602001018181516133b29190614484565b90525050600190930192506131cc915050565b505f8484815181106133d9576133d9614325565b602002602001015111156134e8575f60095f8a86815181106133fd576133fd614325565b602002602001015181526020019081526020015f205490505f8111156134e65784848151811061342f5761342f614325565b602002602001015181106134885784848151811061344f5761344f614325565b60200260200101518161346291906142ed565b90505f85858151811061347757613477614325565b6020026020010181815250506134b6565b8085858151811061349b5761349b614325565b602002602001018181516134af91906142ed565b9052505f90505b8060095f8b87815181106134cc576134cc614325565b602002602001015181526020019081526020015f20819055505b505b8383815181106134fa576134fa614325565b60200260200101518660018151811061351557613515614325565b602002602001018181516135299190614484565b90525050506001016130a4565b5093509350939050565b5f5b8651811015613b4d575f60085f89848151811061356157613561614325565b602002602001015181526020019081526020015f205f9054906101000a90046001600160a01b031690505f84838151811061359e5761359e614325565b60200260200101511115613669577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb828685815181106135ee576135ee614325565b60200260200101516040518363ffffffff1660e01b81526004016136279291906001600160a01b03929092168252602082015260400190565b6020604051808303815f875af1158015613643573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136679190614306565b505b5f8088848151811061367d5761367d614325565b60200260200101515167ffffffffffffffff81111561369e5761369e613cba565b6040519080825280602002602001820160405280156136c7578160200160208202803683370190505b5090505f5b8985815181106136de576136de614325565b602002602001015151811015613760575f89868151811061370157613701614325565b6020026020010151828151811061371a5761371a614325565b6020026020010151111561375857600182828151811061373c5761373c614325565b9115156020928302919091019091015261375583614852565b92505b6001016136cc565b50815f0361377057505050613b45565b5f8267ffffffffffffffff81111561378a5761378a613cba565b6040519080825280602002602001820160405280156137b3578160200160208202803683370190505b5090505f8367ffffffffffffffff8111156137d0576137d0613cba565b6040519080825280602002602001820160405280156137f9578160200160208202803683370190505b5090505f805b8c888151811061381157613811614325565b6020026020010151518110156138f55784818151811061383357613833614325565b6020026020010151156138ed578c888151811061385257613852614325565b6020026020010151818151811061386b5761386b614325565b602002602001015184838151811061388557613885614325565b6020026020010181815250508b88815181106138a3576138a3614325565b602002602001015181815181106138bc576138bc614325565b60200260200101518383815181106138d6576138d6614325565b60209081029190910101526138ea82614852565b91505b6001016137ff565b50602461390b600267ffffffffffffffff614780565b61391591906147a6565b67ffffffffffffffff168d888151811061393157613931614325565b602002602001015111613a91575f835167ffffffffffffffff81111561395957613959613cba565b604051908082528060200260200182016040528015613982578160200160208202803683370190505b5090505f5b84518110156139de578481815181106139a2576139a2614325565b60200260200101515f1c8282815181106139be576139be614325565b6001600160a01b0390921660209283029190910190910152600101613987565b50866001600160a01b031663bde526618a8a81518110613a0057613a00614325565b602002602001015183868f8d81518110613a1c57613a1c614325565b60200260200101518f8e81518110613a3657613a36614325565b60200260200101516040518663ffffffff1660e01b8152600401613a5d949392919061486a565b5f604051808303818588803b158015613a74575f80fd5b505af1158015613a86573d5f803e3d5ffd5b505050505050613b3e565b856001600160a01b03166355442b59898981518110613ab257613ab2614325565b602002602001015185858e8c81518110613ace57613ace614325565b60200260200101518e8d81518110613ae857613ae8614325565b60200260200101516040518663ffffffff1660e01b8152600401613b0f94939291906148b4565b5f604051808303818588803b158015613b26575f80fd5b505af1158015613b38573d5f803e3d5ffd5b50505050505b5050505050505b600101613542565b50505050505050565b5f805f60035f9054906101000a90046001600160a01b03166001600160a01b03166314b19c5a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ba9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bcd9190614497565b5f86815260066020526040812054945063ffffffff919091169150839003613c0857604051637c946ed760e01b815260040160405180910390fd5b808303613c3d5782613c1b6001836142ed565b604051637ae5968560e01b815260048101929092526024820152604401610754565b5f858152600760205260409020548015801590613c5a5750808410155b15613c6b5783613c1b6001836142ed565b613c758585614484565b92505f81118015613c8557508083115b15613c8e578092505b81831115613c9a578192505b50509250929050565b5f60208284031215613cb3575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613cf757613cf7613cba565b604052919050565b5f82601f830112613d0e575f80fd5b813567ffffffffffffffff811115613d2857613d28613cba565b613d3b601f8201601f1916602001613cce565b818152846020838601011115613d4f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215613d7e575f80fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115613da9575f80fd5b613db587828801613cff565b91505092959194509250565b5f67ffffffffffffffff821115613dda57613dda613cba565b5060051b60200190565b5f82601f830112613df3575f80fd5b81356020613e08613e0383613dc1565b613cce565b8083825260208201915060208460051b870101935086841115613e29575f80fd5b602086015b84811015613e455780358352918301918301613e2e565b509695505050505050565b5f82601f830112613e5f575f80fd5b81356020613e6f613e0383613dc1565b82815260059290921b84018101918181019086841115613e8d575f80fd5b8286015b84811015613e4557803567ffffffffffffffff811115613eaf575f80fd5b613ebd8986838b0101613cff565b845250918301918301613e91565b5f805f805f60a08688031215613edf575f80fd5b8535945067ffffffffffffffff8060208801351115613efc575f80fd5b613f0c8860208901358901613de4565b94508060408801351115613f1e575f80fd5b6040870135870188601f820112613f33575f80fd5b613f40613e038235613dc1565b81358082526020808301929160051b8401018b1015613f5d575f80fd5b602083015b6020843560051b850101811015613ff7578481351115613f80575f80fd5b803584018c603f820112613f92575f80fd5b613fa2613e036020830135613dc1565b602082810135808352908201919060051b83016040018f811115613fc4575f80fd5b6040840193505b80841015613fe6578335835260209384019390920191613fcb565b508552505060209283019201613f62565b5095505050606087013581101561400c575f80fd5b61401c8860608901358901613e50565b9250806080880135111561402e575f80fd5b5061403f8760808801358801613de4565b90509295509295909350565b5f805f6060848603121561405d575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106140a857634e487b7160e01b5f52602160045260245ffd5b91905290565b5f602082840312156140be575f80fd5b8135600481106140cc575f80fd5b9392505050565b5f805f80608085870312156140e6575f80fd5b5050823594602084013594506040840135936060013592509050565b80356001600160a01b0381168114614118575f80fd5b919050565b5f6020828403121561412d575f80fd5b6140cc82614102565b5f8060408385031215614147575f80fd5b50508035926020909101359150565b5f805f60608486031215614168575f80fd5b61417184614102565b925061417f60208501614102565b915061418d60408501614102565b90509250925092565b5f80604083850312156141a7575f80fd5b823567ffffffffffffffff808211156141be575f80fd5b6141ca86838701613de4565b935060208501359150808211156141df575f80fd5b506141ec85828601613de4565b9150509250929050565b5f8060408385031215614207575f80fd5b823567ffffffffffffffff8082111561421e575f80fd5b818501915085601f830112614231575f80fd5b81356020614241613e0383613dc1565b82815260059290921b8401810191818101908984111561425f575f80fd5b948201945b838610156142845761427586614102565b82529482019490820190614264565b965050860135925050808211156141df575f80fd5b805160ff81168114614118575f80fd5b5f602082840312156142b9575f80fd5b6140cc82614299565b5f602082840312156142d2575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115614300576143006142d9565b92915050565b5f60208284031215614316575f80fd5b815180151581146140cc575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f815180845260208085019450602084015f5b838110156143685781518752958201959082019060010161434c565b509495945050505050565b5f82825180855260208086019550808260051b8401018186015f5b848110156143e157858303601f190189528151805180855290850190858501905f5b818110156143cc578351835292870192918701916001016143b0565b5050998501999350509083019060010161438e565b5090979650505050505050565b60c081525f61440060c0830189614339565b6020838203818501528189518084528284019150828160051b850101838c015f5b8381101561444f57601f1987840301855261443d838351614339565b94860194925090850190600101614421565b50508681036040880152614463818c614373565b606088019a909a525050505060808301949094525060a00152509392505050565b80820180821115614300576143006142d9565b5f602082840312156144a7575f80fd5b815163ffffffff811681146140cc575f80fd5b80516bffffffffffffffffffffffff81168114614118575f80fd5b5f608082840312156144e5575f80fd5b6040516080810181811067ffffffffffffffff8211171561450857614508613cba565b604052614514836144ba565b8152614522602084016144ba565b6020820152604083015161ffff8116811461453b575f80fd5b604082015261454c60608401614299565b60608201529392505050565b5f8060408385031215614569575f80fd5b505080516020909101519092909150565b8082028115828204841417614300576143006142d9565b634e487b7160e01b5f52601260045260245ffd5b5f826145b3576145b3614591565b500490565b600181815b808511156145f257815f19048211156145d8576145d86142d9565b808516156145e557918102915b93841c93908002906145bd565b509250929050565b5f8261460857506001614300565b8161461457505f614300565b816001811461462a576002811461463457614650565b6001915050614300565b60ff841115614645576146456142d9565b50506001821b614300565b5060208310610133831016604e8410600b8410161715614673575081810a614300565b61467d83836145b8565b805f1904821115614690576146906142d9565b029392505050565b5f6140cc83836145fa565b6001600160a01b0384168152606060208201525f6146c46060830185614339565b82810360408401526146d68185614339565b9695505050505050565b848152836020820152608060408201525f6146fe6080830185614339565b82810360608401526147108185614339565b979650505050505050565b5f815180845260208085019450602084015f5b838110156143685781516001600160a01b03168752958201959082019060010161472e565b604081525f614765604083018561471b565b82810360208401526147778185614339565b95945050505050565b5f67ffffffffffffffff8084168061479a5761479a614591565b92169190910492915050565b67ffffffffffffffff8281168282160390808211156147c7576147c76142d9565b5092915050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0385168152836020820152608060408201525f61482360808301856147ce565b905082606083015295945050505050565b848152836020820152608060408201525f61482360808301856147ce565b5f60018201614863576148636142d9565b5060010190565b608081525f61487c608083018761471b565b828103602084015261488e8187614339565b905082810360408401526148a281866147ce565b91505082606083015295945050505050565b608081525f61487c608083018761433956fea26469706673582212204f62b365dfacc16118c8e0397d13c78fb01e19f895ea8e406a87973c6c961c4c64736f6c63430008190033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/scripts/deployment/globals_mainnet.json b/scripts/deployment/globals_mainnet.json index c11ac1ac..b6784bf8 100644 --- a/scripts/deployment/globals_mainnet.json +++ b/scripts/deployment/globals_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","veOLASAddress":"0x7e01A500805f8A52Fad229b3015AD130A332B7b3","governorAddress":"0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5","governorTwoAddress":"0x4E3e48bA826b15214FDe72a50BFd17aB286B584E","componentRegistryAddress":"0x15bd56669F57192a97dF41A2aa8f4403e9491776","agentRegistryAddress":"0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112","serviceRegistryAddress":"0x48b6af7B12C71f09e2fC8aF4855De4Ff54e775cA","epochLen":"2592000","donatorBlacklistAddress":"0xE85791B18F5df42163092Acc5C9da1c479AFEa9d","tokenomicsAddress":"0x87f89F94033305791B6269AE2F9cF4e09983E56e","tokenomicsProxyAddress":"0xc096362fa6f4A4B1a9ea68b1043416f3381ce300","treasuryAddress":"0xa0DA53447C0f6C4987964d8463da7e6628B30f82","genericBondCalculatorAddress":"0x1521918961bDBC9Ed4C67a7103D5999e4130E6CB","depositoryAddress":"0x52A043bcebdB2f939BaEF2E8b6F01652290eAB3f","dispenserAddress":"0xeED0000fE94d7cfeF4Dc0CA86a223f0F603A61B8","tokenomicsTwoAddress":"0xD599ED4a5c45Fa66AA3C474b00701Fd452a2C30e","OLAS_ETH_PairAddress":"0x09D1d767eDF8Fa23A64C51fa559E0688E526812F","depositoryTwoAddress":"0xfF8697d8d2998d6AA2e09B405795C6F4BEeB0C81","XOLAS_WXDAI_PairAddress":"0x27df632fd0dcf191C418c803801D521cd579F18e","tokenomicsThreeAddress":"0x2C1633765c66a7CF0EC801a1046347bBee7344C9","voteWeightingAddress":"0x95418b46d5566D3d1ea62C12Aea91227E566c5c1","retainerAddress":"0x000000000000000000000000000000000000000000000000000000000000dEaD","maxNumClaimingEpochs":"1","maxNumStakingTargets":"10","minStakingWeight":"100","maxStakingIncentive":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","veOLASAddress":"0x7e01A500805f8A52Fad229b3015AD130A332B7b3","governorAddress":"0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5","governorTwoAddress":"0x4E3e48bA826b15214FDe72a50BFd17aB286B584E","componentRegistryAddress":"0x15bd56669F57192a97dF41A2aa8f4403e9491776","agentRegistryAddress":"0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112","serviceRegistryAddress":"0x48b6af7B12C71f09e2fC8aF4855De4Ff54e775cA","epochLen":"2592000","donatorBlacklistAddress":"0xE85791B18F5df42163092Acc5C9da1c479AFEa9d","tokenomicsAddress":"0x87f89F94033305791B6269AE2F9cF4e09983E56e","tokenomicsProxyAddress":"0xc096362fa6f4A4B1a9ea68b1043416f3381ce300","treasuryAddress":"0xa0DA53447C0f6C4987964d8463da7e6628B30f82","genericBondCalculatorAddress":"0x1521918961bDBC9Ed4C67a7103D5999e4130E6CB","depositoryAddress":"0x52A043bcebdB2f939BaEF2E8b6F01652290eAB3f","dispenserAddress":"0xeED0000fE94d7cfeF4Dc0CA86a223f0F603A61B8","tokenomicsTwoAddress":"0xD599ED4a5c45Fa66AA3C474b00701Fd452a2C30e","OLAS_ETH_PairAddress":"0x09D1d767eDF8Fa23A64C51fa559E0688E526812F","depositoryTwoAddress":"0xfF8697d8d2998d6AA2e09B405795C6F4BEeB0C81","XOLAS_WXDAI_PairAddress":"0x27df632fd0dcf191C418c803801D521cd579F18e","tokenomicsThreeAddress":"0x2C1633765c66a7CF0EC801a1046347bBee7344C9","voteWeightingAddress":"0x95418b46d5566d3d1ea62c12aea91227e566c5c1","retainerAddress":"0x000000000000000000000000000000000000000000000000000000000000dEaD","maxNumClaimingEpochs":"1","maxNumStakingTargets":"10","minStakingWeight":"100","maxStakingIncentive":"30000000000000000000000"} \ No newline at end of file From e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 19 Jul 2024 20:09:07 +0100 Subject: [PATCH 24/55] chore: staking deployment scripts --- .gitleaksignore | 2 + docs/deployment_v1.2.md | 16 ++-- scripts/deployment/globals_mainnet.json | 2 +- ...mainnet.json => globals_arbitrum_one.json} | 2 +- .../staking/base/globals_base_mainnet.json | 2 +- .../deploy_05_celo_targer_dispenser.js} | 16 ++-- .../staking/celo/globals_celo_mainnet.json | 1 + .../verify_05_celo_target_dispenser.js} | 0 ...js => deploy_05_celo_deposit_processor.js} | 10 +-- .../deploy_08_ethereum_deposit_processor.js | 62 ++++++++++++++ .../deploy_09_set_targer_dispensers.js | 81 +++++++++++++++++++ .../deployment/staking/globals_mainnet.json | 2 +- .../deployment/staking/globals_sepolia.json | 2 +- .../gnosis/globals_gnosis_mainnet.json | 2 +- .../globals_optimistic_mainnet.json | 2 +- .../polygon/globals_polygon_mainnet.json | 2 +- ...js => verify_05_celo_deposit_processor.js} | 0 .../verify_08_ethereum_deposit_processor.js | 11 +++ .../wormhole/globals_celo_mainnet.json | 1 - ...ge_dispenser_and_set_deposit_processors.js | 63 +++++++++++++++ 20 files changed, 249 insertions(+), 30 deletions(-) rename scripts/deployment/staking/arbitrum/{globals_arbitrum_mainnet.json => globals_arbitrum_one.json} (51%) rename scripts/deployment/staking/{wormhole/deploy_05_celo_wormhole_targer_dispenser.js => celo/deploy_05_celo_targer_dispenser.js} (77%) create mode 100644 scripts/deployment/staking/celo/globals_celo_mainnet.json rename scripts/deployment/staking/{wormhole/verify_05_celo_wormhole_target_dispenser.js => celo/verify_05_celo_target_dispenser.js} (100%) rename scripts/deployment/staking/{deploy_05_celo_wormhole_deposit_processor.js => deploy_05_celo_deposit_processor.js} (81%) create mode 100644 scripts/deployment/staking/deploy_08_ethereum_deposit_processor.js create mode 100644 scripts/deployment/staking/deploy_09_set_targer_dispensers.js rename scripts/deployment/staking/{verify_05_wormhole_deposit_processor.js => verify_05_celo_deposit_processor.js} (100%) create mode 100644 scripts/deployment/staking/verify_08_ethereum_deposit_processor.js delete mode 100644 scripts/deployment/staking/wormhole/globals_celo_mainnet.json create mode 100644 scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js diff --git a/.gitleaksignore b/.gitleaksignore index 57793f77..557a06b4 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -162,3 +162,5 @@ cfe4b8064bfda91d83bd5bdc5af44f2155859ef3:scripts/deployment/staking/wormhole/tes cfe4b8064bfda91d83bd5bdc5af44f2155859ef3:scripts/deployment/staking/wormhole/test/globals_celo_mainnet.json:generic-api-key:2 cfe4b8064bfda91d83bd5bdc5af44f2155859ef3:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:1 cfe4b8064bfda91d83bd5bdc5af44f2155859ef3:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:2 +e09cdb5c34a402545d5a67d65ea31760f7c0fd19:scripts/deployment/globals_mainnet.json:generic-api-key:1 +e09cdb5c34a402545d5a67d65ea31760f7c0fd19:scripts/deployment/globals_mainnet.json:generic-api-key:2 diff --git a/docs/deployment_v1.2.md b/docs/deployment_v1.2.md index 3e534d1e..2583cebc 100644 --- a/docs/deployment_v1.2.md +++ b/docs/deployment_v1.2.md @@ -2,17 +2,17 @@ Steps for deploying the tokenomics version 1.2 contracts are as follows: 1. EOA to deploy Tokenomics implementation (`TokenomicsThree`); 2. TokenomicsProxy to change Tokenomics implementation calling `changeTokenomicsImplementation(TokenomicsThree)`; -3. EOA to deploy Dispenser (`DispenserTwo`) with VoteWeighting contract being deployed before that in `autonolas-governance`; -4. EOA to change Dispenser address in VoteWeighting calling `changeDispenser(DispenserTwo)`; -5. EOA to add a retainer address as a nominee in VoteWeighting; -6. EOA to deploy staking bridging contracts with StakingFactory contract being deployed before that in `autonolas-registries`; -7. EOA to set up correct L1->L2 links for all the bridging contracts calling `setL2TargetDispenser(L2 corresponding contract)`; +3. EOA to deploy Dispenser with VoteWeighting contract being deployed before that in `autonolas-governance`; +4. EOA to change Dispenser address in VoteWeighting calling `changeDispenser(Dispenser)`; +5. DAO to unpause staking incentives in Dispenser calling `setPauseState(0)`; +6. EOA to add a retainer address as a nominee in VoteWeighting; +7. EOA to deploy staking bridging contracts on L1 and L2 with StakingFactory contract being deployed before that in `autonolas-registries`; 8. EOA to transfer ownership rights of Dispenser to Timelock calling `changeOwner(Timelock)`; -9. DAO to change Tokenomics managers calling `changeManagers(ZeroAddress, ZeroAddress, DispenserTwo)`; +9. DAO to change Tokenomics managers calling `changeManagers(ZeroAddress, ZeroAddress, Dispenser)`; 10. DAO to change staking parameters in Tokenomics calling `changeStakingParams()`; -11. DAO to change Treasury managers calling `changeManagers(ZeroAddress, ZeroAddress, DispenserTwo)`; +11. DAO to change Treasury managers calling `changeManagers(ZeroAddress, ZeroAddress, Dispenser)`; 12. DAO to enable bridge deposit processors in Dispenser calling `setDepositProcessorChainIds()`; -13. DAO to unpause staking incentives in Dispenser calling `setPauseState(3)`; +13. EOA to set up correct L1->L2 links for all the bridging contracts calling `setL2TargetDispenser(L2 corresponding contract)`; 14. EOA to transfer ownership rights of all the L2 bridging contracts to Timelock representation calling `changeOwner(Timelock)`. Note for updating VoteWeighting contract address in Dispenser, if required at some point of time. diff --git a/scripts/deployment/globals_mainnet.json b/scripts/deployment/globals_mainnet.json index b6784bf8..9344fce1 100644 --- a/scripts/deployment/globals_mainnet.json +++ b/scripts/deployment/globals_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","veOLASAddress":"0x7e01A500805f8A52Fad229b3015AD130A332B7b3","governorAddress":"0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5","governorTwoAddress":"0x4E3e48bA826b15214FDe72a50BFd17aB286B584E","componentRegistryAddress":"0x15bd56669F57192a97dF41A2aa8f4403e9491776","agentRegistryAddress":"0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112","serviceRegistryAddress":"0x48b6af7B12C71f09e2fC8aF4855De4Ff54e775cA","epochLen":"2592000","donatorBlacklistAddress":"0xE85791B18F5df42163092Acc5C9da1c479AFEa9d","tokenomicsAddress":"0x87f89F94033305791B6269AE2F9cF4e09983E56e","tokenomicsProxyAddress":"0xc096362fa6f4A4B1a9ea68b1043416f3381ce300","treasuryAddress":"0xa0DA53447C0f6C4987964d8463da7e6628B30f82","genericBondCalculatorAddress":"0x1521918961bDBC9Ed4C67a7103D5999e4130E6CB","depositoryAddress":"0x52A043bcebdB2f939BaEF2E8b6F01652290eAB3f","dispenserAddress":"0xeED0000fE94d7cfeF4Dc0CA86a223f0F603A61B8","tokenomicsTwoAddress":"0xD599ED4a5c45Fa66AA3C474b00701Fd452a2C30e","OLAS_ETH_PairAddress":"0x09D1d767eDF8Fa23A64C51fa559E0688E526812F","depositoryTwoAddress":"0xfF8697d8d2998d6AA2e09B405795C6F4BEeB0C81","XOLAS_WXDAI_PairAddress":"0x27df632fd0dcf191C418c803801D521cd579F18e","tokenomicsThreeAddress":"0x2C1633765c66a7CF0EC801a1046347bBee7344C9","voteWeightingAddress":"0x95418b46d5566d3d1ea62c12aea91227e566c5c1","retainerAddress":"0x000000000000000000000000000000000000000000000000000000000000dEaD","maxNumClaimingEpochs":"1","maxNumStakingTargets":"10","minStakingWeight":"100","maxStakingIncentive":"30000000000000000000000"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","veOLASAddress":"0x7e01A500805f8A52Fad229b3015AD130A332B7b3","governorAddress":"0x34C895f302D0b5cf52ec0Edd3945321EB0f83dd5","governorTwoAddress":"0x4E3e48bA826b15214FDe72a50BFd17aB286B584E","componentRegistryAddress":"0x15bd56669F57192a97dF41A2aa8f4403e9491776","agentRegistryAddress":"0x2F1f7D38e4772884b88f3eCd8B6b9faCdC319112","serviceRegistryAddress":"0x48b6af7B12C71f09e2fC8aF4855De4Ff54e775cA","epochLen":"2592000","donatorBlacklistAddress":"0xE85791B18F5df42163092Acc5C9da1c479AFEa9d","tokenomicsAddress":"0x87f89F94033305791B6269AE2F9cF4e09983E56e","tokenomicsProxyAddress":"0xc096362fa6f4A4B1a9ea68b1043416f3381ce300","treasuryAddress":"0xa0DA53447C0f6C4987964d8463da7e6628B30f82","genericBondCalculatorAddress":"0x1521918961bDBC9Ed4C67a7103D5999e4130E6CB","depositoryAddress":"0x52A043bcebdB2f939BaEF2E8b6F01652290eAB3f","dispenserAddress":"0x5650300fCBab43A0D7D02F8Cb5d0f039402593f0","tokenomicsTwoAddress":"0xD599ED4a5c45Fa66AA3C474b00701Fd452a2C30e","OLAS_ETH_PairAddress":"0x09D1d767eDF8Fa23A64C51fa559E0688E526812F","depositoryTwoAddress":"0xfF8697d8d2998d6AA2e09B405795C6F4BEeB0C81","XOLAS_WXDAI_PairAddress":"0x27df632fd0dcf191C418c803801D521cd579F18e","tokenomicsThreeAddress":"0x2C1633765c66a7CF0EC801a1046347bBee7344C9","voteWeightingAddress":"0x95418b46d5566d3d1ea62c12aea91227e566c5c1","retainerAddress":"0x000000000000000000000000000000000000000000000000000000000000dEaD","maxNumClaimingEpochs":"1","maxNumStakingTargets":"10","minStakingWeight":"100","maxStakingIncentive":"30000000000000000000000"} \ No newline at end of file diff --git a/scripts/deployment/staking/arbitrum/globals_arbitrum_mainnet.json b/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json similarity index 51% rename from scripts/deployment/staking/arbitrum/globals_arbitrum_mainnet.json rename to scripts/deployment/staking/arbitrum/globals_arbitrum_one.json index a1476ba6..7b7de135 100644 --- a/scripts/deployment/staking/arbitrum/globals_arbitrum_mainnet.json +++ b/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumOne","networkURL":"https://arb1.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x064F8B858C2A603e1b106a2039f5446D32dc81c1","serviceStakingFactoryAddress":"","timelockAddress":"","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","l1ChainId":"1","arbitrumDepositProcessorL1Address":"","arbitrumTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumOne","networkURL":"https://arb1.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x064F8B858C2A603e1b106a2039f5446D32dc81c1","serviceStakingFactoryAddress":"0xEB5638eefE289691EcE01943f768EDBF96258a80","timelockAddress":"","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","l1ChainId":"1","arbitrumDepositProcessorL1Address":"","arbitrumTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/base/globals_base_mainnet.json b/scripts/deployment/staking/base/globals_base_mainnet.json index c86148c1..69c31c1f 100644 --- a/scripts/deployment/staking/base/globals_base_mainnet.json +++ b/scripts/deployment/staking/base/globals_base_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"2","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","serviceStakingFactoryAddress":"","timelockAddress":"","baseL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","baseDepositProcessorL1Address":"","baseTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"2","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","serviceStakingFactoryAddress":"0x1cEe30D08943EB58EFF84DD1AB44a6ee6FEff63a","timelockAddress":"","baseL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","baseDepositProcessorL1Address":"","baseTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/wormhole/deploy_05_celo_wormhole_targer_dispenser.js b/scripts/deployment/staking/celo/deploy_05_celo_targer_dispenser.js similarity index 77% rename from scripts/deployment/staking/wormhole/deploy_05_celo_wormhole_targer_dispenser.js rename to scripts/deployment/staking/celo/deploy_05_celo_targer_dispenser.js index 3bb9c756..abb9aed6 100644 --- a/scripts/deployment/staking/wormhole/deploy_05_celo_wormhole_targer_dispenser.js +++ b/scripts/deployment/staking/celo/deploy_05_celo_targer_dispenser.js @@ -43,28 +43,28 @@ async function main() { console.log("5. EOA to deploy WormholeTargetDispenserL2"); const WormholeTargetDispenserL2 = await ethers.getContractFactory("WormholeTargetDispenserL2"); console.log("You are signing the following transaction: WormholeTargetDispenserL2.connect(EOA).deploy()"); - const wormholeTargetDispenserL2 = await WormholeTargetDispenserL2.connect(EOA).deploy(parsedData.olasAddress, - parsedData.serviceStakingFactoryAddress, parsedData.wormholeL2MessageRelayer, - parsedData.celoWormholeDepositProcessorL1Address, parsedData.wormholel1ChainId, - parsedData.wormholeL2CoreAddress, parsedData.wormholeL2TokenRelayerAddress); - const result = await wormholeTargetDispenserL2.deployed(); + const celoTargetDispenserL2 = await WormholeTargetDispenserL2.connect(EOA).deploy(parsedData.olasAddress, + parsedData.serviceStakingFactoryAddress, parsedData.celoL2MessageRelayer, + parsedData.celoWormholeDepositProcessorL1Address, parsedData.celol1ChainId, + parsedData.celoL2CoreAddress, parsedData.celoL2TokenRelayerAddress); + const result = await celoTargetDispenserL2.deployed(); // Transaction details console.log("Contract deployment: WormholeTargetDispenserL2"); - console.log("Contract address:", wormholeTargetDispenserL2.address); + console.log("Contract address:", celoTargetDispenserL2.address); console.log("Transaction:", result.deployTransaction.hash); // Wait for half a minute for the transaction completion await new Promise(r => setTimeout(r, 30000)); // Writing updated parameters back to the JSON file - parsedData.celoWormholeTargetDispenserL2Address = wormholeTargetDispenserL2.address; + parsedData.celoTargetDispenserL2Address = celoTargetDispenserL2.address; fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); // Contract verification if (parsedData.contractVerification) { const execSync = require("child_process").execSync; - execSync("npx hardhat verify --constructor-args scripts/deployment/staking/wormhole/verify_05_celo_wormhole_target_dispenser.js --network " + providerName + " " + wormholeTargetDispenserL2.address, { encoding: "utf-8" }); + execSync("npx hardhat verify --constructor-args scripts/deployment/staking/celo/verify_05_celo_target_dispenser.js --network " + providerName + " " + celoTargetDispenserL2.address, { encoding: "utf-8" }); } } diff --git a/scripts/deployment/staking/celo/globals_celo_mainnet.json b/scripts/deployment/staking/celo/globals_celo_mainnet.json new file mode 100644 index 00000000..046eb023 --- /dev/null +++ b/scripts/deployment/staking/celo/globals_celo_mainnet.json @@ -0,0 +1 @@ +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"0x1c2cD884127b080F940b7546c1e9aaf525b1FA55","timelockAddress":"","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"2","celoDepositProcessorL1Address":"","celoTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/wormhole/verify_05_celo_wormhole_target_dispenser.js b/scripts/deployment/staking/celo/verify_05_celo_target_dispenser.js similarity index 100% rename from scripts/deployment/staking/wormhole/verify_05_celo_wormhole_target_dispenser.js rename to scripts/deployment/staking/celo/verify_05_celo_target_dispenser.js diff --git a/scripts/deployment/staking/deploy_05_celo_wormhole_deposit_processor.js b/scripts/deployment/staking/deploy_05_celo_deposit_processor.js similarity index 81% rename from scripts/deployment/staking/deploy_05_celo_wormhole_deposit_processor.js rename to scripts/deployment/staking/deploy_05_celo_deposit_processor.js index 43d8d473..e1aab94e 100644 --- a/scripts/deployment/staking/deploy_05_celo_wormhole_deposit_processor.js +++ b/scripts/deployment/staking/deploy_05_celo_deposit_processor.js @@ -29,15 +29,15 @@ async function main() { console.log("5. EOA to deploy WormholeDepositProcessorL1"); const WormholeDepositProcessorL1 = await ethers.getContractFactory("WormholeDepositProcessorL1"); console.log("You are signing the following transaction: WormholeDepositProcessorL1.connect(EOA).deploy()"); - const wormholeDepositProcessorL1 = await WormholeDepositProcessorL1.connect(EOA).deploy(parsedData.olasAddress, + const celoDepositProcessorL1 = await WormholeDepositProcessorL1.connect(EOA).deploy(parsedData.olasAddress, parsedData.dispenserAddress, parsedData.wormholeL1TokenRelayerAddress, parsedData.wormholeL1MessageRelayerAddress, parsedData.celoL2TargetChainId, parsedData.wormholeL1CoreAddress, parsedData.celoWormholeL2TargetChainId); - const result = await wormholeDepositProcessorL1.deployed(); + const result = await celoDepositProcessorL1.deployed(); // Transaction details console.log("Contract deployment: WormholeDepositProcessorL1"); - console.log("Contract address:", wormholeDepositProcessorL1.address); + console.log("Contract address:", celoDepositProcessorL1.address); console.log("Transaction:", result.deployTransaction.hash); // If on sepolia, wait a minute for the transaction completion @@ -46,13 +46,13 @@ async function main() { } // Writing updated parameters back to the JSON file - parsedData.wormholeDepositProcessorL1Address = wormholeDepositProcessorL1.address; + parsedData.celoDepositProcessorL1Address = celoDepositProcessorL1.address; fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); // Contract verification if (parsedData.contractVerification) { const execSync = require("child_process").execSync; - execSync("npx hardhat verify --constructor-args scripts/deployment/staking/verify_05_wormhole_deposit_processor.js --network " + providerName + " " + wormholeDepositProcessorL1.address, { encoding: "utf-8" }); + execSync("npx hardhat verify --constructor-args scripts/deployment/staking/verify_05_celo_deposit_processor.js --network " + providerName + " " + celoDepositProcessorL1.address, { encoding: "utf-8" }); } } diff --git a/scripts/deployment/staking/deploy_08_ethereum_deposit_processor.js b/scripts/deployment/staking/deploy_08_ethereum_deposit_processor.js new file mode 100644 index 00000000..7a7b3e8a --- /dev/null +++ b/scripts/deployment/staking/deploy_08_ethereum_deposit_processor.js @@ -0,0 +1,62 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + let EOA; + + const provider = await ethers.providers.getDefaultProvider(providerName); + const signers = await ethers.getSigners(); + + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("8. EOA to deploy EthereumDepositProcessor for Base"); + const EthereumDepositProcessor = await ethers.getContractFactory("EthereumDepositProcessor"); + console.log("You are signing the following transaction: EthereumDepositProcessor.connect(EOA).deploy()"); + const ethereumDepositProcessor = await EthereumDepositProcessor.connect(EOA).deploy(parsedData.olasAddress, + parsedData.dispenserAddress, parsedData.serviceStakingFactoryAddress, parsedData.timelockAddress); + const result = await ethereumDepositProcessor.deployed(); + + // Transaction details + console.log("Contract deployment: EthereumDepositProcessor"); + console.log("Contract address:", ethereumDepositProcessor.address); + console.log("Transaction:", result.deployTransaction.hash); + + // If on sepolia, wait a minute for the transaction completion + if (providerName === "sepolia") { + await new Promise(r => setTimeout(r, 30000)); + } + + // Writing updated parameters back to the JSON file + parsedData.ethereumDepositProcessorAddress = ethereumDepositProcessor.address; + fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + + // Contract verification + if (parsedData.contractVerification) { + const execSync = require("child_process").execSync; + execSync("npx hardhat verify --constructor-args scripts/deployment/staking/verify_08_ethereum_deposit_processor.js --network " + providerName + " " + ethereumDepositProcessor.address, { encoding: "utf-8" }); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/deploy_09_set_targer_dispensers.js b/scripts/deployment/staking/deploy_09_set_targer_dispensers.js new file mode 100644 index 00000000..6981d727 --- /dev/null +++ b/scripts/deployment/staking/deploy_09_set_targer_dispensers.js @@ -0,0 +1,81 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const arbitrumDepositProcessorL1Address = parsedData.arbitrumDepositProcessorL1Address; + const arbitrumTargetDispenserL2Address = parsedData.arbitrumTargetDispenserL2Address; + const baseDepositProcessorL1Address = parsedData.baseDepositProcessorL1Address; + const baseTargetDispenserL2Address = parsedData.baseTargetDispenserL2Address; + const celoDepositProcessorL1Address = parsedData.celoDepositProcessorL1Address; + const celoTargetDispenserL2Address = parsedData.celoTargetDispenserL2Address; + const gnosisDepositProcessorL1Address = parsedData.gnosisDepositProcessorL1Address; + const gnosisTargetDispenserL2Address = parsedData.gnosisTargetDispenserL2Address; + const optimismDepositProcessorL1Address = parsedData.optimismDepositProcessorL1Address; + const optimismTargetDispenserL2Address = parsedData.optimismTargetDispenserL2Address; + const polygonDepositProcessorL1Address = parsedData.polygonDepositProcessorL1Address; + const polygonTargetDispenserL2Address = parsedData.polygonTargetDispenserL2Address; + let EOA; + + const provider = await ethers.providers.getDefaultProvider(providerName); + const signers = await ethers.getSigners(); + + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Get all the contracts + const arbitrumDepositProcessorL1 = await ethers.getContractAt("ArbitrumDepositProcessorL1", arbitrumDepositProcessorL1Address); + const baseDepositProcessorL1 = await ethers.getContractAt("OptimismDepositProcessorL1", baseDepositProcessorL1Address); + const celoDepositProcessorL1 = await ethers.getContractAt("WormholeDepositProcessorL1", celoDepositProcessorL1Address); + const gnosisDepositProcessorL1 = await ethers.getContractAt("GnosisDepositProcessorL1", gnosisDepositProcessorL1Address); + const optimismDepositProcessorL1 = await ethers.getContractAt("OptimismDepositProcessorL1", optimismDepositProcessorL1Address); + const polygonDepositProcessorL1 = await ethers.getContractAt("PolygonDepositProcessorL1", polygonDepositProcessorL1); + + // Transaction signing and execution + console.log("9. EOA to set TargetDispenserL2 in DepositProcessorL1"); + + console.log("You are signing the following transaction: ArbitrumDepositProcessorL1.connect(EOA).setL2TargetDispenser()"); + let result = await arbitrumDepositProcessorL1.connect(EOA).setL2TargetDispenser(arbitrumTargetDispenserL2Address); + console.log("Transaction:", result.hash); + + console.log("You are signing the following transaction: OptimismDepositProcessorL1.connect(EOA).setL2TargetDispenser()"); + result = await baseDepositProcessorL1.connect(EOA).setL2TargetDispenser(baseTargetDispenserL2Address); + console.log("Transaction:", result.hash); + + console.log("You are signing the following transaction: WormholeDepositProcessorL1.connect(EOA).setL2TargetDispenser()"); + result = await celoDepositProcessorL1.connect(EOA).setL2TargetDispenser(celoTargetDispenserL2Address); + console.log("Transaction:", result.hash); + + console.log("You are signing the following transaction: GnosisDepositProcessorL1.connect(EOA).setL2TargetDispenser()"); + result = await gnosisDepositProcessorL1.connect(EOA).setL2TargetDispenser(gnosisTargetDispenserL2Address); + console.log("Transaction:", result.hash); + + console.log("You are signing the following transaction: OptimismDepositProcessorL1.connect(EOA).setL2TargetDispenser()"); + result = await optimismDepositProcessorL1.connect(EOA).setL2TargetDispenser(optimismTargetDispenserL2Address); + console.log("Transaction:", result.hash); + + console.log("You are signing the following transaction: PolygonDepositProcessorL1.connect(EOA).setL2TargetDispenser()"); + result = await polygonDepositProcessorL1.connect(EOA).setL2TargetDispenser(polygonTargetDispenserL2Address); + console.log("Transaction:", result.hash); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/globals_mainnet.json b/scripts/deployment/staking/globals_mainnet.json index c69bd060..90ac17e2 100644 --- a/scripts/deployment/staking/globals_mainnet.json +++ b/scripts/deployment/staking/globals_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","dispenserAddress":"","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoWormholeDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":"","baseL1StandardBridgeProxyAddress":"0x3154Cf16ccdb4C6d922629664174b904d80F2C35","baseL1CrossDomainMessengerProxyAddress":"0x866E82a600A1414e583f7F13623F1aC5d58b0Afa","baseOLASAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","baseL2TargetChainId":"8453"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","dispenserAddress":"","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":"","baseL1StandardBridgeProxyAddress":"0x3154Cf16ccdb4C6d922629664174b904d80F2C35","baseL1CrossDomainMessengerProxyAddress":"0x866E82a600A1414e583f7F13623F1aC5d58b0Afa","baseOLASAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","baseL2TargetChainId":"8453","serviceStakingFactoryAddress":"0xEBdde456EA288b49f7D5975E7659bA1Ccf607efc"} \ No newline at end of file diff --git a/scripts/deployment/staking/globals_sepolia.json b/scripts/deployment/staking/globals_sepolia.json index 7b1f6dda..78d3a9ee 100644 --- a/scripts/deployment/staking/globals_sepolia.json +++ b/scripts/deployment/staking/globals_sepolia.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"sepolia","olasAddress":"0xeb2725bD76f6b1569Cf1484fCa0f2D55714A085d","dispenserAddress":"0x42f43be9E5E50df51b86C5c6427223ff565f40C6","arbitrumL1ERC20GatewayRouterAddress":"0xcE18836b233C83325Cc8848CA4487e94C6288264","arbitrumL1ERC20GatewayAddress":"0x902b3E5f8F19571859F4AB1003B960a5dF693aFF","arbitrumInboxAddress":"0xaAe29B0366299461418F5324a79Afc425BE5ae21","arbitrumOutboxAddress":"0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F","arbitrumBridgeAddress":"0x38f918D0E9F1b721EDaA41302E399fa1B79333a9","arbitrumL2TargetChainId":"421614","arbitrumDepositProcessorL1Address":"0xACd410f51DA5aAe1fF925565FBCB6B6eedbB00E2","gnosisOmniBridgeAddress":"0x63E47C5e3303DDDCaF3b404B1CCf9Eb633652e9e","gnosisAMBForeignAddress":"0xf2546D6648BD2af6a008A7e7C1542BB240329E11","gnosisL2TargetChainId":"10200","gnosisDepositProcessorL1Address":"0x679Ce81a7bab6808534137585850dc81F90Ea8a4","optimisticL1StandardBridgeProxyAddress":"0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1","optimisticL1CrossDomainMessengerProxyAddress":"0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef","optimisticOLASAddress":"0x01B8b6384298D4848E3BE63D4C9D17830EeE488A","optimisticL2TargetChainId":"11155420","optimismDepositProcessorL1Address":"0xDc6B77e32e751C7d6e1d1c39A64c64a8F0049E21","wormholeL1CoreAddress":"0x4a8bc80Ed5a4067f1CCf107057b8270E0cC11A78","wormholeL1TokenRelayerAddress":"0xDB5492265f6038831E89f495670FF909aDe94bd9","wormholeL1MessageRelayerAddress":"0x7B1bD7a6b4E61c2a123AC6BC2cbfC614437D0470","celoL2TargetChainId":"44787","celoWormholeL2TargetChainId":"14","celoWormholeDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0x34F5A25B627f50Bb3f5cAb72807c4D4F405a9232","polygonFXRootAddress":"0x0E13EBEdDb8cf9f5987512d5E081FdC2F5b0991e","polygonCheckpointManagerAddress":"0xbd07D7E1E93c8d4b2a261327F3C28a8EA7167209","polygonERC20PredicateAddress":"0x4258c75b752c812b7fa586bdeb259f2d4bd17f4f","polygonL2TargetChainId":"80002","polygonDepositProcessorL1Address":"0x36c1beAFBeaf65DFcF16De60867BF9525455bf4E"} \ No newline at end of file +{"contractVerification":true,"useLedger":false,"derivationPath":"m/44'/60'/2'/0/0","providerName":"sepolia","olasAddress":"0xeb2725bD76f6b1569Cf1484fCa0f2D55714A085d","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","dispenserAddress":"0x42f43be9E5E50df51b86C5c6427223ff565f40C6","arbitrumL1ERC20GatewayRouterAddress":"0xcE18836b233C83325Cc8848CA4487e94C6288264","arbitrumL1ERC20GatewayAddress":"0x902b3E5f8F19571859F4AB1003B960a5dF693aFF","arbitrumInboxAddress":"0xaAe29B0366299461418F5324a79Afc425BE5ae21","arbitrumOutboxAddress":"0x65f07C7D521164a4d5DaC6eB8Fac8DA067A3B78F","arbitrumBridgeAddress":"0x38f918D0E9F1b721EDaA41302E399fa1B79333a9","arbitrumL2TargetChainId":"421614","arbitrumDepositProcessorL1Address":"0xACd410f51DA5aAe1fF925565FBCB6B6eedbB00E2","gnosisOmniBridgeAddress":"0x63E47C5e3303DDDCaF3b404B1CCf9Eb633652e9e","gnosisAMBForeignAddress":"0xf2546D6648BD2af6a008A7e7C1542BB240329E11","gnosisL2TargetChainId":"10200","gnosisDepositProcessorL1Address":"0x679Ce81a7bab6808534137585850dc81F90Ea8a4","optimisticL1StandardBridgeProxyAddress":"0xFBb0621E0B23b5478B630BD55a5f21f67730B0F1","optimisticL1CrossDomainMessengerProxyAddress":"0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef","optimisticOLASAddress":"0x01B8b6384298D4848E3BE63D4C9D17830EeE488A","optimisticL2TargetChainId":"11155420","optimismDepositProcessorL1Address":"0xDc6B77e32e751C7d6e1d1c39A64c64a8F0049E21","wormholeL1CoreAddress":"0x4a8bc80Ed5a4067f1CCf107057b8270E0cC11A78","wormholeL1TokenRelayerAddress":"0xDB5492265f6038831E89f495670FF909aDe94bd9","wormholeL1MessageRelayerAddress":"0x7B1bD7a6b4E61c2a123AC6BC2cbfC614437D0470","celoL2TargetChainId":"44787","celoWormholeL2TargetChainId":"14","celoWormholeDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0x34F5A25B627f50Bb3f5cAb72807c4D4F405a9232","polygonFXRootAddress":"0x0E13EBEdDb8cf9f5987512d5E081FdC2F5b0991e","polygonCheckpointManagerAddress":"0xbd07D7E1E93c8d4b2a261327F3C28a8EA7167209","polygonERC20PredicateAddress":"0x4258c75b752c812b7fa586bdeb259f2d4bd17f4f","polygonL2TargetChainId":"80002","polygonDepositProcessorL1Address":"0x36c1beAFBeaf65DFcF16De60867BF9525455bf4E","serviceStakingFactoryAddress":"0x01187451346d46D6fd2e6647a2980E0d6C06d4Da"} \ No newline at end of file diff --git a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json index 6cfea4ef..ed0289fe 100644 --- a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json +++ b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"","timelockAddress":"","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"","gnosisTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"0xb0228CA253A88Bc8eb4ca70BCAC8f87b381f4700","timelockAddress":"","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"","gnosisTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json index fb8d8d7c..e7550cfa 100644 --- a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json +++ b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"","timelockAddress":"","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"","optimismTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"0xa45E64d13A30a51b91ae0eb182e88a40e9b18eD8","timelockAddress":"","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"","optimismTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/polygon/globals_polygon_mainnet.json b/scripts/deployment/staking/polygon/globals_polygon_mainnet.json index e3f6b464..e3d1f27b 100644 --- a/scripts/deployment/staking/polygon/globals_polygon_mainnet.json +++ b/scripts/deployment/staking/polygon/globals_polygon_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","networkURL":"https://polygon-mainnet.g.alchemy.com/v2/","gasPriceInGwei":"5","olasAddress":"0xFEF5d947472e72Efbb2E388c730B7428406F2F95","serviceStakingFactoryAddress":"","timelockAddress":"","polygonFXChildAddress":"0x8397259c983751DAf40400790063935a11afa28a","l1ChainId":"1","polygonDepositProcessorL1Address":"","polygonTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","networkURL":"https://polygon-mainnet.g.alchemy.com/v2/","gasPriceInGwei":"5","olasAddress":"0xFEF5d947472e72Efbb2E388c730B7428406F2F95","serviceStakingFactoryAddress":"0x46C0D07F55d4F9B5Eed2Fc9680B5953e5fd7b461","timelockAddress":"","polygonFXChildAddress":"0x8397259c983751DAf40400790063935a11afa28a","l1ChainId":"1","polygonDepositProcessorL1Address":"","polygonTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/verify_05_wormhole_deposit_processor.js b/scripts/deployment/staking/verify_05_celo_deposit_processor.js similarity index 100% rename from scripts/deployment/staking/verify_05_wormhole_deposit_processor.js rename to scripts/deployment/staking/verify_05_celo_deposit_processor.js diff --git a/scripts/deployment/staking/verify_08_ethereum_deposit_processor.js b/scripts/deployment/staking/verify_08_ethereum_deposit_processor.js new file mode 100644 index 00000000..d1a3c206 --- /dev/null +++ b/scripts/deployment/staking/verify_08_ethereum_deposit_processor.js @@ -0,0 +1,11 @@ +const fs = require("fs"); +const globalsFile = "globals.json"; +const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); +const parsedData = JSON.parse(dataFromJSON); + +module.exports = [ + parsedData.olasAddress, + parsedData.dispenserAddress, + parsedData.serviceStakingFactoryAddress, + parsedData.timelockAddress +]; \ No newline at end of file diff --git a/scripts/deployment/staking/wormhole/globals_celo_mainnet.json b/scripts/deployment/staking/wormhole/globals_celo_mainnet.json deleted file mode 100644 index cbaf8205..00000000 --- a/scripts/deployment/staking/wormhole/globals_celo_mainnet.json +++ /dev/null @@ -1 +0,0 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"","timelockAddress":"","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"2","celoWormholeDepositProcessorL1Address":"","celoWormholeTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js b/scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js new file mode 100644 index 00000000..76f421c0 --- /dev/null +++ b/scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js @@ -0,0 +1,63 @@ +/*global process*/ + +const { ethers } = require("hardhat"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const providerName = parsedData.providerName; + + const provider = await ethers.providers.getDefaultProvider(providerName); + + // Get all the necessary contract addresses + const tokenomicsProxyAddress = parsedData.tokenomicsProxyAddress; + const treasuryAddress = parsedData.treasuryAddress; + const dispenserAddress = parsedData.dispenserAddress; + const arbitrumDepositProcessorL1Address = parsedData.arbitrumDepositProcessorL1Address; + const baseDepositProcessorL1Address = parsedData.baseDepositProcessorL1Address; + const celoDepositProcessorL1Address = parsedData.celoDepositProcessorL1Address; + const ethereumDepositProcessorAddress = parsedData.ethereumDepositProcessorAddress; + const gnosisDepositProcessorL1Address = parsedData.gnosisDepositProcessorL1Address; + const optimismDepositProcessorL1Address = parsedData.optimismDepositProcessorL1Address; + const polygonDepositProcessorL1Address = parsedData.polygonDepositProcessorL1Address; + const minStakingWeight = parsedData.minStakingWeight; + const maxStakingIncentive = parsedData.maxStakingIncentive; + + // Get contract instances + const tokenomics = await ethers.getContractAt("Tokenomics", tokenomicsProxyAddress); + const treasury = await ethers.getContractAt("Treasury", treasuryAddress); + const dispenser = await ethers.getContractAt("Dispenser", dispenserAddress); + + const AddressZero = ethers.constants.AddressZero; + + // Proposal preparation + console.log("Proposal 9. Change dispenser address in tokenomics and treasury, manage deposit processors"); + const targets = [tokenomicsProxyAddress, tokenomicsProxyAddress, treasuryAddress, dispenserAddress]; + const values = [0, 0, 0, 0]; + const callDatas = [ + tokenomics.interface.encodeFunctionData("changeManagers", [AddressZero, AddressZero, dispenserAddress]), + tokenomics.interface.encodeFunctionData("changeStakingParams", [maxStakingIncentive, minStakingWeight]), + treasury.interface.encodeFunctionData("changeManagers", [AddressZero, AddressZero, dispenserAddress]), + dispenser.interface.encodeFunctionData([arbitrumDepositProcessorL1Address, baseDepositProcessorL1Address, + celoDepositProcessorL1Address, ethereumDepositProcessorAddress, gnosisDepositProcessorL1Address, + optimismDepositProcessorL1Address, polygonDepositProcessorL1Address], + [42161, 8453, 42220, 1, 100, 10, 137]) + ]; + + const description = "Change Dispenser address in Tokenomics and Treasury, manage deposit processors"; + + // Proposal details + console.log("targets:", targets); + console.log("values:", values); + console.log("call datas:", callDatas); + console.log("description:", description); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); From 583c4489ce42093dd31ffe64800489e127e3df01 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 19 Jul 2024 20:14:28 +0100 Subject: [PATCH 25/55] chore: gitleaksignore --- .gitleaksignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitleaksignore b/.gitleaksignore index 557a06b4..4d2424eb 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -164,3 +164,5 @@ cfe4b8064bfda91d83bd5bdc5af44f2155859ef3:scripts/deployment/staking/wormhole/glo cfe4b8064bfda91d83bd5bdc5af44f2155859ef3:scripts/deployment/staking/wormhole/globals_celo_mainnet.json:generic-api-key:2 e09cdb5c34a402545d5a67d65ea31760f7c0fd19:scripts/deployment/globals_mainnet.json:generic-api-key:1 e09cdb5c34a402545d5a67d65ea31760f7c0fd19:scripts/deployment/globals_mainnet.json:generic-api-key:2 +02f626605f59ee89a44152d2d8723c848174e44:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 +f02f626605f59ee89a44152d2d8723c848174e44:scripts/deployment/globals_mainnet.json:generic-api-key:2 From d3c5ea3ef6d62f5cfb51d2485b74133f84d40f7d Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 19 Jul 2024 20:18:59 +0100 Subject: [PATCH 26/55] chore: updating globals --- scripts/deployment/staking/globals_mainnet.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deployment/staking/globals_mainnet.json b/scripts/deployment/staking/globals_mainnet.json index 90ac17e2..9b669ecc 100644 --- a/scripts/deployment/staking/globals_mainnet.json +++ b/scripts/deployment/staking/globals_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","dispenserAddress":"","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":"","baseL1StandardBridgeProxyAddress":"0x3154Cf16ccdb4C6d922629664174b904d80F2C35","baseL1CrossDomainMessengerProxyAddress":"0x866E82a600A1414e583f7F13623F1aC5d58b0Afa","baseOLASAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","baseL2TargetChainId":"8453","serviceStakingFactoryAddress":"0xEBdde456EA288b49f7D5975E7659bA1Ccf607efc"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","dispenserAddress":"0x5650300fCBab43A0D7D02F8Cb5d0f039402593f0","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":"","baseL1StandardBridgeProxyAddress":"0x3154Cf16ccdb4C6d922629664174b904d80F2C35","baseL1CrossDomainMessengerProxyAddress":"0x866E82a600A1414e583f7F13623F1aC5d58b0Afa","baseOLASAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","baseL2TargetChainId":"8453","serviceStakingFactoryAddress":"0xEBdde456EA288b49f7D5975E7659bA1Ccf607efc"} \ No newline at end of file From d79d6210c89d103448e32b7c915903c8a8b8d87a Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Fri, 19 Jul 2024 21:43:51 +0100 Subject: [PATCH 27/55] chore: deploying staking contracts --- docs/deployment_v1.2.md | 2 +- .../deployment/staking/arbitrum/globals_arbitrum_one.json | 2 +- scripts/deployment/staking/base/globals_base_mainnet.json | 2 +- scripts/deployment/staking/celo/globals_celo_mainnet.json | 2 +- scripts/deployment/staking/globals_mainnet.json | 2 +- .../deployment/staking/gnosis/globals_gnosis_mainnet.json | 2 +- .../staking/optimistic/globals_optimistic_mainnet.json | 2 +- .../staking/polygon/deploy_06_polygon_targer_dispenser.js | 6 +++++- .../staking/polygon/globals_polygon_mainnet.json | 2 +- ...osal_09_change_dispenser_and_set_deposit_processors.js | 8 ++++---- 10 files changed, 17 insertions(+), 13 deletions(-) diff --git a/docs/deployment_v1.2.md b/docs/deployment_v1.2.md index 2583cebc..d6be74db 100644 --- a/docs/deployment_v1.2.md +++ b/docs/deployment_v1.2.md @@ -4,7 +4,7 @@ Steps for deploying the tokenomics version 1.2 contracts are as follows: 2. TokenomicsProxy to change Tokenomics implementation calling `changeTokenomicsImplementation(TokenomicsThree)`; 3. EOA to deploy Dispenser with VoteWeighting contract being deployed before that in `autonolas-governance`; 4. EOA to change Dispenser address in VoteWeighting calling `changeDispenser(Dispenser)`; -5. DAO to unpause staking incentives in Dispenser calling `setPauseState(0)`; +5. EOA to unpause staking incentives in Dispenser calling `setPauseState(0)`; 6. EOA to add a retainer address as a nominee in VoteWeighting; 7. EOA to deploy staking bridging contracts on L1 and L2 with StakingFactory contract being deployed before that in `autonolas-registries`; 8. EOA to transfer ownership rights of Dispenser to Timelock calling `changeOwner(Timelock)`; diff --git a/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json b/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json index 7b7de135..0eaee802 100644 --- a/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json +++ b/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumOne","networkURL":"https://arb1.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x064F8B858C2A603e1b106a2039f5446D32dc81c1","serviceStakingFactoryAddress":"0xEB5638eefE289691EcE01943f768EDBF96258a80","timelockAddress":"","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","l1ChainId":"1","arbitrumDepositProcessorL1Address":"","arbitrumTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumOne","networkURL":"https://arb1.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x064F8B858C2A603e1b106a2039f5446D32dc81c1","serviceStakingFactoryAddress":"0xEB5638eefE289691EcE01943f768EDBF96258a80","timelockAddress":"","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","l1ChainId":"1","arbitrumDepositProcessorL1Address":"0x5e13E07006D68B097DCb5979ef5545C4f9156162","arbitrumTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/base/globals_base_mainnet.json b/scripts/deployment/staking/base/globals_base_mainnet.json index 69c31c1f..50cc5f72 100644 --- a/scripts/deployment/staking/base/globals_base_mainnet.json +++ b/scripts/deployment/staking/base/globals_base_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"2","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","serviceStakingFactoryAddress":"0x1cEe30D08943EB58EFF84DD1AB44a6ee6FEff63a","timelockAddress":"","baseL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","baseDepositProcessorL1Address":"","baseTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"2","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","serviceStakingFactoryAddress":"0x1cEe30D08943EB58EFF84DD1AB44a6ee6FEff63a","timelockAddress":"","baseL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","baseDepositProcessorL1Address":"0x42BA1BbD797E4C90F386F03a544F3b62C1f917d0","baseTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/celo/globals_celo_mainnet.json b/scripts/deployment/staking/celo/globals_celo_mainnet.json index 046eb023..38af836c 100644 --- a/scripts/deployment/staking/celo/globals_celo_mainnet.json +++ b/scripts/deployment/staking/celo/globals_celo_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"0x1c2cD884127b080F940b7546c1e9aaf525b1FA55","timelockAddress":"","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"2","celoDepositProcessorL1Address":"","celoTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"0x1c2cD884127b080F940b7546c1e9aaf525b1FA55","timelockAddress":"","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"2","celoDepositProcessorL1Address":"0x223902b6C583f18E8dc84AF4E6a8fa523d088B78","celoTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/globals_mainnet.json b/scripts/deployment/staking/globals_mainnet.json index 9b669ecc..493922af 100644 --- a/scripts/deployment/staking/globals_mainnet.json +++ b/scripts/deployment/staking/globals_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","dispenserAddress":"0x5650300fCBab43A0D7D02F8Cb5d0f039402593f0","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoDepositProcessorL1Address":"","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":"","baseL1StandardBridgeProxyAddress":"0x3154Cf16ccdb4C6d922629664174b904d80F2C35","baseL1CrossDomainMessengerProxyAddress":"0x866E82a600A1414e583f7F13623F1aC5d58b0Afa","baseOLASAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","baseL2TargetChainId":"8453","serviceStakingFactoryAddress":"0xEBdde456EA288b49f7D5975E7659bA1Ccf607efc"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","dispenserAddress":"0x5650300fCBab43A0D7D02F8Cb5d0f039402593f0","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"0x5e13E07006D68B097DCb5979ef5545C4f9156162","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"0xAB787ceebe8F2b8dca44e3bB744D6e63003ee978","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoDepositProcessorL1Address":"0x223902b6C583f18E8dc84AF4E6a8fa523d088B78","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":"0x4Ce43b82EF1298E1466D3b3Cee67BA6680bF82FB","baseL1StandardBridgeProxyAddress":"0x3154Cf16ccdb4C6d922629664174b904d80F2C35","baseL1CrossDomainMessengerProxyAddress":"0x866E82a600A1414e583f7F13623F1aC5d58b0Afa","baseOLASAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","baseL2TargetChainId":"8453","baseDepositProcessorL1Address":"0x42BA1BbD797E4C90F386F03a544F3b62C1f917d0","serviceStakingFactoryAddress":"0xEBdde456EA288b49f7D5975E7659bA1Ccf607efc","ethereumDepositProcessorAddress":"0x15CD7fAeE048c7673aB818C9e582630F1a924593"} \ No newline at end of file diff --git a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json index ed0289fe..3c910ff5 100644 --- a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json +++ b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"0xb0228CA253A88Bc8eb4ca70BCAC8f87b381f4700","timelockAddress":"","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"","gnosisTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"0xb0228CA253A88Bc8eb4ca70BCAC8f87b381f4700","timelockAddress":"","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0","gnosisTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json index e7550cfa..a0423085 100644 --- a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json +++ b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"0xa45E64d13A30a51b91ae0eb182e88a40e9b18eD8","timelockAddress":"","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"","optimismTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"0xa45E64d13A30a51b91ae0eb182e88a40e9b18eD8","timelockAddress":"","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"0xAB787ceebe8F2b8dca44e3bB744D6e63003ee978","optimismTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/deployment/staking/polygon/deploy_06_polygon_targer_dispenser.js b/scripts/deployment/staking/polygon/deploy_06_polygon_targer_dispenser.js index 10b7f502..45cbeab6 100644 --- a/scripts/deployment/staking/polygon/deploy_06_polygon_targer_dispenser.js +++ b/scripts/deployment/staking/polygon/deploy_06_polygon_targer_dispenser.js @@ -48,7 +48,7 @@ async function main() { const polygonTargetDispenserL2 = await PolygonTargetDispenserL2.connect(EOA).deploy(parsedData.olasAddress, parsedData.serviceStakingFactoryAddress, parsedData.polygonFXChildAddress, parsedData.polygonDepositProcessorL1Address, parsedData.l1ChainId, { gasPrice }); - const result = await polygonTargetDispenserL2.deployed(); + let result = await polygonTargetDispenserL2.deployed(); // Transaction details console.log("Contract deployment: PolygonTargetDispenserL2"); @@ -62,6 +62,10 @@ async function main() { parsedData.polygonTargetDispenserL2Address = polygonTargetDispenserL2.address; fs.writeFileSync(globalsFile, JSON.stringify(parsedData)); + console.log("You are signing the following transaction: PolygonTargetDispenserL2.connect(EOA).setFxRootTunnel()"); + result = await polygonTargetDispenserL2.setFxRootTunnel(parsedData.polygonDepositProcessorL1Address); + console.log("Transaction:", result.hash); + // Contract verification if (parsedData.contractVerification) { const execSync = require("child_process").execSync; diff --git a/scripts/deployment/staking/polygon/globals_polygon_mainnet.json b/scripts/deployment/staking/polygon/globals_polygon_mainnet.json index e3d1f27b..1eea6199 100644 --- a/scripts/deployment/staking/polygon/globals_polygon_mainnet.json +++ b/scripts/deployment/staking/polygon/globals_polygon_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","networkURL":"https://polygon-mainnet.g.alchemy.com/v2/","gasPriceInGwei":"5","olasAddress":"0xFEF5d947472e72Efbb2E388c730B7428406F2F95","serviceStakingFactoryAddress":"0x46C0D07F55d4F9B5Eed2Fc9680B5953e5fd7b461","timelockAddress":"","polygonFXChildAddress":"0x8397259c983751DAf40400790063935a11afa28a","l1ChainId":"1","polygonDepositProcessorL1Address":"","polygonTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","networkURL":"https://polygon-mainnet.g.alchemy.com/v2/","gasPriceInGwei":"5","olasAddress":"0xFEF5d947472e72Efbb2E388c730B7428406F2F95","serviceStakingFactoryAddress":"0x46C0D07F55d4F9B5Eed2Fc9680B5953e5fd7b461","timelockAddress":"","polygonFXChildAddress":"0x8397259c983751DAf40400790063935a11afa28a","l1ChainId":"1","polygonDepositProcessorL1Address":"0x4Ce43b82EF1298E1466D3b3Cee67BA6680bF82FB","polygonTargetDispenserL2Address":""} \ No newline at end of file diff --git a/scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js b/scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js index 76f421c0..b6f6a388 100644 --- a/scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js +++ b/scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js @@ -40,10 +40,10 @@ async function main() { tokenomics.interface.encodeFunctionData("changeManagers", [AddressZero, AddressZero, dispenserAddress]), tokenomics.interface.encodeFunctionData("changeStakingParams", [maxStakingIncentive, minStakingWeight]), treasury.interface.encodeFunctionData("changeManagers", [AddressZero, AddressZero, dispenserAddress]), - dispenser.interface.encodeFunctionData([arbitrumDepositProcessorL1Address, baseDepositProcessorL1Address, - celoDepositProcessorL1Address, ethereumDepositProcessorAddress, gnosisDepositProcessorL1Address, - optimismDepositProcessorL1Address, polygonDepositProcessorL1Address], - [42161, 8453, 42220, 1, 100, 10, 137]) + dispenser.interface.encodeFunctionData("setDepositProcessorChainIds", [[arbitrumDepositProcessorL1Address, + baseDepositProcessorL1Address, celoDepositProcessorL1Address, ethereumDepositProcessorAddress, + gnosisDepositProcessorL1Address, optimismDepositProcessorL1Address, polygonDepositProcessorL1Address], + [42161, 8453, 42220, 1, 100, 10, 137]]) ]; const description = "Change Dispenser address in Tokenomics and Treasury, manage deposit processors"; From b92c814bbbab19139c4d40d31f7d0394e2796d0f Mon Sep 17 00:00:00 2001 From: David Minarsch Date: Fri, 19 Jul 2024 22:49:53 +0100 Subject: [PATCH 28/55] chore: deploy target dispensers --- .../deployment/staking/arbitrum/globals_arbitrum_one.json | 2 +- scripts/deployment/staking/base/globals_base_mainnet.json | 2 +- .../staking/celo/deploy_05_celo_targer_dispenser.js | 6 +++--- scripts/deployment/staking/celo/globals_celo_mainnet.json | 2 +- .../deployment/staking/gnosis/globals_gnosis_mainnet.json | 2 +- .../staking/optimistic/globals_optimistic_mainnet.json | 2 +- .../deployment/staking/polygon/globals_polygon_mainnet.json | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json b/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json index 0eaee802..6943f3d5 100644 --- a/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json +++ b/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumOne","networkURL":"https://arb1.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x064F8B858C2A603e1b106a2039f5446D32dc81c1","serviceStakingFactoryAddress":"0xEB5638eefE289691EcE01943f768EDBF96258a80","timelockAddress":"","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","l1ChainId":"1","arbitrumDepositProcessorL1Address":"0x5e13E07006D68B097DCb5979ef5545C4f9156162","arbitrumTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumOne","networkURL":"https://arb1.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x064F8B858C2A603e1b106a2039f5446D32dc81c1","serviceStakingFactoryAddress":"0xEB5638eefE289691EcE01943f768EDBF96258a80","timelockAddress":"","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","l1ChainId":"1","arbitrumDepositProcessorL1Address":"0x5e13E07006D68B097DCb5979ef5545C4f9156162","arbitrumTargetDispenserL2Address":"0x10c5525F77F13b28f42c5626240c001c2D57CAd4"} \ No newline at end of file diff --git a/scripts/deployment/staking/base/globals_base_mainnet.json b/scripts/deployment/staking/base/globals_base_mainnet.json index 50cc5f72..a6640187 100644 --- a/scripts/deployment/staking/base/globals_base_mainnet.json +++ b/scripts/deployment/staking/base/globals_base_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"2","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","serviceStakingFactoryAddress":"0x1cEe30D08943EB58EFF84DD1AB44a6ee6FEff63a","timelockAddress":"","baseL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","baseDepositProcessorL1Address":"0x42BA1BbD797E4C90F386F03a544F3b62C1f917d0","baseTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"2","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","serviceStakingFactoryAddress":"0x1cEe30D08943EB58EFF84DD1AB44a6ee6FEff63a","timelockAddress":"","baseL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","baseDepositProcessorL1Address":"0x42BA1BbD797E4C90F386F03a544F3b62C1f917d0","baseTargetDispenserL2Address":"0xcDdD9D9ABaB36fFa882530D69c73FeE5D4001C2d"} \ No newline at end of file diff --git a/scripts/deployment/staking/celo/deploy_05_celo_targer_dispenser.js b/scripts/deployment/staking/celo/deploy_05_celo_targer_dispenser.js index abb9aed6..cfe1d7b6 100644 --- a/scripts/deployment/staking/celo/deploy_05_celo_targer_dispenser.js +++ b/scripts/deployment/staking/celo/deploy_05_celo_targer_dispenser.js @@ -44,9 +44,9 @@ async function main() { const WormholeTargetDispenserL2 = await ethers.getContractFactory("WormholeTargetDispenserL2"); console.log("You are signing the following transaction: WormholeTargetDispenserL2.connect(EOA).deploy()"); const celoTargetDispenserL2 = await WormholeTargetDispenserL2.connect(EOA).deploy(parsedData.olasAddress, - parsedData.serviceStakingFactoryAddress, parsedData.celoL2MessageRelayer, - parsedData.celoWormholeDepositProcessorL1Address, parsedData.celol1ChainId, - parsedData.celoL2CoreAddress, parsedData.celoL2TokenRelayerAddress); + parsedData.serviceStakingFactoryAddress, parsedData.wormholeL2MessageRelayer, + parsedData.celoDepositProcessorL1Address, parsedData.wormholel1ChainId, + parsedData.wormholeL2CoreAddress, parsedData.wormholeL2TokenRelayerAddress); const result = await celoTargetDispenserL2.deployed(); // Transaction details diff --git a/scripts/deployment/staking/celo/globals_celo_mainnet.json b/scripts/deployment/staking/celo/globals_celo_mainnet.json index 38af836c..ec8058c7 100644 --- a/scripts/deployment/staking/celo/globals_celo_mainnet.json +++ b/scripts/deployment/staking/celo/globals_celo_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"0x1c2cD884127b080F940b7546c1e9aaf525b1FA55","timelockAddress":"","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"2","celoDepositProcessorL1Address":"0x223902b6C583f18E8dc84AF4E6a8fa523d088B78","celoTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"0x1c2cD884127b080F940b7546c1e9aaf525b1FA55","timelockAddress":"","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"2","celoDepositProcessorL1Address":"0x223902b6C583f18E8dc84AF4E6a8fa523d088B78","celoTargetDispenserL2Address":"0xb4096d181C08DDF75f1A63918cCa0d1023C4e6C7"} \ No newline at end of file diff --git a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json index 3c910ff5..37a56e96 100644 --- a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json +++ b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"0xb0228CA253A88Bc8eb4ca70BCAC8f87b381f4700","timelockAddress":"","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0","gnosisTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"0xb0228CA253A88Bc8eb4ca70BCAC8f87b381f4700","timelockAddress":"","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0","gnosisTargetDispenserL2Address":"0x67722c823010CEb4BED5325fE109196C0f67D053"} \ No newline at end of file diff --git a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json index a0423085..84be078f 100644 --- a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json +++ b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"0xa45E64d13A30a51b91ae0eb182e88a40e9b18eD8","timelockAddress":"","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"0xAB787ceebe8F2b8dca44e3bB744D6e63003ee978","optimismTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"0xa45E64d13A30a51b91ae0eb182e88a40e9b18eD8","timelockAddress":"","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"0xAB787ceebe8F2b8dca44e3bB744D6e63003ee978","optimismTargetDispenserL2Address":"0x04b0007b2aFb398015B76e5f22993a1fddF83644"} \ No newline at end of file diff --git a/scripts/deployment/staking/polygon/globals_polygon_mainnet.json b/scripts/deployment/staking/polygon/globals_polygon_mainnet.json index 1eea6199..9ba8200c 100644 --- a/scripts/deployment/staking/polygon/globals_polygon_mainnet.json +++ b/scripts/deployment/staking/polygon/globals_polygon_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","networkURL":"https://polygon-mainnet.g.alchemy.com/v2/","gasPriceInGwei":"5","olasAddress":"0xFEF5d947472e72Efbb2E388c730B7428406F2F95","serviceStakingFactoryAddress":"0x46C0D07F55d4F9B5Eed2Fc9680B5953e5fd7b461","timelockAddress":"","polygonFXChildAddress":"0x8397259c983751DAf40400790063935a11afa28a","l1ChainId":"1","polygonDepositProcessorL1Address":"0x4Ce43b82EF1298E1466D3b3Cee67BA6680bF82FB","polygonTargetDispenserL2Address":""} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","networkURL":"https://polygon-mainnet.g.alchemy.com/v2/","gasPriceInGwei":"5","olasAddress":"0xFEF5d947472e72Efbb2E388c730B7428406F2F95","serviceStakingFactoryAddress":"0x46C0D07F55d4F9B5Eed2Fc9680B5953e5fd7b461","timelockAddress":"","polygonFXChildAddress":"0x8397259c983751DAf40400790063935a11afa28a","l1ChainId":"1","polygonDepositProcessorL1Address":"0x4Ce43b82EF1298E1466D3b3Cee67BA6680bF82FB","polygonTargetDispenserL2Address":"0xf76953444C35F1FcE2F6CA1b167173357d3F5C17"} \ No newline at end of file From a1fb94f332608c58c44aed99a08fea5fb08fc6ed Mon Sep 17 00:00:00 2001 From: David Minarsch Date: Fri, 19 Jul 2024 22:57:10 +0100 Subject: [PATCH 29/55] chore: prepp staking/deploy_09 --- scripts/deployment/staking/deploy_09_set_targer_dispensers.js | 2 +- scripts/deployment/staking/globals_mainnet.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/deployment/staking/deploy_09_set_targer_dispensers.js b/scripts/deployment/staking/deploy_09_set_targer_dispensers.js index 6981d727..fc4c427b 100644 --- a/scripts/deployment/staking/deploy_09_set_targer_dispensers.js +++ b/scripts/deployment/staking/deploy_09_set_targer_dispensers.js @@ -43,7 +43,7 @@ async function main() { const celoDepositProcessorL1 = await ethers.getContractAt("WormholeDepositProcessorL1", celoDepositProcessorL1Address); const gnosisDepositProcessorL1 = await ethers.getContractAt("GnosisDepositProcessorL1", gnosisDepositProcessorL1Address); const optimismDepositProcessorL1 = await ethers.getContractAt("OptimismDepositProcessorL1", optimismDepositProcessorL1Address); - const polygonDepositProcessorL1 = await ethers.getContractAt("PolygonDepositProcessorL1", polygonDepositProcessorL1); + const polygonDepositProcessorL1 = await ethers.getContractAt("PolygonDepositProcessorL1", polygonDepositProcessorL1Address); // Transaction signing and execution console.log("9. EOA to set TargetDispenserL2 in DepositProcessorL1"); diff --git a/scripts/deployment/staking/globals_mainnet.json b/scripts/deployment/staking/globals_mainnet.json index 493922af..f39c24d8 100644 --- a/scripts/deployment/staking/globals_mainnet.json +++ b/scripts/deployment/staking/globals_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","dispenserAddress":"0x5650300fCBab43A0D7D02F8Cb5d0f039402593f0","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"0x5e13E07006D68B097DCb5979ef5545C4f9156162","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"0xAB787ceebe8F2b8dca44e3bB744D6e63003ee978","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoDepositProcessorL1Address":"0x223902b6C583f18E8dc84AF4E6a8fa523d088B78","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":"0x4Ce43b82EF1298E1466D3b3Cee67BA6680bF82FB","baseL1StandardBridgeProxyAddress":"0x3154Cf16ccdb4C6d922629664174b904d80F2C35","baseL1CrossDomainMessengerProxyAddress":"0x866E82a600A1414e583f7F13623F1aC5d58b0Afa","baseOLASAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","baseL2TargetChainId":"8453","baseDepositProcessorL1Address":"0x42BA1BbD797E4C90F386F03a544F3b62C1f917d0","serviceStakingFactoryAddress":"0xEBdde456EA288b49f7D5975E7659bA1Ccf607efc","ethereumDepositProcessorAddress":"0x15CD7fAeE048c7673aB818C9e582630F1a924593"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"mainnet","olasAddress":"0x0001A500A6B18995B03f44bb040A5fFc28E45CB0","timelockAddress":"0x3C1fF68f5aa342D296d4DEe4Bb1cACCA912D95fE","dispenserAddress":"0x5650300fCBab43A0D7D02F8Cb5d0f039402593f0","arbitrumL1ERC20GatewayRouterAddress":"0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef","arbitrumL1ERC20GatewayAddress":"0xa3A7B6F88361F48403514059F1F16C8E78d60EeC","arbitrumInboxAddress":"0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f","arbitrumOutboxAddress":"0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840","arbitrumBridgeAddress":"0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a","arbitrumL2TargetChainId":"42161","arbitrumDepositProcessorL1Address":"0x5e13E07006D68B097DCb5979ef5545C4f9156162","gnosisOmniBridgeAddress":"0x88ad09518695c6c3712AC10a214bE5109a655671","gnosisAMBForeignAddress":"0x4C36d2919e407f0Cc2Ee3c993ccF8ac26d9CE64e","gnosisL2TargetChainId":"100","gnosisDepositProcessorL1Address":"0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0","optimisticL1StandardBridgeProxyAddress":"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1","optimisticL1CrossDomainMessengerProxyAddress":"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1","optimisticOLASAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","optimisticL2TargetChainId":"10","optimismDepositProcessorL1Address":"0xAB787ceebe8F2b8dca44e3bB744D6e63003ee978","wormholeL1CoreAddress":"0x98f3c9e6E3fAce36bAAd05FE09d375Ef1464288B","wormholeL1TokenRelayerAddress":"0x3ee18B2214AFF97000D974cf647E7C347E8fa585","wormholeL1MessageRelayerAddress":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","celoL2TargetChainId":"42220","celoWormholeL2TargetChainId":"14","celoDepositProcessorL1Address":"0x223902b6C583f18E8dc84AF4E6a8fa523d088B78","polygonRootChainManagerProxyAddress":"0xA0c68C638235ee32657e8f720a23ceC1bFc77C77","polygonFXRootAddress":"0xfe5e5D361b2ad62c541bAb87C45a0B9B018389a2","polygonCheckpointManagerAddress":"0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287","polygonERC20PredicateAddress":"0x40ec5B33f54e0E8A33A975908C5BA1c14e5BbbDf","polygonL2TargetChainId":"137","polygonDepositProcessorL1Address":"0x4Ce43b82EF1298E1466D3b3Cee67BA6680bF82FB","baseL1StandardBridgeProxyAddress":"0x3154Cf16ccdb4C6d922629664174b904d80F2C35","baseL1CrossDomainMessengerProxyAddress":"0x866E82a600A1414e583f7F13623F1aC5d58b0Afa","baseOLASAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","baseL2TargetChainId":"8453","baseDepositProcessorL1Address":"0x42BA1BbD797E4C90F386F03a544F3b62C1f917d0","serviceStakingFactoryAddress":"0xEBdde456EA288b49f7D5975E7659bA1Ccf607efc","ethereumDepositProcessorAddress":"0x15CD7fAeE048c7673aB818C9e582630F1a924593","arbitrumTargetDispenserL2Address":"0x10c5525F77F13b28f42c5626240c001c2D57CAd4","baseTargetDispenserL2Address":"0xcDdD9D9ABaB36fFa882530D69c73FeE5D4001C2d","celoTargetDispenserL2Address":"0xb4096d181C08DDF75f1A63918cCa0d1023C4e6C7","gnosisTargetDispenserL2Address":"0x67722c823010CEb4BED5325fE109196C0f67D053","optimismTargetDispenserL2Address":"0x04b0007b2aFb398015B76e5f22993a1fddF83644","polygonTargetDispenserL2Address":"0xf76953444C35F1FcE2F6CA1b167173357d3F5C17"} \ No newline at end of file From b8f1fe453a5b55e052e1ee36ded6832c3c776d9c Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Sat, 20 Jul 2024 08:26:24 +0100 Subject: [PATCH 30/55] chore: continue with deployment scripts --- .../deploy_09_set_targer_dispensers.js | 2 +- .../deploy_10_set_deposit_processors.js | 59 +++++++++++++++++++ ...nge_dispenser_and_disable_previous_one.js} | 24 +++++--- 3 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 scripts/deployment/staking/deploy_10_set_deposit_processors.js rename scripts/proposals/{proposal_09_change_dispenser_and_set_deposit_processors.js => proposal_09_change_dispenser_and_disable_previous_one.js} (75%) diff --git a/scripts/deployment/staking/deploy_09_set_targer_dispensers.js b/scripts/deployment/staking/deploy_09_set_targer_dispensers.js index 6981d727..fc4c427b 100644 --- a/scripts/deployment/staking/deploy_09_set_targer_dispensers.js +++ b/scripts/deployment/staking/deploy_09_set_targer_dispensers.js @@ -43,7 +43,7 @@ async function main() { const celoDepositProcessorL1 = await ethers.getContractAt("WormholeDepositProcessorL1", celoDepositProcessorL1Address); const gnosisDepositProcessorL1 = await ethers.getContractAt("GnosisDepositProcessorL1", gnosisDepositProcessorL1Address); const optimismDepositProcessorL1 = await ethers.getContractAt("OptimismDepositProcessorL1", optimismDepositProcessorL1Address); - const polygonDepositProcessorL1 = await ethers.getContractAt("PolygonDepositProcessorL1", polygonDepositProcessorL1); + const polygonDepositProcessorL1 = await ethers.getContractAt("PolygonDepositProcessorL1", polygonDepositProcessorL1Address); // Transaction signing and execution console.log("9. EOA to set TargetDispenserL2 in DepositProcessorL1"); diff --git a/scripts/deployment/staking/deploy_10_set_deposit_processors.js b/scripts/deployment/staking/deploy_10_set_deposit_processors.js new file mode 100644 index 00000000..3375d234 --- /dev/null +++ b/scripts/deployment/staking/deploy_10_set_deposit_processors.js @@ -0,0 +1,59 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const arbitrumDepositProcessorL1Address = parsedData.arbitrumDepositProcessorL1Address; + const baseDepositProcessorL1Address = parsedData.baseDepositProcessorL1Address; + const celoDepositProcessorL1Address = parsedData.celoDepositProcessorL1Address; + const gnosisDepositProcessorL1Address = parsedData.gnosisDepositProcessorL1Address; + const optimismDepositProcessorL1Address = parsedData.optimismDepositProcessorL1Address; + const polygonDepositProcessorL1Address = parsedData.polygonDepositProcessorL1Address; + let EOA; + + const provider = await ethers.providers.getDefaultProvider(providerName); + const signers = await ethers.getSigners(); + + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Get all the contracts + const arbitrumDepositProcessorL1 = await ethers.getContractAt("ArbitrumDepositProcessorL1", arbitrumDepositProcessorL1Address); + const baseDepositProcessorL1 = await ethers.getContractAt("OptimismDepositProcessorL1", baseDepositProcessorL1Address); + const celoDepositProcessorL1 = await ethers.getContractAt("WormholeDepositProcessorL1", celoDepositProcessorL1Address); + const gnosisDepositProcessorL1 = await ethers.getContractAt("GnosisDepositProcessorL1", gnosisDepositProcessorL1Address); + const optimismDepositProcessorL1 = await ethers.getContractAt("OptimismDepositProcessorL1", optimismDepositProcessorL1Address); + const polygonDepositProcessorL1 = await ethers.getContractAt("PolygonDepositProcessorL1", polygonDepositProcessorL1Address); + + // Transaction signing and execution + console.log("10. EOA to set deposit processors in Dispenser"); + console.log("You are signing the following transaction: Dispenser.connect(EOA).setDepositProcessorChainIds()"); + const ethereumChainId = (await provider.getNetwork()).chainId; + const result = await setL2TargetDispenser.connect(EOA).setDepositProcessorChainIds([arbitrumDepositProcessorL1Address, + baseDepositProcessorL1Address, celoDepositProcessorL1Address, ethereumDepositProcessorAddress, + gnosisDepositProcessorL1Address, optimismDepositProcessorL1Address, polygonDepositProcessorL1Address], + [parsedData.arbitrumL2TargetChainId, parsedData.baseL2TargetChainId, parsedData.celoL2TargetChainId, ethereumChainId, + parsedData.gnosisL2TargetChainId, parsedData.optimisticL2TargetChainId, parsedData.polygonL2TargetChainId]); + console.log("Transaction:", result.hash); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js b/scripts/proposals/proposal_09_change_dispenser_and_disable_previous_one.js similarity index 75% rename from scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js rename to scripts/proposals/proposal_09_change_dispenser_and_disable_previous_one.js index b6f6a388..f3a93114 100644 --- a/scripts/proposals/proposal_09_change_dispenser_and_set_deposit_processors.js +++ b/scripts/proposals/proposal_09_change_dispenser_and_disable_previous_one.js @@ -28,25 +28,31 @@ async function main() { // Get contract instances const tokenomics = await ethers.getContractAt("Tokenomics", tokenomicsProxyAddress); const treasury = await ethers.getContractAt("Treasury", treasuryAddress); - const dispenser = await ethers.getContractAt("Dispenser", dispenserAddress); + + const oldDispenserAddress = "0xeED0000fE94d7cfeF4Dc0CA86a223f0F603A61B8"; + const dispenserJSON = "abis/0.8.18/Dispenser.json"; + const contractFromJSON = fs.readFileSync(dispenserJSON, "utf8"); + const parsedFile = JSON.parse(contractFromJSON); + const abi = parsedFile["abi"]; + const oldDispenser = new ethers.Contract(oldDispenserAddress, abi, provider); const AddressZero = ethers.constants.AddressZero; + const AddressNull = "0x000000000000000000000000000000000000dEaD"; // Proposal preparation - console.log("Proposal 9. Change dispenser address in tokenomics and treasury, manage deposit processors"); - const targets = [tokenomicsProxyAddress, tokenomicsProxyAddress, treasuryAddress, dispenserAddress]; - const values = [0, 0, 0, 0]; + console.log("Proposal 9. Change dispenser address in tokenomics and treasury, disable old Dispenser"); + const targets = [tokenomicsProxyAddress, tokenomicsProxyAddress, treasuryAddress, oldDispenserAddress, + oldDispenserAddress]; + const values = [0, 0, 0, 0, 0]; const callDatas = [ tokenomics.interface.encodeFunctionData("changeManagers", [AddressZero, AddressZero, dispenserAddress]), tokenomics.interface.encodeFunctionData("changeStakingParams", [maxStakingIncentive, minStakingWeight]), treasury.interface.encodeFunctionData("changeManagers", [AddressZero, AddressZero, dispenserAddress]), - dispenser.interface.encodeFunctionData("setDepositProcessorChainIds", [[arbitrumDepositProcessorL1Address, - baseDepositProcessorL1Address, celoDepositProcessorL1Address, ethereumDepositProcessorAddress, - gnosisDepositProcessorL1Address, optimismDepositProcessorL1Address, polygonDepositProcessorL1Address], - [42161, 8453, 42220, 1, 100, 10, 137]]) + oldDispenser.interface.encodeFunctionData("changeManagers", [AddressNull, AddressNull]), + oldDispenser.interface.encodeFunctionData("changeOwner", [AddressNull]) ]; - const description = "Change Dispenser address in Tokenomics and Treasury, manage deposit processors"; + const description = "Change Dispenser address in Tokenomics and Treasury, disable old Dispenser"; // Proposal details console.log("targets:", targets); From fbab175e7863996c19b22e08207de72ccd5435ca Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Sat, 20 Jul 2024 09:35:56 +0100 Subject: [PATCH 31/55] chore: linter --- .../staking/deploy_09_set_targer_dispensers.js | 2 +- .../staking/deploy_10_set_deposit_processors.js | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/scripts/deployment/staking/deploy_09_set_targer_dispensers.js b/scripts/deployment/staking/deploy_09_set_targer_dispensers.js index fc4c427b..95871b3e 100644 --- a/scripts/deployment/staking/deploy_09_set_targer_dispensers.js +++ b/scripts/deployment/staking/deploy_09_set_targer_dispensers.js @@ -46,7 +46,7 @@ async function main() { const polygonDepositProcessorL1 = await ethers.getContractAt("PolygonDepositProcessorL1", polygonDepositProcessorL1Address); // Transaction signing and execution - console.log("9. EOA to set TargetDispenserL2 in DepositProcessorL1"); + console.log("9. EOA to set TargetDispenserL2 in DepositProcessorL1-s"); console.log("You are signing the following transaction: ArbitrumDepositProcessorL1.connect(EOA).setL2TargetDispenser()"); let result = await arbitrumDepositProcessorL1.connect(EOA).setL2TargetDispenser(arbitrumTargetDispenserL2Address); diff --git a/scripts/deployment/staking/deploy_10_set_deposit_processors.js b/scripts/deployment/staking/deploy_10_set_deposit_processors.js index 3375d234..bc5bf434 100644 --- a/scripts/deployment/staking/deploy_10_set_deposit_processors.js +++ b/scripts/deployment/staking/deploy_10_set_deposit_processors.js @@ -17,6 +17,8 @@ async function main() { const gnosisDepositProcessorL1Address = parsedData.gnosisDepositProcessorL1Address; const optimismDepositProcessorL1Address = parsedData.optimismDepositProcessorL1Address; const polygonDepositProcessorL1Address = parsedData.polygonDepositProcessorL1Address; + const ethereumDepositProcessorAddress = parsedData.ethereumDepositProcessorAddress; + const dispenserAddress = parsedData.dispenserAddress; let EOA; const provider = await ethers.providers.getDefaultProvider(providerName); @@ -38,16 +40,17 @@ async function main() { const gnosisDepositProcessorL1 = await ethers.getContractAt("GnosisDepositProcessorL1", gnosisDepositProcessorL1Address); const optimismDepositProcessorL1 = await ethers.getContractAt("OptimismDepositProcessorL1", optimismDepositProcessorL1Address); const polygonDepositProcessorL1 = await ethers.getContractAt("PolygonDepositProcessorL1", polygonDepositProcessorL1Address); + const dispenser = await ethers.getContractAt("Dispenser", dispenserAddress); // Transaction signing and execution console.log("10. EOA to set deposit processors in Dispenser"); console.log("You are signing the following transaction: Dispenser.connect(EOA).setDepositProcessorChainIds()"); const ethereumChainId = (await provider.getNetwork()).chainId; - const result = await setL2TargetDispenser.connect(EOA).setDepositProcessorChainIds([arbitrumDepositProcessorL1Address, - baseDepositProcessorL1Address, celoDepositProcessorL1Address, ethereumDepositProcessorAddress, - gnosisDepositProcessorL1Address, optimismDepositProcessorL1Address, polygonDepositProcessorL1Address], - [parsedData.arbitrumL2TargetChainId, parsedData.baseL2TargetChainId, parsedData.celoL2TargetChainId, ethereumChainId, - parsedData.gnosisL2TargetChainId, parsedData.optimisticL2TargetChainId, parsedData.polygonL2TargetChainId]); + const result = await dispenser.connect(EOA).setDepositProcessorChainIds([arbitrumDepositProcessorL1Address, + baseDepositProcessorL1Address, celoDepositProcessorL1Address, ethereumDepositProcessorAddress, + gnosisDepositProcessorL1Address, optimismDepositProcessorL1Address, polygonDepositProcessorL1Address], + [parsedData.arbitrumL2TargetChainId, parsedData.baseL2TargetChainId, parsedData.celoL2TargetChainId, ethereumChainId, + parsedData.gnosisL2TargetChainId, parsedData.optimisticL2TargetChainId, parsedData.polygonL2TargetChainId]); console.log("Transaction:", result.hash); } From 5da0726504df2a91ce154da21dadf03566ca6c89 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Sat, 20 Jul 2024 09:37:30 +0100 Subject: [PATCH 32/55] chore: gitleaksignore --- .gitleaksignore | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.gitleaksignore b/.gitleaksignore index 4d2424eb..3156ba94 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -166,3 +166,21 @@ e09cdb5c34a402545d5a67d65ea31760f7c0fd19:scripts/deployment/globals_mainnet.json e09cdb5c34a402545d5a67d65ea31760f7c0fd19:scripts/deployment/globals_mainnet.json:generic-api-key:2 02f626605f59ee89a44152d2d8723c848174e44:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 f02f626605f59ee89a44152d2d8723c848174e44:scripts/deployment/globals_mainnet.json:generic-api-key:2 +a1fb94f332608c58c44aed99a08fea5fb08fc6ed:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 +b92c814bbbab19139c4d40d31f7d0394e2796d0f:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:1 +d3c5ea3ef6d62f5cfb51d2485b74133f84d40f7d:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 +d79d6210c89d103448e32b7c915903c8a8b8d87a:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:1 +d79d6210c89d103448e32b7c915903c8a8b8d87a:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 +e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/globals_mainnet.json:generic-api-key:1 +e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:1 +e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/globals_mainnet.json:generic-api-key:1 +e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/globals_sepolia.json:generic-api-key:1 +a1fb94f332608c58c44aed99a08fea5fb08fc6ed:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 +b92c814bbbab19139c4d40d31f7d0394e2796d0f:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:2 +d3c5ea3ef6d62f5cfb51d2485b74133f84d40f7d:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 +d79d6210c89d103448e32b7c915903c8a8b8d87a:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:2 +d79d6210c89d103448e32b7c915903c8a8b8d87a:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 +e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/globals_mainnet.json:generic-api-key:2 +e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:2 +e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 +e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 From 28a4c202535c6869aac11c650a89e7028092a90c Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Sat, 20 Jul 2024 09:39:23 +0100 Subject: [PATCH 33/55] chore: linter --- .../deployment/staking/deploy_10_set_deposit_processors.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/deployment/staking/deploy_10_set_deposit_processors.js b/scripts/deployment/staking/deploy_10_set_deposit_processors.js index bc5bf434..ddc68cff 100644 --- a/scripts/deployment/staking/deploy_10_set_deposit_processors.js +++ b/scripts/deployment/staking/deploy_10_set_deposit_processors.js @@ -47,10 +47,10 @@ async function main() { console.log("You are signing the following transaction: Dispenser.connect(EOA).setDepositProcessorChainIds()"); const ethereumChainId = (await provider.getNetwork()).chainId; const result = await dispenser.connect(EOA).setDepositProcessorChainIds([arbitrumDepositProcessorL1Address, - baseDepositProcessorL1Address, celoDepositProcessorL1Address, ethereumDepositProcessorAddress, - gnosisDepositProcessorL1Address, optimismDepositProcessorL1Address, polygonDepositProcessorL1Address], + baseDepositProcessorL1Address, celoDepositProcessorL1Address, ethereumDepositProcessorAddress, + gnosisDepositProcessorL1Address, optimismDepositProcessorL1Address, polygonDepositProcessorL1Address], [parsedData.arbitrumL2TargetChainId, parsedData.baseL2TargetChainId, parsedData.celoL2TargetChainId, ethereumChainId, - parsedData.gnosisL2TargetChainId, parsedData.optimisticL2TargetChainId, parsedData.polygonL2TargetChainId]); + parsedData.gnosisL2TargetChainId, parsedData.optimisticL2TargetChainId, parsedData.polygonL2TargetChainId]); console.log("Transaction:", result.hash); } From b616524545db2768fb9a3772ffd05c6e0a7f2d8b Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 22 Jul 2024 11:35:04 +0100 Subject: [PATCH 34/55] chore: adding scripts to update owners on L2 --- .../arbitrum/deploy_21_change_owner.js | 48 +++++++++++++++++++ .../arbitrum/globals_arbitrum_one.json | 2 +- .../staking/base/deploy_71_change_owner.js | 48 +++++++++++++++++++ .../staking/base/globals_base_mainnet.json | 2 +- .../staking/celo/deploy_051_change_owner.js | 48 +++++++++++++++++++ .../staking/celo/globals_celo_mainnet.json | 2 +- .../staking/gnosis/deploy_031_change_owner.js | 48 +++++++++++++++++++ .../gnosis/globals_gnosis_mainnet.json | 2 +- .../optimistic/deploy_41_change_owner.js | 48 +++++++++++++++++++ .../globals_optimistic_mainnet.json | 2 +- .../staking/polygon/deploy_61_change_owner.js | 48 +++++++++++++++++++ .../polygon/globals_polygon_mainnet.json | 2 +- 12 files changed, 294 insertions(+), 6 deletions(-) create mode 100644 scripts/deployment/staking/arbitrum/deploy_21_change_owner.js create mode 100644 scripts/deployment/staking/base/deploy_71_change_owner.js create mode 100644 scripts/deployment/staking/celo/deploy_051_change_owner.js create mode 100644 scripts/deployment/staking/gnosis/deploy_031_change_owner.js create mode 100644 scripts/deployment/staking/optimistic/deploy_41_change_owner.js create mode 100644 scripts/deployment/staking/polygon/deploy_61_change_owner.js diff --git a/scripts/deployment/staking/arbitrum/deploy_21_change_owner.js b/scripts/deployment/staking/arbitrum/deploy_21_change_owner.js new file mode 100644 index 00000000..6d3fc97d --- /dev/null +++ b/scripts/deployment/staking/arbitrum/deploy_21_change_owner.js @@ -0,0 +1,48 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const arbitrumTargetDispenserL2Address = parsedData.arbitrumTargetDispenserL2Address; + const bridgeMediatorAddress = parsedData.bridgeMediatorAddress; + + let networkURL = parsedData.networkURL; + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("21. EOA to change owner in ArbitrumTargetDispenserL2"); + const ArbitrumTargetDispenserL2 = await ethers.getContractAt("ArbitrumTargetDispenserL2", arbitrumTargetDispenserL2Address); + console.log("You are signing the following transaction: ArbitrumTargetDispenserL2.connect(EOA).changeOwner()"); + const result = await arbitrumTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); + + // Transaction details + console.log("Contract deployment: ArbitrumTargetDispenserL2"); + console.log("Contract address:", arbitrumTargetDispenserL2.address); + console.log("Transaction:", result.hash); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json b/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json index 6943f3d5..cc50b481 100644 --- a/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json +++ b/scripts/deployment/staking/arbitrum/globals_arbitrum_one.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumOne","networkURL":"https://arb1.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x064F8B858C2A603e1b106a2039f5446D32dc81c1","serviceStakingFactoryAddress":"0xEB5638eefE289691EcE01943f768EDBF96258a80","timelockAddress":"","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","l1ChainId":"1","arbitrumDepositProcessorL1Address":"0x5e13E07006D68B097DCb5979ef5545C4f9156162","arbitrumTargetDispenserL2Address":"0x10c5525F77F13b28f42c5626240c001c2D57CAd4"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"arbitrumOne","networkURL":"https://arb1.arbitrum.io/rpc","gasPriceInGwei":"5","olasAddress":"0x064F8B858C2A603e1b106a2039f5446D32dc81c1","serviceStakingFactoryAddress":"0xEB5638eefE289691EcE01943f768EDBF96258a80","bridgeMediatorAddress":"0x4d30F68F5AA342d296d4deE4bB1Cacca912dA70F","arbitrumArbSysAddress":"0x0000000000000000000000000000000000000064","l1ChainId":"1","arbitrumDepositProcessorL1Address":"0x5e13E07006D68B097DCb5979ef5545C4f9156162","arbitrumTargetDispenserL2Address":"0x10c5525F77F13b28f42c5626240c001c2D57CAd4"} \ No newline at end of file diff --git a/scripts/deployment/staking/base/deploy_71_change_owner.js b/scripts/deployment/staking/base/deploy_71_change_owner.js new file mode 100644 index 00000000..676943b2 --- /dev/null +++ b/scripts/deployment/staking/base/deploy_71_change_owner.js @@ -0,0 +1,48 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const baseTargetDispenserL2Address = parsedData.baseTargetDispenserL2Address; + const bridgeMediatorAddress = parsedData.bridgeMediatorAddress; + + let networkURL = parsedData.networkURL; + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("71. EOA to change owner in OptimismTargetDispenserL2 (Base)"); + const OptimismTargetDispenserL2 = await ethers.getContractAt("OptimismTargetDispenserL2", baseTargetDispenserL2Address); + console.log("You are signing the following transaction: OptimismTargetDispenserL2.connect(EOA).changeOwner()"); + const result = await baseTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); + + // Transaction details + console.log("Contract deployment: OptimismTargetDispenserL2"); + console.log("Contract address:", baseTargetDispenserL2.address); + console.log("Transaction:", result.hash); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/base/globals_base_mainnet.json b/scripts/deployment/staking/base/globals_base_mainnet.json index a6640187..0feae934 100644 --- a/scripts/deployment/staking/base/globals_base_mainnet.json +++ b/scripts/deployment/staking/base/globals_base_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"2","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","serviceStakingFactoryAddress":"0x1cEe30D08943EB58EFF84DD1AB44a6ee6FEff63a","timelockAddress":"","baseL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","baseDepositProcessorL1Address":"0x42BA1BbD797E4C90F386F03a544F3b62C1f917d0","baseTargetDispenserL2Address":"0xcDdD9D9ABaB36fFa882530D69c73FeE5D4001C2d"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"base","networkURL":"https://mainnet.base.org","gasPriceInGwei":"2","olasAddress":"0x54330d28ca3357F294334BDC454a032e7f353416","serviceStakingFactoryAddress":"0x1cEe30D08943EB58EFF84DD1AB44a6ee6FEff63a","bridgeMediatorAddress":"0xE49CB081e8d96920C38aA7AB90cb0294ab4Bc8EA","baseL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","baseDepositProcessorL1Address":"0x42BA1BbD797E4C90F386F03a544F3b62C1f917d0","baseTargetDispenserL2Address":"0xcDdD9D9ABaB36fFa882530D69c73FeE5D4001C2d"} \ No newline at end of file diff --git a/scripts/deployment/staking/celo/deploy_051_change_owner.js b/scripts/deployment/staking/celo/deploy_051_change_owner.js new file mode 100644 index 00000000..86a6dd91 --- /dev/null +++ b/scripts/deployment/staking/celo/deploy_051_change_owner.js @@ -0,0 +1,48 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const celoTargetDispenserL2Address = parsedData.celoTargetDispenserL2Address; + const bridgeMediatorAddress = parsedData.bridgeMediatorAddress; + + let networkURL = parsedData.networkURL; + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("51. EOA to change owner in WormholeTargetDispenserL2 (Celo)"); + const WormholeTargetDispenserL2 = await ethers.getContractAt("WormholeTargetDispenserL2", celoTargetDispenserL2Address); + console.log("You are signing the following transaction: WormholeTargetDispenserL2.connect(EOA).changeOwner()"); + const result = await celoTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); + + // Transaction details + console.log("Contract deployment: WormholeTargetDispenserL2"); + console.log("Contract address:", celoTargetDispenserL2.address); + console.log("Transaction:", result.hash); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/celo/globals_celo_mainnet.json b/scripts/deployment/staking/celo/globals_celo_mainnet.json index ec8058c7..69e8f1aa 100644 --- a/scripts/deployment/staking/celo/globals_celo_mainnet.json +++ b/scripts/deployment/staking/celo/globals_celo_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"0x1c2cD884127b080F940b7546c1e9aaf525b1FA55","timelockAddress":"","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"2","celoDepositProcessorL1Address":"0x223902b6C583f18E8dc84AF4E6a8fa523d088B78","celoTargetDispenserL2Address":"0xb4096d181C08DDF75f1A63918cCa0d1023C4e6C7"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"0x1c2cD884127b080F940b7546c1e9aaf525b1FA55","bridgeMediatorAddress":"0x397125902ED2cA2d42104F621f448A2cE1bC8Fb7","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"2","celoDepositProcessorL1Address":"0x223902b6C583f18E8dc84AF4E6a8fa523d088B78","celoTargetDispenserL2Address":"0xb4096d181C08DDF75f1A63918cCa0d1023C4e6C7"} \ No newline at end of file diff --git a/scripts/deployment/staking/gnosis/deploy_031_change_owner.js b/scripts/deployment/staking/gnosis/deploy_031_change_owner.js new file mode 100644 index 00000000..bfa68ce4 --- /dev/null +++ b/scripts/deployment/staking/gnosis/deploy_031_change_owner.js @@ -0,0 +1,48 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const gnosisTargetDispenserL2Address = parsedData.gnosisTargetDispenserL2Address; + const bridgeMediatorAddress = parsedData.bridgeMediatorAddress; + + let networkURL = parsedData.networkURL; + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("31. EOA to change owner in GnosisTargetDispenserL2"); + const GnosisTargetDispenserL2 = await ethers.getContractAt("GnosisTargetDispenserL2", gnosisTargetDispenserL2Address); + console.log("You are signing the following transaction: GnosisTargetDispenserL2.connect(EOA).changeOwner()"); + const result = await gnosisTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); + + // Transaction details + console.log("Contract deployment: GnosisTargetDispenserL2"); + console.log("Contract address:", gnosisTargetDispenserL2.address); + console.log("Transaction:", result.hash); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json index 37a56e96..d02dee98 100644 --- a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json +++ b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"0xb0228CA253A88Bc8eb4ca70BCAC8f87b381f4700","timelockAddress":"","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0","gnosisTargetDispenserL2Address":"0x67722c823010CEb4BED5325fE109196C0f67D053"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"0xb0228CA253A88Bc8eb4ca70BCAC8f87b381f4700","bridgeMediatorAddress": "0x15bd56669F57192a97dF41A2aa8f4403e9491776","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0","gnosisTargetDispenserL2Address":"0x67722c823010CEb4BED5325fE109196C0f67D053"} \ No newline at end of file diff --git a/scripts/deployment/staking/optimistic/deploy_41_change_owner.js b/scripts/deployment/staking/optimistic/deploy_41_change_owner.js new file mode 100644 index 00000000..51f4989d --- /dev/null +++ b/scripts/deployment/staking/optimistic/deploy_41_change_owner.js @@ -0,0 +1,48 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const optimismTargetDispenserL2Address = parsedData.optimismTargetDispenserL2Address; + const bridgeMediatorAddress = parsedData.bridgeMediatorAddress; + + let networkURL = parsedData.networkURL; + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("41. EOA to change owner in OptimismTargetDispenserL2"); + const OptimismTargetDispenserL2 = await ethers.getContractAt("OptimismTargetDispenserL2", optimismTargetDispenserL2Address); + console.log("You are signing the following transaction: OptimismTargetDispenserL2.connect(EOA).changeOwner()"); + const result = await optimismTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); + + // Transaction details + console.log("Contract deployment: OptimismTargetDispenserL2"); + console.log("Contract address:", optimismTargetDispenserL2.address); + console.log("Transaction:", result.hash); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json index 84be078f..d8a04c79 100644 --- a/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json +++ b/scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"0xa45E64d13A30a51b91ae0eb182e88a40e9b18eD8","timelockAddress":"","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"0xAB787ceebe8F2b8dca44e3bB744D6e63003ee978","optimismTargetDispenserL2Address":"0x04b0007b2aFb398015B76e5f22993a1fddF83644"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"optimistic","networkURL":"https://optimism.drpc.org","gasPriceInGwei":"2","olasAddress":"0xFC2E6e6BCbd49ccf3A5f029c79984372DcBFE527","serviceStakingFactoryAddress":"0xa45E64d13A30a51b91ae0eb182e88a40e9b18eD8","bridgeMediatorAddress":"0x87c511c8aE3fAF0063b3F3CF9C6ab96c4AA5C60c","optimisticL2CrossDomainMessengerAddress":"0x4200000000000000000000000000000000000007","l1ChainId":"1","optimismDepositProcessorL1Address":"0xAB787ceebe8F2b8dca44e3bB744D6e63003ee978","optimismTargetDispenserL2Address":"0x04b0007b2aFb398015B76e5f22993a1fddF83644"} \ No newline at end of file diff --git a/scripts/deployment/staking/polygon/deploy_61_change_owner.js b/scripts/deployment/staking/polygon/deploy_61_change_owner.js new file mode 100644 index 00000000..ef8713d1 --- /dev/null +++ b/scripts/deployment/staking/polygon/deploy_61_change_owner.js @@ -0,0 +1,48 @@ +/*global process*/ + +const { ethers } = require("hardhat"); +const { LedgerSigner } = require("@anders-t/ethers-ledger"); + +async function main() { + const fs = require("fs"); + const globalsFile = "globals.json"; + const dataFromJSON = fs.readFileSync(globalsFile, "utf8"); + let parsedData = JSON.parse(dataFromJSON); + const useLedger = parsedData.useLedger; + const derivationPath = parsedData.derivationPath; + const providerName = parsedData.providerName; + const polygonTargetDispenserL2Address = parsedData.polygonTargetDispenserL2Address; + const bridgeMediatorAddress = parsedData.bridgeMediatorAddress; + + let networkURL = parsedData.networkURL; + const provider = new ethers.providers.JsonRpcProvider(networkURL); + const signers = await ethers.getSigners(); + + let EOA; + if (useLedger) { + EOA = new LedgerSigner(provider, derivationPath); + } else { + EOA = signers[0]; + } + // EOA address + const deployer = await EOA.getAddress(); + console.log("EOA is:", deployer); + + // Transaction signing and execution + console.log("61. EOA to change owner in PolygonTargetDispenserL2"); + const PolygonTargetDispenserL2 = await ethers.getContractAt("PolygonTargetDispenserL2", polygonTargetDispenserL2Address); + console.log("You are signing the following transaction: PolygonTargetDispenserL2.connect(EOA).changeOwner()"); + const result = await polygonTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); + + // Transaction details + console.log("Contract deployment: PolygonTargetDispenserL2"); + console.log("Contract address:", polygonTargetDispenserL2.address); + console.log("Transaction:", result.hash); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/scripts/deployment/staking/polygon/globals_polygon_mainnet.json b/scripts/deployment/staking/polygon/globals_polygon_mainnet.json index 9ba8200c..41760b04 100644 --- a/scripts/deployment/staking/polygon/globals_polygon_mainnet.json +++ b/scripts/deployment/staking/polygon/globals_polygon_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","networkURL":"https://polygon-mainnet.g.alchemy.com/v2/","gasPriceInGwei":"5","olasAddress":"0xFEF5d947472e72Efbb2E388c730B7428406F2F95","serviceStakingFactoryAddress":"0x46C0D07F55d4F9B5Eed2Fc9680B5953e5fd7b461","timelockAddress":"","polygonFXChildAddress":"0x8397259c983751DAf40400790063935a11afa28a","l1ChainId":"1","polygonDepositProcessorL1Address":"0x4Ce43b82EF1298E1466D3b3Cee67BA6680bF82FB","polygonTargetDispenserL2Address":"0xf76953444C35F1FcE2F6CA1b167173357d3F5C17"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"polygon","networkURL":"https://polygon-mainnet.g.alchemy.com/v2/","gasPriceInGwei":"5","olasAddress":"0xFEF5d947472e72Efbb2E388c730B7428406F2F95","serviceStakingFactoryAddress":"0x46C0D07F55d4F9B5Eed2Fc9680B5953e5fd7b461","bridgeMediatorAddress":"0x9338b5153AE39BB89f50468E608eD9d764B755fD","polygonFXChildAddress":"0x8397259c983751DAf40400790063935a11afa28a","l1ChainId":"1","polygonDepositProcessorL1Address":"0x4Ce43b82EF1298E1466D3b3Cee67BA6680bF82FB","polygonTargetDispenserL2Address":"0xf76953444C35F1FcE2F6CA1b167173357d3F5C17"} \ No newline at end of file From 05c1937fbd2a0f42d39cbb060e42cc2d6c66bbaf Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 22 Jul 2024 11:37:15 +0100 Subject: [PATCH 35/55] chore: gitleaksignore --- .gitleaksignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitleaksignore b/.gitleaksignore index 3156ba94..0d3b257c 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -184,3 +184,5 @@ e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/globals_mainnet.json e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:2 e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/globals_mainnet.json:generic-api-key:2 e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 +3068b0eefad400612f18c193fa62e11974c0fbd5:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:1 +3068b0eefad400612f18c193fa62e11974c0fbd5:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:2 From de29c4ce8cd4d9471781ec03e561a724acf1ddcd Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 22 Jul 2024 11:39:19 +0100 Subject: [PATCH 36/55] chore: gitleaksignore --- .gitleaksignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitleaksignore b/.gitleaksignore index 0d3b257c..b09343db 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -186,3 +186,5 @@ e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/globals_main e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/globals_sepolia.json:generic-api-key:2 3068b0eefad400612f18c193fa62e11974c0fbd5:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:1 3068b0eefad400612f18c193fa62e11974c0fbd5:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:2 +b616524545db2768fb9a3772ffd05c6e0a7f2d8b:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:1 +b616524545db2768fb9a3772ffd05c6e0a7f2d8b:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:2 From 2ac921bf568ab8e38956335f5de82a7e1a7b8b1e Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 22 Jul 2024 11:41:03 +0100 Subject: [PATCH 37/55] chore: linter --- scripts/deployment/staking/arbitrum/deploy_21_change_owner.js | 2 +- scripts/deployment/staking/base/deploy_71_change_owner.js | 2 +- scripts/deployment/staking/celo/deploy_051_change_owner.js | 2 +- scripts/deployment/staking/gnosis/deploy_031_change_owner.js | 2 +- scripts/deployment/staking/optimistic/deploy_41_change_owner.js | 2 +- scripts/deployment/staking/polygon/deploy_61_change_owner.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/deployment/staking/arbitrum/deploy_21_change_owner.js b/scripts/deployment/staking/arbitrum/deploy_21_change_owner.js index 6d3fc97d..f05cdf37 100644 --- a/scripts/deployment/staking/arbitrum/deploy_21_change_owner.js +++ b/scripts/deployment/staking/arbitrum/deploy_21_change_owner.js @@ -30,7 +30,7 @@ async function main() { // Transaction signing and execution console.log("21. EOA to change owner in ArbitrumTargetDispenserL2"); - const ArbitrumTargetDispenserL2 = await ethers.getContractAt("ArbitrumTargetDispenserL2", arbitrumTargetDispenserL2Address); + const arbitrumTargetDispenserL2 = await ethers.getContractAt("ArbitrumTargetDispenserL2", arbitrumTargetDispenserL2Address); console.log("You are signing the following transaction: ArbitrumTargetDispenserL2.connect(EOA).changeOwner()"); const result = await arbitrumTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); diff --git a/scripts/deployment/staking/base/deploy_71_change_owner.js b/scripts/deployment/staking/base/deploy_71_change_owner.js index 676943b2..d959f2e7 100644 --- a/scripts/deployment/staking/base/deploy_71_change_owner.js +++ b/scripts/deployment/staking/base/deploy_71_change_owner.js @@ -30,7 +30,7 @@ async function main() { // Transaction signing and execution console.log("71. EOA to change owner in OptimismTargetDispenserL2 (Base)"); - const OptimismTargetDispenserL2 = await ethers.getContractAt("OptimismTargetDispenserL2", baseTargetDispenserL2Address); + const baseTargetDispenserL2 = await ethers.getContractAt("OptimismTargetDispenserL2", baseTargetDispenserL2Address); console.log("You are signing the following transaction: OptimismTargetDispenserL2.connect(EOA).changeOwner()"); const result = await baseTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); diff --git a/scripts/deployment/staking/celo/deploy_051_change_owner.js b/scripts/deployment/staking/celo/deploy_051_change_owner.js index 86a6dd91..6ca830ec 100644 --- a/scripts/deployment/staking/celo/deploy_051_change_owner.js +++ b/scripts/deployment/staking/celo/deploy_051_change_owner.js @@ -30,7 +30,7 @@ async function main() { // Transaction signing and execution console.log("51. EOA to change owner in WormholeTargetDispenserL2 (Celo)"); - const WormholeTargetDispenserL2 = await ethers.getContractAt("WormholeTargetDispenserL2", celoTargetDispenserL2Address); + const celoTargetDispenserL2 = await ethers.getContractAt("WormholeTargetDispenserL2", celoTargetDispenserL2Address); console.log("You are signing the following transaction: WormholeTargetDispenserL2.connect(EOA).changeOwner()"); const result = await celoTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); diff --git a/scripts/deployment/staking/gnosis/deploy_031_change_owner.js b/scripts/deployment/staking/gnosis/deploy_031_change_owner.js index bfa68ce4..5170247f 100644 --- a/scripts/deployment/staking/gnosis/deploy_031_change_owner.js +++ b/scripts/deployment/staking/gnosis/deploy_031_change_owner.js @@ -30,7 +30,7 @@ async function main() { // Transaction signing and execution console.log("31. EOA to change owner in GnosisTargetDispenserL2"); - const GnosisTargetDispenserL2 = await ethers.getContractAt("GnosisTargetDispenserL2", gnosisTargetDispenserL2Address); + const gnosisTargetDispenserL2 = await ethers.getContractAt("GnosisTargetDispenserL2", gnosisTargetDispenserL2Address); console.log("You are signing the following transaction: GnosisTargetDispenserL2.connect(EOA).changeOwner()"); const result = await gnosisTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); diff --git a/scripts/deployment/staking/optimistic/deploy_41_change_owner.js b/scripts/deployment/staking/optimistic/deploy_41_change_owner.js index 51f4989d..5213fc69 100644 --- a/scripts/deployment/staking/optimistic/deploy_41_change_owner.js +++ b/scripts/deployment/staking/optimistic/deploy_41_change_owner.js @@ -30,7 +30,7 @@ async function main() { // Transaction signing and execution console.log("41. EOA to change owner in OptimismTargetDispenserL2"); - const OptimismTargetDispenserL2 = await ethers.getContractAt("OptimismTargetDispenserL2", optimismTargetDispenserL2Address); + const optimismTargetDispenserL2 = await ethers.getContractAt("OptimismTargetDispenserL2", optimismTargetDispenserL2Address); console.log("You are signing the following transaction: OptimismTargetDispenserL2.connect(EOA).changeOwner()"); const result = await optimismTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); diff --git a/scripts/deployment/staking/polygon/deploy_61_change_owner.js b/scripts/deployment/staking/polygon/deploy_61_change_owner.js index ef8713d1..7a15c82b 100644 --- a/scripts/deployment/staking/polygon/deploy_61_change_owner.js +++ b/scripts/deployment/staking/polygon/deploy_61_change_owner.js @@ -30,7 +30,7 @@ async function main() { // Transaction signing and execution console.log("61. EOA to change owner in PolygonTargetDispenserL2"); - const PolygonTargetDispenserL2 = await ethers.getContractAt("PolygonTargetDispenserL2", polygonTargetDispenserL2Address); + const polygonTargetDispenserL2 = await ethers.getContractAt("PolygonTargetDispenserL2", polygonTargetDispenserL2Address); console.log("You are signing the following transaction: PolygonTargetDispenserL2.connect(EOA).changeOwner()"); const result = await polygonTargetDispenserL2.connect(EOA).changeOwner(bridgeMediatorAddress); From be06facb7a03b35ba4290e7c49fa96656b249345 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 22 Jul 2024 12:30:29 +0100 Subject: [PATCH 38/55] chore: adding contract addresses into configuration files --- docs/configuration.json | 182 +++++++++++++++++++++++++++++++++------- 1 file changed, 154 insertions(+), 28 deletions(-) diff --git a/docs/configuration.json b/docs/configuration.json index e01ac5b3..6be16f37 100644 --- a/docs/configuration.json +++ b/docs/configuration.json @@ -37,47 +37,173 @@ "name": "Depository", "artifact": "abis/0.8.20/Depository.json", "address": "0xfF8697d8d2998d6AA2e09B405795C6F4BEeB0C81" - } - ] - }, - { - "name": "goerli", - "chainId": "5", - "contracts": [ + }, { - "name": "DonatorBlacklist", - "artifact": "abis/0.8.18/DonatorBlacklist.json", - "address": "0x1E11f1224e32Fe0f65FF7D13aD4b053B83bD09FA" + "name": "ArbitrumDepositProcessorL1", + "artifact": "abis/0.8.25/ArbitrumDepositProcessorL1.json", + "address": "0x5e13E07006D68B097DCb5979ef5545C4f9156162" }, { - "name": "Tokenomics", - "artifact": "abis/0.8.20/Tokenomics.json", - "address": "0x93Cd3f6DcE64d67f4420939865A00aC89776D4b5" + "name": "OptimismDepositProcessorL1", + "artifact": "abis/0.8.25/OptimismDepositProcessorL1.json", + "address": "0x42BA1BbD797E4C90F386F03a544F3b62C1f917d0" }, { - "name": "TokenomicsProxy", - "artifact": "abis/0.8.18/TokenomicsProxy.json", - "address": "0x10100e74b7F706222F8A7C0be9FC7Ae1717Ad8B2" + "name": "WormholeDepositProcessorL1", + "artifact": "abis/0.8.25/WormholeDepositProcessorL1.json", + "address": "0x223902b6C583f18E8dc84AF4E6a8fa523d088B78" }, { - "name": "Treasury", - "artifact": "abis/0.8.18/Treasury.json", - "address": "0x7bedCA17D29e53C8062d10902a6219F8d1E3B9B5" + "name": "EthereumDepositProcessor", + "artifact": "abis/0.8.25/EthereumDepositProcessor.json", + "address": "0x15CD7fAeE048c7673aB818C9e582630F1a924593" }, { - "name": "GenericBondCalculator", - "artifact": "abis/0.8.18/GenericBondCalculator.json", - "address": "0x77290FF625fc576f465D0256F6a12Ce4480a5b8a" + "name": "GnosisDepositProcessorL1", + "artifact": "abis/0.8.25/GnosisDepositProcessorL1.json", + "address": "0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0" }, { - "name": "Dispenser", - "artifact": "abis/0.8.18/Dispenser.json", - "address": "0xeDd71796B90eaCc56B074C39BAC90ED2Ca6D93Ee" + "name": "OptimismDepositProcessorL1", + "artifact": "abis/0.8.25/OptimismDepositProcessorL1.json", + "address": "0xAB787ceebe8F2b8dca44e3bB744D6e63003ee978" }, { - "name": "Depository", - "artifact": "abis/0.8.20/Depository.json", - "address": "0x5FDc466f4A7547c876eF40CD30fFA2A89F1EcDE7" + "name": "PolygonDepositProcessorL1", + "artifact": "abis/0.8.25/PolygonDepositProcessorL1.json", + "address": "0x4Ce43b82EF1298E1466D3b3Cee67BA6680bF82FB" + } + ] + }, + { + "name": "arbitrumOne", + "chainId": "42161", + "contracts": [ + { + "name": "ArbitrumTargetDispenserL2", + "artifact": "abis/0.8.25/ArbitrumTargetDispenserL2.json", + "address": "0x10c5525F77F13b28f42c5626240c001c2D57CAd4" + } + ] + }, + { + "name": "arbitrumSepolia", + "chainId": "421614", + "contracts": [ + { + "name": "ArbitrumTargetDispenserL2", + "artifact": "abis/0.8.25/ArbitrumTargetDispenserL2.json", + "address": "" + } + ] + }, + { + "name": "base", + "chainId": "8453", + "contracts": [ + { + "name": "OptimismTargetDispenserL2", + "artifact": "abis/0.8.25/OptimismTargetDispenserL2.json", + "address": "0xcDdD9D9ABaB36fFa882530D69c73FeE5D4001C2d" + } + ] + }, + { + "name": "baseSepolia", + "chainId": "84532", + "contracts": [ + { + "name": "OptimismTargetDispenserL2", + "artifact": "abis/0.8.25/OptimismTargetDispenserL2.json", + "address": "" + } + ] + }, + { + "name": "celo", + "chainId": "42220", + "contracts": [ + { + "name": "WormholeTargetDispenserL2", + "artifact": "abis/0.8.25/WormholeTargetDispenserL2.json", + "address": "0xb4096d181C08DDF75f1A63918cCa0d1023C4e6C7" + } + ] + }, + { + "name": "celoAlfajores", + "chainId": "44787", + "contracts": [ + { + "name": "WormholeTargetDispenserL2", + "artifact": "abis/0.8.25/WormholeTargetDispenserL2.json", + "address": "" + } + ] + }, + { + "name": "gnosis", + "chainId": "100", + "contracts": [ + { + "name": "GnosisTargetDispenserL2", + "artifact": "abis/0.8.25/GnosisTargetDispenserL2.json", + "address": "0x67722c823010CEb4BED5325fE109196C0f67D053" + } + ] + }, + { + "name": "chiado", + "chainId": "10200", + "contracts": [ + { + "name": "GnosisTargetDispenserL2", + "artifact": "abis/0.8.25/GnosisTargetDispenserL2.json", + "address": "" + } + ] + }, + { + "name": "optimistic", + "chainId": "10", + "contracts": [ + { + "name": "OptimismTargetDispenserL2", + "artifact": "abis/0.8.25/OptimismTargetDispenserL2.json", + "address": "0x04b0007b2aFb398015B76e5f22993a1fddF83644" + } + ] + }, + { + "name": "optimisticSepolia", + "chainId": "11155420", + "contracts": [ + { + "name": "OptimismTargetDispenserL2", + "artifact": "abis/0.8.25/OptimismTargetDispenserL2.json", + "address": "" + } + ] + }, + { + "name": "polygon", + "chainId": "137", + "contracts": [ + { + "name": "PolygonTargetDispenserL2", + "artifact": "abis/0.8.25/PolygonTargetDispenserL2.json", + "address": "0xf76953444C35F1FcE2F6CA1b167173357d3F5C17" + } + ] + }, + { + "name": "polygonAmoy", + "chainId": "80002", + "contracts": [ + { + "name": "PolygonTargetDispenserL2", + "artifact": "abis/0.8.25/PolygonTargetDispenserL2.json", + "address": "" } ] } From b74f36b5fd47b5b0f52414aa8f46438aaafd24b6 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 22 Jul 2024 12:47:53 +0100 Subject: [PATCH 39/55] chore: updating static audit --- docs/configuration.json | 4 +- scripts/audit_chains/audit_contracts_setup.js | 78 +++++++------------ 2 files changed, 32 insertions(+), 50 deletions(-) diff --git a/docs/configuration.json b/docs/configuration.json index 6be16f37..eca1c39c 100644 --- a/docs/configuration.json +++ b/docs/configuration.json @@ -30,8 +30,8 @@ }, { "name": "Dispenser", - "artifact": "abis/0.8.18/Dispenser.json", - "address": "0xeED0000fE94d7cfeF4Dc0CA86a223f0F603A61B8" + "artifact": "abis/0.8.25/Dispenser.json", + "address": "0x5650300fCBab43A0D7D02F8Cb5d0f039402593f0" }, { "name": "Depository", diff --git a/scripts/audit_chains/audit_contracts_setup.js b/scripts/audit_chains/audit_contracts_setup.js index 4fd2dc98..62428523 100644 --- a/scripts/audit_chains/audit_contracts_setup.js +++ b/scripts/audit_chains/audit_contracts_setup.js @@ -249,8 +249,8 @@ async function checkDepository(chainId, provider, globalsInstance, configContrac async function main() { // Check for the API keys - if (!process.env.ALCHEMY_API_KEY_MAINNET || !process.env.ALCHEMY_API_KEY_GOERLI || - !process.env.ALCHEMY_API_KEY_MATIC || !process.env.ALCHEMY_API_KEY_MUMBAI) { + if (!process.env.ALCHEMY_API_KEY_MAINNET || !process.env.ALCHEMY_API_KEY_SEPOLIA || + !process.env.ALCHEMY_API_KEY_MATIC || !process.env.ALCHEMY_API_KEY_AMOY) { console.log("Check API keys!"); return; } @@ -260,49 +260,33 @@ async function main() { const dataFromJSON = fs.readFileSync(configFile, "utf8"); const configs = JSON.parse(dataFromJSON); - const numChains = configs.length; // ################################# VERIFY CONTRACTS WITH REPO ################################# - // For now gnosis chains are not supported - const networks = { - "mainnet": "etherscan", - "goerli": "goerli.etherscan", - }; - console.log("\nVerifying deployed contracts vs the repo... If no error is output, then the contracts are correct."); - // Traverse all chains - for (let i = 0; i < numChains; i++) { - // Skip gnosis chains - if (!networks[configs[i]["name"]]) { + // Currently the verification is fo mainnet only + const network = "etherscan"; + const contracts = configs[0]["contracts"]; + + // Verify contracts + for (let i = 0; i < contracts.length; i++) { + console.log("Checking " + contracts[i]["name"]); + const execSync = require("child_process").execSync; + try { + execSync("scripts/audit_chains/audit_repo_contract.sh " + network + " " + contracts[i]["name"] + " " + contracts[i]["address"]); + } catch (error) { continue; } - - console.log("\n\nNetwork:", configs[i]["name"]); - const network = networks[configs[i]["name"]]; - const contracts = configs[i]["contracts"]; - - // Verify contracts - for (let j = 0; j < contracts.length; j++) { - console.log("Checking " + contracts[j]["name"]); - const execSync = require("child_process").execSync; - try { - execSync("scripts/audit_chains/audit_repo_contract.sh " + network + " " + contracts[j]["name"] + " " + contracts[j]["address"]); - } catch (error) { - continue; - } - } } + return; // ################################# /VERIFY CONTRACTS WITH REPO ################################# // ################################# VERIFY CONTRACTS SETUP ################################# const globalNames = { - "mainnet": "scripts/deployment/globals_mainnet.json", - "goerli": "scripts/deployment/globals_goerli.json", + "mainnet": "scripts/deployment/globals_mainnet.json" }; const providerLinks = { - "mainnet": "https://eth-mainnet.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY_MAINNET, - "goerli": "https://eth-goerli.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY_GOERLI, + "mainnet": "https://eth-mainnet.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY_MAINNET }; // Get all the globals processed @@ -318,29 +302,27 @@ async function main() { console.log("\nVerifying deployed contracts setup... If no error is output, then the contracts are correct."); // L1 contracts - for (let i = 0; i < 2; i++) { - console.log("\n######## Verifying setup on CHAIN ID", configs[i]["chainId"]); + console.log("\n######## Verifying setup on CHAIN ID", configs[i]["chainId"]); - const initLog = "ChainId: " + configs[i]["chainId"] + ", network: " + configs[i]["name"]; + const initLog = "ChainId: " + configs[i]["chainId"] + ", network: " + configs[i]["name"]; - let log = initLog + ", contract: " + "DonatorBlacklist"; - await checkDonatorBlacklist(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "DonatorBlacklist", log); + let log = initLog + ", contract: " + "DonatorBlacklist"; + await checkDonatorBlacklist(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "DonatorBlacklist", log); - log = initLog + ", contract: " + "TokenomicsProxy"; - await checkTokenomicsProxy(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "TokenomicsProxy", log); + log = initLog + ", contract: " + "TokenomicsProxy"; + await checkTokenomicsProxy(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "TokenomicsProxy", log); - log = initLog + ", contract: " + "Treasury"; - await checkTreasury(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "Treasury", log); + log = initLog + ", contract: " + "Treasury"; + await checkTreasury(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "Treasury", log); - log = initLog + ", contract: " + "GenericBondCalculator"; - await checkGenericBondCalculator(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "GenericBondCalculator", log); + log = initLog + ", contract: " + "GenericBondCalculator"; + await checkGenericBondCalculator(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "GenericBondCalculator", log); - log = initLog + ", contract: " + "Dispenser"; - await checkDispenser(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "Dispenser", log); + log = initLog + ", contract: " + "Dispenser"; + await checkDispenser(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "Dispenser", log); - log = initLog + ", contract: " + "Depository"; - await checkDepository(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "Depository", log); - } + log = initLog + ", contract: " + "Depository"; + await checkDepository(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "Depository", log); // ################################# /VERIFY CONTRACTS SETUP ################################# } From 5e43d545806f8e2d6e8ffd8190d7d704bf663d5f Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 22 Jul 2024 19:16:21 +0100 Subject: [PATCH 40/55] chore: static audit --- scripts/audit_chains/audit_contracts_setup.js | 522 ++++++++++++++++-- .../staking/celo/globals_celo_mainnet.json | 2 +- 2 files changed, 487 insertions(+), 37 deletions(-) diff --git a/scripts/audit_chains/audit_contracts_setup.js b/scripts/audit_chains/audit_contracts_setup.js index 62428523..f56f9e51 100644 --- a/scripts/audit_chains/audit_contracts_setup.js +++ b/scripts/audit_chains/audit_contracts_setup.js @@ -3,6 +3,7 @@ const { ethers } = require("ethers"); const { expect } = require("chai"); const fs = require("fs"); +const AddressZero = ethers.constants.AddressZero; // Custom expect that is wrapped into try / catch block function customExpect(arg1, arg2, log) { @@ -58,10 +59,18 @@ async function checkBytecode(provider, configContracts, contractName, log) { } // Find the contract name from the configuration data -async function findContractInstance(provider, configContracts, contractName) { +// idx is to choose the contract, if there are more than one +async function findContractInstance(provider, configContracts, contractName, idx = 0) { + let numFound = 0; // Get the contract number from the set of configuration contracts for (let i = 0; i < configContracts.length; i++) { if (configContracts[i]["name"] === contractName) { + // Keep searching if needed idx is not found + if (numFound != idx) { + numFound++; + continue; + } + // Get the contract instance let contractFromJSON = fs.readFileSync(configContracts[i]["artifact"], "utf8"); @@ -127,7 +136,7 @@ async function checkTokenomicsProxy(chainId, provider, globalsInstance, configCo const implementationHash = await tokenomics.PROXY_TOKENOMICS(); const implementation = await provider.getStorageAt(tokenomics.address, implementationHash); // Need to extract address size of bytes from the storage return value - customExpect("0x" + implementation.slice(-40), globalsInstance["tokenomicsTwoAddress"].toLowerCase(), + customExpect("0x" + implementation.slice(-40), globalsInstance["tokenomicsThreeAddress"].toLowerCase(), log + ", function: PROXY_TOKENOMICS()"); } @@ -166,7 +175,7 @@ async function checkTreasury(chainId, provider, globalsInstance, configContracts // Check paused const paused = await treasury.paused(); - customExpect(paused, false, log + ", function: paused()"); + customExpect(paused, 1, log + ", function: paused()"); } // Check Generic Bond Calculator: chain Id, provider, parsed globals, configuration contracts, contract name @@ -247,6 +256,372 @@ async function checkDepository(chainId, provider, globalsInstance, configContrac customExpect(minVesting, 3600 * 24, log + ", function: VERSION()"); } +// Check DepositProcessorL1: contract, globalsInstance +async function checkDepositProcessorL1(depositProcessorL1, globalsInstance, log) { + log += ", address: " + depositProcessorL1.address; + // Check contract owner + const owner = await depositProcessorL1.owner(); + customExpect(owner, AddressZero, log + ", function: owner()"); + + // Check L1 OLAS token + const olas = await depositProcessorL1.olas(); + customExpect(olas, globalsInstance["olasAddress"], log + ", function: olas()"); + + // Check L1 dispenser + const dispenser = await depositProcessorL1.l1Dispenser(); + customExpect(dispenser, globalsInstance["dispenserAddress"], log + ", function: dispenser ()"); +} + +// Check ArbitrumDepositProcessorL1: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkArbitrumDepositProcessorL1(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const arbitrumDepositProcessorL1 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + arbitrumDepositProcessorL1.address; + await checkDepositProcessorL1(arbitrumDepositProcessorL1, globalsInstance, log); + + // Check L1 token relayer + const l1TokenRelayer = await arbitrumDepositProcessorL1.l1TokenRelayer(); + customExpect(l1TokenRelayer, globalsInstance["arbitrumL1ERC20GatewayRouterAddress"], log + ", function: l1TokenRelayer()"); + + // Check L1 message relayer + const l1MessageRelayer = await arbitrumDepositProcessorL1.l1MessageRelayer(); + customExpect(l1MessageRelayer, globalsInstance["arbitrumInboxAddress"], log + ", function: l1MessageRelayer()"); + + // Check L2 target chain Id + const l2TargetChainId = await arbitrumDepositProcessorL1.l2TargetChainId(); + customExpect(l2TargetChainId.toString(), globalsInstance["arbitrumL2TargetChainId"], log + ", function: l2TargetChainId()"); + + // Check L1 ERC20Gateway + const l1ERC20Gateway = await arbitrumDepositProcessorL1.l1ERC20Gateway(); + customExpect(l1ERC20Gateway, globalsInstance["arbitrumL1ERC20GatewayAddress"], log + ", function: l1ERC20Gateway()"); + + // Check L1 outbox + const outbox = await arbitrumDepositProcessorL1.outbox(); + customExpect(outbox, globalsInstance["arbitrumOutboxAddress"], log + ", function: outbox()"); + + // Check L1 bridge + const bridge = await arbitrumDepositProcessorL1.bridge(); + customExpect(bridge, globalsInstance["arbitrumBridgeAddress"], log + ", function: bridge()"); +} + +// Check checkEthereumDepositProcessor: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkEthereumDepositProcessor(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const ethereumDepositProcessorL1 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + ethereumDepositProcessorL1.address; + // Check OLAS token + const olas = await ethereumDepositProcessorL1.olas(); + customExpect(olas, globalsInstance["olasAddress"], log + ", function: olas()"); + + // Check dispenser + const dispenser = await ethereumDepositProcessorL1.dispenser(); + customExpect(dispenser, globalsInstance["dispenserAddress"], log + ", function: dispenser()"); + + // Check L1 staking factory + const stakingFactory = await ethereumDepositProcessorL1.stakingFactory(); + customExpect(stakingFactory, globalsInstance["serviceStakingFactoryAddress"], log + ", function: stakingFactory()"); + + // Check L1 timelock + const timelock = await ethereumDepositProcessorL1.timelock(); + customExpect(timelock, globalsInstance["timelockAddress"], log + ", function: timelock()"); +} + +// Check GnosisDepositProcessorL1: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkGnosisDepositProcessorL1(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const gnosisDepositProcessorL1 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + gnosisDepositProcessorL1.address; + await checkDepositProcessorL1(gnosisDepositProcessorL1, globalsInstance, log); + + // Check L1 token relayer + const l1TokenRelayer = await gnosisDepositProcessorL1.l1TokenRelayer(); + customExpect(l1TokenRelayer, globalsInstance["gnosisOmniBridgeAddress"], log + ", function: l1TokenRelayer()"); + + // Check L1 message relayer + const l1MessageRelayer = await gnosisDepositProcessorL1.l1MessageRelayer(); + customExpect(l1MessageRelayer, globalsInstance["gnosisAMBForeignAddress"], log + ", function: l1MessageRelayer()"); + + // Check L2 target chain Id + const l2TargetChainId = await gnosisDepositProcessorL1.l2TargetChainId(); + customExpect(l2TargetChainId.toString(), globalsInstance["gnosisL2TargetChainId"], log + ", function: l2TargetChainId()"); +} + +// Check OptimismDepositProcessorL1: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkOptimismDepositProcessorL1(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const optimismDepositProcessorL1 = await findContractInstance(provider, configContracts, contractName, 1); + + log += ", address: " + optimismDepositProcessorL1.address; + await checkDepositProcessorL1(optimismDepositProcessorL1, globalsInstance, log); + + // Check L1 token relayer + const l1TokenRelayer = await optimismDepositProcessorL1.l1TokenRelayer(); + customExpect(l1TokenRelayer, globalsInstance["optimisticL1StandardBridgeProxyAddress"], log + ", function: l1TokenRelayer()"); + + // Check L1 message relayer + const l1MessageRelayer = await optimismDepositProcessorL1.l1MessageRelayer(); + customExpect(l1MessageRelayer, globalsInstance["optimisticL1CrossDomainMessengerProxyAddress"], log + ", function: l1MessageRelayer()"); + + // Check L2 target chain Id + const l2TargetChainId = await optimismDepositProcessorL1.l2TargetChainId(); + customExpect(l2TargetChainId.toString(), globalsInstance["optimisticL2TargetChainId"], log + ", function: l2TargetChainId()"); + + // Check L2 OLAS address + const olasL2 = await optimismDepositProcessorL1.olasL2(); + customExpect(olasL2, globalsInstance["optimisticOLASAddress"], log + ", function: olasL2()"); +} + +// Check BaseDepositProcessorL1: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkBaseDepositProcessorL1(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const baseDepositProcessorL1 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + baseDepositProcessorL1.address; + await checkDepositProcessorL1(baseDepositProcessorL1, globalsInstance, log); + + // Check L1 token relayer + const l1TokenRelayer = await baseDepositProcessorL1.l1TokenRelayer(); + customExpect(l1TokenRelayer, globalsInstance["baseL1StandardBridgeProxyAddress"], log + ", function: l1TokenRelayer()"); + + // Check L1 message relayer + const l1MessageRelayer = await baseDepositProcessorL1.l1MessageRelayer(); + customExpect(l1MessageRelayer, globalsInstance["baseL1CrossDomainMessengerProxyAddress"], log + ", function: l1MessageRelayer()"); + + // Check L2 target chain Id + const l2TargetChainId = await baseDepositProcessorL1.l2TargetChainId(); + customExpect(l2TargetChainId.toString(), globalsInstance["baseL2TargetChainId"], log + ", function: l2TargetChainId()"); + + // Check L2 OLAS address + const olasL2 = await baseDepositProcessorL1.olasL2(); + customExpect(olasL2, globalsInstance["baseOLASAddress"], log + ", function: olasL2()"); +} + +// Check PolygonDepositProcessorL1: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkPolygonDepositProcessorL1(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const polygonDepositProcessorL1 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + polygonDepositProcessorL1.address; + await checkDepositProcessorL1(polygonDepositProcessorL1, globalsInstance, log); + + // Check L1 token relayer + const l1TokenRelayer = await polygonDepositProcessorL1.l1TokenRelayer(); + customExpect(l1TokenRelayer, globalsInstance["polygonRootChainManagerProxyAddress"], log + ", function: l1TokenRelayer()"); + + // Check L1 message relayer + const l1MessageRelayer = await polygonDepositProcessorL1.l1MessageRelayer(); + customExpect(l1MessageRelayer, globalsInstance["polygonFXRootAddress"], log + ", function: l1MessageRelayer()"); + + // Check L2 target chain Id + const l2TargetChainId = await polygonDepositProcessorL1.l2TargetChainId(); + customExpect(l2TargetChainId.toString(), globalsInstance["polygonL2TargetChainId"], log + ", function: l2TargetChainId()"); + + // Check L1 checkpoint manager + const checkpointManager = await polygonDepositProcessorL1.checkpointManager(); + customExpect(checkpointManager, globalsInstance["polygonCheckpointManagerAddress"], log + ", function: checkpointManager()"); + + // Check L1 predicate + const predicate = await polygonDepositProcessorL1.predicate(); + customExpect(predicate, globalsInstance["polygonERC20PredicateAddress"], log + ", function: predicate()"); +} + +// Check CeloDepositProcessorL1: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkCeloDepositProcessorL1(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const celoDepositProcessorL1 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + celoDepositProcessorL1.address; + await checkDepositProcessorL1(celoDepositProcessorL1, globalsInstance, log); + + // Check L1 token relayer + const l1TokenRelayer = await celoDepositProcessorL1.l1TokenRelayer(); + customExpect(l1TokenRelayer, globalsInstance["wormholeL1TokenRelayerAddress"], log + ", function: l1TokenRelayer()"); + + // Check L1 message relayer + const l1MessageRelayer = await celoDepositProcessorL1.l1MessageRelayer(); + customExpect(l1MessageRelayer, globalsInstance["wormholeL1MessageRelayerAddress"], log + ", function: l1MessageRelayer()"); + + // Check L2 target chain Id + const l2TargetChainId = await celoDepositProcessorL1.l2TargetChainId(); + customExpect(l2TargetChainId.toString(), globalsInstance["celoL2TargetChainId"], log + ", function: l2TargetChainId()"); + + // Check L1 wormhole core + const wormhole = await celoDepositProcessorL1.wormhole(); + customExpect(wormhole, globalsInstance["wormholeL1CoreAddress"], log + ", function: wormhole()"); + + // Check L2 wormhole chain Id format + const wormholeTargetChainId = await celoDepositProcessorL1.wormholeTargetChainId(); + customExpect(wormholeTargetChainId.toString(), globalsInstance["celoWormholeL2TargetChainId"], log + ", function: wormholeTargetChainId()"); +} + +// Check TargetDispenserL2: contract, globalsInstance +async function checkTargetDispenserL2(targetDispenserL2, globalsInstance, log) { + log += ", address: " + targetDispenserL2.address; + // Check contract owner + const owner = await targetDispenserL2.owner(); + customExpect(owner, globalsInstance["bridgeMediatorAddress"], log + ", function: owner()"); + + // Check L2 OLAS token + const olas = await targetDispenserL2.olas(); + customExpect(olas, globalsInstance["olasAddress"], log + ", function: olas()"); + + // Check L2 staking factory + const stakingFactory = await targetDispenserL2.stakingFactory(); + customExpect(stakingFactory, globalsInstance["serviceStakingFactoryAddress"], log + ", function: stakingFactory()"); + + // Check L1 source chain Id + const l1SourceChainId = await targetDispenserL2.l1SourceChainId(); + customExpect(l1SourceChainId.toString(), globalsInstance["l1ChainId"], log + ", function: l1SourceChainId()"); +} + +// Check PolygonTargetDispenserL2: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkPolygonTargetDispenserL2(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const polygonTargetDispenserL2 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + polygonTargetDispenserL2.address; + await checkTargetDispenserL2(polygonTargetDispenserL2, globalsInstance, log); + + // Check L2 message relayer + const l2MessageRelayer = await polygonTargetDispenserL2.l2MessageRelayer(); + customExpect(l2MessageRelayer, globalsInstance["polygonFXChildAddress"], log + ", function: l2MessageRelayer()"); + + // Check L1 deposit processor + const l1DepositProcessor = await polygonTargetDispenserL2.l1DepositProcessor(); + customExpect(l1DepositProcessor, globalsInstance["polygonDepositProcessorL1Address"], log + ", function: l1DepositProcessor()"); +} + +// Check GnosisTargetDispenserL2: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkGnosisTargetDispenserL2(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const gnosisTargetDispenserL2 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + gnosisTargetDispenserL2.address; + await checkTargetDispenserL2(gnosisTargetDispenserL2, globalsInstance, log); + + // Check L2 message relayer + const l2MessageRelayer = await gnosisTargetDispenserL2.l2MessageRelayer(); + customExpect(l2MessageRelayer, globalsInstance["gnosisAMBHomeAddress"], log + ", function: l2MessageRelayer()"); + + // Check L1 deposit processor + const l1DepositProcessor = await gnosisTargetDispenserL2.l1DepositProcessor(); + customExpect(l1DepositProcessor, globalsInstance["gnosisDepositProcessorL1Address"], log + ", function: l1DepositProcessor()"); +} + +// Check ArbitrumTargetDispenserL2: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkArbitrumTargetDispenserL2(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const arbitrumTargetDispenserL2 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + arbitrumTargetDispenserL2.address; + await checkTargetDispenserL2(arbitrumTargetDispenserL2, globalsInstance, log); + + // Check L2 message relayer + const l2MessageRelayer = await arbitrumTargetDispenserL2.l2MessageRelayer(); + customExpect(l2MessageRelayer, globalsInstance["arbitrumArbSysAddress"], log + ", function: l2MessageRelayer()"); + + // Check L1 deposit processor + const l1DepositProcessor = await arbitrumTargetDispenserL2.l1DepositProcessor(); + customExpect(l1DepositProcessor, globalsInstance["arbitrumDepositProcessorL1Address"], log + ", function: l1DepositProcessor()"); +} + +// Check OptimismTargetDispenserL2: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkOptimismTargetDispenserL2(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const optimismTargetDispenserL2 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + optimismTargetDispenserL2.address; + await checkTargetDispenserL2(optimismTargetDispenserL2, globalsInstance, log); + + // Check L2 message relayer + const l2MessageRelayer = await optimismTargetDispenserL2.l2MessageRelayer(); + customExpect(l2MessageRelayer, globalsInstance["optimisticL2CrossDomainMessengerAddress"], log + ", function: l2MessageRelayer()"); + + // Check L1 deposit processor + const l1DepositProcessor = await optimismTargetDispenserL2.l1DepositProcessor(); + customExpect(l1DepositProcessor, globalsInstance["optimismDepositProcessorL1Address"], log + ", function: l1DepositProcessor()"); +} + +// Check BaseTargetDispenserL2: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkBaseTargetDispenserL2(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const baseTargetDispenserL2 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + baseTargetDispenserL2.address; + await checkTargetDispenserL2(baseTargetDispenserL2, globalsInstance, log); + + // Check L2 message relayer + const l2MessageRelayer = await baseTargetDispenserL2.l2MessageRelayer(); + customExpect(l2MessageRelayer, globalsInstance["baseL2CrossDomainMessengerAddress"], log + ", function: l2MessageRelayer()"); + + // Check L1 deposit processor + const l1DepositProcessor = await baseTargetDispenserL2.l1DepositProcessor(); + customExpect(l1DepositProcessor, globalsInstance["baseDepositProcessorL1Address"], log + ", function: l1DepositProcessor()"); +} + +// Check CeloTargetDispenserL2: chain Id, provider, parsed globals, configuration contracts, contract name +async function checkCeloTargetDispenserL2(chainId, provider, globalsInstance, configContracts, contractName, log) { + // Check the bytecode + await checkBytecode(provider, configContracts, contractName, log); + + // Get the contract instance + const celoTargetDispenserL2 = await findContractInstance(provider, configContracts, contractName); + + log += ", address: " + celoTargetDispenserL2.address; + await checkTargetDispenserL2(celoTargetDispenserL2, globalsInstance, log); + + // Check L2 message relayer + const l2MessageRelayer = await celoTargetDispenserL2.l2MessageRelayer(); + customExpect(l2MessageRelayer, globalsInstance["wormholeL2MessageRelayer"], log + ", function: l2MessageRelayer()"); + + // Check L1 deposit processor + const l1DepositProcessor = await celoTargetDispenserL2.l1DepositProcessor(); + customExpect(l1DepositProcessor, globalsInstance["celoDepositProcessorL1Address"], log + ", function: l1DepositProcessor()"); + + // Check L2 wormhole core + const wormhole = await celoTargetDispenserL2.wormhole(); + customExpect(wormhole, globalsInstance["wormholeL2CoreAddress"], log + ", function: wormhole()"); +} + async function main() { // Check for the API keys if (!process.env.ALCHEMY_API_KEY_MAINNET || !process.env.ALCHEMY_API_KEY_SEPOLIA || @@ -261,68 +636,143 @@ async function main() { const configs = JSON.parse(dataFromJSON); // ################################# VERIFY CONTRACTS WITH REPO ################################# - console.log("\nVerifying deployed contracts vs the repo... If no error is output, then the contracts are correct."); - - // Currently the verification is fo mainnet only - const network = "etherscan"; - const contracts = configs[0]["contracts"]; - - // Verify contracts - for (let i = 0; i < contracts.length; i++) { - console.log("Checking " + contracts[i]["name"]); - const execSync = require("child_process").execSync; - try { - execSync("scripts/audit_chains/audit_repo_contract.sh " + network + " " + contracts[i]["name"] + " " + contracts[i]["address"]); - } catch (error) { - continue; - } - } - return; +// console.log("\nVerifying deployed contracts vs the repo... If no error is output, then the contracts are correct."); +// +// // Currently the verification is fo mainnet only +// const network = "etherscan"; +// const contracts = configs[0]["contracts"]; +// +// // Verify contracts +// for (let i = 0; i < contracts.length; i++) { +// console.log("Checking " + contracts[i]["name"]); +// const execSync = require("child_process").execSync; +// try { +// execSync("scripts/audit_chains/audit_repo_contract.sh " + network + " " + contracts[i]["name"] + " " + contracts[i]["address"]); +// } catch (error) { +// continue; +// } +// } // ################################# /VERIFY CONTRACTS WITH REPO ################################# // ################################# VERIFY CONTRACTS SETUP ################################# const globalNames = { - "mainnet": "scripts/deployment/globals_mainnet.json" + "mainnet": "scripts/deployment/globals_mainnet.json", + "polygon": "scripts/deployment/staking/polygon/globals_polygon_mainnet.json", + "gnosis": "scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json", + "arbitrumOne": "scripts/deployment/staking/arbitrum/globals_arbitrum_one.json", + "optimistic": "scripts/deployment/staking/optimistic/globals_optimistic_mainnet.json", + "base": "scripts/deployment/staking/base/globals_base_mainnet.json", + "celo": "scripts/deployment/staking/celo/globals_celo_mainnet.json" }; + const globals = new Array(); + for (let k in globalNames) { + const dataJSON = fs.readFileSync(globalNames[k], "utf8"); + globals.push(JSON.parse(dataJSON)); + } + // Special case for staking (also on L1) + const dataJSON = fs.readFileSync("scripts/deployment/staking/globals_mainnet.json", "utf8"); + const globalsStaking = JSON.parse(dataJSON); + + const providerLinks = { - "mainnet": "https://eth-mainnet.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY_MAINNET + "mainnet": "https://eth-mainnet.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY_MAINNET, + "polygon": "https://polygon-mainnet.g.alchemy.com/v2/" + process.env.ALCHEMY_API_KEY_MATIC, + "gnosis": "https://rpc.gnosischain.com", + "arbitrumOne": "https://arb1.arbitrum.io/rpc", + "optimistic": "https://optimism.drpc.org", + "base": "https://mainnet.base.org", + "celo": "https://forno.celo.org" }; - // Get all the globals processed - const globals = new Array(); const providers = new Array(); - for (let i = 0; i < numChains; i++) { - const dataJSON = fs.readFileSync(globalNames[configs[i]["name"]], "utf8"); - globals.push(JSON.parse(dataJSON)); - const provider = new ethers.providers.JsonRpcProvider(providerLinks[configs[i]["name"]]); + for (let k in providerLinks) { + const provider = new ethers.providers.JsonRpcProvider(providerLinks[k]); providers.push(provider); } console.log("\nVerifying deployed contracts setup... If no error is output, then the contracts are correct."); // L1 contracts - console.log("\n######## Verifying setup on CHAIN ID", configs[i]["chainId"]); + console.log("\n######## Verifying setup on CHAIN ID", configs[0]["chainId"]); - const initLog = "ChainId: " + configs[i]["chainId"] + ", network: " + configs[i]["name"]; + let initLog = "ChainId: " + configs[0]["chainId"] + ", network: " + configs[0]["name"]; let log = initLog + ", contract: " + "DonatorBlacklist"; - await checkDonatorBlacklist(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "DonatorBlacklist", log); + await checkDonatorBlacklist(configs[0]["chainId"], providers[0], globals[0], configs[0]["contracts"], "DonatorBlacklist", log); log = initLog + ", contract: " + "TokenomicsProxy"; - await checkTokenomicsProxy(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "TokenomicsProxy", log); + await checkTokenomicsProxy(configs[0]["chainId"], providers[0], globals[0], configs[0]["contracts"], "TokenomicsProxy", log); log = initLog + ", contract: " + "Treasury"; - await checkTreasury(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "Treasury", log); + await checkTreasury(configs[0]["chainId"], providers[0], globals[0], configs[0]["contracts"], "Treasury", log); log = initLog + ", contract: " + "GenericBondCalculator"; - await checkGenericBondCalculator(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "GenericBondCalculator", log); + await checkGenericBondCalculator(configs[0]["chainId"], providers[0], globals[0], configs[0]["contracts"], "GenericBondCalculator", log); log = initLog + ", contract: " + "Dispenser"; - await checkDispenser(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "Dispenser", log); + await checkDispenser(configs[0]["chainId"], providers[0], globals[0], configs[0]["contracts"], "Dispenser", log); log = initLog + ", contract: " + "Depository"; - await checkDepository(configs[i]["chainId"], providers[i], globals[i], configs[i]["contracts"], "Depository", log); + await checkDepository(configs[0]["chainId"], providers[0], globals[0], configs[0]["contracts"], "Depository", log); + + log = initLog + ", contract: " + "ArbitrumDepositProcessorL1"; + await checkArbitrumDepositProcessorL1(configs[0]["chainId"], providers[0], globalsStaking, configs[0]["contracts"], "ArbitrumDepositProcessorL1", log); + + log = initLog + ", contract: " + "EthereumDepositProcessor"; + await checkEthereumDepositProcessor(configs[0]["chainId"], providers[0], globalsStaking, configs[0]["contracts"], "EthereumDepositProcessor", log); + + log = initLog + ", contract: " + "GnosisDepositProcessorL1"; + await checkGnosisDepositProcessorL1(configs[0]["chainId"], providers[0], globalsStaking, configs[0]["contracts"], "GnosisDepositProcessorL1", log); + + log = initLog + ", contract: " + "OptimismDepositProcessorL1"; + await checkOptimismDepositProcessorL1(configs[0]["chainId"], providers[0], globalsStaking, configs[0]["contracts"], "OptimismDepositProcessorL1", log); + + log = initLog + ", contract: " + "BaseDepositProcessorL1"; + await checkBaseDepositProcessorL1(configs[0]["chainId"], providers[0], globalsStaking, configs[0]["contracts"], "OptimismDepositProcessorL1", log); + + log = initLog + ", contract: " + "PolygonDepositProcessorL1"; + await checkPolygonDepositProcessorL1(configs[0]["chainId"], providers[0], globalsStaking, configs[0]["contracts"], "PolygonDepositProcessorL1", log); + + log = initLog + ", contract: " + "CeloDepositProcessorL1"; + await checkCeloDepositProcessorL1(configs[0]["chainId"], providers[0], globalsStaking, configs[0]["contracts"], "WormholeDepositProcessorL1", log); + + // L2 contracts + // Polygon + console.log("\n######## Verifying setup on CHAIN ID", configs[11]["chainId"]); + initLog = "ChainId: " + configs[11]["chainId"] + ", network: " + configs[11]["name"]; + log = initLog + ", contract: " + "PolygonTargetDispenserL2"; + await checkPolygonTargetDispenserL2(configs[11]["chainId"], providers[1], globals[1], configs[11]["contracts"], "PolygonTargetDispenserL2", log); + + // Gnosis + console.log("\n######## Verifying setup on CHAIN ID", configs[7]["chainId"]); + initLog = "ChainId: " + configs[7]["chainId"] + ", network: " + configs[7]["name"]; + log = initLog + ", contract: " + "GnosisTargetDispenserL2"; + await checkGnosisTargetDispenserL2(configs[7]["chainId"], providers[2], globals[2], configs[7]["contracts"], "GnosisTargetDispenserL2", log); + + // Arbitrum + console.log("\n######## Verifying setup on CHAIN ID", configs[1]["chainId"]); + initLog = "ChainId: " + configs[1]["chainId"] + ", network: " + configs[1]["name"]; + log = initLog + ", contract: " + "ArbitrumTargetDispenserL2"; + await checkArbitrumTargetDispenserL2(configs[1]["chainId"], providers[3], globals[3], configs[1]["contracts"], "ArbitrumTargetDispenserL2", log); + + // Optimism + console.log("\n######## Verifying setup on CHAIN ID", configs[9]["chainId"]); + initLog = "ChainId: " + configs[9]["chainId"] + ", network: " + configs[9]["name"]; + log = initLog + ", contract: " + "OptimismTargetDispenserL2"; + await checkOptimismTargetDispenserL2(configs[9]["chainId"], providers[4], globals[4], configs[9]["contracts"], "OptimismTargetDispenserL2", log); + + // Base + console.log("\n######## Verifying setup on CHAIN ID", configs[3]["chainId"]); + initLog = "ChainId: " + configs[3]["chainId"] + ", network: " + configs[3]["name"]; + log = initLog + ", contract: " + "BaseTargetDispenserL2"; + await checkBaseTargetDispenserL2(configs[3]["chainId"], providers[5], globals[5], configs[3]["contracts"], "OptimismTargetDispenserL2", log); + + // Celo + console.log("\n######## Verifying setup on CHAIN ID", configs[5]["chainId"]); + initLog = "ChainId: " + configs[5]["chainId"] + ", network: " + configs[5]["name"]; + log = initLog + ", contract: " + "CeloTargetDispenserL2"; + await checkCeloTargetDispenserL2(configs[5]["chainId"], providers[6], globals[6], configs[5]["contracts"], "WormholeTargetDispenserL2", log); // ################################# /VERIFY CONTRACTS SETUP ################################# } diff --git a/scripts/deployment/staking/celo/globals_celo_mainnet.json b/scripts/deployment/staking/celo/globals_celo_mainnet.json index 69e8f1aa..a6d7d552 100644 --- a/scripts/deployment/staking/celo/globals_celo_mainnet.json +++ b/scripts/deployment/staking/celo/globals_celo_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"0x1c2cD884127b080F940b7546c1e9aaf525b1FA55","bridgeMediatorAddress":"0x397125902ED2cA2d42104F621f448A2cE1bC8Fb7","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","wormholel1ChainId":"2","celoDepositProcessorL1Address":"0x223902b6C583f18E8dc84AF4E6a8fa523d088B78","celoTargetDispenserL2Address":"0xb4096d181C08DDF75f1A63918cCa0d1023C4e6C7"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"celo","networkURL":"https://forno.celo.org","gasPriceInGwei":"2","olasAddress":"0xaCFfAe8e57Ec6E394Eb1b41939A8CF7892DbDc51","serviceStakingFactoryAddress":"0x1c2cD884127b080F940b7546c1e9aaf525b1FA55","bridgeMediatorAddress":"0x397125902ED2cA2d42104F621f448A2cE1bC8Fb7","wormholeL2CoreAddress":"0xa321448d90d4e5b0A732867c18eA198e75CAC48E","wormholeL2TokenRelayerAddress":"0x796Dff6D74F3E27060B71255Fe517BFb23C93eed","wormholeL2MessageRelayer":"0x27428DD2d3DD32A4D7f7C497eAaa23130d894911","l1ChainId":"2","celoDepositProcessorL1Address":"0x223902b6C583f18E8dc84AF4E6a8fa523d088B78","celoTargetDispenserL2Address":"0xb4096d181C08DDF75f1A63918cCa0d1023C4e6C7"} \ No newline at end of file From b946818c103ddc6dbc07956cc7e2a4695573e7b7 Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 22 Jul 2024 19:26:16 +0100 Subject: [PATCH 41/55] chore: gitleaksignore --- .gitleaksignore | 2 ++ scripts/audit_chains/audit_contracts_setup.js | 32 +++++++++---------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/.gitleaksignore b/.gitleaksignore index b09343db..d8e0189d 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -188,3 +188,5 @@ e9945cd0dd6c8c0dc0fefda76d7f60e7ef56511b:scripts/deployment/staking/globals_sepo 3068b0eefad400612f18c193fa62e11974c0fbd5:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:2 b616524545db2768fb9a3772ffd05c6e0a7f2d8b:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:1 b616524545db2768fb9a3772ffd05c6e0a7f2d8b:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:2 +5e43d545806f8e2d6e8ffd8190d7d704bf663d5f:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:1 +5e43d545806f8e2d6e8ffd8190d7d704bf663d5f:scripts/deployment/staking/celo/globals_celo_mainnet.json:generic-api-key:2 diff --git a/scripts/audit_chains/audit_contracts_setup.js b/scripts/audit_chains/audit_contracts_setup.js index f56f9e51..112a4667 100644 --- a/scripts/audit_chains/audit_contracts_setup.js +++ b/scripts/audit_chains/audit_contracts_setup.js @@ -636,22 +636,22 @@ async function main() { const configs = JSON.parse(dataFromJSON); // ################################# VERIFY CONTRACTS WITH REPO ################################# -// console.log("\nVerifying deployed contracts vs the repo... If no error is output, then the contracts are correct."); -// -// // Currently the verification is fo mainnet only -// const network = "etherscan"; -// const contracts = configs[0]["contracts"]; -// -// // Verify contracts -// for (let i = 0; i < contracts.length; i++) { -// console.log("Checking " + contracts[i]["name"]); -// const execSync = require("child_process").execSync; -// try { -// execSync("scripts/audit_chains/audit_repo_contract.sh " + network + " " + contracts[i]["name"] + " " + contracts[i]["address"]); -// } catch (error) { -// continue; -// } -// } + console.log("\nVerifying deployed contracts vs the repo... If no error is output, then the contracts are correct."); + + // Currently the verification is fo mainnet only + const network = "etherscan"; + const contracts = configs[0]["contracts"]; + + // Verify contracts + for (let i = 0; i < contracts.length; i++) { + console.log("Checking " + contracts[i]["name"]); + const execSync = require("child_process").execSync; + try { + execSync("scripts/audit_chains/audit_repo_contract.sh " + network + " " + contracts[i]["name"] + " " + contracts[i]["address"]); + } catch (error) { + continue; + } + } // ################################# /VERIFY CONTRACTS WITH REPO ################################# // ################################# VERIFY CONTRACTS SETUP ################################# From 72084706adf0adab312ac082af3363cee3e39e0f Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Mon, 22 Jul 2024 20:03:15 +0100 Subject: [PATCH 42/55] chore: space --- scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json index d02dee98..8697e959 100644 --- a/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json +++ b/scripts/deployment/staking/gnosis/globals_gnosis_mainnet.json @@ -1 +1 @@ -{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"0xb0228CA253A88Bc8eb4ca70BCAC8f87b381f4700","bridgeMediatorAddress": "0x15bd56669F57192a97dF41A2aa8f4403e9491776","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0","gnosisTargetDispenserL2Address":"0x67722c823010CEb4BED5325fE109196C0f67D053"} \ No newline at end of file +{"contractVerification":true,"useLedger":true,"derivationPath":"m/44'/60'/2'/0/0","providerName":"gnosis","networkURL":"https://rpc.gnosischain.com","gasPriceInGwei":"5","olasAddress":"0xcE11e14225575945b8E6Dc0D4F2dD4C570f79d9f","serviceStakingFactoryAddress":"0xb0228CA253A88Bc8eb4ca70BCAC8f87b381f4700","bridgeMediatorAddress":"0x15bd56669F57192a97dF41A2aa8f4403e9491776","gnosisAMBHomeAddress":"0x75Df5AF045d91108662D8080fD1FEFAd6aA0bb59","l1ChainId":"1","gnosisDepositProcessorL1Address":"0xEEf2c02cFC445bFFf1c891D486424Ef3aBc66AB0","gnosisTargetDispenserL2Address":"0x67722c823010CEb4BED5325fE109196C0f67D053"} \ No newline at end of file From 7199f38198c9e9455a1b878f612483a5516e1c8f Mon Sep 17 00:00:00 2001 From: Aleksandr Kuperman Date: Tue, 23 Jul 2024 11:58:48 +0100 Subject: [PATCH 43/55] chore: updating static audit script --- docs/deployment_v1.2.md | 14 ++++---- scripts/audit_chains/audit_contracts_setup.js | 36 +++++++++++++++---- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/docs/deployment_v1.2.md b/docs/deployment_v1.2.md index d6be74db..37cbb6ed 100644 --- a/docs/deployment_v1.2.md +++ b/docs/deployment_v1.2.md @@ -7,13 +7,13 @@ Steps for deploying the tokenomics version 1.2 contracts are as follows: 5. EOA to unpause staking incentives in Dispenser calling `setPauseState(0)`; 6. EOA to add a retainer address as a nominee in VoteWeighting; 7. EOA to deploy staking bridging contracts on L1 and L2 with StakingFactory contract being deployed before that in `autonolas-registries`; -8. EOA to transfer ownership rights of Dispenser to Timelock calling `changeOwner(Timelock)`; -9. DAO to change Tokenomics managers calling `changeManagers(ZeroAddress, ZeroAddress, Dispenser)`; -10. DAO to change staking parameters in Tokenomics calling `changeStakingParams()`; -11. DAO to change Treasury managers calling `changeManagers(ZeroAddress, ZeroAddress, Dispenser)`; -12. DAO to enable bridge deposit processors in Dispenser calling `setDepositProcessorChainIds()`; -13. EOA to set up correct L1->L2 links for all the bridging contracts calling `setL2TargetDispenser(L2 corresponding contract)`; -14. EOA to transfer ownership rights of all the L2 bridging contracts to Timelock representation calling `changeOwner(Timelock)`. +8. EOA to set up correct L1->L2 links for all the bridging contracts calling `setL2TargetDispenser(L2 corresponding contract)`; +9. EOA to enable bridge deposit processors in Dispenser calling `setDepositProcessorChainIds()`; +10. EOA to transfer ownership rights of all the L2 bridging contracts to Timelock representation calling `changeOwner(Timelock)`; +11. EOA to transfer ownership rights of Dispenser to Timelock calling `changeOwner(Timelock)`; +12. DAO to change Tokenomics managers calling `changeManagers(ZeroAddress, ZeroAddress, Dispenser)`; +13. DAO to change staking parameters in Tokenomics calling `changeStakingParams()`; +14. DAO to change Treasury managers calling `changeManagers(ZeroAddress, ZeroAddress, Dispenser)`. Note for updating VoteWeighting contract address in Dispenser, if required at some point of time. As outlined in the C4R [issue 59](https://github.com/code-423n4/2024-05-olas-findings/issues/59), the following set of diff --git a/scripts/audit_chains/audit_contracts_setup.js b/scripts/audit_chains/audit_contracts_setup.js index 112a4667..f4272176 100644 --- a/scripts/audit_chains/audit_contracts_setup.js +++ b/scripts/audit_chains/audit_contracts_setup.js @@ -306,6 +306,10 @@ async function checkArbitrumDepositProcessorL1(chainId, provider, globalsInstanc // Check L1 bridge const bridge = await arbitrumDepositProcessorL1.bridge(); customExpect(bridge, globalsInstance["arbitrumBridgeAddress"], log + ", function: bridge()"); + + // Check L2 target dispenser + const l2TargetDispenser = await arbitrumDepositProcessorL1.l2TargetDispenser(); + customExpect(l2TargetDispenser, globalsInstance["arbitrumTargetDispenserL2Address"], log + ", function: l2TargetDispenser()"); } // Check checkEthereumDepositProcessor: chain Id, provider, parsed globals, configuration contracts, contract name @@ -356,6 +360,10 @@ async function checkGnosisDepositProcessorL1(chainId, provider, globalsInstance, // Check L2 target chain Id const l2TargetChainId = await gnosisDepositProcessorL1.l2TargetChainId(); customExpect(l2TargetChainId.toString(), globalsInstance["gnosisL2TargetChainId"], log + ", function: l2TargetChainId()"); + + // Check L2 target dispenser + const l2TargetDispenser = await gnosisDepositProcessorL1.l2TargetDispenser(); + customExpect(l2TargetDispenser, globalsInstance["gnosisTargetDispenserL2Address"], log + ", function: l2TargetDispenser()"); } // Check OptimismDepositProcessorL1: chain Id, provider, parsed globals, configuration contracts, contract name @@ -384,6 +392,10 @@ async function checkOptimismDepositProcessorL1(chainId, provider, globalsInstanc // Check L2 OLAS address const olasL2 = await optimismDepositProcessorL1.olasL2(); customExpect(olasL2, globalsInstance["optimisticOLASAddress"], log + ", function: olasL2()"); + + // Check L2 target dispenser + const l2TargetDispenser = await optimismDepositProcessorL1.l2TargetDispenser(); + customExpect(l2TargetDispenser, globalsInstance["optimismTargetDispenserL2Address"], log + ", function: l2TargetDispenser()"); } // Check BaseDepositProcessorL1: chain Id, provider, parsed globals, configuration contracts, contract name @@ -412,6 +424,10 @@ async function checkBaseDepositProcessorL1(chainId, provider, globalsInstance, c // Check L2 OLAS address const olasL2 = await baseDepositProcessorL1.olasL2(); customExpect(olasL2, globalsInstance["baseOLASAddress"], log + ", function: olasL2()"); + + // Check L2 target dispenser + const l2TargetDispenser = await baseDepositProcessorL1.l2TargetDispenser(); + customExpect(l2TargetDispenser, globalsInstance["baseTargetDispenserL2Address"], log + ", function: l2TargetDispenser()"); } // Check PolygonDepositProcessorL1: chain Id, provider, parsed globals, configuration contracts, contract name @@ -444,6 +460,10 @@ async function checkPolygonDepositProcessorL1(chainId, provider, globalsInstance // Check L1 predicate const predicate = await polygonDepositProcessorL1.predicate(); customExpect(predicate, globalsInstance["polygonERC20PredicateAddress"], log + ", function: predicate()"); + + // Check L2 target dispenser + const l2TargetDispenser = await polygonDepositProcessorL1.l2TargetDispenser(); + customExpect(l2TargetDispenser, globalsInstance["polygonTargetDispenserL2Address"], log + ", function: l2TargetDispenser()"); } // Check CeloDepositProcessorL1: chain Id, provider, parsed globals, configuration contracts, contract name @@ -476,6 +496,10 @@ async function checkCeloDepositProcessorL1(chainId, provider, globalsInstance, c // Check L2 wormhole chain Id format const wormholeTargetChainId = await celoDepositProcessorL1.wormholeTargetChainId(); customExpect(wormholeTargetChainId.toString(), globalsInstance["celoWormholeL2TargetChainId"], log + ", function: wormholeTargetChainId()"); + + // Check L2 target dispenser + const l2TargetDispenser = await celoDepositProcessorL1.l2TargetDispenser(); + customExpect(l2TargetDispenser, globalsInstance["celoTargetDispenserL2Address"], log + ", function: l2TargetDispenser()"); } // Check TargetDispenserL2: contract, globalsInstance @@ -756,12 +780,6 @@ async function main() { log = initLog + ", contract: " + "ArbitrumTargetDispenserL2"; await checkArbitrumTargetDispenserL2(configs[1]["chainId"], providers[3], globals[3], configs[1]["contracts"], "ArbitrumTargetDispenserL2", log); - // Optimism - console.log("\n######## Verifying setup on CHAIN ID", configs[9]["chainId"]); - initLog = "ChainId: " + configs[9]["chainId"] + ", network: " + configs[9]["name"]; - log = initLog + ", contract: " + "OptimismTargetDispenserL2"; - await checkOptimismTargetDispenserL2(configs[9]["chainId"], providers[4], globals[4], configs[9]["contracts"], "OptimismTargetDispenserL2", log); - // Base console.log("\n######## Verifying setup on CHAIN ID", configs[3]["chainId"]); initLog = "ChainId: " + configs[3]["chainId"] + ", network: " + configs[3]["name"]; @@ -773,6 +791,12 @@ async function main() { initLog = "ChainId: " + configs[5]["chainId"] + ", network: " + configs[5]["name"]; log = initLog + ", contract: " + "CeloTargetDispenserL2"; await checkCeloTargetDispenserL2(configs[5]["chainId"], providers[6], globals[6], configs[5]["contracts"], "WormholeTargetDispenserL2", log); + + // Optimism + console.log("\n######## Verifying setup on CHAIN ID", configs[9]["chainId"]); + initLog = "ChainId: " + configs[9]["chainId"] + ", network: " + configs[9]["name"]; + log = initLog + ", contract: " + "OptimismTargetDispenserL2"; + await checkOptimismTargetDispenserL2(configs[9]["chainId"], providers[4], globals[4], configs[9]["contracts"], "OptimismTargetDispenserL2", log); // ################################# /VERIFY CONTRACTS SETUP ################################# } From a5f5c342fc2d14d3aec0ee459a091fe69ff899e9 Mon Sep 17 00:00:00 2001 From: AL Date: Fri, 26 Jul 2024 13:57:59 +0100 Subject: [PATCH 44/55] doc: internal audit ref AIP-1/Bonding --- audits/README.md | 2 + audits/internal5/README.md | 61 + .../contracts/BondCalculator-flatten.sol | 997 ++++++ .../analysis/contracts/Depository-flatten.sol | 1085 +++++++ audits/internal5/analysis/contracts/script.sh | 20 + ...-flatten.sol.BondCalculator.call-graph.png | Bin 0 -> 89100 bytes ...tor-flatten.sol.ITokenomics.call-graph.png | Bin 0 -> 9351 bytes ...-flatten.sol.IUniswapV2Pair.call-graph.png | Bin 0 -> 15998 bytes ...r-flatten.sol.IVotingEscrow.call-graph.png | Bin 0 -> 5869 bytes ...r-flatten.sol.all_contracts.call-graph.png | Bin 0 -> 133596 bytes ...lculator-flatten.sol.inheritance-graph.png | Bin 0 -> 61212 bytes ...tory-flatten.sol.Depository.call-graph.png | Bin 0 -> 284317 bytes ...ten.sol.ERC721TokenReceiver.call-graph.png | Bin 0 -> 8998 bytes ...flatten.sol.IBondCalculator.call-graph.png | Bin 0 -> 14589 bytes ...pository-flatten.sol.IToken.call-graph.png | Bin 0 -> 25191 bytes ...ory-flatten.sol.ITokenomics.call-graph.png | Bin 0 -> 33494 bytes ...itory-flatten.sol.ITreasury.call-graph.png | Bin 0 -> 23225 bytes ...y-flatten.sol.all_contracts.call-graph.png | Bin 0 -> 422219 bytes ...pository-flatten.sol.inheritance-graph.png | Bin 0 -> 284558 bytes .../internal5/analysis/slither_call-graph.txt | 32 + .../analysis/slither_constructor-calls.txt | 107 + .../analysis/slither_contract-summary.txt | 134 + .../analysis/slither_data-dependency.txt | 2789 +++++++++++++++++ audits/internal5/analysis/slither_full.txt | 452 +++ .../analysis/slither_function-summary.txt | 314 ++ .../analysis/slither_human-summary.txt | 62 + .../analysis/slither_inheritance-graph.txt | 22 + .../analysis/slither_inheritance.txt | 81 + .../internal5/analysis/slither_modifiers.txt | 145 + audits/internal5/analysis/slither_require.txt | 160 + .../analysis/slither_variable-order.txt | 98 + .../analysis/slither_vars-and-auth.txt | 173 + .../internal5/analysis/storage/Tokenomics.png | Bin 0 -> 426049 bytes 33 files changed, 6734 insertions(+) create mode 100644 audits/internal5/README.md create mode 100644 audits/internal5/analysis/contracts/BondCalculator-flatten.sol create mode 100644 audits/internal5/analysis/contracts/Depository-flatten.sol create mode 100755 audits/internal5/analysis/contracts/script.sh create mode 100644 audits/internal5/analysis/slither_BondCalculator-flatten.sol.BondCalculator.call-graph.png create mode 100644 audits/internal5/analysis/slither_BondCalculator-flatten.sol.ITokenomics.call-graph.png create mode 100644 audits/internal5/analysis/slither_BondCalculator-flatten.sol.IUniswapV2Pair.call-graph.png create mode 100644 audits/internal5/analysis/slither_BondCalculator-flatten.sol.IVotingEscrow.call-graph.png create mode 100644 audits/internal5/analysis/slither_BondCalculator-flatten.sol.all_contracts.call-graph.png create mode 100644 audits/internal5/analysis/slither_BondCalculator-flatten.sol.inheritance-graph.png create mode 100644 audits/internal5/analysis/slither_Depository-flatten.sol.Depository.call-graph.png create mode 100644 audits/internal5/analysis/slither_Depository-flatten.sol.ERC721TokenReceiver.call-graph.png create mode 100644 audits/internal5/analysis/slither_Depository-flatten.sol.IBondCalculator.call-graph.png create mode 100644 audits/internal5/analysis/slither_Depository-flatten.sol.IToken.call-graph.png create mode 100644 audits/internal5/analysis/slither_Depository-flatten.sol.ITokenomics.call-graph.png create mode 100644 audits/internal5/analysis/slither_Depository-flatten.sol.ITreasury.call-graph.png create mode 100644 audits/internal5/analysis/slither_Depository-flatten.sol.all_contracts.call-graph.png create mode 100644 audits/internal5/analysis/slither_Depository-flatten.sol.inheritance-graph.png create mode 100644 audits/internal5/analysis/slither_call-graph.txt create mode 100644 audits/internal5/analysis/slither_constructor-calls.txt create mode 100644 audits/internal5/analysis/slither_contract-summary.txt create mode 100644 audits/internal5/analysis/slither_data-dependency.txt create mode 100644 audits/internal5/analysis/slither_full.txt create mode 100644 audits/internal5/analysis/slither_function-summary.txt create mode 100644 audits/internal5/analysis/slither_human-summary.txt create mode 100644 audits/internal5/analysis/slither_inheritance-graph.txt create mode 100644 audits/internal5/analysis/slither_inheritance.txt create mode 100644 audits/internal5/analysis/slither_modifiers.txt create mode 100644 audits/internal5/analysis/slither_require.txt create mode 100644 audits/internal5/analysis/slither_variable-order.txt create mode 100644 audits/internal5/analysis/slither_vars-and-auth.txt create mode 100644 audits/internal5/analysis/storage/Tokenomics.png diff --git a/audits/README.md b/audits/README.md index d7dce10b..6c263fec 100644 --- a/audits/README.md +++ b/audits/README.md @@ -10,5 +10,7 @@ An internal audit with a focus on depository implementation v.1.0.1 is located i An internal audit with a focus on PoAA Staking is located in this folder: [internal audit 4](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/audits/internal4). +An internal audit with a focus on AIP-1 (bonding) is located in this folder: [internal audit 5](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/audits/internal5). + ### External audit Audit reports: [v1](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/audits/Autonolas%20Tokenomics%20Smart%20Contract%20Audit.pdf) and [v2](https://sourcehat.com/audits/AutonolasTokenomics/). diff --git a/audits/internal5/README.md b/audits/internal5/README.md new file mode 100644 index 00000000..d0b56f3f --- /dev/null +++ b/audits/internal5/README.md @@ -0,0 +1,61 @@ +# Internal audit of autonolas-tokenomics +The review has been performed based on the contract code in the following repository:
+`https://github.com/valory-xyz/autonolas-tokenomics`
+commit: `12101b49a2dcdc7a7378f416ddb1611e10459b67` or `tag: v1.3.0-pre-internal-audit`
+ +## Objectives +The audit focused on contracts related to AIP-1 implementation (Bonding) in this repo. + +### Flatten version +Flatten version of contracts. [contracts](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/audits/internal5/analysis/contracts) + +### Coverage: N/A +In this commit, the tests are in the process of being reworked and therefore the coverage section does not make sense. + +### Storage and proxy +Using sol2uml tools: https://github.com/naddison36/sol2uml
+``` +npm link sol2uml --only=production +sol2uml storage contracts/ -f png -c Tokenomics -o audits/internal4/analysis/storage +Generated png file audits/internal5/analysis/storage/Tokenomics.png +``` +[Tokenomics-storage](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/audits/internal5/analysis/storage/Tokenomics.png)
+current deployed:
+[Tokenomics-storage-current](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/audits/internal4/analysis/storage/Tokenomics.png)
+The new slot allocation for Tokenomics (critical as proxy pattern) does not affect the previous one. + +### Security issues. +#### Problems found instrumentally +Several checks are obtained automatically. They are commented. Some issues found need to be fixed.
+All automatic warnings are listed in the following file, concerns of which we address in more detail below:
+[slither-full](https://github.com/valory-xyz/autonolas-tokenomics/blob/main/audits/internal5/analysis/slither_full.txt)
+ +#### Issue +1. minOLASLeftoverAmount never setupped/updated +``` + // Minimum amount of supply such that any value below is given to the bonding account in order to close the product + uint256 public minOLASLeftoverAmount; +``` +2. Reentrancy after ERC721 "safe" mint in deposit +``` + External calls: + - _safeMint(msg.sender,bondId) (Depository-flatten.sol#891) + - require(bool,string)(ERC721TokenReceiver(to).onERC721Received(msg.sender,address(0),id,) == ERC721TokenReceiver.onERC721Received.selector,UNSAFE_RECIPIENT) (Depository-flatten.sol#461-465) + After adding _safeMint(msg.sender, bondId), it became clearly susceptible reentrancy attack. + We need to add explicit protection against reentrancy. +``` +#### Genaral notes: more tests need to be done, needed re-audit later +``` +trackServiceDonations requires a large number of tests and coverage of all scenarios. +``` +#### Notes for discussion: epsilonRate +``` +in this implementation epsilonRate is deprecated and simply not used. perhaps it makes sense (?) to use this dimensionless coefficient as a limiter. +// The IDF depends on the epsilonRate value, idf = 1 + epsilonRate, and epsilonRate is bound by 17 with 18 decimals +new +// IDF = 1 + normalized booster +idf = 1e18 + discountBooster; +maybe idf = min(1e18 + discountBooster, 1e18 + epsilonRate) +Moreover, according to calculations discountBooster <= 1e18 << max(epsilonRate) +``` + diff --git a/audits/internal5/analysis/contracts/BondCalculator-flatten.sol b/audits/internal5/analysis/contracts/BondCalculator-flatten.sol new file mode 100644 index 00000000..aebce773 --- /dev/null +++ b/audits/internal5/analysis/contracts/BondCalculator-flatten.sol @@ -0,0 +1,997 @@ +// Sources flattened with hardhat v2.22.4 https://hardhat.org +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +// Common.sol +// +// Common mathematical functions used in both SD59x18 and UD60x18. Note that these global functions do not +// always operate with SD59x18 and UD60x18 numbers. + +/*////////////////////////////////////////////////////////////////////////// + CUSTOM ERRORS +//////////////////////////////////////////////////////////////////////////*/ + +/// @notice Thrown when the resultant value in {mulDiv} overflows uint256. +error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator); + +/// @notice Thrown when the resultant value in {mulDiv18} overflows uint256. +error PRBMath_MulDiv18_Overflow(uint256 x, uint256 y); + +/// @notice Thrown when one of the inputs passed to {mulDivSigned} is `type(int256).min`. +error PRBMath_MulDivSigned_InputTooSmall(); + +/// @notice Thrown when the resultant value in {mulDivSigned} overflows int256. +error PRBMath_MulDivSigned_Overflow(int256 x, int256 y); + +/*////////////////////////////////////////////////////////////////////////// + CONSTANTS +//////////////////////////////////////////////////////////////////////////*/ + +/// @dev The maximum value a uint128 number can have. +uint128 constant MAX_UINT128 = type(uint128).max; + +/// @dev The maximum value a uint40 number can have. +uint40 constant MAX_UINT40 = type(uint40).max; + +/// @dev The unit number, which the decimal precision of the fixed-point types. +uint256 constant UNIT = 1e18; + +/// @dev The unit number inverted mod 2^256. +uint256 constant UNIT_INVERSE = 78156646155174841979727994598816262306175212592076161876661_508869554232690281; + +/// @dev The the largest power of two that divides the decimal value of `UNIT`. The logarithm of this value is the least significant +/// bit in the binary representation of `UNIT`. +uint256 constant UNIT_LPOTD = 262144; + +/*////////////////////////////////////////////////////////////////////////// + FUNCTIONS +//////////////////////////////////////////////////////////////////////////*/ + +/// @notice Calculates the binary exponent of x using the binary fraction method. +/// @dev Has to use 192.64-bit fixed-point numbers. See https://ethereum.stackexchange.com/a/96594/24693. +/// @param x The exponent as an unsigned 192.64-bit fixed-point number. +/// @return result The result as an unsigned 60.18-decimal fixed-point number. +/// @custom:smtchecker abstract-function-nondet +function exp2(uint256 x) pure returns (uint256 result) { + unchecked { + // Start from 0.5 in the 192.64-bit fixed-point format. + result = 0x800000000000000000000000000000000000000000000000; + + // The following logic multiplies the result by $\sqrt{2^{-i}}$ when the bit at position i is 1. Key points: + // + // 1. Intermediate results will not overflow, as the starting point is 2^191 and all magic factors are under 2^65. + // 2. The rationale for organizing the if statements into groups of 8 is gas savings. If the result of performing + // a bitwise AND operation between x and any value in the array [0x80; 0x40; 0x20; 0x10; 0x08; 0x04; 0x02; 0x01] is 1, + // we know that `x & 0xFF` is also 1. + if (x & 0xFF00000000000000 > 0) { + if (x & 0x8000000000000000 > 0) { + result = (result * 0x16A09E667F3BCC909) >> 64; + } + if (x & 0x4000000000000000 > 0) { + result = (result * 0x1306FE0A31B7152DF) >> 64; + } + if (x & 0x2000000000000000 > 0) { + result = (result * 0x1172B83C7D517ADCE) >> 64; + } + if (x & 0x1000000000000000 > 0) { + result = (result * 0x10B5586CF9890F62A) >> 64; + } + if (x & 0x800000000000000 > 0) { + result = (result * 0x1059B0D31585743AE) >> 64; + } + if (x & 0x400000000000000 > 0) { + result = (result * 0x102C9A3E778060EE7) >> 64; + } + if (x & 0x200000000000000 > 0) { + result = (result * 0x10163DA9FB33356D8) >> 64; + } + if (x & 0x100000000000000 > 0) { + result = (result * 0x100B1AFA5ABCBED61) >> 64; + } + } + + if (x & 0xFF000000000000 > 0) { + if (x & 0x80000000000000 > 0) { + result = (result * 0x10058C86DA1C09EA2) >> 64; + } + if (x & 0x40000000000000 > 0) { + result = (result * 0x1002C605E2E8CEC50) >> 64; + } + if (x & 0x20000000000000 > 0) { + result = (result * 0x100162F3904051FA1) >> 64; + } + if (x & 0x10000000000000 > 0) { + result = (result * 0x1000B175EFFDC76BA) >> 64; + } + if (x & 0x8000000000000 > 0) { + result = (result * 0x100058BA01FB9F96D) >> 64; + } + if (x & 0x4000000000000 > 0) { + result = (result * 0x10002C5CC37DA9492) >> 64; + } + if (x & 0x2000000000000 > 0) { + result = (result * 0x1000162E525EE0547) >> 64; + } + if (x & 0x1000000000000 > 0) { + result = (result * 0x10000B17255775C04) >> 64; + } + } + + if (x & 0xFF0000000000 > 0) { + if (x & 0x800000000000 > 0) { + result = (result * 0x1000058B91B5BC9AE) >> 64; + } + if (x & 0x400000000000 > 0) { + result = (result * 0x100002C5C89D5EC6D) >> 64; + } + if (x & 0x200000000000 > 0) { + result = (result * 0x10000162E43F4F831) >> 64; + } + if (x & 0x100000000000 > 0) { + result = (result * 0x100000B1721BCFC9A) >> 64; + } + if (x & 0x80000000000 > 0) { + result = (result * 0x10000058B90CF1E6E) >> 64; + } + if (x & 0x40000000000 > 0) { + result = (result * 0x1000002C5C863B73F) >> 64; + } + if (x & 0x20000000000 > 0) { + result = (result * 0x100000162E430E5A2) >> 64; + } + if (x & 0x10000000000 > 0) { + result = (result * 0x1000000B172183551) >> 64; + } + } + + if (x & 0xFF00000000 > 0) { + if (x & 0x8000000000 > 0) { + result = (result * 0x100000058B90C0B49) >> 64; + } + if (x & 0x4000000000 > 0) { + result = (result * 0x10000002C5C8601CC) >> 64; + } + if (x & 0x2000000000 > 0) { + result = (result * 0x1000000162E42FFF0) >> 64; + } + if (x & 0x1000000000 > 0) { + result = (result * 0x10000000B17217FBB) >> 64; + } + if (x & 0x800000000 > 0) { + result = (result * 0x1000000058B90BFCE) >> 64; + } + if (x & 0x400000000 > 0) { + result = (result * 0x100000002C5C85FE3) >> 64; + } + if (x & 0x200000000 > 0) { + result = (result * 0x10000000162E42FF1) >> 64; + } + if (x & 0x100000000 > 0) { + result = (result * 0x100000000B17217F8) >> 64; + } + } + + if (x & 0xFF000000 > 0) { + if (x & 0x80000000 > 0) { + result = (result * 0x10000000058B90BFC) >> 64; + } + if (x & 0x40000000 > 0) { + result = (result * 0x1000000002C5C85FE) >> 64; + } + if (x & 0x20000000 > 0) { + result = (result * 0x100000000162E42FF) >> 64; + } + if (x & 0x10000000 > 0) { + result = (result * 0x1000000000B17217F) >> 64; + } + if (x & 0x8000000 > 0) { + result = (result * 0x100000000058B90C0) >> 64; + } + if (x & 0x4000000 > 0) { + result = (result * 0x10000000002C5C860) >> 64; + } + if (x & 0x2000000 > 0) { + result = (result * 0x1000000000162E430) >> 64; + } + if (x & 0x1000000 > 0) { + result = (result * 0x10000000000B17218) >> 64; + } + } + + if (x & 0xFF0000 > 0) { + if (x & 0x800000 > 0) { + result = (result * 0x1000000000058B90C) >> 64; + } + if (x & 0x400000 > 0) { + result = (result * 0x100000000002C5C86) >> 64; + } + if (x & 0x200000 > 0) { + result = (result * 0x10000000000162E43) >> 64; + } + if (x & 0x100000 > 0) { + result = (result * 0x100000000000B1721) >> 64; + } + if (x & 0x80000 > 0) { + result = (result * 0x10000000000058B91) >> 64; + } + if (x & 0x40000 > 0) { + result = (result * 0x1000000000002C5C8) >> 64; + } + if (x & 0x20000 > 0) { + result = (result * 0x100000000000162E4) >> 64; + } + if (x & 0x10000 > 0) { + result = (result * 0x1000000000000B172) >> 64; + } + } + + if (x & 0xFF00 > 0) { + if (x & 0x8000 > 0) { + result = (result * 0x100000000000058B9) >> 64; + } + if (x & 0x4000 > 0) { + result = (result * 0x10000000000002C5D) >> 64; + } + if (x & 0x2000 > 0) { + result = (result * 0x1000000000000162E) >> 64; + } + if (x & 0x1000 > 0) { + result = (result * 0x10000000000000B17) >> 64; + } + if (x & 0x800 > 0) { + result = (result * 0x1000000000000058C) >> 64; + } + if (x & 0x400 > 0) { + result = (result * 0x100000000000002C6) >> 64; + } + if (x & 0x200 > 0) { + result = (result * 0x10000000000000163) >> 64; + } + if (x & 0x100 > 0) { + result = (result * 0x100000000000000B1) >> 64; + } + } + + if (x & 0xFF > 0) { + if (x & 0x80 > 0) { + result = (result * 0x10000000000000059) >> 64; + } + if (x & 0x40 > 0) { + result = (result * 0x1000000000000002C) >> 64; + } + if (x & 0x20 > 0) { + result = (result * 0x10000000000000016) >> 64; + } + if (x & 0x10 > 0) { + result = (result * 0x1000000000000000B) >> 64; + } + if (x & 0x8 > 0) { + result = (result * 0x10000000000000006) >> 64; + } + if (x & 0x4 > 0) { + result = (result * 0x10000000000000003) >> 64; + } + if (x & 0x2 > 0) { + result = (result * 0x10000000000000001) >> 64; + } + if (x & 0x1 > 0) { + result = (result * 0x10000000000000001) >> 64; + } + } + + // In the code snippet below, two operations are executed simultaneously: + // + // 1. The result is multiplied by $(2^n + 1)$, where $2^n$ represents the integer part, and the additional 1 + // accounts for the initial guess of 0.5. This is achieved by subtracting from 191 instead of 192. + // 2. The result is then converted to an unsigned 60.18-decimal fixed-point format. + // + // The underlying logic is based on the relationship $2^{191-ip} = 2^{ip} / 2^{191}$, where $ip$ denotes the, + // integer part, $2^n$. + result *= UNIT; + result >>= (191 - (x >> 64)); + } +} + +/// @notice Finds the zero-based index of the first 1 in the binary representation of x. +/// +/// @dev See the note on "msb" in this Wikipedia article: https://en.wikipedia.org/wiki/Find_first_set +/// +/// Each step in this implementation is equivalent to this high-level code: +/// +/// ```solidity +/// if (x >= 2 ** 128) { +/// x >>= 128; +/// result += 128; +/// } +/// ``` +/// +/// Where 128 is replaced with each respective power of two factor. See the full high-level implementation here: +/// https://gist.github.com/PaulRBerg/f932f8693f2733e30c4d479e8e980948 +/// +/// The Yul instructions used below are: +/// +/// - "gt" is "greater than" +/// - "or" is the OR bitwise operator +/// - "shl" is "shift left" +/// - "shr" is "shift right" +/// +/// @param x The uint256 number for which to find the index of the most significant bit. +/// @return result The index of the most significant bit as a uint256. +/// @custom:smtchecker abstract-function-nondet +function msb(uint256 x) pure returns (uint256 result) { + // 2^128 + assembly ("memory-safe") { + let factor := shl(7, gt(x, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) + x := shr(factor, x) + result := or(result, factor) + } + // 2^64 + assembly ("memory-safe") { + let factor := shl(6, gt(x, 0xFFFFFFFFFFFFFFFF)) + x := shr(factor, x) + result := or(result, factor) + } + // 2^32 + assembly ("memory-safe") { + let factor := shl(5, gt(x, 0xFFFFFFFF)) + x := shr(factor, x) + result := or(result, factor) + } + // 2^16 + assembly ("memory-safe") { + let factor := shl(4, gt(x, 0xFFFF)) + x := shr(factor, x) + result := or(result, factor) + } + // 2^8 + assembly ("memory-safe") { + let factor := shl(3, gt(x, 0xFF)) + x := shr(factor, x) + result := or(result, factor) + } + // 2^4 + assembly ("memory-safe") { + let factor := shl(2, gt(x, 0xF)) + x := shr(factor, x) + result := or(result, factor) + } + // 2^2 + assembly ("memory-safe") { + let factor := shl(1, gt(x, 0x3)) + x := shr(factor, x) + result := or(result, factor) + } + // 2^1 + // No need to shift x any more. + assembly ("memory-safe") { + let factor := gt(x, 0x1) + result := or(result, factor) + } +} + +/// @notice Calculates x*y÷denominator with 512-bit precision. +/// +/// @dev Credits to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv. +/// +/// Notes: +/// - The result is rounded toward zero. +/// +/// Requirements: +/// - The denominator must not be zero. +/// - The result must fit in uint256. +/// +/// @param x The multiplicand as a uint256. +/// @param y The multiplier as a uint256. +/// @param denominator The divisor as a uint256. +/// @return result The result as a uint256. +/// @custom:smtchecker abstract-function-nondet +function mulDiv(uint256 x, uint256 y, uint256 denominator) pure returns (uint256 result) { + // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use + // use the Chinese Remainder Theorem to reconstruct the 512-bit result. The result is stored in two 256 + // variables such that product = prod1 * 2^256 + prod0. + uint256 prod0; // Least significant 256 bits of the product + uint256 prod1; // Most significant 256 bits of the product + assembly ("memory-safe") { + let mm := mulmod(x, y, not(0)) + prod0 := mul(x, y) + prod1 := sub(sub(mm, prod0), lt(mm, prod0)) + } + + // Handle non-overflow cases, 256 by 256 division. + if (prod1 == 0) { + unchecked { + return prod0 / denominator; + } + } + + // Make sure the result is less than 2^256. Also prevents denominator == 0. + if (prod1 >= denominator) { + revert PRBMath_MulDiv_Overflow(x, y, denominator); + } + + //////////////////////////////////////////////////////////////////////////// + // 512 by 256 division + //////////////////////////////////////////////////////////////////////////// + + // Make division exact by subtracting the remainder from [prod1 prod0]. + uint256 remainder; + assembly ("memory-safe") { + // Compute remainder using the mulmod Yul instruction. + remainder := mulmod(x, y, denominator) + + // Subtract 256 bit number from 512-bit number. + prod1 := sub(prod1, gt(remainder, prod0)) + prod0 := sub(prod0, remainder) + } + + unchecked { + // Calculate the largest power of two divisor of the denominator using the unary operator ~. This operation cannot overflow + // because the denominator cannot be zero at this point in the function execution. The result is always >= 1. + // For more detail, see https://cs.stackexchange.com/q/138556/92363. + uint256 lpotdod = denominator & (~denominator + 1); + uint256 flippedLpotdod; + + assembly ("memory-safe") { + // Factor powers of two out of denominator. + denominator := div(denominator, lpotdod) + + // Divide [prod1 prod0] by lpotdod. + prod0 := div(prod0, lpotdod) + + // Get the flipped value `2^256 / lpotdod`. If the `lpotdod` is zero, the flipped value is one. + // `sub(0, lpotdod)` produces the two's complement version of `lpotdod`, which is equivalent to flipping all the bits. + // However, `div` interprets this value as an unsigned value: https://ethereum.stackexchange.com/q/147168/24693 + flippedLpotdod := add(div(sub(0, lpotdod), lpotdod), 1) + } + + // Shift in bits from prod1 into prod0. + prod0 |= prod1 * flippedLpotdod; + + // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such + // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for + // four bits. That is, denominator * inv = 1 mod 2^4. + uint256 inverse = (3 * denominator) ^ 2; + + // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works + // in modular arithmetic, doubling the correct bits in each step. + inverse *= 2 - denominator * inverse; // inverse mod 2^8 + inverse *= 2 - denominator * inverse; // inverse mod 2^16 + inverse *= 2 - denominator * inverse; // inverse mod 2^32 + inverse *= 2 - denominator * inverse; // inverse mod 2^64 + inverse *= 2 - denominator * inverse; // inverse mod 2^128 + inverse *= 2 - denominator * inverse; // inverse mod 2^256 + + // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. + // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is + // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 + // is no longer required. + result = prod0 * inverse; + } +} + +/// @notice Calculates x*y÷1e18 with 512-bit precision. +/// +/// @dev A variant of {mulDiv} with constant folding, i.e. in which the denominator is hard coded to 1e18. +/// +/// Notes: +/// - The body is purposely left uncommented; to understand how this works, see the documentation in {mulDiv}. +/// - The result is rounded toward zero. +/// - We take as an axiom that the result cannot be `MAX_UINT256` when x and y solve the following system of equations: +/// +/// $$ +/// \begin{cases} +/// x * y = MAX\_UINT256 * UNIT \\ +/// (x * y) \% UNIT \geq \frac{UNIT}{2} +/// \end{cases} +/// $$ +/// +/// Requirements: +/// - Refer to the requirements in {mulDiv}. +/// - The result must fit in uint256. +/// +/// @param x The multiplicand as an unsigned 60.18-decimal fixed-point number. +/// @param y The multiplier as an unsigned 60.18-decimal fixed-point number. +/// @return result The result as an unsigned 60.18-decimal fixed-point number. +/// @custom:smtchecker abstract-function-nondet +function mulDiv18(uint256 x, uint256 y) pure returns (uint256 result) { + uint256 prod0; + uint256 prod1; + assembly ("memory-safe") { + let mm := mulmod(x, y, not(0)) + prod0 := mul(x, y) + prod1 := sub(sub(mm, prod0), lt(mm, prod0)) + } + + if (prod1 == 0) { + unchecked { + return prod0 / UNIT; + } + } + + if (prod1 >= UNIT) { + revert PRBMath_MulDiv18_Overflow(x, y); + } + + uint256 remainder; + assembly ("memory-safe") { + remainder := mulmod(x, y, UNIT) + result := + mul( + or( + div(sub(prod0, remainder), UNIT_LPOTD), + mul(sub(prod1, gt(remainder, prod0)), add(div(sub(0, UNIT_LPOTD), UNIT_LPOTD), 1)) + ), + UNIT_INVERSE + ) + } +} + +/// @notice Calculates x*y÷denominator with 512-bit precision. +/// +/// @dev This is an extension of {mulDiv} for signed numbers, which works by computing the signs and the absolute values separately. +/// +/// Notes: +/// - The result is rounded toward zero. +/// +/// Requirements: +/// - Refer to the requirements in {mulDiv}. +/// - None of the inputs can be `type(int256).min`. +/// - The result must fit in int256. +/// +/// @param x The multiplicand as an int256. +/// @param y The multiplier as an int256. +/// @param denominator The divisor as an int256. +/// @return result The result as an int256. +/// @custom:smtchecker abstract-function-nondet +function mulDivSigned(int256 x, int256 y, int256 denominator) pure returns (int256 result) { + if (x == type(int256).min || y == type(int256).min || denominator == type(int256).min) { + revert PRBMath_MulDivSigned_InputTooSmall(); + } + + // Get hold of the absolute values of x, y and the denominator. + uint256 xAbs; + uint256 yAbs; + uint256 dAbs; + unchecked { + xAbs = x < 0 ? uint256(-x) : uint256(x); + yAbs = y < 0 ? uint256(-y) : uint256(y); + dAbs = denominator < 0 ? uint256(-denominator) : uint256(denominator); + } + + // Compute the absolute value of x*y÷denominator. The result must fit in int256. + uint256 resultAbs = mulDiv(xAbs, yAbs, dAbs); + if (resultAbs > uint256(type(int256).max)) { + revert PRBMath_MulDivSigned_Overflow(x, y); + } + + // Get the signs of x, y and the denominator. + uint256 sx; + uint256 sy; + uint256 sd; + assembly ("memory-safe") { + // "sgt" is the "signed greater than" assembly instruction and "sub(0,1)" is -1 in two's complement. + sx := sgt(x, sub(0, 1)) + sy := sgt(y, sub(0, 1)) + sd := sgt(denominator, sub(0, 1)) + } + + // XOR over sx, sy and sd. What this does is to check whether there are 1 or 3 negative signs in the inputs. + // If there are, the result should be negative. Otherwise, it should be positive. + unchecked { + result = sx ^ sy ^ sd == 0 ? -int256(resultAbs) : int256(resultAbs); + } +} + +/// @notice Calculates the square root of x using the Babylonian method. +/// +/// @dev See https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method. +/// +/// Notes: +/// - If x is not a perfect square, the result is rounded down. +/// - Credits to OpenZeppelin for the explanations in comments below. +/// +/// @param x The uint256 number for which to calculate the square root. +/// @return result The result as a uint256. +/// @custom:smtchecker abstract-function-nondet +function sqrt(uint256 x) pure returns (uint256 result) { + if (x == 0) { + return 0; + } + + // For our first guess, we calculate the biggest power of 2 which is smaller than the square root of x. + // + // We know that the "msb" (most significant bit) of x is a power of 2 such that we have: + // + // $$ + // msb(x) <= x <= 2*msb(x)$ + // $$ + // + // We write $msb(x)$ as $2^k$, and we get: + // + // $$ + // k = log_2(x) + // $$ + // + // Thus, we can write the initial inequality as: + // + // $$ + // 2^{log_2(x)} <= x <= 2*2^{log_2(x)+1} \\ + // sqrt(2^k) <= sqrt(x) < sqrt(2^{k+1}) \\ + // 2^{k/2} <= sqrt(x) < 2^{(k+1)/2} <= 2^{(k/2)+1} + // $$ + // + // Consequently, $2^{log_2(x) /2} is a good first approximation of sqrt(x) with at least one correct bit. + uint256 xAux = uint256(x); + result = 1; + if (xAux >= 2 ** 128) { + xAux >>= 128; + result <<= 64; + } + if (xAux >= 2 ** 64) { + xAux >>= 64; + result <<= 32; + } + if (xAux >= 2 ** 32) { + xAux >>= 32; + result <<= 16; + } + if (xAux >= 2 ** 16) { + xAux >>= 16; + result <<= 8; + } + if (xAux >= 2 ** 8) { + xAux >>= 8; + result <<= 4; + } + if (xAux >= 2 ** 4) { + xAux >>= 4; + result <<= 2; + } + if (xAux >= 2 ** 2) { + result <<= 1; + } + + // At this point, `result` is an estimation with at least one bit of precision. We know the true value has at + // most 128 bits, since it is the square root of a uint256. Newton's method converges quadratically (precision + // doubles at every iteration). We thus need at most 7 iteration to turn our partial result with one bit of + // precision into the expected uint128 result. + unchecked { + result = (result + x / result) >> 1; + result = (result + x / result) >> 1; + result = (result + x / result) >> 1; + result = (result + x / result) >> 1; + result = (result + x / result) >> 1; + result = (result + x / result) >> 1; + result = (result + x / result) >> 1; + + // If x is not a perfect square, round the result toward zero. + uint256 roundedResult = x / result; + if (result >= roundedResult) { + result = roundedResult; + } + } +} + + +// File contracts/interfaces/IUniswapV2Pair.sol + + +// Uniswap related interface +interface IUniswapV2Pair { + function totalSupply() external view returns (uint); + function token0() external view returns (address); + function token1() external view returns (address); + function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); +} + + +// File contracts/interfaces/IVotingEscrow.sol + + +/// @dev Interface for voting escrow. +interface IVotingEscrow { + /// @dev Gets the voting power. + /// @param account Account address. + function getVotes(address account) external view returns (uint256); +} + + +// File contracts/BondCalculator.sol + + + + +interface ITokenomics { + /// @dev Gets number of new units that were donated in the last epoch. + /// @return Number of new units. + function getLastEpochNumNewUnits() external view returns (uint256); +} + +/// @dev Only `owner` has a privilege, but the `sender` was provided. +/// @param sender Sender address. +/// @param owner Required sender address as an owner. +error OwnerOnly(address sender, address owner); + +/// @dev Value overflow. +/// @param provided Overflow value. +/// @param max Maximum possible value. +error Overflow(uint256 provided, uint256 max); + +/// @dev Provided zero address. +error ZeroAddress(); + +/// @dev Provided zero value. +error ZeroValue(); + +// Struct for discount factor params +// The size of the struct is 96 + 64 + 64 = 224 (1 slot) +struct DiscountParams { + // DAO set voting power limit for the bonding account + // This value is bound by the veOLAS total voting power + uint96 targetVotingPower; + // DAO set number of new units per epoch limit + // This number is bound by the total number of possible components and agents + uint64 targetNewUnits; + // DAO set weight factors + // The sum of factors cannot exceed the value of 10_000 (100% with a 0.01% step) + uint16[4] weightFactors; +} + +// The size of the struct is 160 + 32 + 160 + 96 = 256 + 192 (2 slots) +struct Product { + // priceLP (reserve0 / totalSupply or reserve1 / totalSupply) with 18 additional decimals + // priceLP = 2 * r0/L * 10^18 = 2*r0*10^18/sqrt(r0*r1) ~= 61 + 96 - sqrt(96 * 112) ~= 53 bits (if LP is balanced) + // or 2* r0/sqrt(r0) * 10^18 => 87 bits + 60 bits = 147 bits (if LP is unbalanced) + uint160 priceLP; + // Supply of remaining OLAS tokens + // After 10 years, the OLAS inflation rate is 2% per year. It would take 220+ years to reach 2^96 - 1 + uint96 supply; + // Token to accept as a payment + address token; + // Current OLAS payout + // This value is bound by the initial total supply + uint96 payout; + // Max bond vesting time + // 2^32 - 1 is enough to count 136 years starting from the year of 1970. This counter is safe until the year of 2106 + uint32 vesting; +} + +/// @title BondCalculator - Smart contract for bond calculation payout in exchange for OLAS tokens based on dynamic IDF. +/// @author Aleksandr Kuperman - +/// @author Andrey Lebedev - +/// @author Mariapia Moscatiello - +contract BondCalculator { + event OwnerUpdated(address indexed owner); + event DiscountParamsUpdated(DiscountParams newDiscountParams); + + // Maximum sum of discount factor weights + uint256 public constant MAX_SUM_WEIGHTS = 10_000; + // OLAS contract address + address public immutable olas; + // Tokenomics contract address + address public immutable tokenomics; + // veOLAS contract address + address public immutable ve; + + // Contract owner + address public owner; + // Discount params + DiscountParams public discountParams; + + + /// @dev Bond Calculator constructor. + /// @param _olas OLAS contract address. + /// @param _tokenomics Tokenomics contract address. + /// @param _ve veOLAS contract address. + /// @param _discountParams Discount factor parameters. + constructor(address _olas, address _tokenomics, address _ve, DiscountParams memory _discountParams) { + // Check for at least one zero contract address + if (_olas == address(0) || _tokenomics == address(0) || _ve == address(0)) { + revert ZeroAddress(); + } + + olas = _olas; + tokenomics = _tokenomics; + ve = _ve; + owner = msg.sender; + + // Check for zero values + if (_discountParams.targetNewUnits == 0 || _discountParams.targetVotingPower == 0) { + revert ZeroValue(); + } + // Check the sum of factors that cannot exceed the value of 10_000 (100% with a 0.01% step) + uint256 sumWeights; + for (uint256 i = 0; i < _discountParams.weightFactors.length; ++i) { + sumWeights += _discountParams.weightFactors[i]; + } + if (sumWeights > MAX_SUM_WEIGHTS) { + revert Overflow(sumWeights, MAX_SUM_WEIGHTS); + } + discountParams = _discountParams; + } + + /// @dev Changes contract owner address. + /// @param newOwner Address of a new owner. + function changeOwner(address newOwner) external { + // Check for the contract ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for the zero address + if (newOwner == address(0)) { + revert ZeroAddress(); + } + + owner = newOwner; + emit OwnerUpdated(newOwner); + } + + /// @dev Changed inverse discount factor parameters. + /// @param newDiscountParams Struct of new discount parameters. + function changeDiscountParams(DiscountParams memory newDiscountParams) external { + // Check for the contract ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for zero values + if (newDiscountParams.targetNewUnits == 0 || newDiscountParams.targetVotingPower == 0) { + revert ZeroValue(); + } + // Check the sum of factors that cannot exceed the value of 10_000 (100% with a 0.01% step) + uint256 sumWeights; + for (uint256 i = 0; i < newDiscountParams.weightFactors.length; ++i) { + sumWeights += newDiscountParams.weightFactors[i]; + } + if (sumWeights > MAX_SUM_WEIGHTS) { + revert Overflow(sumWeights, MAX_SUM_WEIGHTS); + } + + discountParams = newDiscountParams; + + emit DiscountParamsUpdated(newDiscountParams); + } + + /// @dev Calculated inverse discount factor based on bonding and account parameters. + /// @param account Account address. + /// @param bondVestingTime Bond vesting time. + /// @param productMaxVestingTime Product max vesting time. + /// @param productSupply Current product supply. + /// @param productPayout Current product payout. + /// @return idf Inverse discount factor in 18 decimals format. + function calculateIDF(address account, uint256 bondVestingTime, uint256 productMaxVestingTime, uint256 productSupply, + uint256 productPayout) public view returns (uint256 idf) { + + // Get the copy of the discount params + DiscountParams memory localParams = discountParams; + uint256 discountBooster; + + // First discount booster: booster = k1 * NumNewUnits(previous epoch) / TargetNewUnits(previous epoch) + // Check the number of new units coming from tokenomics vs the target number of new units + if (localParams.weightFactors[0] > 0) { + uint256 numNewUnits = ITokenomics(tokenomics).getLastEpochNumNewUnits(); + + // If the number of new units exceeds the target, bound by the target number + if (numNewUnits >= localParams.targetNewUnits) { + discountBooster = uint256(localParams.weightFactors[0]) * 1e18; + } else { + discountBooster = (uint256(localParams.weightFactors[0]) * numNewUnits * 1e18) / + uint256(localParams.targetNewUnits); + } + } + + // Second discount booster: booster += k2 * bondVestingTime / productMaxVestingTime + // Add vesting time discount booster + if (localParams.weightFactors[1] > 0) { + if (bondVestingTime == productMaxVestingTime) { + discountBooster += uint256(localParams.weightFactors[1]) * 1e18; + } else { + discountBooster += (uint256(localParams.weightFactors[1]) * bondVestingTime * 1e18) / productMaxVestingTime; + } + } + + // Third discount booster: booster += k3 * (1 - productPayout(at bonding time) / productSupply) + // Add product supply discount booster + if (localParams.weightFactors[2] > 0) { + if (productPayout == 0) { + discountBooster += uint256(localParams.weightFactors[2]) * 1e18; + } else { + // Get the total product supply + productSupply = productSupply + productPayout; + discountBooster += uint256(localParams.weightFactors[2]) * (1e18 - ((productPayout * 1e18) / productSupply)); + } + } + + // Fourth discount booster: booster += k4 * getVotes(bonding account) / targetVotingPower + // Check the veOLAS balance of a bonding account + if (localParams.weightFactors[3] > 0) { + uint256 vPower = IVotingEscrow(ve).getVotes(account); + + // If the number of new units exceeds the target, bound by the target number + if (vPower >= localParams.targetVotingPower) { + discountBooster += uint256(localParams.weightFactors[3]) * 1e18; + } else { + discountBooster += (uint256(localParams.weightFactors[3]) * vPower * 1e18) / + uint256(localParams.targetVotingPower); + } + } + + // Normalize discount booster by the max sum of weights + discountBooster /= MAX_SUM_WEIGHTS; + + // IDF = 1 + normalized booster + idf = 1e18 + discountBooster; + } + + /// @dev Calculates the amount of OLAS tokens based on the bonding calculator mechanism accounting for dynamic IDF. + /// @param account Account address. + /// @param tokenAmount LP token amount. + /// @param priceLP LP token price. + /// @param bondVestingTime Bond vesting time. + /// @param productMaxVestingTime Product max vesting time. + /// @param productSupply Current product supply. + /// @param productPayout Current product payout. + /// @return amountOLAS Resulting amount of OLAS tokens. + function calculatePayoutOLAS( + address account, + uint256 tokenAmount, + uint256 priceLP, + uint256 bondVestingTime, + uint256 productMaxVestingTime, + uint256 productSupply, + uint256 productPayout + ) external view returns (uint256 amountOLAS) { + // The result is divided by additional 1e18, since it was multiplied by in the current LP price calculation + // The resulting amountDF can not overflow by the following calculations: idf = 64 bits; + // priceLP = 2 * r0/L * 10^18 = 2*r0*10^18/sqrt(r0*r1) ~= 61 + 96 - sqrt(96 * 112) ~= 53 bits (if LP is balanced) + // or 2* r0/sqrt(r0) * 10^18 => 87 bits + 60 bits = 147 bits (if LP is unbalanced); + // tokenAmount is of the order of sqrt(r0*r1) ~ 104 bits (if balanced) or sqrt(96) ~ 10 bits (if max unbalanced); + // overall: 64 + 53 + 104 = 221 < 256 - regular case if LP is balanced, and 64 + 147 + 10 = 221 < 256 if unbalanced + // mulDiv will correctly fit the total amount up to the value of max uint256, i.e., max of priceLP and max of tokenAmount, + // however their multiplication can not be bigger than the max of uint192 + uint256 totalTokenValue = mulDiv(priceLP, tokenAmount, 1); + // Check for the cumulative LP tokens value limit + if (totalTokenValue > type(uint192).max) { + revert Overflow(totalTokenValue, type(uint192).max); + } + + // Calculate the dynamic inverse discount factor + uint256 idf = calculateIDF(account, bondVestingTime, productMaxVestingTime, productSupply, productPayout); + + // Amount with the discount factor is IDF * priceLP * tokenAmount / 1e36 + // At this point of time IDF is bound by the max of uint64, and totalTokenValue is no bigger than the max of uint192 + amountOLAS = (idf * totalTokenValue) / 1e36; + } + + /// @dev Gets current reserves of OLAS / totalSupply of Uniswap V2-like LP tokens. + /// @notice The price LP calculation is based on the UniswapV2Pair contract. + /// @param token Token address. + /// @return priceLP Resulting reserveX / totalSupply ratio with 18 decimals. + function getCurrentPriceLP(address token) external view returns (uint256 priceLP) { + IUniswapV2Pair pair = IUniswapV2Pair(token); + uint256 totalSupply = pair.totalSupply(); + if (totalSupply > 0) { + address token0 = pair.token0(); + address token1 = pair.token1(); + uint256 reserve0; + uint256 reserve1; + // requires low gas + (reserve0, reserve1, ) = pair.getReserves(); + // token0 != olas && token1 != olas, this should never happen + if (token0 == olas || token1 == olas) { + // If OLAS is in token0, assign its reserve to reserve1, otherwise the reserve1 is already correct + if (token0 == olas) { + reserve1 = reserve0; + } + // Calculate the LP price based on reserves and totalSupply ratio multiplied by 1e18 + // Inspired by: https://github.com/curvefi/curve-contract/blob/master/contracts/pool-templates/base/SwapTemplateBase.vy#L262 + priceLP = (reserve1 * 1e18) / totalSupply; + } + } + } + + function getDiscountParams() external view returns (DiscountParams memory) { + return discountParams; + } +} diff --git a/audits/internal5/analysis/contracts/Depository-flatten.sol b/audits/internal5/analysis/contracts/Depository-flatten.sol new file mode 100644 index 00000000..8523c997 --- /dev/null +++ b/audits/internal5/analysis/contracts/Depository-flatten.sol @@ -0,0 +1,1085 @@ +// Sources flattened with hardhat v2.22.4 https://hardhat.org + +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.25; + +/// @dev Errors. +interface IErrorsTokenomics { + /// @dev Only `manager` has a privilege, but the `sender` was provided. + /// @param sender Sender address. + /// @param manager Required sender address as a manager. + error ManagerOnly(address sender, address manager); + + /// @dev Only `owner` has a privilege, but the `sender` was provided. + /// @param sender Sender address. + /// @param owner Required sender address as an owner. + error OwnerOnly(address sender, address owner); + + /// @dev Provided zero address. + error ZeroAddress(); + + /// @dev Wrong length of two arrays. + /// @param numValues1 Number of values in a first array. + /// @param numValues2 Number of values in a second array. + error WrongArrayLength(uint256 numValues1, uint256 numValues2); + + /// @dev Service Id does not exist in registry records. + /// @param serviceId Service Id. + error ServiceDoesNotExist(uint256 serviceId); + + /// @dev Zero value when it has to be different from zero. + error ZeroValue(); + + /// @dev Non-zero value when it has to be zero. + error NonZeroValue(); + + /// @dev Value overflow. + /// @param provided Overflow value. + /// @param max Maximum possible value. + error Overflow(uint256 provided, uint256 max); + + /// @dev Service was never deployed. + /// @param serviceId Service Id. + error ServiceNeverDeployed(uint256 serviceId); + + /// @dev Token is disabled or not whitelisted. + /// @param tokenAddress Address of a token. + error UnauthorizedToken(address tokenAddress); + + /// @dev Provided token address is incorrect. + /// @param provided Provided token address. + /// @param expected Expected token address. + error WrongTokenAddress(address provided, address expected); + + /// @dev Bond is not redeemable (does not exist or not matured). + /// @param bondId Bond Id. + error BondNotRedeemable(uint256 bondId); + + /// @dev The product is expired. + /// @param tokenAddress Address of a token. + /// @param productId Product Id. + /// @param deadline The program expiry time. + /// @param curTime Current timestamp. + error ProductExpired(address tokenAddress, uint256 productId, uint256 deadline, uint256 curTime); + + /// @dev The product is already closed. + /// @param productId Product Id. + error ProductClosed(uint256 productId); + + /// @dev The product supply is low for the requested payout. + /// @param tokenAddress Address of a token. + /// @param productId Product Id. + /// @param requested Requested payout. + /// @param actual Actual supply left. + error ProductSupplyLow(address tokenAddress, uint256 productId, uint256 requested, uint256 actual); + + /// @dev Received lower value than the expected one. + /// @param provided Provided value is lower. + /// @param expected Expected value. + error LowerThan(uint256 provided, uint256 expected); + + /// @dev Wrong amount received / provided. + /// @param provided Provided amount. + /// @param expected Expected amount. + error WrongAmount(uint256 provided, uint256 expected); + + /// @dev Insufficient token allowance. + /// @param provided Provided amount. + /// @param expected Minimum expected amount. + error InsufficientAllowance(uint256 provided, uint256 expected); + + /// @dev Failure of a transfer. + /// @param token Address of a token. + /// @param from Address `from`. + /// @param to Address `to`. + /// @param amount Token amount. + error TransferFailed(address token, address from, address to, uint256 amount); + + /// @dev Incentives claim has failed. + /// @param account Account address. + /// @param reward Reward amount. + /// @param topUp Top-up amount. + error ClaimIncentivesFailed(address account, uint256 reward, uint256 topUp); + + /// @dev Caught reentrancy violation. + error ReentrancyGuard(); + + /// @dev Failure of treasury re-balance during the reward allocation. + /// @param epochNumber Epoch number. + error TreasuryRebalanceFailed(uint256 epochNumber); + + /// @dev Operation with a wrong component / agent Id. + /// @param unitId Component / agent Id. + /// @param unitType Type of the unit (component / agent). + error WrongUnitId(uint256 unitId, uint256 unitType); + + /// @dev The donator address is blacklisted. + /// @param account Donator account address. + error DonatorBlacklisted(address account); + + /// @dev The contract is already initialized. + error AlreadyInitialized(); + + /// @dev The contract has to be delegate-called via proxy. + error DelegatecallOnly(); + + /// @dev The contract is paused. + error Paused(); + + /// @dev Caught an operation that is not supposed to happen in the same block. + error SameBlockNumberViolation(); +} + + +// File contracts/interfaces/IToken.sol +/// @dev Generic token interface for IERC20 and IERC721 tokens. +interface IToken { + /// @dev Gets the amount of tokens owned by a specified account. + /// @param account Account address. + /// @return Amount of tokens owned. + function balanceOf(address account) external view returns (uint256); + + /// @dev Gets the owner of the token Id. + /// @param tokenId Token Id. + /// @return Token Id owner address. + function ownerOf(uint256 tokenId) external view returns (address); + + /// @dev Gets the total amount of tokens stored by the contract. + /// @return Amount of tokens. + function totalSupply() external view returns (uint256); + + /// @dev Transfers the token amount. + /// @param to Address to transfer to. + /// @param amount The amount to transfer. + /// @return True if the function execution is successful. + function transfer(address to, uint256 amount) external returns (bool); + + /// @dev Gets remaining number of tokens that the `spender` can transfer on behalf of `owner`. + /// @param owner Token owner. + /// @param spender Account address that is able to transfer tokens on behalf of the owner. + /// @return Token amount allowed to be transferred. + function allowance(address owner, address spender) external view returns (uint256); + + /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + /// @param spender Account address that will be able to transfer tokens on behalf of the caller. + /// @param amount Token amount. + /// @return True if the function execution is successful. + function approve(address spender, uint256 amount) external returns (bool); + + /// @dev Transfers the token amount that was previously approved up until the maximum allowance. + /// @param from Account address to transfer from. + /// @param to Account address to transfer to. + /// @param amount Amount to transfer to. + /// @return True if the function execution is successful. + function transferFrom(address from, address to, uint256 amount) external returns (bool); +} + + +// File contracts/interfaces/ITokenomics.sol +/// @dev Interface for tokenomics management. +interface ITokenomics { + /// @dev Gets effective bond (bond left). + /// @return Effective bond. + function effectiveBond() external pure returns (uint256); + + /// @dev Record global data to the checkpoint + function checkpoint() external returns (bool); + + /// @dev Tracks the deposited ETH service donations during the current epoch. + /// @notice This function is only called by the treasury where the validity of arrays and values has been performed. + /// @param donator Donator account address. + /// @param serviceIds Set of service Ids. + /// @param amounts Correspondent set of ETH amounts provided by services. + /// @param donationETH Overall service donation amount in ETH. + function trackServiceDonations( + address donator, + uint256[] memory serviceIds, + uint256[] memory amounts, + uint256 donationETH + ) external; + + /// @dev Reserves OLAS amount from the effective bond to be minted during a bond program. + /// @notice Programs exceeding the limit in the epoch are not allowed. + /// @param amount Requested amount for the bond program. + /// @return True if effective bond threshold is not reached. + function reserveAmountForBondProgram(uint256 amount) external returns(bool); + + /// @dev Refunds unused bond program amount. + /// @param amount Amount to be refunded from the bond program. + function refundFromBondProgram(uint256 amount) external; + + /// @dev Gets component / agent owner incentives and clears the balances. + /// @param account Account address. + /// @param unitTypes Set of unit types (component / agent). + /// @param unitIds Set of corresponding unit Ids where account is the owner. + /// @return reward Reward amount. + /// @return topUp Top-up amount. + function accountOwnerIncentives(address account, uint256[] memory unitTypes, uint256[] memory unitIds) external + returns (uint256 reward, uint256 topUp); + + /// @dev Gets inverse discount factor with the multiple of 1e18 of the last epoch. + /// @return idf Discount factor with the multiple of 1e18. + function getLastIDF() external view returns (uint256 idf); + + /// @dev Gets the service registry contract address + /// @return Service registry contract address; + function serviceRegistry() external view returns (address); +} + + +// File contracts/interfaces/ITreasury.sol +/// @dev Interface for treasury management. +interface ITreasury { + /// @dev Allows approved address to deposit an asset for OLAS. + /// @param account Account address making a deposit of LP tokens for OLAS. + /// @param tokenAmount Token amount to get OLAS for. + /// @param token Token address. + /// @param olaMintAmount Amount of OLAS token issued. + function depositTokenForOLAS(address account, uint256 tokenAmount, address token, uint256 olaMintAmount) external; + + /// @dev Deposits service donations in ETH. + /// @param serviceIds Set of service Ids. + /// @param amounts Set of corresponding amounts deposited on behalf of each service Id. + function depositServiceDonationsETH(uint256[] memory serviceIds, uint256[] memory amounts) external payable; + + /// @dev Gets information about token being enabled. + /// @param token Token address. + /// @return enabled True is token is enabled. + function isEnabled(address token) external view returns (bool enabled); + + /// @dev Withdraws ETH and / or OLAS amounts to the requested account address. + /// @notice Only dispenser contract can call this function. + /// @notice Reentrancy guard is on a dispenser side. + /// @notice Zero account address is not possible, since the dispenser contract interacts with msg.sender. + /// @param account Account address. + /// @param accountRewards Amount of account rewards. + /// @param accountTopUps Amount of account top-ups. + /// @return success True if the function execution is successful. + function withdrawToAccount(address account, uint256 accountRewards, uint256 accountTopUps) external returns (bool success); + + /// @dev Re-balances treasury funds to account for the treasury reward for a specific epoch. + /// @param treasuryRewards Treasury rewards. + /// @return success True, if the function execution is successful. + function rebalanceTreasury(uint256 treasuryRewards) external returns (bool success); +} + + +// File lib/solmate/src/tokens/ERC721.sol +/// @notice Modern, minimalist, and gas efficient ERC-721 implementation. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) +abstract contract ERC721 { + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event Transfer(address indexed from, address indexed to, uint256 indexed id); + + event Approval(address indexed owner, address indexed spender, uint256 indexed id); + + event ApprovalForAll(address indexed owner, address indexed operator, bool approved); + + /*////////////////////////////////////////////////////////////// + METADATA STORAGE/LOGIC + //////////////////////////////////////////////////////////////*/ + + string public name; + + string public symbol; + + function tokenURI(uint256 id) public view virtual returns (string memory); + + /*////////////////////////////////////////////////////////////// + ERC721 BALANCE/OWNER STORAGE + //////////////////////////////////////////////////////////////*/ + + mapping(uint256 => address) internal _ownerOf; + + mapping(address => uint256) internal _balanceOf; + + function ownerOf(uint256 id) public view virtual returns (address owner) { + require((owner = _ownerOf[id]) != address(0), "NOT_MINTED"); + } + + function balanceOf(address owner) public view virtual returns (uint256) { + require(owner != address(0), "ZERO_ADDRESS"); + + return _balanceOf[owner]; + } + + /*////////////////////////////////////////////////////////////// + ERC721 APPROVAL STORAGE + //////////////////////////////////////////////////////////////*/ + + mapping(uint256 => address) public getApproved; + + mapping(address => mapping(address => bool)) public isApprovedForAll; + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR + //////////////////////////////////////////////////////////////*/ + + constructor(string memory _name, string memory _symbol) { + name = _name; + symbol = _symbol; + } + + /*////////////////////////////////////////////////////////////// + ERC721 LOGIC + //////////////////////////////////////////////////////////////*/ + + function approve(address spender, uint256 id) public virtual { + address owner = _ownerOf[id]; + + require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED"); + + getApproved[id] = spender; + + emit Approval(owner, spender, id); + } + + function setApprovalForAll(address operator, bool approved) public virtual { + isApprovedForAll[msg.sender][operator] = approved; + + emit ApprovalForAll(msg.sender, operator, approved); + } + + function transferFrom( + address from, + address to, + uint256 id + ) public virtual { + require(from == _ownerOf[id], "WRONG_FROM"); + + require(to != address(0), "INVALID_RECIPIENT"); + + require( + msg.sender == from || isApprovedForAll[from][msg.sender] || msg.sender == getApproved[id], + "NOT_AUTHORIZED" + ); + + // Underflow of the sender's balance is impossible because we check for + // ownership above and the recipient's balance can't realistically overflow. + unchecked { + _balanceOf[from]--; + + _balanceOf[to]++; + } + + _ownerOf[id] = to; + + delete getApproved[id]; + + emit Transfer(from, to, id); + } + + function safeTransferFrom( + address from, + address to, + uint256 id + ) public virtual { + transferFrom(from, to, id); + + if (to.code.length != 0) + require( + ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") == + ERC721TokenReceiver.onERC721Received.selector, + "UNSAFE_RECIPIENT" + ); + } + + function safeTransferFrom( + address from, + address to, + uint256 id, + bytes calldata data + ) public virtual { + transferFrom(from, to, id); + + if (to.code.length != 0) + require( + ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) == + ERC721TokenReceiver.onERC721Received.selector, + "UNSAFE_RECIPIENT" + ); + } + + /*////////////////////////////////////////////////////////////// + ERC165 LOGIC + //////////////////////////////////////////////////////////////*/ + + function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { + return + interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 + interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 + interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata + } + + /*////////////////////////////////////////////////////////////// + INTERNAL MINT/BURN LOGIC + //////////////////////////////////////////////////////////////*/ + + function _mint(address to, uint256 id) internal virtual { + require(to != address(0), "INVALID_RECIPIENT"); + + require(_ownerOf[id] == address(0), "ALREADY_MINTED"); + + // Counter overflow is incredibly unrealistic. + unchecked { + _balanceOf[to]++; + } + + _ownerOf[id] = to; + + emit Transfer(address(0), to, id); + } + + function _burn(uint256 id) internal virtual { + address owner = _ownerOf[id]; + + require(owner != address(0), "NOT_MINTED"); + + // Ownership check above ensures no underflow. + unchecked { + _balanceOf[owner]--; + } + + delete _ownerOf[id]; + + delete getApproved[id]; + + emit Transfer(owner, address(0), id); + } + + /*////////////////////////////////////////////////////////////// + INTERNAL SAFE MINT LOGIC + //////////////////////////////////////////////////////////////*/ + + function _safeMint(address to, uint256 id) internal virtual { + _mint(to, id); + + if (to.code.length != 0) + require( + ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, "") == + ERC721TokenReceiver.onERC721Received.selector, + "UNSAFE_RECIPIENT" + ); + } + + function _safeMint( + address to, + uint256 id, + bytes memory data + ) internal virtual { + _mint(to, id); + + if (to.code.length != 0) + require( + ERC721TokenReceiver(to).onERC721Received(msg.sender, address(0), id, data) == + ERC721TokenReceiver.onERC721Received.selector, + "UNSAFE_RECIPIENT" + ); + } +} + +/// @notice A generic interface for a contract which properly accepts ERC721 tokens. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/tokens/ERC721.sol) +abstract contract ERC721TokenReceiver { + function onERC721Received( + address, + address, + uint256, + bytes calldata + ) external virtual returns (bytes4) { + return ERC721TokenReceiver.onERC721Received.selector; + } +} + + +// File contracts/Depository.sol +interface IBondCalculator { + /// @dev Calculates the amount of OLAS tokens based on the bonding calculator mechanism accounting for dynamic IDF. + /// @param account Account address. + /// @param tokenAmount LP token amount. + /// @param priceLP LP token price. + /// @param bondVestingTime Bond vesting time. + /// @param productMaxVestingTime Product max vesting time. + /// @param productSupply Current product supply. + /// @param productPayout Current product payout. + /// @return amountOLAS Resulting amount of OLAS tokens. + function calculatePayoutOLAS( + address account, + uint256 tokenAmount, + uint256 priceLP, + uint256 bondVestingTime, + uint256 productMaxVestingTime, + uint256 productSupply, + uint256 productPayout + ) external view returns (uint256 amountOLAS); + + /// @dev Gets current reserves of OLAS / totalSupply of Uniswap V2-like LP tokens. + /// @param token Token address. + /// @return priceLP Resulting reserveX / totalSupply ratio with 18 decimals. + function getCurrentPriceLP(address token) external view returns (uint256 priceLP); +} + +/// @dev Wrong amount received / provided. +/// @param provided Provided amount. +/// @param expected Expected amount. +error WrongAmount(uint256 provided, uint256 expected); + +/* +* In this contract we consider OLAS tokens. The initial numbers will be as follows: +* - For the first 10 years there will be the cap of 1 billion (1e27) tokens; +* - After 10 years, the inflation rate is capped at 2% per year. +* Starting from a year 11, the maximum number of tokens that can be reached per the year x is 1e27 * (1.02)^x. +* To make sure that a unit(n) does not overflow the total supply during the year x, we have to check that +* 2^n - 1 >= 1e27 * (1.02)^x. We limit n by 96, thus it would take 220+ years to reach that total supply. +* +* We then limit each time variable to last until the value of 2^32 - 1 in seconds. +* 2^32 - 1 gives 136+ years counted in seconds starting from the year 1970. +* Thus, this counter is safe until the year 2106. +* +* The number of blocks cannot be practically bigger than the number of seconds, since there is more than one second +* in a block. Thus, it is safe to assume that uint32 for the number of blocks is also sufficient. +* +* In conclusion, this contract is only safe to use until 2106. +*/ + +// The size of the struct is 96 + 32 * 2 = 160 (1 slot) +struct Bond { + // OLAS remaining to be paid out + // After 10 years, the OLAS inflation rate is 2% per year. It would take 220+ years to reach 2^96 - 1 + uint96 payout; + // Bond maturity time + // 2^32 - 1 is enough to count 136 years starting from the year of 1970. This counter is safe until the year of 2106 + uint32 maturity; + // Product Id of a bond + // We assume that the number of products will not be bigger than the number of seconds + uint32 productId; +} + +// The size of the struct is 160 + 96 + 160 + 96 + 32 = 2 * 256 + 32 (3 slots) +struct Product { + // priceLP (reserve0 / totalSupply or reserve1 / totalSupply) with 18 additional decimals + // priceLP = 2 * r0/L * 10^18 = 2*r0*10^18/sqrt(r0*r1) ~= 61 + 96 - sqrt(96 * 112) ~= 53 bits (if LP is balanced) + // or 2* r0/sqrt(r0) * 10^18 => 87 bits + 60 bits = 147 bits (if LP is unbalanced) + uint160 priceLP; + // Supply of remaining OLAS tokens + // After 10 years, the OLAS inflation rate is 2% per year. It would take 220+ years to reach 2^96 - 1 + uint96 supply; + // Token to accept as a payment + address token; + // Current OLAS payout + // This value is bound by the initial total supply + uint96 payout; + // Max bond vesting time + // 2^32 - 1 is enough to count 136 years starting from the year of 1970. This counter is safe until the year of 2106 + uint32 vesting; +} + +/// @title Bond Depository - Smart contract for OLAS Bond Depository +/// @author AL +/// @author Aleksandr Kuperman - +contract Depository is ERC721, IErrorsTokenomics { + event OwnerUpdated(address indexed owner); + event TokenomicsUpdated(address indexed tokenomics); + event TreasuryUpdated(address indexed treasury); + event BondCalculatorUpdated(address indexed bondCalculator); + event CreateBond(address indexed token, uint256 indexed productId, address indexed owner, uint256 bondId, + uint256 amountOLAS, uint256 tokenAmount, uint256 maturity); + event RedeemBond(uint256 indexed productId, address indexed owner, uint256 bondId, uint256 payout); + event CreateProduct(address indexed token, uint256 indexed productId, uint256 supply, uint256 priceLP, + uint256 vesting); + event CloseProduct(address indexed token, uint256 indexed productId, uint256 supply); + + // Minimum bond vesting value + uint256 public constant MIN_VESTING = 1 days; + // Depository version number + string public constant VERSION = "1.1.0"; + // Base URI + string public baseURI; + // Owner address + address public owner; + // Individual bond counter + // We assume that the number of bonds will not be bigger than the number of seconds + uint256 public totalSupply; + // Bond product counter + // We assume that the number of products will not be bigger than the number of seconds + uint256 public productCounter; + // Minimum amount of supply such that any value below is given to the bonding account in order to close the product + uint256 public minOLASLeftoverAmount; + + // OLAS token address + address public immutable olas; + // Tokenomics contract address + address public tokenomics; + // Treasury contract address + address public treasury; + // Bond Calculator contract address + address public bondCalculator; + + // Mapping of bond Id => account bond instance + mapping(uint256 => Bond) public mapUserBonds; + // Mapping of product Id => bond product instance + mapping(uint256 => Product) public mapBondProducts; + + /// @dev Depository constructor. + /// @param _name Service contract name. + /// @param _symbol Agent contract symbol. + /// @param _baseURI Agent registry token base URI. + /// @param _olas OLAS token address. + /// @param _treasury Treasury address. + /// @param _tokenomics Tokenomics address. + constructor( + string memory _name, + string memory _symbol, + string memory _baseURI, + address _olas, + address _tokenomics, + address _treasury, + address _bondCalculator + ) + ERC721(_name, _symbol) + { + // Check for at least one zero contract address + if (_olas == address(0) || _tokenomics == address(0) || _treasury == address(0) || _bondCalculator == address(0)) { + revert ZeroAddress(); + } + + // Check for base URI zero value + if (bytes(_baseURI).length == 0) { + revert ZeroValue(); + } + + olas = _olas; + tokenomics = _tokenomics; + treasury = _treasury; + bondCalculator = _bondCalculator; + baseURI = _baseURI; + owner = msg.sender; + } + + /// @dev Changes the owner address. + /// @param newOwner Address of a new owner. + /// #if_succeeds {:msg "Changing owner"} old(owner) == msg.sender ==> owner == newOwner; + function changeOwner(address newOwner) external { + // Check for the contract ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for the zero address + if (newOwner == address(0)) { + revert ZeroAddress(); + } + + owner = newOwner; + emit OwnerUpdated(newOwner); + } + + /// @dev Changes various managing contract addresses. + /// @param _tokenomics Tokenomics address. + /// @param _treasury Treasury address. + /// #if_succeeds {:msg "tokenomics changed"} _tokenomics != address(0) ==> tokenomics == _tokenomics; + /// #if_succeeds {:msg "treasury changed"} _treasury != address(0) ==> treasury == _treasury; + function changeManagers(address _tokenomics, address _treasury) external { + // Check for the contract ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Change Tokenomics contract address + if (_tokenomics != address(0)) { + tokenomics = _tokenomics; + emit TokenomicsUpdated(_tokenomics); + } + // Change Treasury contract address + if (_treasury != address(0)) { + treasury = _treasury; + emit TreasuryUpdated(_treasury); + } + } + + /// @dev Changes Bond Calculator contract address + /// #if_succeeds {:msg "bondCalculator changed"} _bondCalculator != address(0) ==> bondCalculator == _bondCalculator; + function changeBondCalculator(address _bondCalculator) external { + // Check for the contract ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + if (_bondCalculator != address(0)) { + bondCalculator = _bondCalculator; + emit BondCalculatorUpdated(_bondCalculator); + } + } + + /// @dev Creates a new bond product. + /// @param token LP token to be deposited for pairs like OLAS-DAI, OLAS-ETH, etc. + /// @param priceLP LP token price with 18 additional decimals. + /// @param supply Supply in OLAS tokens. + /// @param vesting Vesting period (in seconds). + /// @return productId New bond product Id. + /// #if_succeeds {:msg "productCounter increases"} productCounter == old(productCounter) + 1; + /// #if_succeeds {:msg "isActive"} mapBondProducts[productId].supply > 0 && mapBondProducts[productId].vesting == vesting; + function create(address token, uint256 priceLP, uint256 supply, uint256 vesting) external returns (uint256 productId) { + // Check for the contract ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Check for the pool liquidity as the LP price being greater than zero + if (priceLP == 0) { + revert ZeroValue(); + } + + // Check the priceLP limit value + if (priceLP > type(uint160).max) { + revert Overflow(priceLP, type(uint160).max); + } + + // Check that the supply is greater than zero + if (supply == 0) { + revert ZeroValue(); + } + + // Check the supply limit value + if (supply > type(uint96).max) { + revert Overflow(supply, type(uint96).max); + } + + // Check the vesting minimum limit value + if (vesting < MIN_VESTING) { + revert LowerThan(vesting, MIN_VESTING); + } + + // Check for the maturity time overflow for the current timestamp + uint256 maturity = block.timestamp + vesting; + if (maturity > type(uint32).max) { + revert Overflow(maturity, type(uint32).max); + } + + // Check if the LP token is enabled + if (!ITreasury(treasury).isEnabled(token)) { + revert UnauthorizedToken(token); + } + + // Check if the bond amount is beyond the limits + if (!ITokenomics(tokenomics).reserveAmountForBondProgram(supply)) { + revert LowerThan(ITokenomics(tokenomics).effectiveBond(), supply); + } + + // Push newly created bond product into the list of products + productId = productCounter; + mapBondProducts[productId] = Product(uint160(priceLP), uint96(supply), token, 0, uint32(vesting)); + // Even if we create a bond product every second, 2^32 - 1 is enough for the next 136 years + productCounter = productId + 1; + emit CreateProduct(token, productId, supply, priceLP, vesting); + } + + /// @dev Closes bonding products. + /// @notice This will terminate programs regardless of their vesting time. + /// @param productIds Set of product Ids. + /// @return closedProductIds Set of closed product Ids. + /// #if_succeeds {:msg "productCounter not touched"} productCounter == old(productCounter); + /// #if_succeeds {:msg "success closed"} forall (uint k in productIds) mapBondProducts[productIds[k]].vesting == 0 && mapBondProducts[productIds[k]].supply == 0; + function close(uint256[] memory productIds) external returns (uint256[] memory closedProductIds) { + // Check for the contract ownership + if (msg.sender != owner) { + revert OwnerOnly(msg.sender, owner); + } + + // Calculate the number of closed products + uint256 numProducts = productIds.length; + uint256[] memory ids = new uint256[](numProducts); + uint256 numClosedProducts; + // Traverse to close all possible products + for (uint256 i = 0; i < numProducts; ++i) { + uint256 productId = productIds[i]; + // Check if the product is still open by getting its supply amount + uint256 supply = mapBondProducts[productId].supply; + // The supply is greater than zero only if the product is active, otherwise it is already closed + if (supply > 0) { + // Refund unused OLAS supply from the product if it was not used by the product completely + ITokenomics(tokenomics).refundFromBondProgram(supply); + address token = mapBondProducts[productId].token; + delete mapBondProducts[productId]; + + ids[numClosedProducts] = productIds[i]; + ++numClosedProducts; + emit CloseProduct(token, productId, supply); + } + } + + // Get the correct array size of closed product Ids + closedProductIds = new uint256[](numClosedProducts); + for (uint256 i = 0; i < numClosedProducts; ++i) { + closedProductIds[i] = ids[i]; + } + } + + /// @dev Deposits tokens in exchange for a bond from a specified product. + /// @param productId Product Id. + /// @param tokenAmount Token amount to deposit for the bond. + /// @return payout The amount of OLAS tokens due. + /// @return maturity Timestamp for payout redemption. + /// @return bondId Id of a newly created bond. + /// #if_succeeds {:msg "token is valid"} mapBondProducts[productId].token != address(0); + /// #if_succeeds {:msg "input supply is non-zero"} old(mapBondProducts[productId].supply) > 0 && mapBondProducts[productId].supply <= type(uint96).max; + /// #if_succeeds {:msg "vesting is non-zero"} mapBondProducts[productId].vesting > 0 && mapBondProducts[productId].vesting + block.timestamp <= type(uint32).max; + /// #if_succeeds {:msg "bond Id"} totalSupply == old(totalSupply) + 1 && totalSupply <= type(uint32).max; + /// #if_succeeds {:msg "payout"} old(mapBondProducts[productId].supply) == mapBondProducts[productId].supply + payout; + /// #if_succeeds {:msg "OLAS balances"} IToken(mapBondProducts[productId].token).balanceOf(treasury) == old(IToken(mapBondProducts[productId].token).balanceOf(treasury)) + tokenAmount; + function deposit(uint256 productId, uint256 tokenAmount, uint256 bondVestingTime) external + returns (uint256 payout, uint256 maturity, uint256 bondId) + { + // Check the token amount + if (tokenAmount == 0) { + revert ZeroValue(); + } + + // Get the bonding product + Product storage product = mapBondProducts[productId]; + + // Check for the product supply, which is zero if the product was closed or never existed + uint256 supply = product.supply; + if (supply == 0) { + revert ProductClosed(productId); + } + + uint256 productMaxVestingTime = product.vesting; + // Calculate vesting limits + if (bondVestingTime < MIN_VESTING) { + revert LowerThan(bondVestingTime, MIN_VESTING); + } + if (bondVestingTime > productMaxVestingTime) { + revert Overflow(bondVestingTime, productMaxVestingTime); + } + // Calculate the bond maturity based on its vesting time + maturity = block.timestamp + bondVestingTime; + // Check for the time limits + if (maturity > type(uint32).max) { + revert Overflow(maturity, type(uint32).max); + } + + // Get the LP token address + address token = product.token; + + // Calculate the payout in OLAS tokens based on the LP pair with the inverse discount factor (IDF) calculation + // Note that payout cannot be zero since the price LP is non-zero, otherwise the product would not be created + payout = IBondCalculator(bondCalculator).calculatePayoutOLAS(msg.sender, tokenAmount, product.priceLP, + bondVestingTime, productMaxVestingTime, supply, product.payout); + + // Check for the sufficient supply + if (payout > supply) { + revert ProductSupplyLow(token, productId, payout, supply); + } + + // Decrease the supply for the amount of payout + supply -= payout; + // Adjust payout and set supply to zero if supply drops below the min defined value + if (supply < minOLASLeftoverAmount) { + payout += supply; + supply = 0; + } + product.supply = uint96(supply); + product.payout += uint96(payout); + + // Create and mint a new bond + bondId = totalSupply; + // Safe mint is needed since contracts can create bonds as well + _safeMint(msg.sender, bondId); + mapUserBonds[bondId] = Bond(uint96(payout), uint32(maturity), uint32(productId)); + + // Increase bond total supply + totalSupply = bondId + 1; + + uint256 olasBalance = IToken(olas).balanceOf(address(this)); + // Deposit that token amount to mint OLAS tokens in exchange + ITreasury(treasury).depositTokenForOLAS(msg.sender, tokenAmount, token, payout); + + // Check the balance after the OLAS mint + olasBalance = IToken(olas).balanceOf(address(this)) - olasBalance; + + if (olasBalance != payout) { + revert WrongAmount(olasBalance, payout); + } + + // Close the product if the supply becomes zero + if (supply == 0) { + delete mapBondProducts[productId]; + emit CloseProduct(token, productId, supply); + } + + emit CreateBond(token, productId, msg.sender, bondId, payout, tokenAmount, maturity); + } + + /// @dev Redeems account bonds. + /// @param bondIds Bond Ids to redeem. + /// @return payout Total payout sent in OLAS tokens. + /// #if_succeeds {:msg "payout > 0"} payout > 0; + /// #if_succeeds {:msg "msg.sender is the only owner"} old(forall (uint k in bondIds) _ownerOf[bondIds[k]] == msg.sender); + /// #if_succeeds {:msg "accounts deleted"} forall (uint k in bondIds) _ownerOf[bondIds[k]].account == address(0); + /// #if_succeeds {:msg "payouts are zeroed"} forall (uint k in bondIds) mapUserBonds[bondIds[k]].payout == 0; + /// #if_succeeds {:msg "maturities are zeroed"} forall (uint k in bondIds) mapUserBonds[bondIds[k]].maturity == 0; + function redeem(uint256[] memory bondIds) external returns (uint256 payout) { + for (uint256 i = 0; i < bondIds.length; ++i) { + // Get the amount to pay and the maturity status + uint256 pay = mapUserBonds[bondIds[i]].payout; + bool matured = block.timestamp >= mapUserBonds[bondIds[i]].maturity; + + // Revert if the bond does not exist or is not matured yet + if (pay == 0 || !matured) { + revert BondNotRedeemable(bondIds[i]); + } + + // Check that the msg.sender is the owner of the bond + address bondOwner = _ownerOf[bondIds[i]]; + if (bondOwner != msg.sender) { + revert OwnerOnly(msg.sender, bondOwner); + } + + // Increase the payout + payout += pay; + + // Get the productId + uint256 productId = mapUserBonds[bondIds[i]].productId; + + // Burn the bond NFT + _burn(bondIds[i]); + + // Delete the Bond struct and release the gas + delete mapUserBonds[bondIds[i]]; + emit RedeemBond(productId, msg.sender, bondIds[i], pay); + } + + // Check for the non-zero payout + if (payout == 0) { + revert ZeroValue(); + } + + // No reentrancy risk here since it's the last operation, and originated from the OLAS token + // No need to check for the return value, since it either reverts or returns true, see the ERC20 implementation + IToken(olas).transfer(msg.sender, payout); + } + + /// @dev Gets an array of active or inactive product Ids. + /// @param active Flag to select active or inactive products. + /// @return productIds Product Ids. + function getProducts(bool active) external view returns (uint256[] memory productIds) { + // Calculate the number of existing products + uint256 numProducts = productCounter; + bool[] memory positions = new bool[](numProducts); + uint256 numSelectedProducts; + // Traverse to find requested products + for (uint256 i = 0; i < numProducts; ++i) { + // Product is always active if its supply is not zero, and inactive otherwise + if ((active && mapBondProducts[i].supply > 0) || (!active && mapBondProducts[i].supply == 0)) { + positions[i] = true; + ++numSelectedProducts; + } + } + + // Form active or inactive products index array + productIds = new uint256[](numSelectedProducts); + uint256 numPos; + for (uint256 i = 0; i < numProducts; ++i) { + if (positions[i]) { + productIds[numPos] = i; + ++numPos; + } + } + } + + /// @dev Gets activity information about a given product. + /// @param productId Product Id. + /// @return status True if the product is active. + function isActiveProduct(uint256 productId) external view returns (bool status) { + status = (mapBondProducts[productId].supply > 0); + } + + /// @dev Gets bond Ids for the account address. + /// @param account Account address to query bonds for. + /// @param matured Flag to get matured bonds only or all of them. + /// @return bondIds Bond Ids. + /// @return payout Cumulative expected OLAS payout. + /// #if_succeeds {:msg "matured bonds"} matured == true ==> forall (uint k in bondIds) + /// mapUserBonds[bondIds[k]].account == account && block.timestamp >= mapUserBonds[bondIds[k]].maturity; + function getBonds(address account, bool matured) external view + returns (uint256[] memory bondIds, uint256 payout) + { + // Check the address + if (account == address(0)) { + revert ZeroAddress(); + } + + uint256 numAccountBonds; + // Calculate the number of pending bonds + uint256 numBonds = totalSupply; + bool[] memory positions = new bool[](numBonds); + // Record the bond number if it belongs to the account address and was not yet redeemed + for (uint256 i = 0; i < numBonds; ++i) { + // Check if the bond belongs to the account + // If not and the address is zero, the bond was redeemed or never existed + if (_ownerOf[i] == account) { + // Check if requested bond is not matured but owned by the account address + if (!matured || + // Or if the requested bond is matured, i.e., the bond maturity timestamp passed + block.timestamp >= mapUserBonds[i].maturity) + { + positions[i] = true; + ++numAccountBonds; + // The payout is always bigger than zero if the bond exists + payout += mapUserBonds[i].payout; + } + } + } + + // Form pending bonds index array + bondIds = new uint256[](numAccountBonds); + uint256 numPos; + for (uint256 i = 0; i < numBonds; ++i) { + if (positions[i]) { + bondIds[numPos] = i; + ++numPos; + } + } + } + + /// @dev Calculates the maturity and payout to claim for a single bond. + /// @param bondId The account bond Id. + /// @return payout The payout amount in OLAS. + /// @return matured True if the payout can be redeemed. + function getBondStatus(uint256 bondId) external view returns (uint256 payout, bool matured) { + payout = mapUserBonds[bondId].payout; + // If payout is zero, the bond has been redeemed or never existed + if (payout > 0) { + matured = block.timestamp >= mapUserBonds[bondId].maturity; + } + } + + /// @dev Gets current reserves of OLAS / totalSupply of Uniswap L2-like LP tokens. + /// @param token Token address. + /// @return priceLP Resulting reserveX / totalSupply ratio with 18 decimals. + function getCurrentPriceLP(address token) external view returns (uint256 priceLP) { + return IBondCalculator(bondCalculator).getCurrentPriceLP(token); + } + + /// @dev Gets the valid bond Id from the provided index. + /// @param id Bond counter. + /// @return Bond Id. + function tokenByIndex(uint256 id) external view returns (uint256) { + if (id >= totalSupply) { + revert Overflow(id, totalSupply - 1); + } + + return id; + } + + /// @dev Returns bond token URI. + /// @param bondId Bond Id. + /// @return Bond token URI string. + function tokenURI(uint256 bondId) public view override returns (string memory) { + return string(abi.encodePacked(baseURI, bondId)); + } +} diff --git a/audits/internal5/analysis/contracts/script.sh b/audits/internal5/analysis/contracts/script.sh new file mode 100755 index 00000000..286784b4 --- /dev/null +++ b/audits/internal5/analysis/contracts/script.sh @@ -0,0 +1,20 @@ +#!/bin/bash + + slither_options=("call-graph" "constructor-calls" "contract-summary" "data-dependency" "function-summary" + "human-summary" "inheritance" "inheritance-graph" "modifiers" "require" "variable-order" "vars-and-auth") + echo -e "\nRunning slither routines ..." + for so in "${slither_options[@]}"; do + echo -e "\t$so" + slither . --print ${so} &> "slither_$so.txt" + done + echo -e "\tfull report" + slither . &> "slither_full.txt" + + # moving generated .dot files to the audit folder + count=`ls -1 *.dot 2>/dev/null | wc -l` + echo -e "\tgenerated $count .dot files" + for _filename in *.dot; do + filename="${_filename%.*}" + cat $_filename | dot -Tpng > slither_$filename.png + done + rm *.dot diff --git a/audits/internal5/analysis/slither_BondCalculator-flatten.sol.BondCalculator.call-graph.png b/audits/internal5/analysis/slither_BondCalculator-flatten.sol.BondCalculator.call-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..bd46abc64db7c76c310ad3ffe8c3c165ff9137d8 GIT binary patch literal 89100 zcmd?Rby$|^8a)c4U=TJ+>WGN~Qqm|Wil8V8NP~2Plr)Nh0iviNjYy}`4T^wDN=k!B zeuPN(S+6sD_U!%J=g)JU>pExV8ix4deV^x!wbs3!@8Olp=V>-GY$hWkqmjOFR-TNE zHXYv&ZKTB4S@zZU_#fp>ne%7K)`)*23S*y>k?kXsK6~c+?U2z<2j}ZEg=>>@Thk^s zweHxbO|ySgRX20%35hc1*DYSRlQYGW6_XVc?J~2Q5|jJ$t`|Czq?OXLX{I92+&fZ@|EXV)xkGr|#t6l%cZ;4-Y zdUCP<&p+hRXe<8DKiDvSNcx|D7~;RDO#Z+AQfK!6>Wy5Qn97~(UY$K<)>V+3X#CGh zJWani^v1VC{qJQiS*WhcbC}XMYfX#(?}r{ae!Q`Q)opZ~`|q1%3mvRV^5ZqCXOo)z z=LQd*5nKK#SsgCk-KqEYgD(ix2LA5_a&P#5VBa_nkdu?AwVH-FnaNYxnM$-cm18Iip3R`06AbvzYUI z2ib{zF$b-m%KZTREUGxf>qjvamf+)P}Jn&Dp| z=)R7Eg3qjtxA4~&cE2bkO&5g|Cr+5Bj5NAV1$PhOei|w{i<8z?C)S$lUQ70mjU~s$ z9f^*OCE?eNqpj(k>H{0-w{DF%dMzd=pZY&3+W`Pftn(C8hk_pql<4 zKZb^5!<)ao)3I$)x3|rE;^pNlgLl!N!^4hKlMY zoAJyRjccl^!RAE^0}Uww{{Dwbxj3#U{MRc8?9%_M3M3>ZHh9u7PN#>j$YQS@`(G*v zC0T#}xJh)nPLhF3%e|nWU?&4ZLTkE#$yi%vvrwh~iRab&>Hf>h&WKUX{rmTCrlV`= z$hEee|Jh4B7yA798&XRC<@fL3|C*a?X^g*?Y1LPL*+jkAwUEu|4 z!nySx+2$iA>hqROJw6zyPFdHA9uBUKSzL59Ys>iT7}8a!UU70sY(m@IJjFb>fA@Va zFVz5r>(@hONdHy!PXAfd+$$S@^;afa-qg~Hh`AITGccfEI8`H@*Xzls){K2`nxE{O z>2jJdn*3gt5Eob1oUGbEI2aqqV=yw)q8Y%ZZr^FkO)WV!Q2m@u^k)f$W6vF`>({SG z9hC7O>RwyT-hKQ=&#i7RT4s3_m7pw(?i63~)f;+xdX5YI0W*!)Uu%RdU*rlCwvs#OLp%rKc-gxe^h+Ivwjc^xA70)h4XT4+ojiFmZ*6r+K~b@} z_oVBu=ix_AoVc{Qx*Ei1;y+Lo_{Q6tIv`M#)ot0Tb-89SEwT4H(sxH-S#pJ%HXM$X~Sl&d@Qif%(1o0$fyFo$Wg3xh%Ph0@D zGcq!A`p0v*5ijxOUcnaY{l?~+#C`jUEyn3rz1lA>E`BLQ;3}ENH zLZ>-J)Hm0)rEZhn5BF8_Y~oi3-Bv5|R-em>J!7j5+0$X610wCU}VfRZc3n? z6Lwv`9Wb?N(yVu=VUBXctC#@c8D ze3=C05pZ9=d=cs+b{UmKSZ%J1UUTRU6^lS@P)!uOF~3XqoaKjmn+9+2{bxqIv;VbI zC1n{#4Q$fLoo8%(r%om2<*A@nZ>FXmed~Jt`U|%BjEsy@TVyB4U|~T4o3xpkS+h$^ zbMu#qiu0)X%;v0n_qO(?4L8Kf_|1;CS~u59`=Lh6w0Ey6B272b(7deHM*$!T?;p~} zhK2%TW3|&lHeOT7tu|s4uZxS<97HJo^Ww<AHb&*;<+@%n3WqS5)|c`{VAOjl6)s7vdnYQ;H+^9Nn>ROIG_GFlRqI73Ao z(n|a7@>jgG`9e*q`Gd!tnq0*u_W$RVmIVF_9dYoRe%mL_AnsaV+loZzlwMq(s#R|` zGdFKW;QkrsR<4lv1ZRLqgd_=+jRexyO+KG zYOTolE3U3ZLq@WXts1;k1&CJXcvg~o+&7l_O z=eM26s;gJ8c9Y(%Ef0#bA3rWjC-T$1Xm!z~sj10mZFObQcWs_-!}|3$j=_h+o#lN+ zXJ5I_riTx|t6*ukLqTQp>xVQ}WZ36aSKUh`jreT`q=xYQQ#Oa&w++j^_Z~xWO|KP8 zeDr8DA3wh_nhViqwDIfm^53`X7mg$(URP5~qSti3 zYHMpNa){d)r1Nw`SEI%kO5FC_f`0|TsqYm_36`v6Dk=O<~r@e<*!|9>gYI*XM`{R zILuMo&*`@CnBS}|>ihSb)j@nR$kB_JFE^7?i&H9CoMeeSFD@?5T=hFBV}s|D?$c{r zL2cQ-W5>*Fy9H6Q{G!lkeHc$&t`(gNG35`oo9If8jQpe3l%FJsGPAreW!vpCr<^LO zpzsnwA5rA8q~bdlE50HvzVKOYdQg0=)$uZcz9Qeeu>~-|6Gdmg>BPDeq$jujF8Bwe zyszB4l{Qcto?7;po?TFIp`csRTI$As=9c?Jss0|%Nf!%e^mG|NF`#D-_Kp91%-|qe zRU>ghEME8j{)5d+-&cYEza=35pJ7t}w>J_@fLZ#0=ZEDIii$M+uB)pjXJzpdz3cVs z_bRa{0cg=L=Cr%UuNM>+0({wjA+0Pg{}>xH3#Hq%=^5IQudgo%$U*7XuU{LigpjGR zjEsyl*4O`0$^|}fFkW)0Y1P?a)GnX8RA5Z#&Ye3WolA|u-?|E&*txjsgeHcEg?=%*}(l`9 zjEs!vk8DKmy<%;ho*6bZJ8L6k!Y*XZzr+!mUExO(yEeEIF*f&d9hqayZ2NAn(${Tm zDgm~aXFA7Bvn9uDXZIK+qJeIvr4<`&M>^lXchAOAeQ6>hR8(qdjP>u#bC=no-7Hi0 z`T1c51%>E@gku0`O@IpK+1Q#hz%mIbDT*#Gg$xV~Xyl1_6BKg%?lN(!xH?Hmk4oRZ z*hTWfSRS`M_N$X3Y;0$Xii&Ar%A%yAs%&pp#p(lKKE-z5_3+rm#FX^(>C{t;Yvss?120ZzZxA%1$ z8{XGqHb?Oiii$Dl*DwA3M?OB>k&u*Rqa4DSn3|ehBpG7#G$>{F)~)+kSy_o|ICA6y zp1pa?mTR|f=X@wFO`gJ!BMq^>-~0M@?by+~Q84vPhs^l|hfv+Iq5UXCH>*WkH6ZdfYRayDIl0#1?M7Thfg3wwiiL#* z!JK7m<;wJT@RALBa+%OIx3wkw`gIEoa0o>17(2VQU{9;y+Y#r*>r^^|Ui>R7EB%N; zTseEm-o1N`nB#VC-P-eu;_U)O>XdKMfN$QI+Xb-(-yDOW6FqABcD7;>CDg7NnVIpp zlX`oe9f4H4Uy+2VoGL3T37(4O0XkBq$_q`Q9ketth%GHG1qh1%lc1mf`t@tK$$FEX zoAq^d5dc1k)k0R^?*ZKgEh zQSrA^340(#cI?o}GysiI)clfr$(U6)K+Ql#w83<*!AN+hd5_;Lm0{4>V{0b^meFC6 zJ&#%qtZ9D+jk#G_y=$`IThfjlaRTJap+5GV$%b!D>g?GgfBYeVl^}xn?Ai6{w|njy z8yQ{2!#8iV7*IdS{Jo2hnFD!YyuP*X-2y9JFOh}MN-g&KtSr?!8n_1yG zbf|oBx%}ftfJXV1#hGgo5_gH{-@DgA%wh}2w!@c0u4rh40Xn`24^IW^g02M)dKT$} z@VO=<^Ek68ARs{I0xu9TpgDt>bIykkAAU?sa3aZwps%QiEuEto&R=1!Au<>!@s_ed zyPWk>OKVapdIAbZnuMc%-7IKATb^yAZPAJ=^VHN$Pu0Hf-y5?nG!Gs;c=YH|>B-4S z#c;BrO=w(*5TScts@Ghs-%_U24Kb;RHn=<1oRPJr)U_5i@RarQ^Aozq8@g0kL%wTp zHPgXOesINLu%{~ChF=H!vLnW}>#)`>S}noaa`V};gDrOPE*C00T!Y(Z3kpOMlShtk zbv`ygqGw<*-k?@peCEs<#kGS10^bfsSy0aHy}l)9nU|kmWhD|4oyop+Q`rntLe_2` zt%m~5Q~(-xUEpiyO}}JgPEqSQWq&B$ZIH-j)?3g3Zr;4f=5or!aA}2WY>r2`+s(k& z%(&QX#-{yQ&0?HE-%^duNI|k7{n(s~u*sUMEq|Zs(iwx0Y&ZD|v#2Ro_Q4AN(vLGU zGsieN1ExFedw4d4)cP;D22R)-8ph46>CUoOt+)&-^S*VtTUVLRD#=gx6Z@dvzo86O$>At=5=8CXlQLP&*SeMgv`OyF65&>cRW*|SprJOU`kTneos5i$^YgdM%F2%J z-+yOY=+^@ROti?U4&&HIj~=N>B#cQW4h&5n0$_mDgJPZ`d8MA($Yys4FU8#YgZUch zqd+Z5mhbio4Ij50b?y?`n!EBo3;M(O)>}SEm2feaq<9%`xE35O3n% zzP&;OCnsn2Is;@d!K)_wDuk5JIS%0WEd-$#K&>Nj(T9OLa+{q^O` z#g_pA`ApxANFziQ-|`(h_JzTaji0}HGda{Zo}P_07t!X>tZjexoM9HZedW9_OJajBY)jn9FG@>ay?F5v(!O)q)bgDPu!^+w!zL+u zdV1A#=IroIts)k*5(a>1*Kgc-1(2Zr;mN>FO8yW|3)Uwh4JGnJj{0#)zy}9yob#@v zP4%PZqwkJx#q~7({d|@r*L)+i&vh&A*4@v4tX=(E3pD7-Iy6` zZxOn33Y(5#8R;%A20ayYryGopjFdo7DO|n!jL-VjlqQdCkMq8BNNv2hP*u&|ZQH&Y zMSNwdW(jx_6LX0DlWCUrz)jDfYWMWLvR13C==pY=va{COQ#HkLT^hSzv)Ir9ftPyG zp`)LMR&q^S`}HoB6Gx6*L3gRV(>QQEtR~$-$crUZZfSl#XELzYw6U=^GEk}dj z?;BJWhx(Kp5z;!yEqD0Pp<^dcPI{-C^wwY1&`3chs=RLUprSi=>XZ@|>79Pm!v_zp zKnU5z%9={BX6;H;fEiMY9I@q3Z?iz)O5*Pb8EzJF8U1#WS@70JhO-9&S3D?b>Lbp0 z@ZSEZMZ>^*LDG}@>s#&8J!ju|-4bAG%ePO3@b)Gt>G)WCww$uEvXI^At0)Tt9|m5- zr)1uhplsB7BB z?AW=?Y4>SsC@CoP-wM7~onr1P7D~0pjMdppd|$kE@srw-vVYBs5V%8UHl~Lq`up!j z5zMLD{=MM3f`T#$NdMTOLsCRl>W+$HBTc)LQ|zH(@CUG=ef!amAbwYAblq7 zxLNV^M0YqvHitDhj$;0gv_qu{PV~}(Vq8Mp9aQC3?CT|LQuURwCT!Gp=*Mw-$ zF1?@X*9^=&t;64?AH){&2UpXilC>T9_gLC->xZORd1d8ztSq~*uxe{-Yg@5f@hxj> zVo(C&jU6-ps{EAeXY)$zS_^j6ZPWd%jnTjQ)VHX zPeQN0)YjGp#halWaco)PvbjGpVjQ469zs7ju^yz1LFD#ZPwYK*lVpJ|7aUG53#}eI z-;5DdCNXC2%u^5)6a;jB29AI==DqoGV{}Z6iW}fahdO@|73dn`eXKS8ywmLHJAE?I zTR$F9mts4gO8K%RXJqga^N;6;F8vYGaUZj{4EqU;0APUCFr18X6-SkQDEl)LNW-!ChxsGHV|=*fBpDO{YQfb+G6hX zr4WOm6UUF+Y}$AB+_|G-VqI;gw8F;Qvs3@%oCkoKPl+-1Ec5d5#RF$U?`<9(2PXUT ztKw5lKgd2PvE9S=pUEjGxrVlJJSZ=h0(MEv$+>~j*KGRjPuQbiWEB6UvNAdFQTv+r zAc;ic*0~Adu{b^4$IWiHq?{%xAu;4eF2Fuu`gWkIX5e_OesJUJt*L_C)G9(w%9I;O z8i5qwY)Zm7nInK_$z<*y!*wG1pfL#Bk7wN7j+IA|tq0ILC=ES9aVwXgpfUv|^%V?@ zfW~+3-aRlda%X~Iig9tDHmfrM$Sk_mR8~GO?R^T#fbaRM1#wYg$D*PLn%pTz9%={{ zWM`L!`Yg0w$;8Cupfr#;5eU1+WiDP!`;Y)ez!Y^)MnYLR@Cl1(0#^K}xVR=29ZMth z_7}myCe^&X5VH_+G<&(v5`6{9{sKYX*mzxEV&XL>Bd;aB)D~|p%}ulbbT!r2-!#jH zCU)O!LsZGQUW$B!Fpr2}_s^!>GCJciPFyx8KL`J#8W_bhS}9AjZI7l zWJiQ07hh$$xTzw;T^3z#5=*mdk2uu<&1(wFc6_Cn+=!CgK-J$;_F>0)@ub($n(*pk@ zs;9ZRxz`=Os#VWw{cFz71x@EKqopFvc3t=J^&Om|x?l`E2^0kEZi9MHbQtFt{E%dM z-o_>a8%)>=Na=jKpSIF43tdM9n7bYt`i$(t-r#Y7PCvF^Jb|KupLc2T&5?qDEOvn; zfOjLfkD|UI(tvoc0AbFwP{(oitalHKOGvl~xq#zL3(z@4i#S9$aB~a7OhH~g67zz5 z>XLelv(AAo7PyM^}Guy}7vMs{7 zd3cf!9zJ{?wPf?AO<&O*c}>4@k=&xWvH-v55Pxq_!WZD*boo z;I$jQVX~J;pPH&nO$!AAIUujEA2TDSr>~D)mktXHyLjQkTYY!__9NE(hQZYXv@&e)gP{R9^1L>zTIxF4dn1Nal<(vQ$2d{{(PbjrQIVo``;8PG*;?#-SL)&fkJ!+yn7D-%Pqv2X7r z^Xd@%8ALm|h)n-%eeEW%JY*zAVC8VE}_ny}% zQ9hV}W5&$Dt-CROa9y_~;*UVW0N%#negrT^r|-8EAXH=RQcoi|d5HNNGW&&}-v{q& z>QONhm_(G}`B@TW1KhWMTv%9K%*)q}P$h`@!K%=}z<4l4X?b9H zJ_PoqFcIa3m`e?DSKk;uu8D|?yAbaD>!D(bT0B5~BBW-(j+UxGp5*&axoVn#_%rmY z8IqOLrHJ@3GfT$$^O-asuMR#X2iMSyUTz_rA;J7+^}-VcZ{);Ru17~l6Z6&rhbfz} z%ogL3#`r2r=ZBTm)lC>ZW;!q2f_3cNUuFXH!WqR*%Tk(v{=x4{T+~3M%xR0{XyinT zXkz_2Goyf+8(+E;z7jwIMSpRFJ0lpOiuM#h2FU`C142LOvg9O*#}HK>_ecx^(WdsD zwcbW#B|IBycdH1d1cHRwa!h@_JYM4BqMf3twP(qn+)c^K%8Fp!sE;>wbkK@xXSb2% zUD4Bv=CeGF=kc{W65<`G_l+BdG^R&g+OscTxNrp|9V^mQ?B*75M*I8s?;MF^y#MwE z)_JH2X*UD(5XPO&mvnV?<8pJA@lJW)AF(I(j3Ce&A;Q=PY?;0>@cyNKj_uOy7$KKo z+zP((n#gG^V33e)f|L(K*_ld%*U%hbiXk4uZ_$;6UIfB&0lVJ}4#a2PA%Fs739`4!4Oy4mSGgc zZx&SU!&niq+mC2$(J}$X!}Za`)uJ=l!W%&Nod_EV!STkoTWzue8O$;Z#&6#!Bq|!g zV)ScfrU`xn+ftfShBYCA0n5itkxh;;3{7L$OG1Ms?hV#2eRZd?Oyc|eN{?VBD7);6 zNp%>~N8*J(cXw+}4c4}dWp}5*IrpKnf942SM)T}gyEK6f5pfVtuclVBv$K(!Ld3xVe#FeXF>BF+2CebS5Q8Z>QF5kn}@wi}aC5`Uwg z`Lk$OP&6U8rhiD#Kg|avfT%#?6z(i|!^?zxb?n&4Ry)3SSL=P7VgCaD&s(n+T1&Nl zea=Fw&56H;^{vKWBPe!?S|0>W175wl{oaIvgAad4C@9`= zMn1!~bp-^J;5LMd4GTvwfP9&;Z6N3w+NG34w;(V^ih4e#hLIq+mx6c!TrLrwEo|9g z&|k#i>F$~g&;eI=%ObtX-SF#u;-ZFBYlOYMC?`i02DI+}@mo&!z(k1gKC$Qlny&Ha zcG7;tin=V?u-~g7Z3q!9P(eHfPX=m2A%3&j2RObD5wMc5 zC|=3xawMG?>nc=*OqVy?Wf- z4zaLTSxeLWn!*wd!#95wVW&PZPtUdbgDBrz5<6STpG_Oymp!300ed< ztO$g&45TSHzhFxOQnNkFEIq3i?E%xakV6j}Z1Mnl?hBzfPsAGytQpmJPhJHy*U zJUrLH&7fw$FVu8z(+O1$RE1Hhk$Gw#0jXr62w;8?jC_)WSfja$y4In^;yaj+0IGFw5!E?}BL>=9B{j)VqFLRNw7t^at z6NF`|0hGHRZ)4ODqkJb9Z)V%BLm?ns!*kGWbzzXez_1&pmWnYy31C#&Vk1IH`r>PG3;gv7&;1HUi;dsnC4x*-X0lEr~wi=>`K=s*2Hc5vU3 z@QY>`&r*@E_5rQ^=;Sk>4~GxI|6GqOC-@S;t?HRP;Oe~mvps2FQMmw9NU&5jJle%> zGyhW?`qcST9hM%uPpCuzv)TvT*0>xd5`U`O`5FQ)iI!OiVRL9WC4amgrklWO7SZ1x zP8hg{u&J@=X|_!YO2c^DMz}{i)!UR$QcF%0&V_|J|B}X7Y$PVwyq+*%pVTSO$>&vz z0(_tOu!VD|KR{Cv8R5D*6;671IE+vn@@0fAAew#!(3yeF*%;jn$XLGEbtP#l3TOji zi9($B{9!dzw?A34xNCD6D`qo*tOOqT4VStK90=_=zjAcj6ISsQg6*Nv5*!i*1bq0I z^smXuuVA?966c_@HI&?;z@`lkd?6TeD@}`Tm)ahX&4)U7LllO@t?1J4Uo(vmX9AR<>OOQW(`gDL8i+hSK z2A9O&Rnl}H5;iJykrOxGp3d%e&6j$@G(7&RC>w17cc#JW{PT`KhkC+}!ACr`Wb_vxh!eGX7rUZi|Cg7rjVL%e<`MoXhp7SeX{u2RXg?N33o&Bz zJrodGhJ#E}zMjbLh(v$W^n0z|bMpmE@Obu6sD0O0098T*IQMw>a8|qdHCb8j{7PXH z{RcC(Zma3UCRZ@q55eNx1ek<=VA;$>>m|0fY`rpO;no0{^AZ==y)teuD%6+VVrq)8+`eE6^`Z8Mo=Fs{aAwwch-K}irIpi+K-H3U!w zmsTZjfd-tf_fzwqxMEmYyBT8F5G-_c1Y$>(B*cTfmDzTp<#O$yvwTL>oGyn!X2K&b zWHa;>TN@v~GHO6P2u1?Z_^+Ca&>l2gW)uoxdM0LZ2rWLhRl+PEzIQv>1wZH?zcb*o z-$9j3ft5qWSTJt8heqXD4l#FyV{IP~vQw<_BOPyR`scaiM`4k<=7%(R)L8bKO% zTpG*f!|=jBz*YsqHGvxlZ!SBuC@54xr!2xyQiRa&LjzaIZ1SPd6U_h~^9E!;RE;Q< zx!?6I^4w!WeXtMsriZke#@-ut=GhXU7u^nSb&v*L;PwErtrRBYWE{J}fo=sVI1ko@ z!jk+PZmhp_%<5MsC9lO^R!u$%&)?{X+ zDQ_&Rog;Cd3E&}|k(Gq90&lr7h$Z1UeGwQqJkHI@5Ly^EV8Q^-LF7DwX`Exq&;Qk{ zIGhX0CJeLu<{fc3P4##3D`}+tB99`96qN;>W_`U3LQ(aw8)?!T*c<$Pa=2|qdNxfdI%_#ku zz`M{nhVf&OsYeo)KqbTQ8HRX-cLoiLhE+`MRM+h{tCPNNL#QI-9AA?;?q^M@wWo$H zhg6{76NX*DH5?OIjfPLGIz;dqVSYuU>X2_3-bqhS$|I#T+}*InhUhpTGLFO10gh*% z+QNd%F<}AUSH4W%z8c#l-)s3emP3>YLpX+!*7c|h(^WjRpL#9PgNQLT(AQ#*2iAjqLnZNBXO<(uYxK1{XVt; zBVT89SUQRbQ3#0o&_v8?_HdmBR!Rj~wr#j{Y8ZzI;IV#&A2Ur`xkV>G?#P41nImwY ziP8l9n9-ORBqo{y-$4s7Q|7FA3M$&sw_%;;6K^%-Zl#zh$}Nvos8iB1#ckNKdx${z z&8eE4P{}}gN6>_uu{IgTO~(i}NSx9k&a&VXi7}E)^k(tj4vEv*JT;~8A?tS7G+gRl zn#C&dxGwjxGC~aG2D#QNz#T}*$W$)8u#x_jYaP4)^D88|_8!k(O95}t4;}1MIXvD* z7r22nbQ@b*@;g%C@Y(~Ob<&`Q$^J#BPNthEO(_?=EbnZF z+HdS9y2=5WZt5BsFan)QVPr80dbSr(B5l=xbFRq5J|mPqPtGZ2tfefY@Eha-tCg7+ zMhwGVLF#ztvSeo;pu5LYy8sa-1sCN>@C6-g=s3sV3*wN@g^{accJ>QJ?QS8;Fe^+0m(+$rb=&RD2{9%GVeKS< zk)+?`&r&-3ye??9)Y9cRiPkhcgV2=orA`k5De=YufvTUl0~Bf>$W3|qYzGb>u6Ttx zFQ!CB%irmXxq#R^)$2D{$JBlx;`{=)21>={RC@uYatKYFk3Hr(zSic|xwNHhOb>D# znZ1cFRt~sMY+_$P@p7~(ouw-dr%?x2>x<0ycrf2RDC(0>x3Tz2jlq&{dcgDNIB0t)H{LkQXH2>!1Xms@0F>V%|9t(KCE;u;26EFtGoZG$k z>AeYc3jr+!=ahH5MRDgmmWw98bA0?)M@sriWUNVW&Gdq;eZJetiSxssSCY183Ipw8XH z@lOir{4Ft2|F)xj{}m8B}wmL2gal zX^we!S>_tua^dtJfBaGCvGeNbqwDyOe>-^O>O-Y-mu|}Xe(v)*da6Iz_|fM}DM$T3 znje1{8FzBs=3^HXo^mJ*7hcq?nV<^~4QDUwynmu+a7JY5K`GZDPr7wYNT_JIpn)Yw zih1snC$xZDmaEGSf>Nh4s)G2okUb3xdjiZXcz)`~*M^2t+}{%j@~>XK(gJCp#{sO8 zJa3WU9?$7PL7I9KuBmdFBI|&?M0FLn}&uD zF!$RI!v2cij3LZ*(dgd2dl5jV9FrkJwwpCHGz`tm&PhnDTgABgCZ>hA9-jNEtEZ=p z&i(V}&k}5)llpmO<-G*e@;<=m$Yv(&bt_!)YAQYS5EQ2mU?h_W32ji%9H+SySsg9! zUNo@xQ0eah3iRbq6nXgj`^)O=6a7qDTw}XsV{`WU^_@_Kw{G3)4%UBOUr)2h*^E(Z z>0e%ey%;!EKpB3h>9(>9bd#Gs_-Pja*@5H7sbepPe!$zEnEJJ2`}UsU;fLT&dpL{c z|G+-{Y&8gf5A}ZF-PYkqr#O%ESC?|-xUXHi<_tFZsj{*ZcQXm(^`WwI3#5u$KJ4u5 zTR;o8S5;R}g0{V{si8Hf4LfIKbQBV<7g*nEB_*YllgAQXxAA{-;c!$Fb3| zv8&gw-+S=jfkumF zMT^!}opN2mPjB3RZ>z-LU$|fC22}z6Z$kWc6uB@0#>~(6`J#dEuiWanfyLJgGmu?m zKXDYVQZVTCSZ|c{#W;UfVPRpl97}R2Lo@`BDwzNNm|MoMe`?`20N+m>f9=D$uk)s+ z$B84F&(l8FO(L|4R~OlF9`NnWvPZ5h!D22#m_To1VR-^$2YJ8}j$-Km=K)XLOH5>k zknG5;rlYI7o@^r>-Gr?$EJ)CpSu92B_4V~VfuMRm+~0yla8FI;#8g9%p%nb!9q4J2 zO6F$hv0kVmvXx3Uh*AlA`#BxbT|97)4h*BuuIftGKCiPAyZCG_u%fRQN5Lgw<#DIl zlmZ&W&Ax^$E(;TNvc$v~FLqJC-*1(Oo+x=Gr3%35Nx;+|h#yiAyBaG|%F7ZI65j$2 zIU_yfIeoWYh44oO&dgY}G%kGa{{7EM9hgdJAxQV|8Sgaj%)1XTL=CFzr@U}BYlvl} z=jspF@#mN2 z7#ujctu#WAsU(|-ho1lyr>-DVu$sR|XQXJ%%8;Nx>2G%e|o{{=%kA-zU_f1YH4Nl9wfnie0*F?r@E%59LxGTHMRCcB1SH^od68aSz2=0 z*w_%SnQ77znUX?Fyb+QR1zT2D_ANX)Fv)BhdoD1M{YUTQ?c04mr-+I^+L=#JOe$r+ zxZqUzJB%oZDk;AFlLD)#D?fhvp}f*L(KSjH{~X&w@yPPy#w+yEX1njRnVo~{_)6ix z$eARsNY3|;F#)>=d*`ToS;FI5hIB9dP>TRg#{JcW<<6h;pCjiE+UJZ z)Bc$JcwN2W4)V{bYnYJiYV-AKF9MwXd0XW5j|^x_Tawpsm zy6^e;@fK*~2WD2Qs92rJfci($1{;LBiNh5FQ4!B`ftin0aS>72d; zBQrPr`eHZQ>R`ffBVC^cP>RpS&JLGE)KkuapX*SqML`ZqySg++^l16>JRkawzpfW; z?6srIv=x~Ic6lWp$m`Z&5c0hf~AMX`1DB+`RLF&sxYjr&1S79D^8v8)Vswe9e#P&`uT za5D9CwFf)7kD712l84E~{zHdiCZ6|gi=3VEgz^>v`_5yt_ADHfXNCUHB(^%QBO4~N z7k&O0t4_4LZTy}iLN2Xkg{!0#148zbL!C9iG~2;CH;UKf8i zQu7H)_YIVkv$>Z|OxP(($ll_K<_=m~`zT6OR8@2JhzM(FYSN?U)X>FY`lNz_5X{u? zlWPTVY7R7`bLwE3tG<1Eh0J;fhNq~ZQ6si8eT~xH1;H#qg0%4tf<|*)T?t%C%2%#z z?VG%93irVuW2s(VR1GaH6YtdC(&0eLC|FBUZf+nPNjyL}7g^)NXW_Z8#iw3p(r6jR8dv662Jb2{{QL4ix=PgPpB?>H`Uhqsuwv2b{4yZ z!_mQwU{h33I5;_r<0Ch2-uweYYJHq-*CP9d&ZUf-&9^1(HZeB7N%TdEk}l_|ORvoy zEV{C%p$psxVoiq+Io{tIrJ=lU@*AcJ(JD1sJ2F!qIjv&%PV(^ZJp6J~b~&$0)!}=2 zhvo`>wwb@8>Pe`SF*tVv?ak@q5Q$WYF?H37X4{yFTSeu^kN3#6Fr6=4UDd{*x_4Id z^b3=gH`wX5cZeOUwbX=!o47NarnnD@Z~Dd>MjurlKHSY;-OIp`23veOxaM0J&mOC# z{Be|%(*WUM3UOPWGx6QKXL}hL(=kVm58%7P6Y>TyMP<46e z?X8P<9lff_Ha7QIo<6$u5bck}H9+o@WD+iW%lD`jyNXhjz~F!1KU~Q65ixiB-nY-l zsYO%ufE;EAvT$z^M?{SEP)WJ4&9iu}bh7vA1rm#gz@U#nxG$@H^^X3K?XjF(d%`m* zZ!PbPHt)!{_l-|TNWDi;H7Q9K&Sp_c6{x-`EoTZ4&Pei5oB`W-g4J8M z89n(K)y>v#-`>I*G5yUGC(P;sT<@N#D5Qx|f2&14x4Nl$32gLUvyq93PE1UUEOa{9 zJ;m+ZSWj&wK8V1OXj6OLSv=U!iH6Y?-xgs(Vj2*{xsKii4ayV)ThXj{aOcE;3*yA6 zqt6T`T!sE8hG&8N4`(=|NmG;IIR9=Ha~+*hCT3=*<2(9S6m6iC$X^;C86VfLsi`r= z6iJ?4Qsr!N;`cDOLK?2Ena9g1IRh0!UM(fAeb1_{H)aP$XQgy6T>e!lLDI;#^MUK& z9on^dU`D&r)$Q|V_b%_dpuYfIo2%!?mY$cNpAH1N5%YS}y{HJ#a5UCpl9PQf(hNsk z=APXR+OU&t4Z>UkoWK(Qwj4lZF_nV<>RRGu4wY5DWC}|qA(}RG3fVwr< zt;xth0JfWPa&c|-KFL*H*V*XoW7;~v}6-J{H=w6b?$TIT`yM6gj*81n_ps66l~B{XOc9o)*9sfF7zc<3s=(Z3hE zTm0-J#vRX|KleZZS20|Gsf3IS((TyHL}OFaw(Z;R!sXc5-24YO_jV|))R-B+MOt^{ z*~)x>^+OLI%EZObPtaBb1n~Mve0G>OoQetk)RYdhW$Ool@H5$7%S8R|Bp31~ehnFj zUVO3Q`U*LsJX3uT36g%R|Duh({Q)>~jrF3UqhG&yLjg6`5Bc#l%3^BB$yi^X@^lXJ z!)x2W^1}@u&T=Eea2w_dI2uGtCg8Hj3zz!j7xvVM%*2Rs4SE2jq$i zmoB|*o0XA~v6>pVR4`f2h?2B>h~bd3_>=M1j{qQPlbzyRS_>R_p!4Or2Jt#WU);EP zGY0Vm`!cybx1SS;J!>>am9KeX*k$Jk#W6)zOMznF`ccvY!hl9FOH2iGe!&{>5NAI= zl$Gg~ynE#2dQtuf5E$<2zJG2`PDx|qPK-Cy!V@{aXNW$k3p*x+wPg~r*@*uMU@BTr z`kzd2RK?vT%HU?VEFSbQEp2Ff=@EZ+{Bw z04jJ-wpHi0%f_D-KSTE+Nmz znVCbyvS)H;fFQ}Vu26m!5$aLAbcu!xfiK!)HW!VDu)5CgS5s4qh>fi%^d&GVIT;{g z;c94B)@+2i1zu5NO-WwY!dH4K*7Uu+5BJo)!cb+}l21O@_GoDISPw${RmF5e& zgNXdozoz8;(kLrW>+F7N*M8hQ1R4tFBwJip7YxWsLWS)uhwBf%e(#!Qs_E1>I7mfy z;qqnI(LAgp8CS%e1I25r!T`e&$;l_CyF~D5U}WxahT!$Gc2YIM=xHa6O$5G14=3tN#VGd ze~D>mMx2dpy|Y+2qkse4%aGr+z-q22Dwbn#PEJN#7CyqQo+S3bk%=w2{d)#qT1;%L z7v3P=tQh6A!azp(S(zy1)fBz@d1sM5gN<4)%?zI=uSMm(PE33Z41&i+My@LjuH<~9t{|;e|KSOwg z^gt4Ln$2492qc1HpP!^v&Gh$m#CrE;O@hXE|pm=XDnj>e9A0 z$2!)yOMh!wzpMKnX57;Hnd#{i;kD;+xaIgG#;pkLp`jt{4-K?vQP;Jh04sz6kumW1 z*R{5O7R_A!+EU81ZDv+4Tma2|67Z0m4D<7s6)ClSlW*jB0uBKXPOv zK5K_Ln-yx7p@|8}o~*a8c?b1YXMr;~fw~FZU$i+nHPy{@G;+_-r1Oo_r^yI*V%m|j z&3?S&4ANwe&OA&>;0Bj=)3z>14rvj%d?om#BiF6rDE$jez#O+za zn&LXU{Qh(gDAxM*>r3kE)4FY!>RVeMLLf!8jA@xW$3^kJG(8=M=`ATD91q;)B#n%) zJ(3PXP(KX~rJ9uj%9yOha`0Lqz=&}$6?-UjmHh%dzIr$z`-EwW!CI02f7Z;{b!x!0ovK0N6jxJ6q@OriG8`~+zQYtc>BhV7??}E3 ze2-)@2!w)9sN2TCuo>zaK3LC+1n5UihT*{iOZzL>qJOi`8J1Pmp7+mf4;(n~IzIm4 z!qlL3GC8>zWkcu)VGf63P2o2_;ObMwBrO2ENm3as$QZhuD zBMK=MlHWSr@ALovpa1vQ%X9B@?=3#>^FC+qwbxpEA0^0)UxBgj0I!klj2MMHdG@>M z;eU(Qx;jdsfbVQ)K2$~^DF0aciMZd3g!z48;VWD)_!O*_kYB9OYhpX0kTOW$iCsRvBoV)-f8!Dymp?Zq03F%&ZAK!p);CH|E_TO zW6kQyRxHY6UemianD8g3pimEkA9lS``-FMjaWn|Z*01#19;%RMd^#Nl6VUQkW zDMc+jfprt#zIJK}k$hWnqJ#Uwg!n*V#zpy10K0m4zMUPAN=LwTx3srkH|Jf6>)u1> z77pTFuE2NXJ8k31n5C$LH<}L{LwZ{JeOitOR3xSxIr~E}9*7>^$9BA-@$B>`!3T0r z!lX|t4ea}J0I`>ZCn&=AdQ#%nv_Xi}KYsiQ2rH5I)$6!V-aZ<%*ymr=Z>}?YM_)+4 zcCD_Vg8U5!#8d`hk>IuFE1|{Vfob(NxkjuSNq<*dkCL=31l(j zqemM8R~AfgXqrIkN<8`lr^?@w0+c#9D&?aF1~#CM24-Q*YoaK^(>&v`L-qs{QUn02 z2xk`E#XU$)c|he_pFtlnQNR)~ejSCm0tA%n=wAWLWeRa@86pZV1xyZUZqv{X-P%FE2afbBe#l4Kx~rx31Q`61qI-n=;)lb0Ss-sk4zY(zQSUwSG@Uk?Kc zrKxNGQZ(c_Q&Zc}%hLMd#fxO<%G%4dJa)&*&p1%@qE4st+`TNOR1N8BI|ioM;(UC5 zops>F>(}v=)=+Cjo0NO|Q&lgh95ptcDGtCVM$x+EkzUu&V`L6rF`|s4v-5Mfva-yL z9UUd!bavXn7H$9j{re+ZPRT`>n>6iN9T*r$#=2`b$V&tspUvOxX7}#_K2VZx9bF7F z5~(hIc3Y-7Xg>`IusGk!V@IMAexxJ3juJq?cIcnVD=4^1$U8V!36TXKR52+E&mM0y5|&fYuB#zhBMX}Wf@s-H8sj*7;TeL zrhJ>5v&OeyIb+g^k}8z2XhIi$8%#NXQ7QrA1pEH17z0ppl6J7p&qT>T>xDC+0WIf! zFbA7?dn=wgd-eoGv(p{7_q+f=JD93?1w+i%uDrBf@NG2H8VE=_p?WHPdCSyx9lkF$ z=_~P`X

O_8ZCbAwpd9Ga~>Mt)O;z?MJpwyODE$)QT>5aIn8D>%D}6#Nt94p2Mo9 zokEV{GYYtYc~B|$?%ZjhD8eiJu~a_7A6Dl)%h?1^a582vpx`a*dJcKS9@9cTL*9)0 z&#`ac;HDy^I&(wv`A+deR(o&$$gb(7oBq{$0P}dLYmo=C%n!M_$^RoSZ-XN++Znb& zdXn$QFH)C(S+25Jp$0vqypi3!q@<(|+r6(PPAmmWnyTQy z2yV#npA+qWnXK-@oE)38RSVoDrKJuiVqYL>K{+Vw3BHGvp@^;yoQ9V;g}soE8&?jY zO=em2=-kLxA3YP3Bot3Y@QOu%;alkam~-^L-|zQ8V7zwG@Sm4pn-pVb$>YQ+!qf3_ zbhH5j8sCduDtz+f2AW7xz>~>Ats^l2&KF*9m>&as2*r&Ta{|o|du)+0PY~Xlye%NF z(~t|vT7hqKErw>8_`bsJPO}Q}a7D{^+bx1Q5LdZ<_3G8C>WSz*+KT&i*`+SPp1wPZs~ikn6GdCxU@+FKXG=3`X9os=9?9 zxX_c%&Od(5A2Y|$Gr}t#D{(wn7_@;aQOe7x>)R||&Zm-@2y|D7Jk44;|KGAf6+k4M9ameTmvyZT)k0aQ0h;G-+J= z2Wwe|AD5D7W@y+52|cB}dVj*4STrx`njU zCOQLyvjdn7ejaCAGRypY^g@97GmRPv=DRDi(|r+&BmeONB&MWn`k^B80G$yX@rq)$93%B};wNH#z zBdgy$I`X4KbB{{Q^iyrW-($yjKqE=PX4l`71fqYVqqTJ{m^U*Fht+$|f7+9I8Jyb# z|K%Tmx$Y5H`(rNnB> z%-`b75ye?mOtel-q1aTw{%3+4SJ8n*BJZ<_Z|8pp$`ux_l*+{WpRFn&;19^9V9x`D0HZI{r!Ew_$jw;3A}-xnFc#Z;e@`GR7&E1A8p1l zr5O2V!WnQtP*5DYsU-4xDO$b~%`eb`g^FNdC58$B+QdgbkD(2#LqVGPP$e^~PtR+N z0)wdY!eV07Aa8=vy#C^OHPkpr12%9CfXTN(Jp@a~ZZq@>M&UCsz-vCgE~Ev1bOF+A z!>{7c1Kg@u{d@iZ#Kn}vw1fm|G>)MMaR{fg5v>-G^Q_aWc|_vvqHW-@?8R0^>z^C) zQA&UyqFfWiPx2|OkwO5S<8>Z42$V+bJB&z-t`PZrr*tjvLJ`v93RDve zhv^8Qm8Ovq7aEvC$T#Qa=C*a2fEABu;}oGG|NVA?nXYpv2&lb)*1z&|&<;N7UkLZ| z=(o10@-w>W>;)y{Jv*)AsRrrnCf~fps0(5Z+;C{i+Z^Z-dMScU4BC=-d zwm2>dSYqOmlj))S`Ns=B(!0#snn*D$JY6&+g#E;S6RJOZQOe z5G88ynlPfnvG(0N^um9xg@hRgJ`IXQ_^lS*|Ax_-PGbrJXyc`aOWNk-$q4*0Ym}5= zu&!%K1pw(aV6==rb^;P6C@V44B=~$}orGuS=y~UP?3CO_Xr9Fg#bD640gG%K7(0pAOKbbKZNeaUNVSI@Nz~Mo=5z=t z#Onor5TOW=_sORR^YW^J`|ia8n_#ADe3#$A{A71xweKCe6$u1PmE$K!7Bw1^%?{wF57$P;VEFW$Z_ zNZNaP`}@UIR0PY)%I4R_#fs#DA0v(l>{^5ZS_BMyn>DD}gHTRc*g-%ih7s(YAo9u3 z1V-LCycIz}i!Iv~6+F>$p$^YY&F}fO*!GO5zkI_q?9sBuNvd}2mO1!->)_JCD)v?f z>;j=NE+B|9hsY(e#XpE~5BBDw^FPl#?zpZ_-gW^VmmoF}W5f^RkA7B2FPAYW$6^#+ z)SBSTkon}%J_)$QfC}3EicY6Ns?sCWXEx8TZ6a2-VstV7Myz`E=1qbxKY&PhR211* z=*qkdsIK-=o;CjFO(wt+!qcpmwb+Y3H;Yj?lIjRi9T!K5@PGRK6D}y-#E&{DSSw7< za?mu+oey#m$t-9FV8P0RaioJ@vId;9Z&*(dOmw7$2#i8{Q4uSt%9MBQ`pcIL4Ddsl z^nuUE4dYNiN<80Xf#a>=2$TT!ejSNOa@)2ACnc>X2VlpJ9lrstk%VeNPr12 zcHqCyx_Q6vHisNc>G7m~{5zxV_Xy33teR_Ag3x_%< zX6aC^6Wkq+1~6)@A2Gb(6jMn`O8SO%V`{S^Nr>RA{~@dk8dykxK#S|Oex`@PtW6ko z9EQRe92*lb?5m!hX5w;0ze+uNyFLsr$Vf`AA&-rpK##naXIaIEzTAsZQBjrq#Dc@K zkq;(1(wfoQ=KABa84oY-FbUF#NQ6wEo%2Inl_FU=8^|3nvbVxbY}>YNV*=bFK_dtu zzmN`!(dvv5h9l_EI~v}h;;$kE4;2IPdu=v*NJFv>#P4wdZr+bjvx_iJg3K)k71xBa zkP<|fZ`j*?h$&_g8|i!;{PJxGlXb62AEn{ z@CPn`*?|TxDpXj6H^n$rRvsR0>Qn|^Teu@hHzvQ5D+TIy0+|q?(Ay|C#{L$gN?ie5 z$e#pKOjdFuP>GG7p9y@0ZGOmlOXYoTFQd zFo9w6(JTGeWIJT$;*?Ou(f!5ap1H8he3u5LskVD znsxqKFl)|9c#(a4l;DHA0>vJTKwWDq11KKTVq02_Xd4q4Nk4V^bR#S0Mk zTV&%59}zEM#E_|BG*c+~%n1`a0)z!(NGJLvRAYK->L9hP39JgP*r7`2X856=hrz16 z4-prQ=_+SY6GMQ@Gx6u5hE-uuL1$^k%WrM{40z;Be2{Cp#=g# zV62$OuEKv&0oC#q_@LGTefppgl9ipE3Y!B#^#1?AzF+8gN-rpAe>s*1d+_Y57SZjNzT>Ww{JmdX+kjjb3G|Q=sO0~ z3@}453_us)D;J2PxgS6F!A!UT$wcgxFz&W)`v$Bo5x75sZ<1%R?_xb?W5FI<$kh z0v_H}y&wp48_72)?SjEuZpJ+n!zXAG41s(I#sQNoifRC{Y#`lO%^iBKOzGiZCTeU@ z*sHaGr-=q`U_ePtO^pc{YhdW8#eFQaFpOXgwj(qA#mYU=(W5i#=AQH1#K(@Kf$Fyy%{mYwsNmji$P_d-G_*z_`Gsr@z5OZ?fN^~2 znV9&?0(2ETVGjCRP~h~U(pifUgTz;EipzLnb?=d72QgiAsz;Wh78#-lyblP!=Q|Y? zx&V(y(Ju50(^H5C0fj9wN;f!j*8z=^4}@U6AFf`QXOLK~z^~-mnh!qx-YIU8yN4my zg~!Bb;lINv3lfKUpyq-Qh==5z9ukf(Z-l^SK_=*Y$dKlI#zXKAT>h}iryk&!mXacx zHzI+}*|RKU8*JEd^?;|Br{~=i3s|bP^UBJuA28&q#Kb8B3kxQSS6y9=fH)OlGH9n^ zKsI3fseeY-QT)F|p>Qf*zScYz*ab0Un;2ZfCmuNZl)zPWh~_+t{U zQMHc=NQ>MRLgau>1-JLOC4PuLY$-5jSJ*G0u|*}$BLc`b=Kp71PkHw%4ly>fH-L);J4YqAGsgRS8RDyH87ivFt z^kpm_LOnV=7;yL>Xa(=S1U?Fb{9>uLonLQK+=hH4OA(pVK7L}F?bhAi^1+&ikAlTyiEKQt>7!ylN zL3H9!QYb4c?{TC(=k1L@v=IC2>cx1o|90hP?hUn6m~P;)L-9tuGHwe~f1xF0X;QM` zjy8E*cZY2vfG~p@pRos`gPFVl!%2~Zv_&=wBJ>?ZapXvH!PL;iL>RnbuTE3OOwP>g zcXwC7#9mjN0GO9ZrGfL3EN4TNG&J?)3o}+kcS%&^DmpV**RK!5i6Dg*=o6H9q43IK zP#=oswmowDfCxSeOLMAOeMUuA;Xcj?uRnG^4L05kA8H;Z0H@bO0qTNxV7wxb3h%;o z{5cn~Vqv2Iq9ar{APk`ov0n0FhmnOvG^m?lv@mPy>5(K-?DN$Yf}IWS#pzPy$U)g6 zc<7dL2rO2^c+>hwzfg9H&ny#WC(m)SY6dD2s3s#K1#oRO!NnkaAGd|@0eMzj49G<=xj)PreHu*3p5jOxz z2FyeWj!(c@t)2KrNkQy1?8j-hf@;Gc!RNk*f%2JfSq29oNe`OB6{dloPqBC3zB|pO zu&6O0h6W*!-~4H7{lD2Xdnd_~9}+NsV@}~fUK}(RqIL%bQSUH)(a=Cmc0DS<$_8lA-@0bk*tP4|-J7>dNYLTsY2oM)S1mwp zK>!~zqQs$_;dsd{yX@6N6Op{pB8$KibZS~bK>@ZO7784MCVaogPbR;7IT*yaJFHg!Mr21i+E@B#NPrAL&rN{aRjbfI0i!83n>2qmg|FD;wJ-B&&f+Uk*Ud zmS&NE` zW-u|AP7)@7VD2X7qZIunb)cER{TFktyxk<*|B1HHEbaM5^1* znd4&<6Jl8Qr_I9J7GJ(Rr9XVQ!{+B)R7PG&2?u6O2DI0kSXp)C=ia}+2BHjd9{dz# z%^m1#JFHg|%c{<4016aGm3XSqJ0z&O_7B(OtO(schwDZ<`u_`Mw9FlF3@{7~R6)zN zDk8t}^9yLX2mrd0$iD}r>2gC@$H{IIzA5`G7KTSFrwRB)6i zDJi}BY!|$n4krfah@@4RrV0Wv5F{N31G@mSawz#D$Bz%=Eh45mPuxv^`g8-yP*G8% zbTi-{Hz0TO$lKBoT!aE1pPINcd3K!PXPy&pIOOHE9SZ`SEB(EQ72YfGIUYg%dv@=Z zb9l~)uE>^MVUpOm&(xPw6L=i1Jg~KCXtdz zw8F>12-4(#POKxmAZikkp6Tm=sT#F8~@x6L<-_=4C>`{e{;FObYl= zVDQOay?;23)Qj>MF16XThysNNwo^KdAOrM!;qBWKm!sp6(r_wK8eNvBgIs%tE}MZv zq82CA+uIvO>m9%S;Y<*a37rh*2uQV&DQ5s-5bv<$5j1`+TDBrgi^YWZ9oCm@7Zhe0 zi1XNGBpqSTqgEuHgT(qAfN%|=w+>VVKsi2t2)rgtOib3cwp1vec=-5UPk@ACL%3gy zoPgUluA)gFp&=9Ff3vq#<9MLruBgFq(@P;Cw9sfkl+YnJkZ+0XBRv9Imyp8t)6 zTjmZsemMwPH>pz62Uku~QNZxV08%1aNcHvxrH`LKGlA^A!F7pgClojGq;wVxjvMha zG_g&Q(5=s&-FmG82JovGQPsNZyW~4C-L7y6lO9JH_u$6VJalLsN;V1#JRK@D(jo~H z4ya9fY){i;$KIq%&1;~;fdq82J<3a?4!-t*11L<_;8@w%*---@W>D6VU=46txli)06)?^K#ZTC({)G+#sCZyh z`8_xJSr4n@e$~&X6~zO@W$a8gE-nykbciJwXiW|B8bstJh+dG@#s#F~#ITbvN(s$D z!@x)cefjw*Q|v|7ShsE+5OyO3KPJTCom#mSm^kM8@ddAJ9j4my;?kYJgad#sWCQhM z$BuolVV8$mF1B+gFDe33oRO^z9sq0vd~~(_{Tq-f<-wnc&gzF{p%>(TDjkdXQ%Gje zU^?HwXC6|kzb0I~(3u1x?dH#mu^IRC@}duz;h&`Cz7lc3Pv2YbWNO)3liqKd$ ztdgs|b7yDi3_}yoKA0$y^t=!sNw$e7gzhQ@&oV^WSA%Fpsjsc2fM)^-bT|-e6^haa zwj222fHHz4mqet4V~3}~9!SZ^knaRRK_B}X8+2v@p%~&xI{YCClZDHT7@D_o5p`gI) z?|t{K9u+k3N72KFBbN9(o{%!8IpN!FR#EI$<$q$k58xdZ0z@h1M`ZR1z5!08) zW^l&?Vgsr70e2__yO;qWu#aJrypbz*`F`=y_pz#V(ZiQ1moJ-OPXlifIvVE)vA7o9 z$4GMO)IUF&@3%+my{=RGc_32~@zGoca*Be5u4m89=q*0rkXm;xNghCmODf{ouptUa z@XUS-{4j)H50;$->_Fq&Q|ZL>1bv=64m=(5g7S!#M;lZc7MULY{<}#%bo6Ktk_80| zy9uBaCE^0;NgH&0kg#W8Y>A@Etu+Q4u;s;zV7xK{FUQA2;03{CinTv}{Fq;txSKpI zh9#5o4JG=Sfr?9*O2Y%=en$rjz+e+N5ab`xZKG^4&1eMY#(N@!KCxeuyf%89=`7X? zenQr%3-p!<(-se}f%AlpW9{HT3(B4JmBKx<+=mvZrI%w7uiw3U{_=w{04Xr1yG|&1 z71+)_Whb4STz@XzxpSuz{+Lq_*Wl;jVkl5L=nZAT+7P`03{V}?0h)WIrr&R5%quQt zgWV-NFHZyZDI{>hkKw*23=8&9H8C`#KYoI8ua%V$wmF#9^?sPn8M^EX%es2aoiKiO zb^9FD;oyM>a69ac<;S?*Z1Nl;NYw)SS92j{Wxv?ns~es{DL zfunt?u0%Xbj4$=jWLGP`!nJa0^NJIl*iZ-s75hg zI|AlVL`JuW2bUX-)E-LDS%7B(Xd8Q^45^i9YKZaSocyQQ^tm~I9a0l7`%85qUO89%7jB`ltNrNU+e zrWZiXb@sy^Bnj6DvCB#6#{p7;5)--3weM6?a%IQ^7Ipuy_H_~jor@2@p8by(fS`Xg z!osjefDI5kuzE&TRtUCO14#lBdL$44JPzDSs%cgZjv#O*1**)uwdY=UcasA4-r=;XfXucSP^HjcBgth) z#-*ya=Hv5?vj4)%40fdBhnAMqE1lf>ysPVx)@zEl2Qpg_u7cyKA%%oEHgVoug}HNJ z&gMhQ9r%H2Z1sO zYtGQv7!Bsi!rK`Xzp7J+c{h*0Ee`iF3LRoX|Mh+VK1@*SL_K1+fz-t4%BcwM(MmWD zxD-N$%Z>aI58j;u6{Zt`8-W^X0!YPm;1ULM%QcMDQc=rGKiVQLo+bF@>d-10ThW;E z@ekK;J(kGp0{@$-$*}Lf#QGu}n_u{vg{i*&E4!jzw9Ho2DO{#8sk=z5Z3suN)}K3^ zjQxPLL(g0xEi3zx-2?&802gYE?tWNS_L1%w{6Vjn>h4;Bf+4H>&oPzV4GtK`{3@Lq zM;u^_oJF(=Sj6WJS)mL#qt7WG7N>>ha-%*585i_YG+u?}Y84LH&vO7|kdMY3+59|> zZDeF})l>%|D+1a*$JvgrrKPsQga8@C9W)E|0|ORPokp?0oKK(D`)8@u6dx=mC5NWO zXhG4*>JdK6PqWx>@g{Kbadqdicq4L`8^rr|uGpNc$Z>AHfD! zKM|1^EH$tt?_4#D7dTz;CEPbCx8WpWb%A_IeQ@*EEkYy#PYOa2#&5p#m%bNrC(DHH z5uiQnM`5(3!=!`GDlL>p6ofbcUK)sg4Dv7(>{;WufNCH=+VC{Mo!~8muv=VO!(fj- zdcv!ro0652QzIf?!Pv~Kb>Tb|tLFC?*neACTFQ3a{_3-vWGe79PgyV{fdVg;07{tB zQnz3nKuh83?Ec>?IXD2?gMDzFVum zF2sUZp4j_&%dp;@2UHZ)59i@wZfwG zqM}mtn}xHBUf&IpW72E8d(bcN!rY#o)L1=*kk)HIr!gl=&pqL$ef;^3s-Kk|Vc8M5 zF{{EtR_WFuBGQbz>xdY#9pXw7Tjfp?lgVO~NMJyTXdtt%nK7^XT-xOubPahBzyI^A zD_ZV_pRA^F*JiLAq*3Z})cgaF+7z{KKvSqB;^`tI(sSvL;q7ZvuR(4|_&z0d1pXL6 zNb6E_17l-}70hMO(;}JO6$3}GH_iLpKB9iji)Tynn!VsCn>8C z!yxo!)f|SGDTGCAjUwjTi(<4g{*MX9oN*4Z;Xh_k&VWfW*jh69whWIN79#%h zOTXmt>lbbVF*Zp1w(aAvU8(Ch;*T(KL|;=+T0|mQ2}VvB1EdcIXXr~2%Lyc`1H-m# z+h$W`(ZCvQi@2CtEOR@blVa^$v3epkYU zs4C5yRQ zn^+wbQh2&gIUopON+oA(ao=ehF7fd?<;7W?>ufb2wtL)l&ThZ=T6X5Ar>FO=d9X*2 z1=gt`xNaE1YE^mqs|AN+_{j_Fh$A_{x>=Wvb3 z{r(Z}rwtEeBV$u{4{-B(M_DL#PZ(t#sXMLMfG=w~ZJRG$U4}eNbjf-W$uAv0osDX` zjDLZ>S?{z>6mieFln>_!n@*1J%BxSFH}&JpE8%>ip`tX+H~zH}*o#y6{tONx{t;)9 zeDSY4*+1l|3@;sXScAy>Go|KP{h}RP+D?|fE4e&5ulpiS&1-Q%wCDqW%-f?4axZlM zb13omm-G#Jtsh;L;Fx3Q_S_BXA4AQu>MBL$;EwR_){(ffpD;w52BZVqw%*Umsy0^Yr~ya79HFcT7zprW+SP$6Q^iqF_}Fy5K@Bg)oru z=2PtT>vUC?EVmA=iE5(CH;%$`Vevw##IORev0w$TCip)XGl*sJ*?qgj(J5&aK`LZL zU}r2R1rr@L3ZJZnq}{bQQB)ztoDB8;dhV2<{->YISrO72nqs~SW?##3wb0BRGK4<(go8ur)X&15tVRK20kZN=R^MMXrvGVCTc)_HV&bB@{|*~nkQ!g| zNjaYMp6PziadzKvdU@@`Di=G3U9|%WOjYNn+AlZR#x0rI#y+jsED;VQs|Mz+A*4%~ z9Max-;$s7gYw9pdTE&9YPA=jB$3A`xH7emqJ6t>{A!I5|rLx69j^`TPv@fVkOHnKGl25NIDUS zII;U6EL4q{TpNC1YZWKB_mC!AosnGabzu##-mKFe)>}Ngs3EGG#g5pFDs3+qA(R8e z><0VACM8Lhx7#P|1TXCs-uy~jHp=-1vfJwpQX(#G+_`h7flN3Ec3%8h9e<+}%NW@- z2ZfLfnIalHwnlw5OKr+(u4N(NcrYt8TqR)18lSlW=7NMS=g4P{B}9=oP%V$^Y0ahF zf9K67YsFL>g%s;z)4QzK=y#{+NkHgrz*fwCi+y;YPQp!37&HAD_msZ<;}wAO0VrBK z?26p0GpK{7LLrTRi48)w$ro>uz#L2J&Xi+BV*~yVzMM;Sd$jsbP`MgAlsjddSeym= z;qG7mpwL>57|yKm>4|v?Lp`ElM>NHrmM$zlG%m%-xaqsI91lKUTuMp=BK}QW9Z)fJ zdF`vJ^XKpo_s!070&pt#GZV_Tc}d*dS|-_3%9 zjwKl=@SIuI4+V-UDactIyQm~16U8N!^YYuGKM<1ADT&pVSN3^*f0{1FzYFJGZ4wqY z*kr)8ZGL$L{Le+*toZARgX?}jJd_Y+;#OSNKU%u$-I6I&HUkaS>%1x3<8%}N2l`T+ zHs!l+9m=_J*}u=U@kx)hoCY(CR%o#qh2*81tdw?^6JEAS~`K{z|(RiNZEh^J-i4p%2_@WDTV}obij*X3Kp4l+A z!nkwM@4)A?5!Im;2QAH>5s>iMbkL3MNW96@t4zNlbp&o4qbMu}3ou05;S^ooktS8^ z)jumxl;WuNx!WE;TWm_q%xF+x!GF@gL}*}uHJ;Pm%oDfHS*GUP82z?L9Bf4wC!hqm z;uf=$qHzG-`B+`dP%v6WUcu1fIR)GtjN=Ndhz z$LZqwXY76t9wadYwmdO{)230M=u&>bKbA)p^^ie<7;$9-yR8yt=^-ZEwZ3!{2m;0W zX705ZNgo50at94olW%j^%Rc?AfPh$*GOK=I?B_D*Q(xn^hkWIZ2u5C8r zM{|C;b@^9jjOFp;TZ|4L4E9;g47s8?WEy;BoYLNHw;GLfzq9xkk8#Lmq?v$ty@_)h z5gQY-!rnS-BHQ6TUaqswx8Vv=7olAQ$9p%{5Mhm|Ztz4Pb)KXuK&1saF3e@E-4`qN zw~3}!pd6c+Y4_*4ZkiEtNfYN`(w%PCxVpXPUKvGRY>V5C76!iYiN0W;!NMiO_PpuF z*paHjwTp{SG|t8hNbFZR`$(l+NmjgZ?Y-`>UxSgWhh3IOY*+WV*Ho3Umibr|9LUM} z-&x)zVt31?!i(Z`l2L8*>1t!28)~;+dhJ9>mr*vf-{lfR`VUI0I4hEJgHDYVJiX)r0PA57UX&;wO+NN(cAi)wFN$J-qF&EAsZq}b(=agZXQ5LcP zV#(_LIO?T~R!bHm9wMt25zhU#d${t=^C!dDN;Pe*^emgUJ8Se?~c_l#?B6~e*Ep#u6OP2(gk4u^2cr`M9v8e<2`ZZD=gbL#K( zn!5I=MsTr)R`{Tz19F2x%H7zSY(3m0CS@d#0{q&Kh}82T{Y#NXpA3JKOoc22w2-*w z)*;E=f-&EZM|Mxda9<4H9Vjv@gL60OseE#t&CTro8=d|tCnNjR^WuH?&>w|~j*R~B zvXaC^rsaXIt$06^JxHyVW2lZVlo%Xk5!E0vL$|qwPTp@>el-85aB{U}StoOT18V?# zxf6%D=CO`vYn6|DX;j=|u4%w_F)mDT+=knicJJbkBi{?ho0aZ_oX8ZQzQQ@1OvxHB z5~1CxvTHu@amDdJyoo>S#?wr`?u_A{=Sn+oT;Xzye;t{(5Q#QnTZA2ABL(dT(vbl$ z4>=gwmxk(+c~5=>>sy;9hoKkV2K?t(%cmFoHt9>Mmr5k)+z3B3U=r9j`}4r`!aJIv zy5O=51pU!6&*x?g zp{lc%n^AtC=v-=U&hq&Ej9=KkrU`YRQxzHOthdgie^i?$?iFY}4XR7$jQqanPamR= zuh);aES}pJC{(=V>+*`tmmm1cs^sEB^)cUnpY} z9JvtN$u9$Td4l-!J4k;FW_u4|_)HzDJ@emczaX8C9KNu`fd-ifEkWOneJ?W{HG-?| zgou6d-US?wMePmd8rfK)w%(%DnX|%1d3= zT(kb2pjJ4ycK8Bcutxn;ul!Jh9*(<1 zxb>NCQ@VJ4LFR?e3w~_$G$Y0moT`~Dn`GBeQA%+}R$PjI#+rYYH-D8cx5N0@1;r0T zmG2%zKbscoR^%xtSm|5}mK;5}k?UXpoeb5&hJhq)+8*sK4x;HAbXVGf8ag*VOiO98 z9`or)(5BcKH=$#{*RQf}ID+ODM-IQ);PdJ@=VhUAJIayfiErYZw@>Bsxmy^}Xy-T_ zkxo3QEPps4ZR`9$e1*y-!s<;K`q}MiZ{AT2cUJ#nE5QDxtVQ3|LxiP|F|OY`MBT01 zt5dz(xpXP7M>efjUGJGF)sy*tq>_3G23D6NIfga~)EXbOK74fgnG>`0{p^iMf668Ry!_@!b7JRs74py27SLO=6p zn}Ic|GZPxsr}s%`9vzMP;hP_$FV!{lCBh;=QZizH^~*c1olBx#ov#AweWvgDbljRO z6X$mOeR$5Vieb;aio;Tz&K@?OOhx+MU0v?+9>_2ASSVc>&3w>&>iP22A}1$56f!^9Zm^2E;Cq=tqo> z+<&v_U?k8ruwK?B9cBRxSEUPgDm9l%)XlkE&U1GQ-Ipl2+u7f@w8-2(S!#Z==%#u8 z_3jnvL|s3@5OvCuK7Zqi4nWa-4gSYf5&XN?-R%3ZU9)y`Ck4B>EGs>scOgjHTsr$z z0PF|eg3TbMfl^R} z(?PWi{a|MM>n8hY+6!hR3O(ufPQBT`wkmvY(M|fN!Ri@Bf1YI9OV*stoK54|dvJkc zr*MgU{oa@I`dzFMOgHjfYCY^Ht3*0D&I)Pe8#f={pLZ;iZLrgax~<7hBQVgGtxbHs zkJTkA?+`Cz$lZm+$~2MHV|gBp^COF6)7dT4<1t5*+VT$`@1}nFDcSbapEUhZ9sA>4 zk1elVC}TGZ6L){=GvG8>u2Ez1wf@A{nK!+Iyq#wjXIrMnIs|-g{hobyCTgKFE=K5V zpJ|)M4~NmJ!=07~L|t;$E_&w{yS>-xDieQr_VqQ*A2`l~JXbxkOp zwexRpoIt^MtMrSrcE$G23GNuHBs;^n-GYZx2WFn_QWW{X;r2pd-f!r$SCD!B)g{Zw z4)rmY5uOucH0wr6co!dE-5t6~;$wWdrk;K$CllSi-t%Asvc7eUJe5`Lk*(RRde$th zZDe=2zkBr)O9}K#;g>U&(Dp$wFAynStn@T;xTuZH?j;TP@Wx#GEV2CoX6mm8c}s?U z5U(7$=))|{^-i~r;Th^F!9%BIMvOkknbaTD5KRmgHOuc-zGZR6Cyp&_Z^KJw;#Q?Q@mh0gXJ zCLnP$#IJ1acDt@2QLZzloNv70+pmLmG=Ib-)vkz}XIrW4bO`8Dv~jM~9XHP}`;hno z8MK}6n1sZQD`Z3Zcd(~WbUST(R(TM{*u3TL?)_DkLf^cD>R8XIyWy`3dk(_?Fg6V`Vdln)vE7*FX4&JMF@soiLn7Za7mR(sxiWV(Q14%h!=nw+q?2(-|;#JC^8Vc(8pw`*|>eU9$1Y z{yUx{7B@AFa}4Epn2ux#xm9J$0oG)-jrh66A2S^J?pH-pep@&t%gDpzMm57=uEbO0 zNmZ6xkz#LI9`iWT(<;XY#0FAh`=tDoxwuOFq5DzFLu!WGK2V{VC7^v%1Njv=RYSR?8X72n(%dkpOR~M>Fd%K*+;@UKfsjgb6eE7C;{=(Hf zC;o#jLH)eidB-cgjy!tq9ua>yI9{8}Y*C@}K~aQ*^V$t0Cf7UVN&C#Vif0C#Xv+RHk?BNNJ0VPSo_VUA_)`iw|8ZT(2p$-$Jr}16VbbsbG2W1*i(Z3Ya>T8xpqPL$Hht}!LHe#VFHKg>4IJtn-^P* z*=eK-%e(W|3<`B0UcdY{(@J_aC`z$ytJaS%)8A?$w=-DS9Xul4F4D66sxz>8i7lYX zX~pkrO_YVik-WX<_NknoU&+^wYvvc-Zf~V(UQ=9Frr&mbveOE!`yJMJ+GyA0 zXBkwdKfOo`vNzv&Ei$HDm^KU&!W23hYKGk|BmCu+EAwS3diS!MD|oIU2xorW%jR7B zp%sb&B?THD4eo5mboy-BJYyMR6(*GkT0J3MTzHu3*^Un5bwr?cNID*h{(@~w7mt$2 zka@kJTEx`XRXnb3KK7(&(gsoUSgCn?yGMJC9_=-IIJ<+UY%49fi*(jPpj4yRxfIA z+iRM1(Oy9)fqnf>3I)Nhx4!vRx$O)0%4Zayr?D>Y=Mb#CK54h?uL2HRxvE{`^1=BY zt3m0zwnI{-OmRW_cbIQRZJ#?-UAg~Gj+cIZ^2NJll;@-qr}Fy6gm%PHdVIb7X`a%( zSh`vxH(NCPk4fc(L5|_8=>-(#R~A1wK@C_kiCZZ}#c955${i&><95p6>)nC`sxB{I z=Rl3L!+QQS6y8q-5Lg&z+Lq5F3L=8s*r+vtiKcXbk|5|V_J1LAKWc-4GdoTzZorrx z&omA7@voP|N6t%E?}HeCYzOm@21pRtHE?_3MYN;;>qe%AU9}%gqyba1D8=HqnX#uVUQSoU0%Z;^lO z|MI#q+Olvxv^VF(exI@Bj}iPHBydXPBU8No@fu1BRH2nXe2k#Fi{RIx4dF5l5nP0N zqZi~hq!#tUp7JGm3+7vuk1{xny1ENlXsFyenwyln5kc5*^dbpp?J10#4E9$HtoVy_Apl zezkYA*rrgixqCKl*dgCo=F6$pO`MEy!rgvriS@)J$&z=RJ9V4_B&@`-bZRQL$%*0N z=6Mh~m^LW>z0(6zyW^t$Jc_4zaO>D^(zpbcw)M=vl|Yk0&s;7vdtP>$ zKwef+jSc=AT#8N|9W30Ln;&VDnMl9E{O!XGBZdv^y)IiM)xDGjJeA*@rByj`m9Xb$ za?#VU7g!r4#afJcH1l2K+R5`&@hjbf@H%lXhTRg%zcid8r`n1i$SMBt*!Vzp^-kG6 z*`QG)X`}oEc8cL)4f&QLSr@jSS4>3q2LGlp$db9F3(S| zVV$GJt(<4ORF=^50h{|T#eaIswnTAXzoOWyYCNZC{`Qxt$e>1=jB!W<{_6hN=Ykg9 zPznh_bI{)w4i>%&ENW zL%DCAGmhjCQ}@Cmxhex{%wItU>YPN#0tPR|B_&DH`bO`!%Vn7b%yJL^Q||8`*Fphy zEj&HzrDMX?S!Mop(Ci4~1;qu7*CiFV)xE+O!3=>GQWg-3*1XfX7hm_^fWgu3KZ-K} zc@+Ly5wsbeu<^y+8scRJO#$Ax=Hj0BF{ z4E4V(gFpf>wV;(=U&xp*L&YP zVs!qhVNwsjuc*rHC&tY#hg?K(Fl7+LKYQ=O)pFakt6|OsCk6LJ6VyC-Ey`#XhP3x_q56C{I5m5HjcA{bkHH!#j+xq!kY|Xfc&7y;E zx=A3@Udv17fo6hJSGF&j1w^!(U(?OnW)ofMT;Nnl|F(O=G>pC#!*sOYe$mi8Rniv? zqy45AX_y>>obl*X&pKG-kxRy`9q>uHMH`Ayhyw-Vq|7a^Ak->(O>q)~NJ-z_Kh@b! zHqHKwV!e^AlqyxcXFCrQqzYmMhdCP5TU=_Y%)!Vv)dA1}VmY#un zAZ81D4kYZ1@Tj+CpF-Y2<3{koA$!Httkz8^>phi^-;y|oeIh61wj_w>b|d%M47fHh zOQFpM<|Z`Z-1;mbt_jO#F>an=5>VzuQy}^^xnvAk(TQkY8VmQ{dwN5b_YT0v zRAdnuEnvEtc*%fB(95L{3k)jp;mjymbzFv`&xB)?_+ka7nO9me)#i7 ze$_w=#umRSOZXsk`xU|(D3jV~YX(`sIzN3c`{lqpoQX8!&k2n4dy6YnT_vJrW+0vo zxj(+kklHv(7gSfIlfx%-Q%1s(onv=|bQu7J@~uOR-I1+!n&aN`amSsVA8b3RiOY;0 zeZdt(Clbv?ol8wqNRGUQ`)h2`sxtZh=?-+RxOeL`m%&iRh}YGOe*QU3{<(uYW&RT# z{^iTqwzI?h3~d@Wt*nJh`WamKWc~o@48d$5NXF=3-Yg|Shy3GBY|*$Hz81HQk_(PE zR4JuDR;~dVa&QaiEOhwbRV(2-4>FDi7na_^OcLDXh0zYY zFiPHa0XPcnnP$#?BpJ@=jU-39w$Z164bWM7%EWW_gMf*J8!gUm!klzOc=!$Du|F>V zVo!MfhCP+Drlw_+4m<(*o27FH`{8$B&9;-*Iwr_q393sJ77&9zCD6~nSeEIMc86`b z3Y8XP6CV?u>1J*Mv0!Ax1CTw3kx`wvfIY`{3!A||3v5IT@3JL>EXoJm*Pf{urX!8b zH$@IT`{YS3Oe51zara0l)^Oufo&S%UMx!g3I0TqCC|VOasOtO<@0o!JKpx@~n0#QI zOZvEA6=DSkPCAlZiK{7X^|vI%+G}Gbdo?^Ag^N2Tf(B>924}T|S!3y_pZ>Mn8@9&kmo@5HTU z`JWnH*@FIaYTq&Up!(d2zc7x>&l5r3(qWLUoe>OKj`$u{Nv_?DzYJM|@9QX85sZWJ-hAY7w* zA?kRt-o1_GH^R*y;N~wIOoo7s)gnM>L~LdYP)^AXTrz+iK^>#ABn4sRvHgzweSr74 z%-H`TF1#n^PI7%8CUxEYPh|cZp2NfA^Uwl@z-`lmzE5j1X`ssQFCKtX1=mDVW5m=& z<6IKu<#9{*fLpTwbBe>Q@N6@;r|-#yQ$?7(PevcXRVRlWID`i-?{~w{5`v}i)-eS( z?tvK#-!^(QK&YXm@SznI)S%Z02)4w{g29Ev>xXi92>Lc@*um)QM>k>V!1Y3ildheb z>xUn<$u=0791p=|kW`Ezq7j7`5s_W`AUKi>jmTgb5^4}aip~zIIBnzegz*O>EB4^} zC6${O{w%hhk!CApz0#R>!U2wSC{#c*Q~YO%Qu+*i`U{I~R&yAE zF)XzDYYl!+hW!ql`TzIVjpRy&Q@d?{H{<@-%Vh2k8FzsghlUnv3bv`>P?GvdEey`uF(WOV)^FCDiVwaV2x-a&V$ezXh14D|>}0hF)C!1#$|N-UvydcyxKs zNqq}kIjwVM4>s6z874`QVHRXQ3SJO|x%4ABud)uTAHWQt3JlVOFC_7^BfG&r^>Q+7 zY^DE)tTTb@IbYlV&z`;PBC?MyF%rpAvTMi^(rPb?XrZL6WeGEe&$nTB5&P|C#Axg3g-(LfJ)T{5htEfDz z8^df;wvHu`BN-~AN>YwWtELQakDj=@G6Lo&3X%hxwpQKARtcP*v3G_7GTWRKK>6PS z8`P%?51JQKx9Y6g;+}P0T$BFSb{YJ>wtlh|GLL1PZtJeAz`{vFG3Ef?_4ENlpW@Z9 zm&d&fs%`Ck_wS9oryPFM|KCZz{{KB3FY<3qO8o@JH9@PAMH1 zTC!at3IYR6`}vPbF0LxTOPR>kQnUk$x$M9bR%yT;R9(e;2ZtrT-THB?Ja*IBwA^>( z+{(}7;9Is2JX@5o zWsI;9D2*X&@};bZ_Tog!K=Zf!S-owR{`mSEFxZmX6>vnP)nXk=BowHM+yrk*(y=7q zDFMSD8~)$H=P&#>1`XuPi)54)^+8JR9t)2!xYzn={7@ER8Foz2d9T!e6?}OTaG#8+LE{Q zs3Mss(t#oiMv_2e?!%kM?X~mPH?q54HAO<54XOS6X1b~v{H_la@QkTJ&C2i0bq;_1$`bdvW3Xa}n%`R&{L~+X^od8}$ zf`Pp+xNVhHsXdn^dNg0P!WTO(kGw8C17T#2^CPbE|ZF}q|*cEfWrm`b>#W(YU8SzM}ncrvhsHgM)sm3+f=k?fQbDttSc6&NU?E$lN;TZl-rl% zpyOPze}LbnhNFCkKEB(p_Y75P3S>wu@g}6Cq>)J_mDQ6qC>FNQ2uuR;MPEkWbnB-V z^d)rWuXCe^q4(6}e8%xNKIlO>iU^frc%z;;AZtp81^Wp}qKg|_2-5A;m zvD}7Bx(p>uxpAjyt)N?mgvGWvIIgA(OwC{Ge^}-l@9tyTiTELLl;?VO&l|cH9om3A zr(9cz@dj6XryESaErm$G6r}IG##Y2MYCFDGomG^UktP5wkpp=OB6-LsZ`+D;nx8h! z>G0o+k)YPV_+k<*8jf_~2b zopP(`O6lVXNtE>k>4neJObsS-2w_sIhI7)-!jBNil4lyvIY)LBP)_n9K%=fEmwO~%mSSZD# zK_mYITKlR;BjKjoL0EJHSRD8%KMXEWq)Bo`z?`2d(NtC_pqD(V#)@oX?{!uuA>%GZ z=2N86NC1lHTyH`}y@n*28=ih8Qes8x+`n`q^fu=}5FwVagf7)rjJv*pK?evJx2Z)A zGM-B+aS$~}fRO$~Y)|s*8MFbBhH=vW*1fllTm9AV-?7Cm(eTl&Ol&0jV02nzV0bOp z4lx{|>W#W`*RX3ZRi&C3Y<%&bFUPwZSgW+_tkFngB@t@#=4`M?lRs7Cfb>k-m5nZNDh7p;(+~sc8v!b`$EDYuxUk zn$fF63sC`FmG4xL*g$d&KteJqz3WRe2VQ^oufdx>mz=jJ`|j-V3SsUkKXuTzu^IIF z<6AgcJ1Mz9s5ox?H9!#@&?3Tt++f8Y&2N$-<>!eQJyK=!bE2=B)8bZAHuu2HLyUk5 zo$5W93gvxJLjWXTNqYdNhW4N{K&Eojg__l|$;Z8(bO9Rn3cABafq3B7oB6tw4b>&3lOKK0XW586fPhjmoaOiZ zqu^CRo$15tZPN9LSOc+sinprl?91z+9g}?vO&W3NYRk2c&?3u@88M48)CmpYrsGew zmD(*V;j>K_?nRVBh8$ycza8YMCtn30m&l~0!`14fAWqxkKK|Y zkn&rRIp!@nB&3>U2%CV5EnjxsRFSx&?RYPiOpsGPWtFoIuPQqJWYSW%@@u8_KXlo_ zal6IQnn97&%5K#i`_J~<&&QUMOTsWKG)k;#0cu)t+@vgHt}!?F7eK5(1nd@Jbr1sS zNk3HNcf%DTiF<#DeH8$UX2u~}kMH*N-?+cN5p4&t1g(^0ycnz4+$rLHnqBcVsGAx% zSIosz<XxCaFaC!M(4|%X zxK9QKwg-$uQf#C1WtuO5qv(rCImpVlrCdF($k`PWFojhJ)_LD$f3Hcqv1lBkIPXuf*ni7BpOw@Ef~ zy`{$`UF(513a#~(pKBX<;H(9tP^cfwwTo*Fxr1ASe#-5i@9Toi{#IWd1TB_t3gXw8 zlF74&ixLH^fFXkCQ6vW+oMaH%Rv<`+dz|*d6Kle53Kqdk$O^=a96cFyN21{O>TvhM zGoC$?c*6gH+5CfKDN%IgHGEo9Da&JZ)6NVQ1rLm*f%Leq=wH z=H!Id8cj?Wr1F6HD9@AlcZPIud6B>?Lri0onXpU9vzf;LOX{(<6TT`7{srbrU};=1 zYug?|Ev$8V@2eHQlFk_^g}#69Qonu0|Io$z_Eo$4*nGZUmc0^HsTG5XrMP5D=r&rk$crvb&G(_-c2rzJ+;0SA1($L z9Wo&b6OFs`wz*-wZL&$Q^1P5-^k>orXF!k@5Y+Vu&nCavP>3%6ZR$vQ+We!SeqzZ6 zbD;idYe`~mGAE$x$koaoKd1Eb_&IA~MtXXIQ(VAqUG9Dp1%*M##w8IZL;3FY(~{K1 z(QxjvORCt)3XQI-iM}z}&Q8PJrKBGAc}D|D%NeDNGO% zo-5FWoD@;fA`%Cnwjt#Z7Xau-&;|caXK3RDf?LnRL^2VhitmB`hAkg|T-HS)QpMl~l@J6J`P*Dy6ktk;2GEpJ}|98W@ z+%7EEseJEwKbIC_d&yXXxHo)F_K;THM=Nt@B_kscN-Hf%M-T*V@rnfwU`&VQ2SQ%# zD(70x6Y;$hi0&lXuJ3@18{aka?^GYnbp}8X-@WzQ=UzB-JlpcVHH%fJc;IT1@Tio; z+(HuxZNJQVg5s z&<>_MeUz0f>G5K~BcTF#lAWcujCuasOwf!u+*4o-HL$K3PFMGMnVjXO7LrURvOtf` z0~ObHK~JP(m31$v&eN~Bf609&$cTt*ruhu>Bm{t=$({Ox%Q`Hfc4=sq`I`4QFn6Rz zKQ`V?N5%<2HgeNp7wvqw`XVlVr3-H)@y`h+v5b~}G;8`ytdyhvLT8T5RCTNU>;j^! z9u0I^R>e_70@_1Qnjp?K!~ z_v9@Kn`Uf%G}xuTP1;6$uea%+Nkr3}5-+|7@2s&xJ`XjDKEH20WibLJ&7AY>>l3id z1SwG9O|oUXD)e9@1&Xlx2YZZrKy@LXlQYqqp0-oXXWXYXY40d{b!!WDy!sGtcYw%v z`+(X$ag?B;lJ*%ByeS8Jw5E8H?27dhoGcJ87Fiorm4<|0nFFL2*_`56EM5@B+9tF$ z&gpn*CurCPR?aXOx}!IP{ZiLgs9H2sjQ{*PV9FYZ!jWr55WoMdWA%0uL`0ef@`=_1 z@Fz_Gb6U`gCXp>5@cg6ePLcLlzRR9gEv?rSPk`(uZU)x@z9h&n0hAR^Fwf#W1N@X) zHe(8v-=txKE%XIqY*0n-m1Gw^Gdl3>+0%qa3Gu@**?R2|+c)ZWub`56@}v}B@&yGz zoOH!EmW=Z$5{Tf~ca7Y(Vr;SX&3T9s-KjyE9A+932O?^|vWvSFXc-w}Y2VGNa}L<6aj zra*dIu8<6H`hkQnKLmQ9kdeBSHE<5*R}lF`%JNozJEAB0bPSWATuDneOO{U z@!Yt*iqS?f&xpKp;o_b-!ShA(QZSqDx^SJtJ99mgX$nAZC9B8~kP9rQhdTM792j!d z9XlQ731bA48-nvEfqk}aRb$jM*54oZk-a8?Otqa7wC+!S06=S?HZ)MeG@wG6 z$upa_dwL%-;vwRiz~O+j;^}b!fKSSJw8TXslz8T zH2vT*?sH9feSE1e+F*QjAfg$tp1-wwo2gfPe|I3>=|P{83;oxr2|aBhbzWZKB$z(> z5)HyHPwd>BpQO%~v7StJSud`)(4lQ6KJM!@G%4Ku+Zxgj$}*OmxmvKt!})8;JyWV> zsR2=>TLi!d+#X1 znv;Tf0+!x?}LIIGo?trZ>HtsPQwf-7a`5(f+Jn6q!9Z{CYc5*9?xPmq|y$s9+~jrcvSuekA{qp%blEV%@5@_lo^5e5~7c zW4D{9(NU|ZjgJ_bZfKG@V|e&dA_30$Htk zj_)qDIe(9X*(d^9q|_1PUNrI+(R{9FC*CR7sogVy&e5vgBgMYW&Z*KPUsmW#K6Z4TUvT6uovHJJv<= zB2)%3??p=PblHeKUM^~F+qRXTh5+HVDFHVLjRMw$v96G-gB;hPv==h37ChabEt{Mb?NwCrRRHp~ zP`Sa#N@AIvNLiJ)@%~Mu(?S-8?^aie)%Z2&eto<1q#x--&_)r7!rz2OyCk-6y2|lc zyQPk(W9(A(ufgG#U?2bAxA*3Y3RjA81$C%YD1tpAk|>Qo()bQ$y;Y3D&xVH|l*u6d zsfh2;0KgY(NNpt;R^GMth`AwTD)vs5RNp1B%ZU>`WR4|r1|l!Z><-cSB9g>5WE5pV z4VH^2!-`E3{WX)YGiAT=W}X=KKP&*yRAyM>@*{5t@cB|i#4Qf}b|g~Ge5PfV)xUKU zX&V0cIl;}|6V z`KOXp)-Vj31kMfq@f=>jzMIN}PN@6tifrssj;=feqR|-DF-8OGS?+zStE&YZueedS z723t>{7z_Bi)uX@zB~vNY1564WU76W5=6%4tffdGrb0A{9%hlyos7_(XBZsN;(zXh z&V8xR=?u{&ZiG&@9yzB6Yig*?7E{R>I66j#&FtH|v|2p2NIbGoN=YJ+90Hjl-y@|j zvb~6~rlLh@kNCft53aSD0XVD_aX<9=Vu)f1!%!5xrHTR%I?agM*4A5KKOVlV{hU@D zql(v*pA-26&=6X>y1Ghq$3kG!%j2t9_zy07$HkOvGwmH^T>%#*2B+umKoD@W8YyIM z{G}qUEmu@*Nf7T0ES?cOmS5IMxHjMmg+O;l$4`*-&2&VZD!_#nq%QdPdN7ZXKaM?6 z9+YMepiHIwiN;5$KM*RK#rUF=YA6SGz4SwF`j|AMO3z{U66F_XMi;%wOyg zPpPe~m9ZK!hc^LnvtQ0BqXQg!ZHB+!K>=GEDiAkbM$%Dk+<@OY+Wot3kIm0jWS9q} zrrE>w&2Zr?ap_|KM;=jHyjsu?22^@CJSUizyGXU;UBZ%wBAb1?fKmWa{$5t^Eb zyfAN6=8(>7Asic0nI_PsjIo-v>Aw2?GH60|zv=u2-MA(LA2G&N`*232zChj7lFnZ9 z=btAbvPdpyilVH{517tCLCAEx!#y4MFE9$Rgn`3+Ix4D@z;`tDN~8suZ6Ke^hZnR{ z`b?1C9}&pd5Tqaals?`s5^(V>oT%ZmtT1U;wC)sV7;J){Z=zp_yJX_;=lSDNZ6Uuf zvGh<^QpjzstXwZ;p_CVw+`c#=>G(QkMrm`I3xGvT3ZB0dNYf;`q^xWifAQww?|+}y zecpfQkTM@%7Jc|SQoD%)0>#2IVp{r`Cr9yQTtN zFjB&e*3r=i7Z+ZJ{uz(p;DG|ngRPF;>W5fAzrexr1^=FZDj{LK`~opP<;Mx8edBxe zF#OYcqiqWiH)O*yZny^z>#lM)78&dM$`eijO_ zPL7Wa4B}6qSt}8pU5x;KrTEVgu7wLi@ujY=u0WnsKtt-Fys*@*w5uxZ+HHpo>NHmv zoB5}FeY;6_g~X^FC1FKLxC2R+Y%BW`2+<0{u{JlV{D6M240UNGnYHQ^cBBcm&_+d# zWY&Ach<1~9x4H>Cs3oad?kTHl3J=87g<+iThOL*E#nw-g7xruKxJI~0DnJ)GHkOfG zC4Oikz+P<3pweI@Pn9v)LISvx>#v;}H&}PQYWIg1fXn~=6Ey50mj-Ib9`2a%F4rT& z$l+~v&GbM)fhAu>5%YN4+U3j7I^5vz*tBUAnQY?1!1gNDHVAjBE(m$zMhg1#ru?@~(-@Sy`OWH|%->l_n}h_W0!$M| zgD2wjBJ<9JO(K8c$SLuk*~60$F~SYPZGbN*10|<-A+SIaY&Zyb4^762;d*?0;G8mM z6@4714QSW60jSSyRstO74>kIj!ie0cC-Tm_WXh@PeJ*Q7W4%OSpwLJ-r73M!(4W(RJKD>F{D1%Cr?sE0yY2b&<)*O?&B*{*hVI1ANJ7D-OP5xj zOuaCFkieiIv^p1#c?G>yp1LfQ>4c1k@1JVRv!$WEXnL(3PfKK#iP1oe5f!dj>V-PB zXHg0+iF@2smMD6c-bEi?ydR6n(8PY}sf2+_FsjGbfZy=Tl5v2XvY}DaJ2ciSRi38Y zSb(br4H_`RFDvzdcHw3)XAbsg?Zmf_D=u-J!H!*&DfNc1T{(HBr)T(A?Bo9VkGHEX z%^G^Z@9{Cer+4#HcuKbq`#a3!bjjrT!*Odvs*I;wzt|!=?rgN;zmJB$%3o+{sSZT8 z4XT~=|1?&kVOZ}=JL=<;OaZ|eHZ$#~V)X1qQPFmBcq5`nL%}I*zHs3}SkP90oRqGT zz5vG8<3F_a>Gf-mmu2SUECb_`>9b>H3r=zD4e6RC?{g{`KgmVsyA`0Xu}Ls*vMGXq zQXT417$_`ZwcOPY!;0ZjbhKLUWnR$0K4WkNNwLDuFdU-h{Vw=ItO5A;5z=;MTU%;O_Ncv)MRZ;jg zep|Dp8DEUze3>`>tEPS_wlpnS2)(7UB^h z<9y4NE6?p16nws_rsg*Bu@yH3WL6rr5yvk+UWGPb8yQ)%>gPCrV12Fg?|(D;IM2f3 zAVd7`QE5~?H&aua@mk8ZU*JvjBUaU$n|}N3C@&lGUFExXvE|>`p^y#;1m8jL2xn}Z z?-@Mnh=V}0{)|mY#z|cJM);kv7?J-jLCEJk7W(wKAQNuUVD!CnbuWn|I<7Nw%*^ud zEKqTDm*`n-#3ut&KQwYs2xYb?LN8mk15Y1u#1O2VqGNU-{rcay%6G}#4E7uNJ|=n|vZj~`k&&G@ETC5HWMySVHdyU@G;8%p zG0SF%p>u5zCF#?C7)#20TwFQ%{?D8~UA#C%+-bP1W^>e3RH{1)_dveO^)2`ZeEs%~ zF7m-1`6^9gH9Wk6v_rzfr;^|qVbj>jjue?PGdr7ybmj3oBJ6hc)prlySx!l39d(hc z-KuqKu^K>boeY_D>sDiG;GqYio@9cg^g4V;6sDKzb zoxYov&Ce4jQ;_iWkX*WSad6x3Uy=~bnP-w_k~Z>NeAW}U+zYHN5lza6b@IUSc=?FM zaTR@{tnK#j6tcgZc;a&VKU{#PADjz9D`pyGs^P6J&RkG*Y}-V#S7^y~$F(!hY=S#p z54`utD+9d`X5`yE>!s9i{-CU(J?o6WY&(~`{<2#_Z8sJ+m0rGlS?)3}(^;5v4lTE< zONj`A4gAP@#PofK5ugmyZj%=on0o%6`uEfAZ}k21#fH#e(l0JqcpWDLGFP#cA;ce| zq$dkMzu2668jiv~_A`rO*7p)BEj)of_(Dq80<}-(?bc?jxJwTYRzT!p=Hp-zSDRv@ z;gigv+HkG=58s|&!?Y9LFju9Y18gyAb^m|bp~$|#!!*YF2+UHVX4*LVs`kjq&K5FS zJ(Zj`89K|fkKtiqNAKO>*H2d)f#n4(hlVW23_f-?ZDYP#3LY;sPzr^p=y&TT2Mh5= zGV>vwy`z5qdB>hT&2j2D`@T#%NjzY#T^oZ?pQW8$8&27yN00DFKj9s+=k-yF$|qVQ z4*rCr4L^?%+K=9eYZa;5d7t<1-J;JZCuhXxSsajE9G_n*$;RIo{ec zt>#um8%Y7u$kwayG;x_!-{3(TzflRNg0#OzrAMASY3S9cZe)CXRl?%6Zy(3B?_1^E ztI~a2$hjS-L5-$=SzDD*v~}@y_l&pA3^Jp?LElQRrdLGWy$JGr%=*HHza2h|ovk-` z*vcIzPfl>}Aus`DhS0v^=KmV{f znX6NS$8}Sze;4uXuxOH}jWYi6<6U{KXKOz3_W2uhwoZ14Uap@J>8~b?2t^_znz0wD z;KGne-^Cus*}y=2AgwIcjIj4G%p0THty}cy*nrwT zFP#EHM`fEFn%zBR!F4lTg&8&gfP-4S*A^Gp!Wf|fCV+Y1e}oXMwVNIdWxZdMnwt2P ziCxH;F=ADRI6wZ%sgR0BoAjH`*@c~{VOaDzVE!OM9iS>fh0`vxg09dGZ=FMTmdiAS zDuJFS&~b*Y(U2b9mD}nsGBHWQy352+UL+*zwCB;0kZmQQdX8?_@$$RZDy1#*B9V|KPDX=iBZ&O}7a*ZFvkxiv5J$&)9>bF#|Olq+!eQp5YnTILD;yt{Rb=J7VsveRs{`qanv zjm#74v|g^sOPsBnGhqA_QVc_&vrV@RZQ{O$zxblv&+n~I+6$9j3#%}@QRS863nY~2 zH*elpu3FWMrp&K>-_n<|r+eC+G|b9=#CMIMLytUp1#^*xol#;Un|?4!p($z zaSBA>@bujGx6ib)cg@>$%lCGlS0kS~HCjDt#4i~)e4}ox4jtFj!^!zgeoRG_O{jNj z=*XwvwX;XQ&Q1Txz_4!J(%g$jzuR56X!mx&);6jK*J|uOW*50-iC10P?FI|&&5NBz zdcWH9#f4kXo13Ag!`+|ee)U^t6~}(|xl7n?VJ&xHM4#ObKuY4u$sH;g>$+gUk%;&q zTnelm2vYcr2<{va5ivGwYX8GGd9HkOMZ~1vhJI^fqw3W7MD!flbiRB>SU@!4;`A{G;eFq^&xKe z%9{q*acd)~V%oFQONMsFr_UsAOcI*Z3*z?pv5@h%gGH|6u`v-1aWd;9KMkWyg7^z-WNo7_z7E^Ryg&b%(hc+M4Tk96$4NG9pi+OT??`Ecy| zRTXFL9Ty@+<yvU?4~tP4z7HNF}kg(T^TR zY&x)D?Urc<(Z=)U1!O&p8@)$u?!L0h^6eKwDFSfa+hsgJQKWQ2;&^1_uFIE)lP`tN zMQwc(KN&uqaHGVU4}Uri0Eo`?@?Ysg#j3AaGf#~z(JlwFpKSUtYUzV1Yo8At^;rW$ zJSl7;Y<`DHprZl zh$l&Z`}U%B{jZs};d4^z&>l`C)TX5DQu{07S8Qmrm4a-uGCt-PjgKzz_-Scn6hFDe zynPK!E-&jl{A|BALFt>G4S8zOYW=edlUfc}3_dUoRr zeSBzO>qD}jVuyPO!ad2RnZ|D86sH2igD>`+Jg(JdzRRXfc_Y?ZV-beGjnei9wmBKu zBZl~gJ$Z^a36DanWpnM;tvYw;piafXW^KCtqucoO1vYp_5ItLld70z}oNe&K#HsLE zzwnUo;y*7MWDbT=SOjT%+Kd_cST=>3$M3y$%b;Z9RZ|Ua!TAo#?WcC`xZ_xP`KR!3 zmN$-U-|sy&(hx-f#LqkYbrpCQXigAiIMmBvbK|Av!9RDvqCx%)#IUh|`t{Hu4~Cr# zr2Ehc)36q7$@VOy%yIkN8`iA2hl9@yKFojp?s8NYZB$0`LGJZl?R-BQvb$H!OI0Z60Eu z9Zj(8_6ghfK4o*hR_1i)b5z(6P=HkrHT;WXYx4dUXJz)_S?6hKIPSsA?1sNC#r2VG zS^RE*uPT3@6hEWb(ck)~$iPb%HZ7T1*k!ospiy5tHyW{Ybh!PZ*{v=_Ma{~%7rVzr zb$G#`-S=+YQ>7j_n;23X-Nj^0?EaX9$Pf8*TRn*A;9zT=Kp#JK$beFPdK-Sd7!6_} zV*FEN{O_k4~XwfUBy(zRQ+nO_X;M^3k2{`y?NzxJHerfizT;(rbfWP$5@ z)}c1Sm857gYY|R`W#jEPsLf6W@C5}03RXG?)~;T+4gfXsSHtPi6d^R@fpa#n4M)tB zaVgSP=rx7jm`oc+x3)u0mYG@P_AorR8I4ao)l)C7&yaUf@Gn^rY~0V02xRf_97W}JHf@RM-a zqlt6d>KWFOjubeCP|W$lfQU|2KtBx)4U@7%;o-yZiSP2YVksSyOkcogBC|s|*+^RG z<8Vi@R9RhpBs+w)1A7N%ga7wu>9OiIbe`;a%y_j@b@tNr3zjck>aVqTB_u=*4c!}4 z%IC5S%#bnkl0!xsv70H^w2vwi_VLZ{_OE(B?d)I}R!rj_wm7x-)T?vuojY~X4|q7z zwN?A}hdVXe5bfJtP3^Ii(^|Gr3TqAf2Oxbu9aNNy(j_hw}wrD)-G=vH~N>b{g@GTf!B;pPc8Ctb~E_#xC0cc=8p;eD%4 zzg*R~!ov4nG|dzCrw7c3syI&Fu0HML?1)hvJ9HT7yO4ZcJsQ+Fy#}s=P!;gq}eUOP=K99V{Otp0Az zog1M6=kV;ZN{9nu5(}aYz9jbD6DHg+KXTAY!oW#BcK5MPtpqZ|YX>}8U8x}i-uFdY8WV>~c&CS}d_9#-;i~2Xn(&vwnAZs6ArDcFB)#-hcS;`}Pa8 zfv^o8Rt;8<-H6o6;DQsFfQB~W38laGp}K|4dZ~k5bybxf!HgX2@U_LX&LC|t(B;I5 zZ6ozxi=e$e)ZJhqM=O@CUE7L0MA4B*K`DhUj=?*2?C3DVRu_t;ltlZs)a0jLnaN;?Bw8|~X zwGg)R8Eefht)#OxdJ;aU!(QV_A+2_({2C_qwLwACo>*wNN!XhkbGz{C?ZSmnXmFOd zZep5J?nl`zzS$&9=FLqjzXaW0yn{0&Ln){zjLsO<4IW(k`EwG~1H6Py3Kwi$88jFt zubFx|&~))HHu`)WoWGGgo`{BFj3BXDcR%=-fe1$)4`|tY$BsKcCje^c3N#^Dy(BjGH(}@=pudkumG5)z|+vx`>}; z(flgPEd-llX64hSO`FIM=R-i&Z>wM+A=M6_fT>_XNl9~_aqXv1!!ONnBbTVrgP<+9 zmsA4K+lQwm_lh*#SkHr&J2U1Uvt(HgW8N&#dD*)XjgdW!7JRKcPo{j&v;iDfQLu7a zB>Gh8(>z1X26brRx2C_pT|kvnSY#TEx=`bU);gZCbe@#ehlWKK4 zaby}tJyKSAXyx$%@4p11h>Y}NT{ZQEf zfDmxd;-}_`cYC;g|N4IRS2k5-yd@7K++u1$zk0NEVi z+CbEV`O$mi$PVyO3%#N;{fSRIJw1#0EJ|(L3eN?kaX7Z^va1KB!sL`$_}^f9m%~rH ztYlVkn`xsm92Xc`LiJ+Y926ez2{6dJR_@ZpD=~4Ra0FSL*u~onOY2`coYo%#Qg1_` zyBT1hY!br>{AYqJ-PSV}G zhHExBJNty;DQ)2yzSAq{J!o|wQj%)CE$?xf9>V%hq9@YQ+kxWY@gKB?B?xD zL@zDcAh%G+1`E|75cuMPbV45m#eC( z;sGd*PyA!FE2HB4c&$y$SB&Ti&4{~OKn!qpc9too6oZgN*f>ZmU#~q6tV5PTFe#Kl zZ_2*TbgVM*Dv3!R_c3pWY~(S$E~zOT?_Z;woGaXp$5&U`SLBT`P1w>^qB>(e3XkDT zyJcgNF-m^e4x!ovrOJF0&kdn3$%KVMMTo@0#TF?dmPX;Gxp+_j)*lsU+QP&Khy3e= zR!gWsqu~vum$~-E()D&>vgc(WGg#LOehehGL?+FmZ_bo!{qqGjo%NL0Lm%osWO$a#axB4NdXNzMa|Le zA#_!;c)+_+KYWM3sRd93fq&*iDCerjTFpyI0*Zx8Ekf$rlhfmQ&OAtVJqr%B3vjeIapc+l#2NC zdQdMgFdMLI;kR$!T-|zj1ofjUBH_+W)Pm7~-L^~@2!E2DC3-K}xuh#G!fqIaovdC7 zA&oNJ65dw*&i?CwgBvoZ#SSJRil_k7B_wKh@foaGMnE#5vk-yId~(hZp(~+}6~Gmq z0hRFIibP8G&-9 zh0m)$X;NWPk$>4-*S@@K+Gn9E(xwYr0lPx3Hq41;1utJ;Si1T`6(3S?0ksz18mX_?KeBi1Jef_M>^L&Pk9hJe>bLrQb_+q30!lm!3k#B&6~U#u z$_ILY^$o!GWJE5exdX53$U7rBbB{bwZwyQ8TN*{lVb4xCVjvBL8k-feP)Kg{clDd| zLKor=I&U^(#%dIu$th!Zt_Z5f)E&b(`?LwvW)w zdC*H4oyi;S;r`YB0L1S9`;*z|!%odL927af?8k{6*0fo(c0zyR=&VOQXDN)57(N~& zp{Ie4Dn?(J&=;|pAU9uZ#W)f)myqMsNjzuHoH>RbO3tfJ9Fx_%j2S@-SOQiosgdb6 ztuE#C!xk3-wn}4V0j@We#cML(#Ker2%8Ify@$RL+NNj~~-wxYl%JpGFe5Uwct_kPP zEU3B?6r`k(d^qqlCnT`rq8DFg8)SY2FsB_~)5Hv#|6Xb|{=+2Y#>b8wOH56j+9G&2n`isy36RB$yPWg8~^YW;Z;EQ`T6<`2OoKnko|;8Sj+Ma@|>*+{e;3o zRN!tA=;M|zUncQ+NpN^L?DnyjAgY_U|LLq>p!K0Aw3`6Cx36!0@AB6wVtWS^0ve3} z_F*1ltHNKW_PEK`+QHMOxv5j!9zoYQ`*0f;Qk4ipwPyhZ2lXRiGyg{5@;7$K(Oknw zV=KITVGq)2kQS6$wfcREeXBNYR;HdXh^I1{Vqmay_uZnr-j_b6jmc!LS0__c!cb)f-uHvcu(`6 zKj<=?NLhb;06h%JR#t6?C6X0#0(l+(`D4^Rf8bvn>b+#cj&V-qNi={$V1*JOdGy`$ zJH+4DzrX6|Ujd)7H}hgBn~5xYHYFMkoOiB3bQfT%yR4WR%b=R*MRpy%@ntLGsXZZ0 zX}gEukz7U=mv(lrEN3DVHnV?ke~rFM4S~OUH8EXAhd|ke*zUhOK%t6jZvDCm6|J!Q zQGMnG&!DM|J->1LsP4EzdLT!%2Qt2+^9U>$G>L`i%*C96UymL0l1rJITFe`l z$IsBy%FgZp5^0uF(v5Q&d3%4?MwHBEK6%z4m9ju6N|`ZE<*F>=dCNL190BzoG0o`I zVUnqMt5F3p#_ui+FT<$XVISZ*V3 z&B&iYwh+NES(;@sA^cz2axwD>d;vdJ=vlkLEM&I?&)-3S^$up8j6#^ORZ>zHBP6l= z-`qysPtOm>YWxt`{ZR(1K6E?=f0vqB*5!om0xOOwaXkk>__NyDZ!f*-?e7=Jj9qd9 zd3ZfLLkya&SbP_59{iZRfT^~7$ZCXkspOf2_(K=~l9Z=>`(V#u-Z87Bf1k@W@#S*~ za~6nPg@jJ*8aZ-gVp>{DzL{iA`EhHKLrDjtw|*Ucpyz}GH@<&vNl6aNn0U3*|bj;;tbDx>XF>~}}VM}NXvRFTSOYM5dOl7gp<2De!MZ`qR zTp2plYc`5t$i#^rL?ZvXx7;<^picN!vjkAyiZ?Dhvb3m~y$(K8u`-Tt6TH*wb9X&u zsX8ptI-xVYDHS0+;15CSWzZ8T;G~8tDoQW&3n$zSIeX%kHO+A7({s=wApp`)$U-S+ zY>RKt=tyg5;wL|=%B)Cep4K%Pcea{$pcMZX{(!`JwzI#V#fOqBtkp^Gz3X z$1hoD^cTjl%w!lB6qc8Ji|Q6%!`5X#h>Cvy!=ke@^r=Rhna|QA97@vT%oE1OW_@{-gi*7oz+J>M_Q|GqWhRo#*U0pnOfm*>C&U(DCfK)k|<} zM!iH#A?mXZ@ZemV>9HXdHQyc2yIC$_)X_!Oui%|4ck8wfq*+>)V`H5)sQN151gZgF z%1Si?irXk+YF^);3BzaWx9Wuwh|SH-0X7q1WQfX%Y+wsit6!*Z3IYy}UwUXkGnao2 zPXJ2S3Sn_NfGuWf6B8KaHChG#vjY2_w7j3?8m)tNkyekFXA)K zc^<^@k)O4TmAvL;iS7JfC8WQ+ci+(; z@K#JzsFShIrK|vEJiFq=FKqCWD~XspMOJo-WQ%3f*@zXwD`89$1#4=8y3`X^4NQXM?fozM~DTxOLn z0x=EsYdb$AYdaGK#Y8gv;?4`RM^JY+VZ)>N;4W%aGoP&eYz$J^^%JCIJ7ppS z?g4=QEk#FYCr7jeQI`H&Cy{!fF$-{3lves{*IqY$|9V zhTkl~?eufrzpgN8S3`vrdoj_bcEr>qimcp<)SLz5&ks;@AB(%HCV*4}4_ImaO>b=d zcA#fVk4tEj#0^{}vN@R=Fr>Fbg(#?~&>)kR#{SXfAw4P6e|<)Fo|zebnrr5NK@mxHa(hN3m2p!!38hXc1@7;M)a)vdL&;uuMEZI2BG-eKKKt@+T zF^XxYP-0dT`cxa-8h|s2D&DT!O7hrR-!(RG-{mh}l6=uHGD?Fgy*W=Z2@FLi^yLAR z-Fi!qmMi;9_L{$^iR>d**?@scG<%&$M!VqAHfOui`Rk(0QO+Cg)f%_X7af)c9t?qp z!3=da*rRqKA;EmTlT#-IS$Uf9;If=1OtDy9J6LHu)S5w{=SqyE?3{8Do@so1mQ!@= zdpc%xxtEaXz6lycW>BG3cQpG=T}eARioJb*#*$4ywnYUb30byX_1S1jXiP?p7W8Tr zg%Xj@rm6-2Q^d-)Ghn2N&Wam)HJNnri{in>dDRulE90}Gg2(AxQA-IO-_tog;aq&V z1^bD;p*v{h?gmX)f(dc5-OBQ`w-&P>H+#AVNJt6qymJM`#eLjPeJR+{)rwO4Eh-4(6_C+OQijV$L_w@#b z!|Soysp*CjxeGkIZWF6tXZ`Pwf9nsHcAKjfAN7jb$T0 zvW{B#aB9!Vph~NJ9>0o+(tzJ2|0|(8-OACH7JG;2I*ULvv8<9J{B>;Kzn#L;<=~9< z%ejPsL}nGBPb81Fgx8?5^q?kW0wu}gyi6-E@h!BqniNp3W$`jWpnh_I<`eC0WW$p9_QpwS-tuv5mKg9IholW zXo!{wShxuBkVTi5HepsETNsk)K@W9;_vxe}cu-Z7yG~RFDXH!Er5!tdyioLKVP0}y z0yV-eIWiJdc)-L~TbPassbTrU1?4|goO3f=f>)e;RyM(GqgoHw)}D$Q52L%cwN*

nGUZ>T&m5V2ad>U@T3@Wv0%-AeOI_k_m>)MObrhiJdOI++J2n5ne=%v}q?45U|L zEvXqug6@|$SG^7%%vtOP0=0>z64l#vmV`$s(qssDGHcS^>WF1qm@NZsPXPl3WXLWW z0f|46bm01z{R=;rueR*wNKa<&{>||^>QtMa|2h?V;`83g{1%o!vxldgJ|Zp0p}6b6zmD z`p+Mu0eF}RmW6V_4mOR7z#(b2Jj2rbodzM@!2TN(RJ3U7EGc1QHG(J0+CTrT2yDoI zg@)WX|4EO+`YSaQYihJfBc6m6%c8HbvFw^YO38{mMXE-Rv@>06GalMRjvvKu+?!7u z(MSA{F}n{FF~&clhs4BIBtfc=-9D1JRmwePSI}`EF45@Ru3bYYRD8HT?AYzQ5Els( zSfSl$U;gwZQHJAE%Ae#!WWk0r0^f#U(&l2=myGH!IfrYuIomK#dxWYXO9mp3A&X?} zZ6wKkhtc6=JrpE(Nz~e#vH(c0A<*pHW1m^a+kWlZW}oayX5j|3(fr(^OI05|~w4*#mWQ^*((9W|jqCym*VOYY(C;Fh0>>`qr>z$pi#`EO732QFs9i+HDfrR6%60qHmG5mAMJ|PClUQmqB__ zt1$(f-^KJDNJmH0i5qX75E^Rh>lYHLwGMSTB?OSS~wAw3hzo ztOtVP^Ri>7P7PzeUCSOj&LZRJ#u(e+jmQqz>a5B$rZ$)Y5mfdPs5T;FW=+k~ zNJ#a*pVF;sS3UM}Ss4RK*tGAy1=$QR&5~7hg}N5O&34JYv;qD5FGYm+QdE>I0)PN> zc^{U#KFEGC_8pdLwDuyon7s)X+L^ z@k^rZI5yH&D-@6z?>-qDadv2KF>=(_;3UJCe+@|v%50g2{{=3@o#h1Slqcce(d|d`i{MS@2~gASLKb? ztCR>Nnx7lAZ#%fiaWFFsuH z^}d5s_cLowz1g-!H(SMSQhs#dM4PJ%C@YpC^bGoc>)y$+GU^dwIetXRkryp{NqK1+ z=hRw=DHOggE3U;_cFVn-u=T(?{vpw&;0=+1&eS{s*Pio3TQx2B#(>SID_$xh@;~Me zdG$;-swuKCqKf}`|LwjWj3oB(f755L)HC?zF*mpaJ$4Z|`$(H{;P3)M!7}JTs%PnM z1{yhDJoT1}A|$0c>MN;q>o!>7b>mz4I`kK3p=G#_#?OL^PKGIA`CFzQ>@gJ3IW}@g zubnV=JF*>Tr~M3qRv{zDtalEf8>gmq(D$Mk7Wk0jrX82PSaUF1cm-MbncY7#jEZI!&!X(HnT19BJc zn3}IQ#0D_Ff^F#q6uxH5I2|1mU1Y`Hy{8att`Jca)wJ1ux{EPN)c<3gs~GBekwCpb zfs_=8{rbJO-)zh8o~TgfZg*OB?++D7kL2+LWyLL|LQ+VN2KxHjq1bdne6W+^7EpG+ z-T2S7TUtK6djGcw4O-QA5hMyF+FX0EFQ@m%N89@o)u(!oR8}`UO-3EOK^n&v;8`7HPHuNbbd`} ztZDeeYE`?1)gAobuer_YnPZ4Tos!VN*!bw}5ud~29ELuH|IM^#FZBd^?Y)s)7(#3O z=*o(jaXNxKAQ5P`)!fu{2tj!l)i~_!`GZ|S!3&>1@5?*A1r$CRfsB|QNVCs zOk3U22G@Y_qXK^qo$oP0!gN>Y3JGU0d`rK&wKb zE~9d*;|Zmpgh@}InhO}&)a)MME_1NpO~9jBVHs^YG;*^jdGVs3!V5UWad8cB%YrX| zb#-;qsvf4S4^|%I^i9{{anE&6BBm>p5tUl#`}V?ukj4s?_U!{kxsiXC(*M4DA68=+ zTXXmI>T!W3g4J-Ll;wpo@=5}GK%u}oKJS1-){QAX--pdLW7jl=kCnp7pUk!~`>Y{y zn7Jqnbo4`9?7vvw`1W~Yw@35%sKPjdP&%6uR@GrKb$(Jx%4E7`7BWWe&x2*T|1c_8&M<@xgtHW3E%SaasC}&8K@FbljOc=cDcD zL%C}gaD+sUt8>w@7;Buq;!EDzSIaFn zsy@_4U#q;9=M~Ut%aPareTuPe^EiLmW8Z(u??ON;@ym6I-j- z3Jy7!Z+yY*%fjd^p^`Ut-(a_vxk;xF~tYQiq1>xQFRsUV5*>} zp#tCEpXN8e4A}WHL$(gQmv<3iNf*_+PS|=~ak^UXK-h}~(=ARzl5mYI0Y+=+QA;w& zJlCvoV=t&ak-oFn?Or_g^APJ;FKKETOdPs=$WCQ|zxH6k{*-RXFFu?@lxGh`MAtag z{~N;^7&Q9rOwvW@k8%bOHwhk)^>d4o*fgX=PFFdag+-Qbh@XExow*5qf2^<*YDm3 z&-sb1`8nrTe7*pEq6Hk%YZ>PgK&+dyOd!&-s>{EByE*aM!Wo5!!Tg*T8@D(mg=S~{ zF79rQ&99bTnZSkt;GQL@3k&a-URJi7YF}4c(>HTJCle@}n%=?HajWARiEk zP0O!dT*r^@-M6m+HTfj!)2?gBd~1@MSrHvP&enB)&P?BLClaC;&(1c>iEVl2+Os0a z9Xel6q0pfMC;45(y(czipS9b5D877PeK)6d-P$}K6^FNp%S;;5J>a=r9mbG1itroJ zd_CgBiqp}TFMQ4zlR(kjLSdu5GAJaZJ^WFdF>TzQZ`=8xe9?5D@{K?Hxi5*dIZ{uP zSy8RBQmcWAQD<0YZF!*ZVzPs(MZ!>F39qBv{0o=vGP>G|M8K$#Z4Ae|d{{kFTf5Jg zF^kuwrFVAATzrL5HaSnsplmV-7AmYEgHJM5KcDJ&w4S&^5Y=iE{j{f;>3}vc9MXI= zg4Sn!u5EPJwcqoNmMqyv8w_`BDIEeU$O~M@Q6eKArYk)xEZ>?JAvelW!Mfk*8*jnrVG(BKgIJq2(z7~O z{Bb!1znK5~4?HqM6e5^%$V8Vh zLblanw;Z$BPVOkpT`-J>L`7*Vy%-hkpBclT*)oO~x$~1IpAdBEsgTi0upvSc6BO!X zVB1(IW0bc~vZm&|yYQjPeI#QZA#aFOk5D19vyBxK@m_$L*Z;=C+zqra3Omz{Z}zjt z$)eKOp&1MF-Rr&q$|N%AZ8f5<4s8R<=G!#G{HO2BPge{M+}h+qb-CC4DK4|!O)Si6 zQeoRm*byybiW!9>;nT}*c^lG(ZhCV$Rftle|DcfFI%=e)RYfW9bR+Y%OJ>fW|NE1T z>=YkUbc0>^r=^0?-=SjRc5Rx@p#w$jI8BO zleoOaOG0PXz1+4{s>I|9+vII|E2FDXwJD0qwM%ADwCvIfW`e@BA#yfdvb$HS%u&Ya zr~Y4eXCBUVzW)DD8%7b;v}wb%*JxL1MOw9zRHC#Y+E6KJQK?C#%_$=Z6{1BbYuZa2 z5s|1UOEhgNlJDa-XX#wO>-YWd_s`FDuIn^&I{3WbujRg<_j7shzTOoAjJc~laUWWj z{{^QpX}Z}etA@BQcDNXlT6ww6!{i&+uNUz5P;I?CR3wyGt1uFiq1{poq?JC(&i0}{ z0A5Ua{ygdN1U=<^2>eGbYQ-iFlEmH0(l5u+x)JF{s)wu+ z-OQJ}`2Mb8`sd(jWd|O}d`C=a5;Fr&(V;T;m}+jm=-eX68PJ2%Y(8e0Pn_5otV$J` z9De-fuXetK$ArLQ0d13g?O3dN6bi|0_&{wG>2i4zq%_4SBA8~nWJD));Y7B72$|Z( z-d>K!=n{$|5R1HddqxyjS-LSVoQ63JOH4x{^jKjEuuKOn9quB}iVtgRvGu2+$fwhn zF12Q+RvsDqsq0av!W@5xh@81+OYRJu>;7!T%mY|V6rkka8W0dLca7;Mt1pp}H`cFR ztJw6+vb~~?bYfv~jfL#^R4lUY$HeYj!`>fikJ>76!-7n_kWVe9ht8*iLuIyf`UguWw-rFXc)!F z2+f^x#(3Q(TIRi|MHsJra%B zP`!yAohr+-0&+*WgE}-)(7J0a{6VV@7cul61%-fqU3vm)j$ag2_s@mn|SN#DO0{`1AL137vV)fZ>Zgo~}X!h^6$?c=#Q z=jH@X{1F8v>jAvJC@!shFs14nIP2*{k1b+M=EOM#_`Uz`m$7*1YF%}A@ezze2_hMy ziSItS%(t_X#mdD0cwAiE;|nk$Zo!Ft|H!DRHq=$XMnjbZc)^NITDo(}mRMf#UNIL^ zTzm;5BCDj>c$bQ9vzGBa0IIl<0xw@~W2oZ27mptYtJnvEgYr5R5>8gK=-ADvobrI0 zTaOuk{P02Mnklc(hJ*hfKYv~mE1{Y3wv!MHaQ6LDa5LZRaqUCk5rqPD+xHancGh}{ zlZ{pTPHSQlw2NPTjPS15aF{U@!<8LyJQUvE-fOX$l3)GvY!z!QfzaQ-@9R47r}aE; zFLymH;{0>!f89*~dolOT82GH>`R<``#D%TFt_0UpQbEsd|Rvid`>SFeUEg7(&5 z5oDAN|3@M*y;Dik?!Bqj`++?l9=AGqfNZtA?;(4Rgndp6Nr)*sojT}%Q6SZ1G}F~_}sPWtOwBflR5tP6*@ ztf!S_?;MYh5KBB(K6YEXN55veUTun6z1=O%mQZ zHVE`?RFySkggM>xNJRmx!=^Ms+oiqHy<0h;>2GP3v&LuD)iKa5z$`BhQ%wl0JHC&C z{Gq0+e3!pG!%YBv1#Sx?FRt&6J08x617^>eBkvFC(aSqs14JwN>`GZb-@q3H5kig}lF|c6KSa?&T)F^VWa9DLHv0jH`=b zb1cLQQcxzb)CC0k+;58QS4t;s&npBnG>O^Gp3ogM=m{r$9X|+q80nSzZpnUcaa7qt zpYHm2n+79j{Y_fded6aN#eV+uF(QH`j^0Z+F@f+7C3r;~>1EdE7GW{Po%OC1e+lm0 zzrSv-q@U#f@E>#30k|9U^{N5A1afZ5H6^pZ^Td%auph<36{jmig=z};u{RL62~pVlqZ_?wy=Sd=j*p8OK?I^=X;!je zk$`LEuLB*{ITl~IPp2(hZo=j+50NMa;f~X`IcnL>abmiscvP~qclzfkq02m?HrBW? zh-v$_>IctElL=MliHC3d>y6L5pLDj#FTbQivBn#x~t>f$WMv)-Qp^$7TDPdO~mX+z*Dkqu{aKOEgEVc?oysV z?9tv^16~aBoLuxGAbiM;V1+Io`rhMIKnaQKSxz7F>%0N8*?obL7+; zMFhq;$0RDmmS~RhW*^ot6kqT9n}jhT7!b6g=J20lWe!aLTmHo8F<93}REeHJK|xqw zHxtBxiu@%n-B3l`GH&pU$Jp2$7sfI8!#46=eibMQIrjp-o&CoN@{QgDZFZ}GG z{sO!=RFDW+<$Bif>4h;0$(uPXQZ#fXtt=wvYJ$$UQb3{_mKO9OXZAUp&5BMG-I*u3 zEE{7<k*`+z$_(-Adb&9 zE566S_bKgmx}ZBTd4|sAweP7<8*ekzChsjhue8mWC0SOUk7{OzYvfp+O>;?-mixik zHfsvO;xrV-&{(MYi_blioK=~QwGFOFk6z1(D}W@*7h`nfj4jWTkMI(3`f%z4Km94Z z%D~4iZ3RZ?B=ap5ZBJ;DM^~&|smW`6$t;L~p4o`4q!W7q*MV9p^Z8k}v;bPK0kfc) z^?-}s2}Oi4jA#i(X{Zngx@_*`P%~9Vi+$I9C{&Mq%D9lHyXM{V$+3>s7oo1=Ep(lM zo9&|_2o_ebSpEQh7t_QW$5TuHP^wCr{s9gp4|c|T#$$glXJ9jSf&w}QLJRk|hWv)~ zS8ekh&U`LEJqblj{KgJ!{m!hUebtAVHyIzBXJOG5brH=tfJ4lBYm4eGR@IB0FCJ@e zDzuA63V7hh2PH<;HnpnGaz0g?3Z0}Ir>m?gV-!tv0g@cMO~5U3+9$@3_$@twI`mRa z-1!>M;(SM&DKx%+;OB27%{T9N*Wtr0xBh;X$0o;!;64IxoCpoQb3C;yHT&fAM+XK) z$2(40QWj#Dyx7a}$pM!vmw;!}lE-L!a!a?Q6=tP4X9vVa#mx5oalb*$+DR(+%Lm2= zI^|CF+MG+T1CqKE+P^BzmuPmj>gj1~k47-zTT|aDZ;Gs(K?S zSFUHvbesO>>2zyC+_C__^6$A!$K+++fT?^DwCmN9amw*XJ#-@e9O*HS?{(Yz$a$0= zUQCI0G0%o!`#V~u>&S<6Q3@CJqpV$U|L8!0^^m4DW}TfU^Z0%GM7=xS^YEgSu(@3S z->Nx#gCAe;)DT!uh&e*N!pvnQx63ZtFf|KQ~FC$s3y@F!^@um^DyTbWv)xtV<6 z+;^ zjSJFFj9I{VS6(6>g1Znn?ZoN)qTi{=qIeyvO?K5oFrQwo51LdPFSPs|Q|nkK|6wED zHzdVZTjmhR9si}bby9-WWppp|6pyMJFI>)H-Aq<4{6g+xNW}m88er3=-@P858qiFe z3!uq_FfVl8*>q>M&>+X4^5~i7bXjSOlj1U>!X0ipE?TmL(;=-W`f5y;x7xHXFhjIULBs}WT(HEA+7q^@uz}=g_W*~(v^8)Z(hfBj^nOKK)U<7bA1=B zvzzl=qjoID0j-361Mg9TgI17QiZSukA4BQxpZbgTb;$|`JLv+qdf*dB7-lFaPFXja zcyL09ymdSv9<6=6$cP|RO%ha2ao|WOY57%Kecg(lxjeB}Oc?`OBh-~QLMJI&4oO64 zMFZiV6sw;V8}*|RN*>2Avt3XEodcLtde13hE7L1%l#>)H6_%$t&9 zW|e!aq9ThsJ}#;v?nz?!#z*@JTpOn-{$$d-eRO7AQF zb*W$6_uf|RPjp}g&=HE%7Kxk2$ofo*F9BZLnLtSe%&?lXZs6B`JKg3mEEb6nt6$6m zDA{jD{$vHmB!&=nESyLAIceu{U-9q@B!3D_P@;^l<>e*Lap|m60|&r()~wc&ym{YG zKRnTu-kU{lL)Rh-p510fc~Alu!0i%3v1EQo<7?rY42gCaL?em=L(~Cs1b{@wSd@)& z?q9qt-`I+7VH1FvXap#rNiFp7a0b*;)w13i$McFgIw99pz{^&}5dI5FSf@Ab&2 zN`zM|S_}q;d3iTH7NzH{X_j{7Bg8R``Z`EZ(RrS%t;LShV+D9X5+Qt6i!Emqu+_JK zC3eDs4J>;s9Q3ojd{4(pP6tpB<^?H0#jO|ON&By_xI4p9oQP0Pd>|MGyx^yfnK9$Q z`S39Vjw5fy3%aFf_c&?`OMoOqEkNH=G$Pk$viXb|&BZ~s3C#}Ve!k1nv&xqBY&aLk zjUS)Fp|%HVA9IZb0NGzjMA=CtHScWGX&#wrNju}ZcnV4B7mge_OV6`2OMI*5Xk}Y5 z01^s&0UUTr_Ezj{AsH>Owe@bcuu+|yL{^5|=N@7n%7Ez_0xb@buJF@0LvRnu_+#nu zr*KVJ5Jx7bo{Okx6O&cdcWTbE@!T3hITr4Ua9jAKYV_gaGsLl`KVjdmiXTMgh*M`B zSLMVB=_7(Nww~52d-x__9F0$(?zVwQg6zwyPfZ>@(_Q=&oG(zUNOvWRRj4xp*vC&W z9%={5D*0IQAw<=L6Kr;PYEz68{?-~xhL@OJC&q2iF&csdh$?g%j%AcMji6Ee*JjfE zyafuwuRLVQF?x?fttQV!QeD%svzNXN(^Q+q3{-?SqPY^cK}mtql~kA;*2HA$W<{>1 zjS~W$q*z$YTh~Zp&KMbsls+hvW#2@|C0qe3=yfTlUq~K&9?h@#?bE6*IQz3fOPaeOO~_wAI2AZ|K6dZ==(>ElJ~ZPok4 zh>&D|k5ppJKuaXi4dk$Z*)$52z7wqIXVUWYk;u1DND^8}grRZ9NV)dKk(^pbEZ>pf z-OM)EDV;9%^c*wjAw-q}K@cc-I`2{*g}?wa&&=8^2rBw-lkh1Xq#4BZih@QZQPSJb zHn~GDQWpr%5h8*|d3Sqm|15Y^7B~gG`q9ZbUP)CR5c6@Je||;iS@K&;0;lfYVfC%8 z^E=%4^>W&XZd}$d&4J`=h>8>z$1XL0&ZeKoTOnCedv6$_Fwg=boDQaKJ}a&UPN}5xLW0-m*l{mxzIKv3hCW*sg)6kX_gTdGafNE5 zd)f=*L3HakBU>tL9v&M`$NNJ8PA-}ha9~dmD9*}^5bAmf!}a)gh@J<#~ST?_3;shTQ^_ z+C8?zx?pSX#Tg74Xr=GIH~}QYs6iW262gq@!Q&6Wx4XVEn%Lci8vtVAH{BGqD-xPN zNh<_!5#>I!z+LoflDEdIzZq%27yq1BFe_F)dIK46siWf<)E<<8qQc`Sfaz5q6Q7%r z2(^4n3{}LVfOiBcZ?a*-Fu6Bw-Zc5PT@90u>)b?KLJQuOmIh;GFXN^6fP~tFV9CoA z?IXITtFT3~Gj&f40tb^^_m}y#KlFvhf-T8QDG?;LaN@+&4)^__^Yx2k8t|Qr2#LDk zxbvdp(v;H+k=$;pfjZC=U&3d)Cg$UmW_1D8@Jg$m`M$p8n^{M-}00X9lZ6y_EYFDw~nYW*#8y zx#5?}BICu@CaVZHbYa0s5GE&hXLgMO=88OI32CEWM1e5>ZI8-Xv`TVtqV^V&t(YNk zFM+KT+LZAEH9B;7;Ahob)8`DZT}KqIzZ7D@Y}|qs1RQV2tu|1 zf^G)N;?MuN4fKOLP#rE8bDWlJgl@ut-0pX~o2shnU$DYoa3!?@8WH~C3%Zf*=+V!I zKM4iWw#|!k;dbqc?*2U^08s~(fBbxMb0FT4!m8yu+6QBe1@lGT7DRcu{r>aiqvWoA zFD#7b#Vvk~D@O8WoCw5@%2pkq5tvHwjOA?71#FZ53i21BHuf2cCu|UF4-zMFJ|L zP8DB&TBObTBd0=R8W??Ls-a|q-RgmlLVO3)ljDY;tGAqbvv4pUP$i}i;1_6zH8=E zg+z3Ui9O5RGWoo)VjJhE0Xu9xsDv8529F|H5TxnyLU2h|hbWjRN| z&bG6QC4cbYu#Zh@JN|4Eb}6alVsmq%K@-=1S%A@{Tm+P^^}sJAe1Ku0!Q%Tz8(COn z%?oX;Sz?VWT!PHFlU{&8QPpmais~<&2y8JMggXtY`bV1eSo!V4B02OZ?R>XRg0`-Z z+A%fd35;ZO>{)^AOKcj(#{Z*F^9sV%?bbD8+G1cPI%I8stqwpLo}mM;F`OecxE;~f8A)| z!rw4PSo1jlcxX=$Nx5Gcwrpiy3uLMb&s*X;M0K+eoA?*JA^KS6hp{PCDFBa?nYAjJib_tP%jp z7|ezP<8A5Zam)rKPfO&50H@bDVphD7Jvvm#ZqqEI2B0=lJL;F zwy(o~HlU_mpxzEk^XQnEm)s>HMwa@4I^duBak-~B_WDw85pVU$Ezj$;16K;>m&gP@ z+z!IkRcM){v=#1igV}9x)>Rv2le)q9&8M(r0ZqGxW|O^XFOCGjf>E^!O&=c)9WkC3 z$0iWj?;_@=$g8JdxLxjK#-Tc*;F{icq)1_dRvl|$f*)l46}p8a7#rqUu&g`P(#B=Q3due_M>GU-(La>;{0m^> zziTFW{1O#oPT>jAq}_$}26OvaYQ)XTyI0$s~_ zYjsVZW5O81&PF{fOvwV6BP}OKRUu(WFuW3`sH>@oQk`pacY=~2fIH@xZ=FbgijcdW z0)UdVpW{}y&8zJ2XDf^ri*oFpJ29fQnq^*P)wX>e%30WL_SIEf2dRPP&!3GNDQR?^ zR-;E`Sy)>Bg1D4h_E&kGP=`_a-5hb(xCe(i&g&~b6;EpiMFqBfPfEA~h!D6TNRutu z(|wm^_X*0VJ6$#JPkpFRXpJ9lJlf1cCW$PB4Is;M8cSp2<)tE`T_S`6_^ti) zj<^Yn0SSViR{$>3or45NEd>V@GNS5e=1X}&i`n;*fBgLq!ATkor1r; zfzY#L_M%Y09-*bbtGiGdd&Ev}SBwkpil5zwCBJjpFL`+E25%N?s-lPaQfab+#Qy>R z(0;Cmln;{0&A!s^-P^RoW{7oa{Df8AZn32SJt;W00N8M87VV(*m7tzw#kj4(~zG1MyV^dld5n z`tl;>vCBg?8xO7RG8_nl9juB(mRr4^yf}%mBXyeGmuK0T;w!0u%<1J79ngLkoYlxm-EM}c10Xz{y{3={#g0*|9^rFH#4qgwQz@#PTbS$g1*?z*PH{J>>*q`}mcWS=K_8PZ zpOF?KOUGuItVHozV-Q$pw!y=rjR47Ud}}{L*;7LhC?*E`NN}R$M&7DT*9Nj65FTq; zafO@-bo1g*z*8vNfm0uLfG=LXYOrR_ml0`}`@K%b(<)2&G^IW3fyQF2W9>iqek`xc z2~kl|2_p|y?nPB_6IUcYdJ|YCx{+$1W0*$Dy5ob<8lw;&!q+#Wqd--d0|S$?$9^;1eW-c2 zb75*z9c^4;X4qB*F)n_5yTpth!VwE_w7tEgKY^b8qCnPyZeg&b@QHZ{7E)p~a<*^2 zCnNnLh3}{0ZW$r?EAvK~N>L48&C6>q76G`>qS*e9i)(Yp#U^um>a<L_``<4e5xzk?Eugndy{klpM>?o!@jZn=>c8FC#FiH~AMIYf znsBWP)=tjkJwM~A0Xm+eOiYxx&oVoR2O`#fE zufGl~7;9Y~Dd#PXlBo9pL&YHG-n~goNJYsl%OAs*t#XL)_IRItTn~jRlka25<} zi5D*7=ah~87q*~~M{RPj*5i*|yQa>X)org~w{4f@gqo%dtM#g(dQ#lw%S6_imrIoj z5*n8H#CnT{aYiy#7UoqK^T=wS^&>Gj*!ag0oQ&YC=%!3EJmlnwA(Gzs`c_{WfP%!!km5xKjBMcajY- zKV?gdbC_hD7>bQ1<5}#}K!8JXrkGZ@4o!><3$xePU%?)ofw?X~-1!Z-y2G_X7xOYtEH7-r%G?4To zk{ZOanY{^F+}9|4x=rTYyQ+*BKGZ%HgHl4c5ePg#SZj-gVcI4!Sp}mJZ))_jQU-JO z6*ZrYC)KJ>=y~TuzeT^Npu@Ym;@Gi)R0V5RC2siE5A9{4BHUSdGTpo!r68gRDQ7gD9286z+fZJDiNl{Lo@C! zP8w-%XzDpyjMXD2GzI&xwFvmRCRf>Rxt=hLsp`Lk?Q!NuZ056Hj%v2THh7|4!#>>$ zOYt+NdRcc-Gj#PS^dp*CyQ+@LsdD&m*tTC8#uo)3G~!Be)Hn2nt}eE?8XBFHBg{Se zJu-6l(Kun{72#N5uA0K_NAsDGH*WG3Z}&+1OVN%6(dDaQF)?Wnw{nokCfAzTjaJ#r zn!^7>>H&`3wp&Bnn}(k`lQGzuML4A3MB7Q`v?O~9?>+446>^Z=#hg9nF=c7%=O`p!%WpYXH3$>zk)kq7JpoKcyQxgkk(A*9Y_kn2#~o6FL+w~sGfBf!UbGc#0N~u z80j^WtE;Pq!Wc38S}6da=2`}$EvQviKvwU#xrcK!NrD~&@Ps6Qnt1U8FLR`Bxu zN#7?}Z!k9)$uAL>*Y_z2bF8WlOL|CA^uT7sPXLU|_W3ifVHr6FbMaw1v_Iv_}$f>65Ex zcl2bZA%7(w|Ks<~t1{mhXRHA@h;E!5t(Fk2c0Ke*#sI@0npq_%DAWgH$KKBM&>ly~ zb;Q{O^;KbrCBeHa*xS|Z01rAepO*ZX(EAtT=-jxuJFFx0* zQQ%fBF&?4D-yg81vgQdw&})BP&gc;9ZWY~bZ(qAkp+p|HntRaX`N0p(!t~uGj|v5lR%tJDnhJKw6R!(3p+}_#CZEYX_ z{-{??#k+U1=YLq4ixWn02zvw-K=`&kA#W%V?3JIeDP=j(9!tH*Ug!G1grz(LobrW! z0HE;OY{2xcM?ap&r;j&yb;#G3o88Rm%*T%(C7UQeFFG`I{KjM+)@;SB&kRJ?&QRYv zxir{d>co2YVn$EOG}s4H4lkoUE0)XZVDfc@8RYDY8DSaWmL8X!w=)jsuB2`!-Bto0 zG(q>r{WYUnXD*BD_3OpoYG|14Q{2EEhqP#?p>ZYt+s`f95=rj2t&d}P?_&3ua z%?W{HP5rMjS}|z%%lOZ0I9uiF0t*0Rm*7IgGtcHfOHbb)7(NKZPP8@LLsXxEvS!{3 zf&RjU=^aW;RI4u5Sh;mObl3IcniVVdjrE(+erII4inH8{00{;f%}acyhaMamz+1OZ zNd$w4e#0MEU7B)qo~32?ceAmCE`W!ZLKhR<}NR&@?nuMH$nw?-0M#+w*W>u$< zlP8t90HBPHH8R>dJ9~_(48v}xM8P2$lA&W-R$6_mMb6=?Pid(>jJv@DWqt26TAc1I zw=Tx6c)aC5txI zMhAwKhh@y{*+TX5pBXb76fBLZ`A5c09`W5FU*#X;DSN5!PQI^y(D_YUZX$x=!u)r;5>E!V9Q9OTgGB`< zOP_H1IF3la<7l3qGI{LdxS>8zv$MPDXSBEa>WtAk*Tn|keIU&1oFz_7nl{=zq;NUQ zo#VQ%V_RIi)&R!mA2+j7@7^tZ=u_(ZmE}N#CcdLmzf%)XOXeo#!;ezGG(q_d*q(hW zx8UYu(jBhUPVN@%Z;|`(AI{1X%+udA+O$Dublh6$pBW=ZA83+(qm)`uJxd^7juT*b ztlza*a5;_K5)%@>9{CT5gDvzOsxWPWT|mWWA6jm2Z%FTO^RI=u(|m%LhBK6Fz3c34(T zaM^~i`GM>=uwU>6!-%L=V}sQz!gL2rcrl+x620lX{iRt)M=X7GTs`ZESCfZeH#{G= z%fIV+yLJEEytv!kZjHLY$IWe|&ZS)R?V_6Ygz8>ap%r^Wj+^HGXddR?bHMQBTDu*q z6QXKjGxi$IiQ9eVR9x+o?e^=B@B9?&bFqAHX63rvADtZoCVKSGj2Ww%Ts)!5Z+y*M z2_&39zn)w;%ioribYHW}_vCmFzdctUqc~Zma>#33K8(+KW33KXz6x^;Z87R#j+veH znVeH+9ovLjpE%i1QTS;7n$wkI5AN~L>7Zq2ua&!fer`;JInc zpgGa*k7rukn&p@~+w|6E$K3Ro@-?|`p%09za_zOclzV-OJ+xZW z8uZq6TpgN!snm4J(CUq2jNP}=0m3doinCfnsgGR?$PS0KK?B9NeOXch(w?ZAQ59BCJ9V4CRP5B(n%`oI#*nL+Zz!{B| zS*Nztt?jpO4@vI$S&X_h>wUOWhP9=uWekVotKyUCK^*%@2F3tvXjBUA!jv738oC@+ ze{I&_T(iur3rbvQvA#{7&PSFGB{4Cvo%-A2z_QW3r!5J7xPOrK^MT&>VO3G(+m3O4 zN^20%KC}76qm%pDRqeJ@y%e_5$9LoM_4UQiY{cbGd1+zgr!S2j^ArSY|n)x*%}IM(L5dOWu*9-F1%lpE(VChPc)lUjijb6ks^ayy2XujZhL zW~Ej8Ij_QdVW8EEBP`NbjkNm$H*X5GCyuUx&lY{0&ds=4-l@oil!qB~5Vb0*Zf zyQWW!TeClz@9#JA4-4{}7~~(Twjrkd@Hp-Xnt#QQHD|IaU)S@`TXsAuYrvveL)}bs z_J&m~53%h;F9p-7-dAgbv_YqPetzg%RUE!&mZ^SMKpHRS-}1)0AmhOhV_NcJV*RwV z{5n{9{gi>g`*2~0d>H45U9!ixpw;#LcZ{aVIK3oT%UrQ+^-izbYdIkY_i3XxE-vr) zpJkmtwIYB2ah$R&w*UK=Pl{AB|I3%sHRuBW%U7EwI4S-wUkm&Ezy1YwTTWTB0$X)l znaw)7{A76a_qrZVm7f+mtlHzJD#u6rbGLg#QMxc)?z5MxP{ec$;a#297I9)*xCNs=wu*U-d-gpi#i*^*=@TecWWNQ`X= z$u9eH9^Z4FKYrKmT<2Wp?Yg37J~N;9d7tNg?)!c|5e9l1XDKdFAP|VN*ECfP5r|Xe z@Ov0J5&WH$%q0UqNNu$>R1wD~e=_Ux;t&W9#5L8cH@s7q@IIzSCgWtQabbV#Y-l(O zPu(>tyn=VUjtq%ZV`hQDV#hPjz2 zW4qJBLX(l_$ggRdevCz)ojD|+#$C{OyQ^rp)l2Of2t+37E;$16orC=pBKX1#Hv(Z0>VF!6aC{MiKwLTd zKfL*Migvlu&SdC7o<7ZWBLu?w9jlzH^<={B(I8a7p2yw0x!5K6%-B2w0ctkXe7}*! zXpkzoZU!2kiy%b=_gNnw9adFUi7ArwDE;?0Ly((WUe@Ct`FOW0UeL(laOBhdxHuo@ zk&h%MaUFKeTgnKgz!x!u)DAm&uVofx0b$`T=ZX^Z3TjS|$uFn&S$%wb$g`%WZL{A@ zpz9wm4vj2rRaREoI2;>DB%!CEzMk1d_C`|^ zBO^j>lk9}Q6iSp?kSHWGE6e7M`KhmnA3^^apmwyAYa+tv=i_tN z-d_IC$mRQ_K73J8Q4kfPkS|?b4;K1!)6&vpUB)dcU9+xmtZr{xRk`Q(IsDl#TwY$T zr?f2_kxX_Pul2DC+|6yZy-I$oXsBW$P(f1iWgEfA*H_GwSIcLAy9o zsmr$X#d)4sO$tiNv!tPBMdOuj+{zA%Lq(o70j-hexMJsjl-{u~yH#XNKo=9*VrmYq z1=E(hOrTBZY1Z8iYB2u(TO;>qmHoDtd9|u*YH|$)6T5B}3|5A2N_` zCMD|K@i!?PN7&Y%5taCNH-uzTSlQY2<0oGTiHPuMxx2d~Pfl*K`-_yIkPz4JmX;Qd zu+FZoh?l*+y%F^MFRe0F(9Hq@=QYI3Wg#brw2$`iO-uU#^6`FwFNTXFhZ0Ov|SmLXQQ`kdt%#TA2B3Z)f*{ z5{t!dY;4dfFDxvaJ9iGJbnJikE-$*U-hH++_41?CZ^-8~FJivL4mu7l{$-)o;6T3U zIy^W)D({SO4ULRcIrMQQ>lj;D)cS2ZV=ixQZAGebt^0I9Qju_aEd9K+?xe;=`%kxR zDO}N+5+X~?$-_VqabG^I$6CT0#df{PS|Zh=`%wi6?dON1pC8TjT$FWw^X3hCc+=*l zM{1t+7$8dY52w$XJinKh`Szqg3=J8Fy-?-i)EXNb3*1}CTWL5B?0<7j*rd4d{d=xo z9E@1}*qHM~J$^gs?($ew=;-r(5BPKk>7V_%+Ch5@{Aqe71_ss@qh)1fClJ)=h+rxQ z1PgD)p63pWjEsCnS1@R1X4X0DKG5I)OgZEV5{aB#UOsB3QL3z|5jXp!nQJ(O`B+v4 zX`OGB*IpK|jrR(D^2AAIbW(^c zEOkss!V(~qB1P7P`s~?m98Sr9=R==Et?%F8ar)?d!+i9?s*1n&A_ou8%w!{^v5bPk zsAKu`<@VY2xpcqc%1YCcVJ{C4|C7zvZuGnoH6I%z-77e4lH!(8;?@27Qf0;MEQ8ve zX{=BJ#T>WteE50GO4q3;aD)!hD|OrHcxQb*J+>Co;Om{a<1F(HY>#&Q(Yu7eB9#JzPJSfK`Q9z;N?p?6d7i3ak!*nbZO=#Wbo$b^Li;x>ebTj6xj@v&r6Gs zHqE3MBTQvJHRbyDcF=SLf3amVgP{En_JY-D89u##Q|I-o6@wXUvCWjjA4%a!JE zSbE=OSbOf3$gL+9ER&=NggP;*{)u)3S=;dc(r^Ax&FO!7b9qQK4;kW?iOF!0c?D8g zQBjdJv@r`=W-5Zmc=)&|8QlHc!bh5J|W~ z<9RXYcqyeD%D_p+T!b-A&uf3{AvC74k>~1nTwF>lPeLc3M$P$sWF!LFzxWrzKpL8r zm)8b~>?FhWM^Hy)qXVYlv$0+`BZpK`6V5W}`k zZ|tJjV%i92!j-+eyx3yqP;HH-r+4Li7d+$x*wu5cmkbjo7ytZeq4%vDx0Adj!kE+d zOe)&_sfYY+9=fcFuOXT|*#ir5)Nc$0<2q(Gc10K|F+|Gb{6y)*v;y(rGxJx;`y8Z8 zP5&HRn$A_o4{rW>jRccs+s@EnoYhdAzXN_`J=9qO-w>|31Hr|pt zv1@kCn~jalTbYM$isu~pX`+x|+#Gfpi3PZ0(x>v*ag|7&G-5_WsF!#iK70sm*0(NQ zl5EW@;d!?`R+S5ORBHNd*1gK27=yu7RLCZFJ>H>%f5HpXHIWU0)MQzA!mn_+TH2^m zr>^A_Lzrb!bot^Mtv{HG+`fH#MmMq5_Men)-#W{jK2s6K&_-+N3vR5iQ3(}y=Pg}* zadB~Wc6JvR7x)F%x;ioBNTQB!z|q`?DYm27kiqBO?G2@mjn`+6SZk{n^8d5uGg5 zZ3OE48?Td+=GV*(^QAdB5bSkN$dI9ptD7f_Wyfe0Em+$5_@za)$C<=W<>gaGWJwUL zh6W|eiG#z#HLGc>prD`&Q8K5+oh?HA4}$E=s!B_*XBh}EM7}*)eBsJ{V`GIkggVyd zrlvw<`%axYRa#oQ@vEEr=r64Gb;x+`9icCkVcVv;hWB-Jp2s<|va&)<%!)qe=BnlN zy&H5)&;kMio$%6yDD@o99^FTBED@?)aUD;dJb|pUwzf6^WVX)K;oDeSV}3O(O^SN9 z`{U=&pS``SizN**va)eGAL{B@O(xg88ygz|mH6Vill~!gae_eQ8s?Xjh^HQ&%3&NA zjf#xS_Wx8-aXya+eLjpP;KId=+FDu+6ye4Nt%Fb!w6AxtNCpO;#IDfLQ1(xOZ`_U? z6%-T}fB*iyxaczG290a%L5H0rR2^)_)YR0_kS?8^k}_0M(Vr_S2m*x#1vQ>a zW{?$6>I zYHFgQqC3~&q^c~SWZ0OQnd$#sbaayFEs3v==xJ7!!utC9&z}Lh&vEk5MP%pX@arT= zJQxz$WrgJ7##9#%m?!Ta})4<6hUI;X5Dz%U&%Rocde1=blENkK)$vha#% z^~$6>WX{Q&QLeL$iJAHU-Jmu_5J{e$ojpw;(9_WYErBgDQ+*}BG)9sm%U*6Ks;6>b zQe-@^unF{tkB_e>Ly0}l#?^IIQerLGxJ{S7SaN9#vJ<=RI{@eF-r@dqsp#mcrxT-=XKwD%;rD0GSLr+Q@*2<>{r# zN8?TtONd3ZPTwlChn`7!{GeXIpND%TThq zdGqG=>(`Bq-$Dx7x)~Z8YH0yg{J4Qtyj>o2d^9#@kx1uaw_aLNQStHP$IQ&hHuj*x zqN2MJOf*Udu0Sfav^pUQlNeqEDhY11v$Io6Tf3{P>#=;ADp#_si>0x#vAQ~G2Ce~@ zJfVW-su6~ZU|IN5+;VYQ>4@XE@}44zP z#4ewlueX`|d@rYM79%$NBek2Zq_RV2ydd>pdkj|?93ZB+oO_&ZY(v`<-Zb6!cX2q5 zz1m};KU3EFM(K#t@&3fIjLUdxe0+%GSIOX_K=f)_Psd_uyd_l%-+5l=`Wfh@+1X2WXIXBGjsO`^o*y)^%Jr8P6ub|7L9DyiLHa2MBX0V^TEa|L@{`%p zTt-m6bt4g9oFD^5qPSI{%i^ly4B>?p$88gn?KY*Of8^wL;Ltk1eM5OIkA+j7ANO4p z#dHyU74!1i)?o9QxoWP{|#H74_{n;5Wf44I}%baUIQ7=zh zQh^`lJtGUYu7sXGyL7Bn!?Ws8-IDosy@UGsX3cy740FMdQDr~ zZ=+i_N}ceMS38x)Vq@~tX#+?{d5`&CV8H;1bKjE7oJKy@SFo@#gl5Emej0p#Qy;a~ z@(8Es1(FmZ8u_n$5j>c&rVr=4$yj`5SwuB3(I^mDGw*=1ArjYMTB+D>b;g;0J_b?PWIo6 z(l6V2)i^c!M^Jc@$w2#sczM-0kgMLcRgdP<U+Ui^j22!g!MZ*i4V#Us65DJ0}kZQ{(gx?RlkGu zxVg3je?eQe8upnzvIx!|8ee#L_|C+^fq!=Nh7HdiSHm~B%&@+0MqX|{t?;tmP(`1h zyu2?s8)P(WB4T3c=zwaoBDRCOl^&nnIS!>B3>V)m8<_|?uG4R%ZR+k&=fQ#PW?nrq0+!t!Ts&g908utgqTUN^Z^Kep8JioI>Ahz(ZvhrUGSLv>- zltX7I-TC?)J~FQ3#?70TeAew4v5%))&RAT{H4K0HbZ>X}93$iJzk49c?C#wgaFEVU zM3}tLnNed7Gx-#T6zgDG5;7lcsP_`a*@vL^RS2pj@%y z&BWlH(a#UbvlRWdkorFVO8Olk`adA21qB6L8j81Ya? zqs)Lk)AQ@WzJOWiy^r!ge*F0Hr8K>X@&}39WvsM2W<8-~G<3WdqDX19)Z$Sa-=wG) zE3|UKNtx+VSmtMks!IwROLt=<&bj*9_ipn9hMM`dkos=%4EXVc`|xOQ)el|vwM>gv*3ZFBST z2tnQUWf+Wxx3^qk7jN->bHG~@s{plcQ{(Hg2V1{pW*{cS-`WC)EBXp^b6cC62~o1+ zu7>w!_Dg73T2Rtl+}s_HDJUrBJ$&u$`K|*kvbDAC zNmnc|5Lhld1uhvi*?TuPH#nZ+f`aDbw|RMxl&Ir_jf8}R9f>)xG9LZG0G20ZZQnUa;WsUK5;QP!D>ka1U@~`uezGtDq<(+}bdB zrAMn6B?+eIP&r_4E#p&?ldoBxS=+>aWgcGeh$k4loUjC1u;=F|cy@VD=3vI%M_U^k zU{JEdJmdcydRt*(?dau|zR+%a%F{$BRsJfAoW2)}ld;!bz>)E4^8-hw@~7g2mmL5s zI6W3s?z4jhCVqZ?OP>1x3AD;BWI8#0uf%Te4d^Q^cvL@mLR5oKPfI&&Bx6TDVv09U z2Uf38Xt<*beXy0g)6>gK!9R1yI0bmL^EuMi6M_dE@@Tu^7!PIJtOEN+{ko+5ZpF1y z1^@C?F&ibL2&kelc+t3^sIbuDlS6Dq#>BzyMptL&4Iy9>0p(63lItJ&bdrLRT+y8E zg~p3Oa=5v;mXFU}FTQ+O?2B(W(9^Gn%JGVut4c2$ZGGkY{PsA`^NUR2DzwZEfc4z zCCDsjHz0?1zMn3hboIfj&?tTah8uX1kXlo-4;F9N+=kNb3_S(|$}b|tggflJ<6|SE zfdH{(HZ#c=gQ2aqv%h`~eg9r))qoZjrljewfi9Pxo__YC%)1-!XJ+iy2WH)Upr_uw zdv}63{&0VLe`klPlSWuzIQ3un$jr3fUdER+9PM%7hI7jjh!+~f#KeBN%IPcqjo+w$ zL+f?8_gG(FKl^xZx)lq?BZ#?~qhxUQK-Vxbdd{@drs)ljj{^dFvc+gDM{DZqpN~-0 z)zt-u(%IP=^k(JQwPUK##!8O`x+B}#?QuV|q9G@l#DoM;U7TUSWn3?TV-+9oadfZ? zM$FLAP{ZMp3wf4qiVPl?4c(+8O%z~>D^`G)_b$ibFllJWe8Ul(N&7j73Jp8jNrLHh zN{UI588~3WKYlzD-dtkw{yS*W=b{kK;;Yu~xiTJwbf5QY#8k5fY{r6r7kIe00@N=! z7}0seynbRHGEtFM>49?0!0{(met#KK$mUs7mz_-%H2kcd8k`=SromP-!};@4$vRaQ zM@tnGpb$r$KEHbP3beIQ3+Sdc;AK zm{mQ>Z_5dt!Op}~`EXRm;>U_Em)PxUXfPY=>qNxF$vSVLF3ND|{htp?rZn8h93cL{ zfN$JjsAqe)x4EF;`R9wq^mds8#-ECu{9Q?jzP2_!`DqI=SwX=CAc%YoUqFW*931ra z8UXdCi|Fs~hpw?=+&D3D9KoMn>HGIR-dQPNPui#I#40@Ax)Rv_hJrA-qP>=S28fa9UjY`7_?&!rlRb!reLz<2od(|Hn|etei3H|t;d9ipbHdYXhJ zR!PBMtg^Vc*yU~wJ`gM5~z_kFyT#z3QUnVTkmtO5Khn3r0HqhU&d75%gg9s#l+DCYvK@ zRuCZ)@0b4^w)BhYntd7;Cg=2F#eSw_g>#a)7*0npp;OT4EjZc?jEvFmAFK^JmgnX1 zvrQsvd^YS=R6?6~IY1*CnwTUeCZ1piHnz1RgE~wWL$p42LmAihWful=G=HOL~zd5))sVX@1LLU zgBa)6Oa1Zjt~PiMN9E(aq8{x*%(^*!hDJs)ESKGZ(9d=yvdg)0$jHd>@%`$SooF$M zjA8(-D1O&_vrj`2g<=ajSbO&Dnbf@=gXm+0qsfV>bfuvB+}v>WoVwj#DcpE2gn&Ro z=ZW^&ks*QF_XU8se}5rYJJHgAt#!X4$GhRFpFc?r{%8ZI6a=udw}z=8&| z745s}aO>6xqzp`K0Hs|GfDjJ1wcSg)NQz*(3Y02OKjUk%_pfisfMGBlfhiVrSU8f& zMRm-CX7tMI7boij)bH}LGs^cCd>W)LICb=_tWj;^I^bntv7xjz2&Q{~JolkbKKo}G zm#+Ar)D+sEyZgFuNv)*Uvc-YaQ0yh4uML26-Z)xLJLwA`%3#O^z6tOn4|y;YQ&B#W zw26IveZ}L8NQA@%X*e>_wO0y@i}`|TK$@aKe@;$L#yS&Ro>ynmlAngO+esIg5!JbQ za}f5`Z7&tmhK-Jnj)>qqf@GswjuAVB*e(G-1!@hPA4vQ9`XfM9v!Yjx)~f32V2c1I zIBc@BMpyguNQta%ln(i#%eME0$;ocwBRxrD?2;hm=yac`y6?8*2=0X-E@@C`b>vv zgk?!X;Gz7QkJCi`A&`r57!dH^vS~QS%BpC1&*v1AzPy5hi@{ZLfH+90`T6uo4 zD6rLmXOsTBw0K^Y?(d$G@YwVXc=YHIj2xk{LHEA6{G~!*)>ZDrYD)xj$7gN2b*D!q zXX*5Gz=hG>ABm6d|s!VoT8KCSq_>^6#UBC9jtLlY4Zfj{Z$`T-2b4m|XI-@LOrgR?S9%@G;i3ysZ_CRQ$XlRk+mgG~eg(~UE!R*gs3rV8j6SyKRc%!=KW%-Cs3O;FY_!5QN$_ z5@E8DW#C=0sY=cqrM`YaX9x@vI8MO8&!1&5eGD)xbTx=vLE^9Kz+fTE;F*iv;_|W> z1BIYQ8F5bJe~kis>)4KA&IyATeGgAhx`CF{|EOR5_3M}V_*=*?a194-RIpL|^iP_p z*4w4ox957)(XNWUmPx7wo@5vO% zwlt}Y;8tZ(dk->a43A$k=z(bp%|(07v2&i&xmccmPpd!gPol?FFD{ZG9jq%l$y4D#Wgpp zz{3M}ACr=p)}Ow37fd7hbYB!f&e`5Z+d^3LMy2cUU9=8J>3%z~Kt)Qt)+)tBWnTsj zWzj<(KCaXhN);Mst8Epic4$%~PG7BVq;x+e<9=LEp88pbZvX(cyE{rw7&f^UeTLeI zKYZqtdqm>G3>h62X>*658Mak9Rbdg^E+QG%5w_y4(2c#c-AdrV| zb)?C>ad?|DxGmr+Fp-2g&X4Z4j7#GVV7LEZh&uNo=FZcUl#A#9A0?@On5aOR$%#W^ zK&sr8NhvZG*5gWLFfJGbDOG!ge2P`zz{7(1{L$WGNhK23mc@5!#T9?{9~CVRdHilM z{WvRM;$)g_7&1zo`{@>+Oi?{QsWI`FVV5=J@tFD?`{Ad^+Nqnx1O0vh|by06@)f#{d8T literal 0 HcmV?d00001 diff --git a/audits/internal5/analysis/slither_BondCalculator-flatten.sol.IUniswapV2Pair.call-graph.png b/audits/internal5/analysis/slither_BondCalculator-flatten.sol.IUniswapV2Pair.call-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..f9b1ed3a0f1e3f11a090a29d4a0fd07e5242249d GIT binary patch literal 15998 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 literal 0 HcmV?d00001 diff --git a/audits/internal5/analysis/slither_BondCalculator-flatten.sol.IVotingEscrow.call-graph.png b/audits/internal5/analysis/slither_BondCalculator-flatten.sol.IVotingEscrow.call-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..fdaa8b9a287794ca162e314fb6b046cc4fb9f753 GIT binary patch literal 5869 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 M=$hzMXuHP!588Y=itEbP^fO5H+x08| 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

{A z?U0M&VbbasV^Ni~oIE1Z$nwMV$R4S|DV=IpheE$d$E9XcOXtZ|)((Gag3tPTFvM^9 z_Cz=mwr))4cz(zdgI=$6S4}P9%du=D&xA9NGR{1Dnf=GDg!^8kB?uiIe-l84w)~zc zkr=&@d<@F>i*&NhOdY0w&a`A!mRT|yv@Rra?~#olHcqBJ$SOxiN3}zTD9|f)fL!|F z@8@@r_;YV>ujKZ4m@n@ZpENWi%-?VoA(yGRGBqW|zdt-gXLV%Nanp&0PH=Ls7UK*@ zc74qc=_<=LaejTh$*xdGw3t~x-fnMV{~y!L$4B&L-W`y9zb~Y2-C?X^U*HJo=rFPu zzdyZ}+Db5T1$1U~0)AZoo-<0zfBXkM2QCmI2$9)_J5}o|jtu=k&=iqSIXh*&!A0C= zx+`P#Xz5~EcT0x@1HqnGPBY|~Ss3p6RGNh%hLHKC<_%J5y& z2oA8a%i%|X`8*=`!){22MbMdcDOkQtL?%9?ESp$3o8iu_ zwi|4`F*JJK53f~~l*pyn97Q|EO#2dle#JH9jeY3dR}EdSuPE|t%s{DKzi#_cB*#fI zrLmjA<-S$^B%N`uY_fjS_0%j2@AzMPo>g=tvhGSdZvcVkKMi?+3^hZ=5K6FE3#AH7D0s%23yNlx1!4_ zv}v4fm(@9_R|`JgEGhU{dR^qalzDqyN@6w6-7fIAx+lE{9S;yR#3^ORfirvSz$e>C z!>LJN`~lJ`coqDW(crDv-V7TTY+S$8f$xpPooy~3Yj}vj63NQx=VtQRO~lAB#%%XU zmVaW!MF6+=in3_<=#~Y{wSI|qYD#`%c=&fs%|EA9wUmCoo?j8n%O7;TYDDq1cjRM9Ny(G$G#8sovZwc3S1?Q))z6{!8_ApqwOc;xGa=v&+lIXLE9}7MrH2H-e$sZinSsSp+ z7pmgZKTN*8gYsE{cY3Zb+xP2f`@S>Rx|a2XZIyUS{WM}X4LyZ*y*hPr%QNmg@!Stf z%)6G2%)ZMEPK7*>Tu>aVE8;mwqgL6Lp0Ps5vK}3}L1Am`W6NLhVMb-pZ|?ej!yO^y zcBF_8vU46cF36{|=#iPpnmyDv-7hbnfv`qQcTRn9K3Z*XsonVMw|5Q$JVxTiSrpWY zMbmgnt_BYq{bTT<57pFQunTI<37P=Sh(Al*Tbj-XwfC`>&W_6! zmo1WXG}DgrOG-+f@iC>bc<%REjh~tI-JYb@lH4)xhR#0!GnwCm+^&f;jzpic80@^O zTajTC)z|b$sW!56|EbaALNS)t<_MGC6|2T88RF8wVxu^-KtWwRbdt2>C zzV{p77kpMWdcpgTD+BenOf7(`#>_z)nC0eGTMRhUY!o>?nJ$XG-Xii-Ixy8<^&(Kv+EO$Dm)e<~j6@7K6D z?xx_S`n;?yrufKHDQRX}os@Yx>fk%6QRwQL#?SZ2fA_2$SYSD-7uR32xL-nmexQv# z#T4R5{hJdI7Cy$<4Cs%1@TX*;gwW?Z@T|jexh5LMKZL)&zR*1*{4A-JdIJ_>@JwWm zd|vuE!Iqv6d?#cvoM7P8k)HLJ0z8IG*a2i9N@Er-kL;-gcE;PrbzUm*w z>2=yzOt<`ar!~ljQH}vB?01E;rP=iI2OiLF7?9MygKd}Hzklu+T5~Qgu67)al4*&c zEH~oeIm9^#U4ns_r!+8NN^D$gJF;=MbYOJO%cj_T#cO}%(3bojhKL4IR^g?%b47_U z@gC5tD~AfqBnZ7)eSF$Kb3V(bT18ml0o6r@8BCo+tthR8d9`iQVd-mGY^;9TzdQXw zgIyiFsbwI>TiAxBHv?5|m4hGC!3>^PT<~%mRBW5EdL$2t)!OKlh zw1jLopa>-63y|XGZlWd?dOzZg<9c{iRGgWP#!>5-W%W2x*`9SCNpVwbi_+TvxRstm zfuDP84^NwI@OQ;|ZaFh6iNP7Yr$-qBV%68|M(-4ADvkRafi{QCl7_JWlS_hX*%yji&N1|* zgzx6nDb`XxuHC!MHa2>;JbCkCxaM*#tG~R2+nw)ibi2v5=Q#(mA{S*atAI~hwMZxU z@S}qJZo?mtbFlE6s^JnGL6!gTKg*wTxzp?z)KstdpuK2!ljqn*>Q+x~ zsjWZEj&s*{cQ(^5mEW+?mYrGhpkte-3Rbtel58yEFvW0BL02-qH0Lt%UJ($qGDnEE z=wpopgTYO~M1Yk;s6sfA_)fwQ3B91k%63XNTU^?Zf^Jtr0MtVj!|?N&i&se(t~L1m za;Zc?@IJe*gvTLxvd<3-6#`-D%{rTc)3b52m!NyBel@$paqn0B!J8s+XU%LBuQ460 zR^@N}U267I2>cjZ&vW5wustxHD<(%TU89T3MPv>^{=(G@1r&}drXLtPSSt%$xKQMO zBjrbi2qf9YzakGkwkAO=!4(IC7F6PB3{Ip&MLuJZ`0s=vEcbSpgcFE=_wF5M4IAs` zOZ@T-l4s*@+@O|~le?kICRSrx*9WBvRx~xj7En|)pog2sqdF>uGaYa~d6M_Hw6qYo z7VH%^FHseUFNSb9orC%1GqB~u(+}7Jb1g2@-GVFX2v;$|kDonzB>FqQFxPZa`10Bj z(;tVqDjQqNJr?i$^N(gI)sgF(b-lplzw;_86yGHsV1pIO3-%isj7*xze~rX7mKO;_ zAPSB>Y?R8)d;Z;(nM-U;W*khUZA{1G>EALl{roY_zuemTk*8TPS>1RvD8^u^{B}^t zt77^0?xbpy%t_|=*0eOQ>38ejinFE-?mQ(;e@&7>kz>oVvtpb3D#DV@wn|BHGLl?N z5ARR7OJ!2@RtsT5Ljk>N{4aC1-cV{0+_Kf7*T#68+MT4NNJ2=3-3$I9Dk>`CEd%jD z7_5ABtK=WtAC`iU>oEdG0W}tG}fyRJ~}==e&{I~a#S%Y zz<`$ASIrW(R{Y>=dhfStB)F-c9jj+1ZDc9LD!;cUX>J=^r?qt}b4%v8q_&Wos-&e3 zu6lY*nseGCww9TJo=sGbRn(vUCROBlS*{ctK_Dh9KAM}4kO+Y_2R#ny+jjzoVEuvA z_-Ah#1rXnG;6f;Q+9V5Up{Vb>r@v$!OgS|&sLt`t4W&KP(VF3!T@AlP805_zu)h^uD|QP?(4qKIqLiUeBSTZc)p&m=Tl*B zd#~S)G57Uu^aaUyap&gE(9O$MJyfn+TMjpknxmuRx+Ismb2TP!LA27J0s8Y+cwdTt z2+SBaJ)sU_o%grDfvawt-daXcA&;45-g-78vIPS#m+Qmqde3#)JwXx4mbBC5n+{uB z#|7=#ld^YX*5}|-+nNdL@fCydtCV^Yn(;;!$=S8twr200SlJdbL!Jv)2FMGUSL^*WaUD zUyE+DMm8*7owIypz0rnjJfQ%|d{iDZ%Wcf8y7lat#v;lTE354ub?UoZd(x|>WqhZ5 zd2Vy19Tzs6wlql5WZJ|`QYCyrKunTa%jS+uucJ>5%r|c|(JgI@A@l`4GJxN?W_R|4 zQ-~+zEr*5FaDuE^*;o+{7<(n@b5$5G9o5zGa^7vQd3%?DW=aPd_SkoRv(sfWn}8VI z<1-=y&y9U_>dAbt^r7%)lVC@{PkUUb?g{un&BpA}TV&?&|Cbx1mBf^($wdm41?*RKU9kZ{;w{G+rzCaOl`+(lfKV<$dH zLq}Gy>n%F%bRg_X)(BT{{-7$Qp@y*%l|krH-5*ZsninNxq(w6!dBMV%M_8RSX`>r{ zm8^phmA{Of?lO1El#w^@j7tQHoHBE!?{8lk@uFb~fTdm`JF_M?b?)51?q);N`cmCg zIZKENke<5R1eWT;7mGOhaZ&B7 z5(+QR-_|omO$9Ff!*dr-<0D_VXQH0RUkg%2dk)f6=KmhO%C^dyeL#>K?ao`Sa!}{U z^8SajpFL~LXoN)9VeR$2phoSdc5D8dy(632^3I_$DeJ{5sHc#MUwPx#@58TeoBTY* zs~gzaiUG^|&$;2!_g-Jy7Av)Qy^-(OFNOW3*|_$RMt{qX;R6b{0eQ(*oyKfWl5;v` zN|O57W=5_Zwxw?w*-;?@GATMqe}-xXe88pskDWfjZdN z{BUS-jVHtu+NSqGEJ?S+w~#89ja%5TvVO9C%*!@EO#nZ4C2Z^B9AnuNI;0fB)T?lC z7^h}Ed$t|IkoBt_U3^zjeGU%N8ug+EIS053s^`3fFlvzP&|3>t6G?@TGuYxs`NjuR z2ingg$&)<^W$n-9ZtLLwOI4i15XvYo;nv!IGVomG#Mm!rwg@#sm*vCF{=J zyRxT-Xv7rk8TP5Q++}(6cNu*fGuf?BZH09riiYz$q@Q*)Lvdvg3(FqtH`t>v6SG|H zKg81p@01u~N*%F$`Iza`)f4lwvNj8Kmf?Luf+lnXp`c#RQ|(a~7?k=)$}sfMApeQ$ z1ZAlQEM0bBf|A#c~?xXeg%W@x2s5LIWdI{xr zRx8t6pt&$S_4D>-t4>BA6}0)(eSempt=mNLtD7`wqBVa1>^XDR8(g{jX0K@@^wEy8 zL!a-$j1b0vyc&7LC^`*<5Ex$AUt-N)miPXk2on1F<;yK8!iIL-Ty{I={;HkfRc%szvL2#bFR){tv z6V$p)LD_L*^FbUsB*@7W+BU_@ZSLFMM^t~`>(6oq&R+jC*vjSceDT2zUp*$Nz$rf> z@@$G|vm&x;dSsyC!%5oz&1i=C-z$hC+u?ih`(7d_pTwKq3)$t&7F#0k6Nd!C`j16h^e-+(TJ`P(5zqL}ThmVtBV3`*u~|ee<;> zEv)CkMRVq~W27c$2;v*9azt~}JFdw#%|J%9GHrpzC_EIq_Uze$&XO$0M%+*zkMw6U zFX{SE=NcO4y#Y~kt~9;!Y?boz__7%c9k;q{?@We$=9Jn*bjeGeEIC(z#^d%id-=*d zSovS$^vfu|3;9>+NF>Ireq$z!a_oc{9R7>Y$cO$I4DX1UvrXT&>!-A-w?Y15Can<_0dNceoYmsETh;fr?0?kZ1S7923i_0b+lSs2HTXezGqxo#U}x69nlLAo-@mY z@Qc-ql3`8)k^h`K(~^o*277i|K48W8ZY%DOk#vjP-ry#NA5y5 zQ1{_qo#NA;u1LgSW?h|JtJRZcwt`o}<8@6G(KMvh*5!ND$0!N3@zl((6_v4--=4;} ze4HIM>w*#n27dqdm85Nn=@g{%6K@WYEgo9^>npnrie|m1>?8jQ51**57n@((%DuAe zK;Ok`^<3oT&C#G~VXQSpcQ5e}HR3RkG z%H?bdL$eYiz~zaRE~qng%Q!>x`qpHt{$uD!;&X(^j5ZY)=-E1G+$B$6RDClYu(z}p zS3~@;E-%m9Np@NBuuJm36ViD+E9$TPfwKi|f zgYU*a11aO9tmE6VO}8btD4p*b?Ql~K+mOx=Cv`H^*?aS!Ibsjyh?xB)M_5D_|N46O z<-<8EcC6X^)62%dFH>_vWA~r;LqrX?fd9t-|GpOWNe2Bp4e!8$upBy(AQxdA4nu*{ zz$f(6EhYz5{+m)wj_6ixd$`FDZRzae16p^ z7Z;bP!{ZwaQWniSarzNE6QRZ9Zo(syT?S1mds--36w>@4*<0fHgd1sak5~C@`uXmZ zMC4*3{V_K4s1OvepbX&=iQezpXDjRDZ(;vzno)z@EhlXp508~!J1ELBrZzNFOoqDt zp*MFc?MR;-(|ef&ufn{wFVZ1^>{J?ZnSsl|;UOxrV$*-w6E9IFq6ng% zi2Ksj>HXh-z`i3ki^LX65%y@+n%CP$giCx~vW|^IC4ha^d7H{wkbV^%X+Xu$40FaQ zuqa>7P&2yIpTb34=wy9Iv|+^e_I**2al~TQT?tn9NN|Z#sOT`Z>9YWLr|ubNy7KXU z%KAb+Y6KZ#6vzL~aJZI&^+`jQ50-K~V+(xR5kc+b;SV~|r=$y-h9Xr*=2n4yDHH5% zt@M48ZQj0HuxEG_6`LsHS-bt1FFJc%ERkVe9#=AkjxOWcdau&KbcFKE2-zj_zA=gr zbG2>lR>bZ8xprJ)!Pg(foa+J=_wqWB#8+l&tj!Pg)eJK+sBHFoSl9zbvelX#3kd_y z*_itCfMKVHlipttfm;TLHi(>vDD|Q#J^u3o8q~__ll-WFZcWA~VhKdB@deSLdGn6D zY!o_@=#LD}&d9UZ8u9fIaND@wTIhc7ilkb66TG1*&s7ipHBy!?7i5c)l(GCXWh~8A;vR!l7 zU>^KeOooP8VYN{HO5fd|0=tc*mH$&mx#)Ptqz*!P=;7J9+t7z^P37j5TEO%pKj5}Q zZ>Z2%c`7J8Gbatm^MWewyrdo1XV>#PFH7=qB^Cwn5^iu3I~P>XWK{VW#wx?SqN1WK z2kdQjPlYrtipV0w9qnH2CL%6Cbv3aErDg&T1#*pug7x|?XbRXpawPBk{eiy{BEH9I z(k-y6R@ZZsX!IdpB)ywm3$RX9WURO|$Ec?>GYjDz~ zTAZ@OwbsB% zy-vnXjcretUvEOLgAKl8&DRF+R#HHTqhz#QdLwEM5h&;1Zd-HVMw={+RV(adI9XWEuB_J}#kxO1j{z(;vY|?R&BM8hjHVfiRNqiGS zKwR2ZJlpg=kD-q*D`r%yI5Tb^tGT`|#+{S)KWTLa6&Rn5ZZg=*&h5k%v|CKDwM6Kf zSi?Su_y&sg9&M+XRpD^$2O1^fiQH7bHLDwHbq<4$DXC{fRe2{dM3i5TQZB+(JJ#GE zr+*3&p_e-ba19fZXq=sLEM^u|SADJ)e=1`8OYUjRa&7-D*^3$v3Pu`DS6(q>EW677 za{V<|b0ln0UX7l8X5hNwj<4^AsO-P(jSGyFV|>eXh5lW$pqv$*R5LQW|Dw8TE&L^y zo0nHmTsosqXc>J9~p(tjV1#+c^8JKNGP=8?;X2us!`0L&wz|o!W;{vp#Cx zzIn5zQouhEws{>O6e5U}YjijqrN$?w`J=d+ukZdtnRj02_gai7yax>X)*9W}M<@DE zoP`4pMbf#(6XcGxVw6uFZ6&Fh-z0HK2$i&9#Ua(d>J#&%2?tP-^hH1{(or|^JI?-) zbVNweu|@(sWk`iHVUtE@T_EIiJV9iuH?gYhoa8{sTT9Mf_1Q9F!&QERD2yw_pRyy> zqI^-_1s?~|;sy#S;=R|-$pFo1z6-;Yi=r?x^8H& z<$xWfb~SZZ=hw3EBxnMlnCR})1KH;tzi^KqUQ<4@J|#E<(J<<;U}e%>NT&7Wu)BRd z{KAHbDq2on%%`ceDQ%tp>X%DbTAvCEEsu1roG+S|1y;?_C2Zc- zPZT&n!Xv@hn7&KXt=tyoEWV|!(UlRhJs+6!gxPnzrX7PDMW z%j@E5swZ1+s3aMDZ}e@@2A2G3m)G;&SiX|nAi`QY?0-Dh{RJ#V$K%oY`N~_8ZK4j3 zbB($4&9k(Nq%=i-;7sd=>)k1I#8F9-5*1k_@BIKvhd)Oxe^xlHWB zq^&3WyyWo&yuXBGR`Kn5Rch$RZ|2=#P%tE~>cS5W#_H_RtqNFKNfxm~zF%96nTFG3 zv@2S$+j{Gkn1+CD4=B70*St5EwofGV$tzKZooBQII7JUpZYnwfgu0CX#f`n34^2Cr zCiW6|`mjY^8?=_`DpId+jFiunEIlsC`kU z8XY>Q>=@%IDMSh+>2v7K>eK$xj!eH1M-i>ZGXx|)WmYz1^1s^N-PfOe z(*6J}q@^kTc;$td26NCvKXB2IQBQu;A`CAe$S&|mEHc_9VqZNtNRR5X6_rCVk4B4e zk?a~1Tw4{vf%?zgU-g8oZ-JFIB2XyF=*8zuu_)T`>1utz(x$vqu$W@dB^&H)(3};W zne}gid`J8$P~o*f;GJd9eG|oaRwA~d!6?^HbTmK3zHG`SpVU|{Fy)XY_}vy}uZkqP zsm?#j*{*_N>8x|u`H9HO*4JF8pkbvH2OLdDTw3g>e-*Y$l`L_hFBEnluy4U4+Ui6?n$#nA!DCsZq%Tbg6WDK z{k%XPVsp8@{U9}(#PLywNB=w^`u>E5a;~1C+pl%f43OGWkp2hFvdbH4bmssanW{qU zI&Ws?o|)sz{cD4)REii5OVuhLfZo)JbaM=RS&{EFFn`rm1H?aXIGhikH?MVU-oZDj zt8~b%1q8JWketox5Hkkp*Dy|1 zu~6v(I{xM_!+ga@Q}njTAb(DFlqMlH5%1G$Gi%>6IfA z$EeH5JJ`+mQ2a5*C>EtZic{zkjoLIHVUwg#oT`0qKj;S7DWM;lU?JWFnY2SNj|Oj? z$Elz#2ekhj_q8cVm&~5Mm0KB+NN8$I0NY5AEAI~be)PnNE)OU1#bwqYXBT^RKQRoW z*Y>{uZu^=G<2v-AsTCMXJ}^Rn(t6vl!MqN?jbno|bT(~^9U%*YvEQC7vHd-xqMGwI z-?;OEN}ZB<;&xc*6}t1Jt?PMk2I{44TuwSel8jw)VEd(iaY zi#K1B-+V0qeN3XdV2oW0;8b>nan9CCociz-UIwB_ib|ZgnaQ#&mt|k~>CvPh6)*uou13(mQ{WjSD5soHNi zXnP|iPjMXllu)r;8a1knW823V+VyQ)Ggt^2t|8%=DBtq`#HM@47)*<9wRDOALKK@! zyVB-W|D0)s7aa70@W@CaLOUliAk~4)eZe#{_(9>lYf~W)pQy9f7K;kG$F`Sdmn79u zkupr`Q|NV~{UFW&(!Mr@-y25)U>=Z8Y7PJkD|RqKM0Q_eBl#s@F#*s*n)H}?)`Y4? z$}CC%Q(TYn+p@zPkW!j55?7b|pJJFZ+vCtHJ{bbp9%DwOA6Hzv3W~OGV~3p=k8JoH z--I} z!5)#x^PD-`u3fvPxABR@!RkJA(}F*P$V%JS>&i2B-~yY9p?41$S8>L2$S>E!UCopC)tXgHTmjeS=YSVxD(zF%gq8H{6zfg6hdm3ek z0Q1P8(A7P!F+?vqdtL9tFCzgS#kef7^5Y8fN(O&X#*k9_5*zC}=^BVvPkjY2qgH3z zJSv1+r~2T)+fy>*;`=AHS~oU2ZC+UU{YB!H-k^17&ic2bARUkbs*`bGu2y~(BT?n^!ZuJ#!UC_Pvr9@7M^`)F~W zP59~99@!FU>T61JFzOUO-`zS_hS-620t?Hp1TB@1sQC9TTzT%=LvV4iLP2i{or9^D z0-D88!{k#6r}5zf#OseKT3BZbubNWq$RO^#ax1->V~p#4OTxek7>u8x@x)dAEE3CC zj!|kK^Z&`x_vWz^U~_X%7ZF;AAOcN9RH{)fkyh^?pk44U=B}K}?QQ!tVspmf`qC0P z5c5P@asKT;L_I-pQX#LjXAa3-0h&yb&eq4rM}Q)=F_ci)f0c-{E+83$A_))j;_12M z<7s^zK@p5yQ0j%d!?#Jl3fTxQX2z0p@jj%HXS9)w-9Jy8qv`rqi~2Ci>Z%%^^qa9h zWZW$Y^TET1E}2j3Ddd5o4n#rQ;NT~h>$Mc(UJf}XwIGS)>Os&Vpwo9jhO5mO5JHhi zyq-<0awVC0M+C|9(GaD3+)iX*h1%LP=lhfR%$5lo2Qeo7x1`^=!L)(a!YAO4I|N!r zdZYCSx1lqlEJxM4czhyir;H-ZH+ zRI7RNZ1t0nHGe`y}F9% zp7syo+=&tH*{iQ>PVYKE*Yc)A{fALhPI zO^o4Yp|q4rpF^V@`*P-agRwMJ1H%cRqp08J#RDaZz@{ZlkJ2Yr| z{Almy-RA5%-(}?J8H<%QoImeAIb?iAg=f)`dH2(s9h&z1T+yw-zHg3{njJp!^~jr{ z-&c1S0}+Icw8le*3=xDJ0dI6IT*3)c=LPmi$+(pgZ4_BZn8v?BUM8}MN!0+}MI97z#ZUp6=awPWyl!c< zVrK8XdUep4?X88EA&Sfxa3V}89$_-*LLsOQvT%JUqU$nRtzW;sNWjr;yGPx8iH7Ws zNnk|c=OARFR{GW^IKfc{$`I|q;lrtS@2a%xzck;WtBLvNLjzU_{nU;FCN`6#)^Azk zH<;93v0_Et`t>{Y?AiF!r%z&8B?|xihIWJd)=qn$F*xY#oigXabAtkRU3Y#L_I)+z zutLEY<@=7%d5Lc244VuV-|Gxv&hQVkcKLV{t?oX5u1QCiM8S-%ol?H_v{gvc8P31e zT(}za-HOdnpu{}`*8$Zl#OmCYfRT=giQGP@N=PuDyZmQLN^LB+<;=X@-t= zSXVus@VU4zjZmcWr;!QeqWCoRk3cb6LXxCIyvFTmf%&KS*46w8PnJ)ElTkBubx+6> z@Md1}vV2aR>WY#xCJiwgf2_inx;Yr7rlw|%H5V=j#=d4ICZ!{h$pH5YV5p4(zPLh3 zf5w4Kb9{`vmQT~YevWtoHfz>wGYUN|Xj45f?G(4E{O8Btk}2=Vg^kHIr06ZjtmX;J^d z@*|%@M|AX{I%h@B)IT!9{dtzHT6P~3yia*-i2J5fz-J*~NRyeGWt%-cilSQ7{xA>O z%sX@b_@o6b0tza7LX9_^Y`96~`(Y<7XrC-PUDCS}6O&!>_|c=*3e82+4kBRQY2d)t z=({y&+}Mk1X<+hd3;r@9v#Hn@*H%2bysVuBN~|I=Uo9l!C@FqX)ve<&mi?STZ#F1zRr}~yfAw~KqO z; zO>dKc_hMttuW6>Hwk5IZr*d#`upIEnbM0<`*4J08nK53kSFh2|&V7j~Urp?|`GD#@ z#n1sUY+IpKgog_gGMdgle$BiMAN%o5gd30UrWZzP#Ac2{)~U%IxM5P|NeP! zlo(1MF$r}Mx;gZ$MWwP@8Ux9uF-1;nYNzCWX@5)vB+Q)I()E|V(9a;j0|_aI`~ zqrZB|%=HR^%gfid6Kc6SIy#p!vahdQVRdy?Jrv~YDUM)goSd9|>074}?>T!HnJgFb zctnqukw@gF>hKb~-u+cohpF1y+P-~wrrn2+AH|3eS^Gb;w6cv`<0i%Qbvw^GpI&t2 z)Tz5ejfqvi|F}9HIC!vtA$c0u9_-N2>_uXRRQmZv2b_E*X<`qA`g1K>Zyu&CwU~(K z|2}zBLBeFvhwzQ`uW02+QA>&xrWjRw>%k^r3vbch6jLFKA19%OzpY1$;UT#(Xz-eQ zk>RCaPDha_J}_vt4#P01YJuWwJn0=BbxDlV7hd{!O{&~)-@eIzv=b*Rw)G?@z@PLu zapIM6{0y275lHT=qf-bIi90(Q9m&#%2boimG!5LVHj2|C6;D~G^i3luRXc1dRYmdK zn;}1+pE6EfhC~6&A{j30kf-QU;G@9ko{`SZOoNJqU&mBT9b!NNSH zK0Ck!l8G`w$tN_mbJ!Smux%fopD*r|GRA{0x-HPwUo+53FO$|t9CW3|!m0Ny)=+$s z`Ipl5vj61*yv+*kF2t_gyH&Z60Za&F+{BcY>QP$HlV(9%r5C#K_U4IO@%Wy_x>XLQ zLzRO?j#lH!yEe?(0)ksxA@;ZN35T$VK*qObs73@YD-4`);%!c3E0jx%X#r(V5$>6I zMPcFhboR^hF)_(-%A5*P>QNnPQ{&3R=4!|rDRKd!Q7EjgIggLpH#dg?tQP=4W2$Jc zz`z!r)%>6L($N{SViTwxnW(mc*j+4;4{@=aav>uA+p&asVLnNjnf1Xbjlh)U%tJ4I zk)<_tm`%-jb|LmsfSB+vR~Du<9Eddi;Lfgf#mxsjY4Il7yjcNhpxs~*DX;kxc4`lh z=;m5=YEGrOE+4!Q*lH{lw5_A#R_s#523WMPx$|TqPmUd5{B}*+erMRHPbyQ=T{I~Y z(kLpWfI8HF*;d}pN`-E=`Zv1LLQvV(gI0AGQVMF&N%!ulNz-vBXo%DwM+U7PbIxeD zQD_n%ydh&8Q&7C7O`B5Di9fR>Jcv9X;jU|GbuLNkICdjT#Eec-MZw(e>#^B&Wk3@wjs3 z%JYh~6h{0gnfn4s49iYjGao%W$-H9N#hg$~7^&lhQf_K$Dx!13pXTOMvy8-GDSGA0 zF+9YFbG8#-n@r_Z#4sz8PJ|#<{N+muK`i_1+#v%84z%H147FCvRu`BJ+)rr45{`H= zjWyKz)!w;tr!Xd#KacYVvKQs~)?{w1FPdmPnSPh2h-{cb!5aNY?cFx%TU)pmi7zIR zn+htGR9x`>eIs}wQph6Cog%mye9ib}`zFl4ROLq)uA`tY_(OkQQ-%1DSkoB|uF%JA zunFx*92YGfIlU|q#<$dL+2*^3goPU7Y0>+#q zAIOtu9)4Uh?T33C3<22@kQiT8RaMTgEwY9GhOF;%o>recSsgQF?%}uNFL3{e^-?&% z>8wk3@8>+O)N4FrCtb}oFQMJnQMi15Uiqjt#oMW;gqIRfd0W1_%v#}WQg*m^$E$&~ z?v0QnVNHpRo&Tvis_#+o$gpJSjrrQvDz0Ay*Q6&E7yH=tUr$<(9tMd=>O>~^LOBQu z3aZtq3nj-VPP>pESvM?2*qoXU% z_Skz<8kKH=x4O37O9rLW6&f}-M@huE-*F0-ELlSLAk_?P-+P^AYEkDn_LRPYb>?4y za4bjp5*mM1R!SEb$3OCE8sJxT!uM)0UYybVIK&7G{WJD)mj!j?($5piJ&x*H? zSCQicrKapE2P%*eFm4LQzN7CRAUtVO_~0Sd+qv7N2+C4$b0Oea&Y5G+MZ^dxBs5jq zHH!1@$*q#Ijj}q>I%k7pYfa;d)dQ*{DFYt~N1OjV73f2?efvL6K8#6u`m`N3G2YO| z5kFSd&{+0%*T3DaU)vUJLP%&3D+ovogk`b+UAKOHErm3@#1<;zRPIT(@n^`04z#Y--`%V0(=%+OXapSeX}a65?QUAz%hr*0BO2fpo%o1)G8X_QmV+=xQ`U*+28jx! zAXuSeudbSHFGoOLCcN?_qTrxy6Fa>uDDa?2PN8_jt|JNfgBTSIPqhdK#SEEDdf3I(K0 zz6h6MM9$2tiH3Ie^jGv>n@zN-OHPCu8-_!t(i9q|TrL??4;XOe&aEz#cHaCqCfbIN z{vM6Ji`Z*z@$|$Au0GRnCbl+=51k0#Oxq0Ce{taONgGBHm&V;2w7wn%-)d{ucU_L) zk;>Rx7{r9X;nlxZQ_zLd!O#cPy!wXf>gp1>q>{x&p*VYNhtROFlq}n+ov3Pkcnk#q ztN&Q0N>@+kW9&QTK|a-w{5{wQAQNgshYgdW`qSRi*^>RF2IEs6m4*Y&p{D+teHPqO zRn1NeyZ^4nMOc0v6cCv{5OOB_k-j7r$ z%?fK4nj@)cq=c4v8{G@fN;d1LRmEnn25>Uh{|9hF{78Cee3FtO4QAoMNLyeF+&ffH zEjv+%*u(=7uvF3tPn)-G4^E-F7${CM(>%8y^}4d1AYX-52%UrX)Gz%1N`=r=*Ny@c z(vPvTRI~L2j7r(t&)L!>U^MY%<+l&B*e1}zT50dv6n1t+H%qK!f!3jzeb6mTj`MN(w_1bd@8V@*v=%tr`%Assyna^=j! zg-gUBH|fEH=E9G`;yTp0bJ(e8(sfdW+7Vz{8`vniCWU2wqWj^y)|I)ZfCv=B^Y?Tg zrb>gb`?;4hl{Djee;&9EwUYoSu==>`QuYA*d8oIZaxDMj#~p+lZ8o|nzI(IDOSl=P z^ZS`k!_-KcHgckv7SYHqc)Ke+7#z@s22Q90vQ&!c2<2@}70dq$Tlj~mj&Y(}RLHx(T5LzRsm7T2$GAG7MO=|9gJps@cE_x^G7{2Eiz85yO-dr!?Y)O*5 zaTLf(h$WCuH2$HO6H<`;wvlpKh+x3Dun@#IMG7G7oO(NhY?w@D`L2a*wlHxOYy^-8 zoS<7=T$~vG+0ubYzzMdaLKn#mC+vhc18nu*rl{{^ziinKczObsV+|$PE|QRNof>Pj zo$7g?g22n$TZYoo;mIZdFiPveJ;U73Fz^x^BQDsrwVwsJ;lu{i+8g8V_crvzsZ+;D zsnYxiwhSHSu{02v*_4CGNmnj2KN|V||8t(}CM74=l63^0IU6G-gmN)ih`w+^{Iodh zN|Pr~mWK;w#)!ap<;s}QRAB6dUY?$H1Uv%pm425hLE-@ElE~deLsNCCrwtJm9)jP^ z$8FlQDTi+5%cB+Fb=erfey(TFo?>p=bI#?)H83>bVIlT6ANd&|KOsG;n8t4<&J6&bA@#xR#RMJPewE#5;Asc zDwV1$Td2Zd5(Dh2Uq8g~jxDx={QS+p&Jq;Dl+rd#BCP8+wrBi3RpTsakYNnby0)jN311o;Hijg1$ zjDQ#B`-K~-?J-SFNfDV5ssG5%qi4-J7;4&~5R z!vsX+`j-D5XkBcp|9*zKc|INMfRWDs3BR3p-E?Tss8I^52QW$WLip;U2O2x4yc~6&#jcZQo11zG1bCP>*-dIK( zRaF%$gdoc}KseKY>^4i6ZU^xxi2wdPl`PXlqc`c@egL(Iq+6Ii0$YF(*Wt3rQ-IEI zNV+X;zW8BO8~NulaQpCB9S^pCXGN+TpqEGU;6VA$pM{{CDNr3{BamSKlJeY;ywzmq z>C-}A^dUdUJWu*+s&)#*>_j`l2LUbR{(W^`W<>u{t_Y7yK!9}Jx|@;f6bZK4yXhy6 zkKZe`E4WVld@5S%QxjH)ci#|;?T6P_&y9vDcuV4Fc2RjZOYPI4A$fIiW=3X7# z%9BT`PP5kvoKQjqSU{TKIE(@qi2)@>opbh;n|JS?yR=nzs{OZn6ZPdkkks_twWybn zW6|+^SQel$#0P}|*X_IB7Fb$Z=2IFLmzJ809H}5>DHLE&GPr^}#P|L=IG~}!x|)}g zO}|gKBX-fUutV{#*i0eYv13Ptlv{N2Hp`YR%O7`IiyAovyhx@9bZveiA=FTI@Wl;! z_fCNv>5$*;zvDq2shaPfQsIF3pgX~)m>s8X(UXfZrgN+KI6y80k&v-bIYoTrq+7hy z(t(0+96WeXCQh~-DPm;mty_)c!jB%EzUc~rVieA0&AO{jP3^SzrT~F*QUq;f*{fww zO9dE+zu?7d-N!mTlUL43|(n}IbWp%ac z_B%U-sj>7yG%scCyX-DFc=)hA{@s#|<#7Nv761|FJlqC;i(!|vw{=X$m*$gxoYDRF68+63p**IyJwDh#re+G^ZI}POcQWu%EyO(%tE<{EGDzowinW&j zO~OG0<_R@Eq12PNN#V+n!Gy9!m?I^tEeNN0w{gB(4>tX`w9&q%0ttesqy>VCY7PUa zG~w0(l`sPrHYJbDCn!im>M?#n+rbVr{|?XHDwYY^NA^0Rqm!r|Y)OznpbxL+F#yTJ zGtny1Ek0Pgi?(B|V0Hp9vq-E0D7q3uXKAgO7Yb1bXlRWDOoEoIR*He%+g%*2suncI z07+6i3Fn4Mv%q8|_&69DD$c>;RRkQu>yOmb)(P`TqZ{Yrd!0L{U%O5nL-Y+m`{o`= z>c)JEXy4Ci-vdiPK8dSz^**d?qS_u!x5@;4ThTAFsVpP#U}OoQoxyDF)b|`{nV=KW zg{;6FQLSqxi?5@AnIVkA++VJ9ewydPe}W;^pYVdA2S?hrYtu$nE0lKbdY|I3l+IQm zTsMxoov#EgP?i!pXuIce>jfWj=zY-R*zr@NKwq73gX0L;!+&(WP2PZm*{grc|6a5L zswr8tl?V#*CxICfo-fCoE=-Vp0q+g^^f4w5knk$cxy_?bFxSno-x|#9)kVh6G;!2O z3@AJp^rt>~axLTd2b34&5dcvLILbJymbMP>PB0zFFO+|HMA(x8pft7;77$<-=7wcEG7^rqJ!+wkQ-s5MPkZ5fUGzng;!n%$}PL!qXuicoIRvnEJ^9F3tERmxReVRi}Z?aTA{|picG~jd{xy zC!u&cOV^O*@Q{j$Z{iXgL@FHQXL`OCf8&Y)3cD#o=CS!TyzyAd6WsLHC)AzYVEDb`S)L>k2 zqI0u0ZTxvnskFG%xQIB`Mj_*K#Ubh#Wc^0V24jVT2+yu`4 zKY#i)g*PRs0>~MriUA80ay;oDB3?Q^1S zk~b~v(ZBb#wXx-Q-K#v2NB!AgTktg5*5bE}=yNIiopbqz3wIek7j^IbZxqvxSYc*n zX30toub)o8^TJN4aq=&C3+q*lK4GKRY9Q!*62aiA;<`;O?4D#%cn4rSPV|4Vv9S+aH{M&+mtV5bsQ=VXTo<2)>N;|ycTJEP-KDcj z92~rOvbpxorBQ-45BVH7{mq-njJY6d!K^=%$wU4_peKoBX0w_6jXZ*D;e;;_jtX0h z-4J~~jm#i!y!tYG@A=!eZ(}KcsN%Kj)Jl71rP+OY_U^4FB!L;}Et`IL{`|RAysC5; zMA8Qf{Yv-A046Lfte8?Z6-cZG_e3NWFlSak_P?iIb$2L3kbhYi)C^Dpgl$Hxgr~DD zj1MZamg)l{WGKSvXzcFp4#g>FHM#de){eIQ-X|2vNb6kux7ou?j7=WI-gM|KKaP1F z4D$PSF5C6MKelvFvAW*0L$KfFc1D6(8;rKU~xT)#d< z;4>-9_&kbFn-q8wZEF3|U0ag%30k3@NBj z3-z4zCr{cEO-CXE05~kAzanc$LAK*1BF4c`qyM6)N=dvB!MfpZm5eNEg_r{+IDBsX zU?&H%y-OsP_U*HYx>s)8)1M+Z@#VtJ&6lw|Yqijq|4X!!A+X6O2 zn$Zve03kGAwX$Av{`Bv7YT0~S@E}Caq#Hn(O)xE*Vo=_&jL%!?8ff(^JWr1*62K*R z*ftKF6vFhs98}6@0c;RoVfbXBeY(8WnM9cl#|~)MT2X z$l+0!-Dr(3?Oo+>QX5vLV-bsB0|KiX@t1x^?g;*Si$JHGlf)Krl*S7pudfUCqwbpSlTvW2Bkc z9ph#90X1dv#prEvw}>aWno3JGLOEAa7pgxR&QDw{ayK;VH+MvA$dj}B4@Sqno)SpT z2n@71QLS6JAY(6sn~<#ntCp<(`Cl zdB0RLPgY?$P^tM+rd(htqD48KHD`5jSYaz z^eANyPk*$W{xsIR;`GNO1*0CJgs#1N=!5=iE|y2Zzt6b4&%?3i?ESqJAh-C;vC zU%PJMR0*PQm*&@1J~M~(8ZZa1a%JUt*G z)gE@(aY~Y)(E<{GIjE`+@xB4QJ&OqSivcG^BW%@Gt6#qe@63U!Lwh*9p?v1&A%$Gp>Rn?urHjiyY>7_m(7m1n?x*5>@{>D8T)k=m#dGvuZh$STqL1*(^AnvZA9FL zG0pfhPXU(wmhIrc8{SpQ`n(~+H9nW4#d)@yV;p-n>%cIdZ*P`MtjS>vS{s-i8l%WV zbMcnMHLQPDa6_+bUk%f;*aodedYS1Lbhe6}&tGSeiI8u^IHVW_xiE?-Cl?nV;epSK z(sFG^aVQFFbh;qc|BA^_gBO4MHipqi`sZovRiaRjq=zyiUTP}O486wIF&8d)f_f5Y z0sMRP9~$}mDPw*{y$Hu?*!|t!K z9x?6`?}>4NtAC4rXH?85Z+3gsIdS2v91ly2`o)dvOw{e_+`#i9IXCTZ*HCv0%fv4o zJtB&7`^H9oS)!VKL5t|b2Tf&?AefZQ4*T?(Zo2dAd-k<_8D0QDuot_H=?B=B5nSnxu<{#)Mc14G6hZ;>QZA1Hn@L1l^-|41gE5z=qbYzqDHYhJRvIv1K;IS5 z+cRM^bzPRmL|oD$>-_fI8#*Pm{m_jX629g3QYl}u5Bo;B>?n*eGu!z*KC5fb zi%;M0b<+3?QZNx#h*NYn)JSE^Q&y*}O-)btzB*!uIl~#~Ry&1m$S7E$s0CJd^Ji>E_MZG86Z*+q;9W?x?F5A*85V2=;?Hw$yRT6ASU zJ&)f;%Z^IDCcvUREiRO}s3ZN$@sDq_s0)>pkK3!drUhFr`umUHk+a6zth&PD`q`+< zCgufO5~HmK4w_cux$WBGYL5`pSF9f~YG8;W)NnVqgy%@*nkp?^xR8fpvh?WHYuCbf z_=}#$4H`OhXcjcD8Ol0SM~$jQN=-jpTseO720B&6M5&$ys|eDx&0%mdj1N& z^|WE`Ft1U!1JxIJ&3d|IcJ-(S`;N}NdhY6%)yzH$O^fA{pFh6^nW%Ehan=s6x@xC( zClqnFpe_ks2akkuzT=P~b5`+G8gKs}o z!W>73)wd{XU3~QYA=BgU4abK6>=ORu^|_(r{f|1HSW(cg$BG{9&*=ud2=D$l;fvv0 zw-z>$@CDSXFQ>dQDR+PR=+Q{sz=s1hM~_o9-=iS)r#Y+$HF|J=X#N4ePtu~#n9-7? zzKi&PE^3LD5y*hP{^ZZrOd(&UI4(J?{H761=)&PAR&9xi9-;QFk4429-OuwJ2j8*y zcRWt&Y+>b)sBw-rs3_W_Ne;<`HFo#sljN9MeQUc+` ziRxX~NYf1`6LL|y(Rc`;>)sAu+#40^#)g@r#(iP3*y?M05U|LyHRC(05yv0_KRobk zDdwqs`jW3*FZxEh=`0z1?)1CZ>C?O9-wLrUI5L{d^zxkd%PqUUPZ@M2)bXtGEBj_n zE5f?kws)cDEBNrCG2u1#`t@U6G`aSGw;gW32np7Nz)o;AqQSJYw-;pwKuG3FT&t-) zwPzj#v}@kT`;qUvw{N=*r#kZ4v7?D((}wfC;yM;=m^R&_{Fb_kvSUQwc~^&7TzY>w zYq&0judQw9fzH;0Y^`D~hR>vLggzwk588kLN#q@g^o(;&K#rM%7Z0rdP+FIghWp-8^seYoKL zZQZMHjN>m4Og5!MlE4)d)Fl7;n|N?~IJ;W_PBw1ZlnvzqcHyuVxsy7K?cM)WEhy`~ z7+g?!v-DxKbZJisfPWX=YSIICPwdsJp+reOJM~PU2*=m%`TXHSPo0Guh;@L~@{u?LtUGl| zAJaq_p)e6tTeR?I98|JlADbf?}%)j+!2HmC)s3n~8{K7)*rm=99!~f_O z6cSRMwlHSjO^1N83UhT10W_7BcJ&Lc2eN=cFk%r<=FUc|R-J#o_7=w+f;XqPmHNeD z!-kc>UfQn?Hb3GXbsNTKj7FR#hHwbgwM1`Ke2TlZ7uhZPa5vkzQ6>dIv%QK0c8CF1js1$)v{XJE1hzx3Y#6tbDx5LL< z4WFibd7@LXY2V-N!ZIQVd2na#=KBI>IgZbT){~=_NNJM)_urjo)T72sWew}p{?=Cg zW?2qQP<-F%*`)0Hqh=Aaz^a!_Sk>y2cP7Y#R1?6HU;<@oRmZ2DKCrKsRUc;}L1bj4 z<*ZcjdUAJ^o z%UZHq*K4Xu^;)%P;s3Eq=rV_8%bIWjDVLJc)9cAgaCY{BfJTW>RCM>-13JQ-!{skW z4cqat@|M@PO*sv}c^@AcIHBH|89mHu&#<)Y7OdZ3yl+a~O4j)buX;qs8`K&#ckk?m z4X0alU8$cVn@7CvCKwpZUf1)8veO>5uuNl=6<=z2&vA7fOfXJ&SfW)jc*v0J zvpf6&ynG;b#-QZfoE!`N>?@A7qe)N)7FG6j3}30dX@`;a##fgo<#_!dDlzUEyR;7P z$l|H*;e!W3+-fo8Ac(1UP#&S|z17Qb=cP%c}LOKz7qIIsWLKgvztF_sE z?vxAf6Dn-KJqC`5UHxX~qlet_kt~uxPVnV*!Dl#1mjJ83kL(0k%SOfc-j)o)+j{f8 znAFT&k*V3HP4_#0I4)f1%Mg5P!<|NJ7HaK|egC1ad7nU}{t9QD)zyUBf8aptmHD0s z0r5eynIg&uVGE6!!lK9LPk6kjm2-kljleDs4p>$ehbi9*De?>bw;F|xluYpHliqW$ z&w*fO?fzEjPSrxvEL_`NOKVhI0NYJ`{mmPKs`zrM?H;6T_hzLnY8q>FHGcxU0%O{B z*fFM4Q-i;5-MTmN>{-{yBTIWVHaT~TmmKv#>zS@fw^m9a%C{qCG&>vDH2c2UxCIe| zRXq$wT8`Tiam|b}Id&*P@7&#cQlU+(dDvpSiYXq$Hf%2j(>Vbmq@kZz{3 ze_qP9zz(@-Ord9oxy%jFXx~1q-O~}JQBopiPQ!?3Yr|Pa>Bd?m*S?g9PGlo*BmH*| zA3vV8vFA|zp}AA`?s=C@ujQ~{fwnZrNq2d~8_Z(qy#4LBdu({4ja8qWZC9? z3^nT#{UA*UTm{X7CfVcq_3NR=%bbZ944hP%XEAeKxzWYJ;rPJyCR90PdwhGmpp(oP zo?pS37f#`W+skBg@4%zrBS#wNKlhqpWai0|&_Jc9_wVl=|D=f@Y%;E%6Fc<6!sm3t z)o-=hoHqxY-ASj#6~~+j8$Zxz=D%&%lJrWrF5-lp3h^MgnZr1U0@n$`OY6)Y0v>a4QXq@72#vWTz{P7~4SUAmWbK^2o0+Cg9PGDE{G`g7;^58hSBtbJiS)vBmNQsPAY zdx5&6M^0%rrCE#Qoy}X!iT?g*xn0kxtJV9t?u}%VI=6K{!>y058#Zz=@7Zy5_i4@1 z5@4o3((+cykII4zU+qs{kG^g^DCEuK`Uir7zTSymz2Nnqac`11PqL8wZTsl)50UUk z-z(|ESg2jbIBN9yV#@zj@0%8t_@l><*WB7X_dc?=c?`w%?&YAK#lec5Hoc zo1SL|jb5|7?E5m?c`KgBE#9@%Vr_>vBRW2N@B$#%z`)?>_uJk43rp6S`d%oT$Bvq* z_8uw`XJ==dMT>3>?V0JG6;wT>GQnlouML0ws@tw=t#9>On!o8PUxwJP_%J%8$P|xZ$7WuqWV|-)vxQ0mc97`0O6cAcdMhX*VU%^0j0g(Um9tDF5_(d(z3F5e&@`u zBZpt_PUZWA@;4qE`MR}_wI1*dW?pdVkNy)n|N466+Rdsm_mihiDLZRsRO|J38J1E# z+-1H-mp0c=o>b!42#zRRMnp$OV!6m9!Iub1V-GV|r!4k(DF2xV8#HVD-uliG4mw^~?@Rk2u{g_tg&vBhD7w`5%(RIZVek84|ezZZ!Gxg!UaHgPyRERd17Q0 z$M1bQdU6|c;|{|&j^r?c-^&D%T!z}gQKaRVqD!U5kA3#+S^oR?PZm$seKZaKDC+c~ zuB8oF*OZjXB~v6ZsspWRwGLw1{loentuWXVNiKdKxl{^qs4=E0%K>* zFCbHmKG0OB+PU&$N9r+=(vb44=yu4QOerEenu7bky8yn~ym|BaOB-D7d6`Lt)M)}# zQL$4jz5Dj%t??>@zC=Pp#}7GoQ_PIKQ7RPkEiEp3UJefzIl<LQ@ENA9LX1K-n-P?Mc(s*Dppx6^m?b@~-=9@fL`^){* z)S=(JVq?d!i_TuT(oA1p|9x@s1lE7!#*H6mX70Lrb)fU(Q>{<1)@cyLiOuR3a19MD z@1@ZsjjZf!H(+S2(#zMa`zNN##i1l?e^SJm=xC`5&CMk!6D?WVj9OS#uVeEFdy`fN z0Em7RJ}aT-MY~Cv>&x!va2$&Y6!yKm_Ln2?)D*dt#08_s?j12Q?+|l%#8(6+CwC#= z9`)ybKxb3r;7ek6?g)%={I1Mm+Wh%tJ+_XBWcd+XBJo(%D7Vv6v$A}~B;-G2MiI1e zJ(hA>f0R&+hU3H#Z5ZoQyrJ~0<5>fx2Xtc)^vKPFn1q@g;jYXdV{9u}z`pT28{hfY zS>=kOFu%~=h|T}#^w<nftccCJW1jNBBpZUWvjEpI-c;qIK7D4 z`i670HedSl=R*C_j+M<_RlbtDO|vZqGq$M$oEg|LOm$#pV?Gg0^*GQ9>{7>G>|+2B zZRs(Oqa-Yin>X)h=?2}yyu4?(99r@;B_alnS+tzwDnTO*zJHS~T6Vp+t>0hV&s>b6 z(WRD_y-Z(6f=V)skJxU(C{TMId~xQ?e|M(;#etr^%siF>0YfQ&F3#-VEA;s3H4nN? zJYRd!fhby-lD|Q(;~zyEWzw}vWJu}0!~T6hy^owdb4CH)T)$~PJAk4~NP6jY@oMsU z-)-VIvS`gGZMuBoh7}Aj1~!^&{mGNvk|NFpXs{AFm8ob9KsNx=(QY&&XisLu;5^w) z+0A1>`=6w~6d!4rs!rxEqSam@I+}XW9_+os`K`mMATrwewXdYLl9jnOAP#SO_SDbU-N+k6v2pc>`e)% z`6^or9=i}+?w8nGQ~e|0MN#L>-?z}B;eT@hmNwYCPH*7R{s+$ZkxKlr0hiCz6mw$g zKpj>c45Qm>23mve{?OauDyJ)b_bmaPKwczTZ628`r#&JVSCkzYp0|oG1qV;0!W2?j z^aq$9;S?mCl!h_->$n-X`;xGo{9cWlKPzbUy1Nd36w?wvG8<9U*W9x?%175V+SX$o z;V!Ze7q{QG{Uw&NvqT)D$G^+g)Kz{u+#<+9!yO&6dMog38~R?-MJA8Mm&Su_A^P1PA3qMykr)icPeNPF)h4+g zXy>n~_WPYCEXW&rIfNGF>`3Aa@4_Wgs!BQ#xfW}BZ0pGiwBc^%;ysbOp7)lv?G0Oo zwY4=gqY*?milxK3A#j4s4HK0e&%}&0Tbx5{j;>cf_kTO;>K=B~RT@LyX`09B<$hr3 z+$1}^omd3E-m6ahT+3!)mQ(xeJ^p=)>yTl*1S#A6>*w$}al4$6uwzF(dN-h?hJu^kxbb-U2Av&L5<4os{fr~$%0DP*-?6w)KW_Q>nC#r- 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%0A1bN{S@m;qiW2QWHrMaVo#pA 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 S$g);aGMj8U>1Wx3AN~Vpdt!G0 literal 0 HcmV?d00001 diff --git a/audits/internal5/analysis/slither_Depository-flatten.sol.Depository.call-graph.png b/audits/internal5/analysis/slither_Depository-flatten.sol.Depository.call-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8667c8d64ee4d30bf69bdbecbd77e4ff9dcfeeb6 GIT binary patch literal 284317 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� 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�vqH?K{)r%} zy9|#3?HVbvHZ48W+(jeOjorQcURzPS&K>=l!$${tpVO@bD1EN8+h3mgoLp4}#vK`| zSsGWv3z?}yLac4MeD$X8MXY{O+e7*~-qGIz`PExxXQm?O4VX&%BLkR<*&eT+=sarm z6&WbHXC~U|{rS0-gb_ztc;C>~61mo(gb-HhV3y-&j&r-G>{8TU+?|`1`KHEn*JW)@ z`*@MRo;G7Tr#fn;S3~>4z~t+iDEYP*jVMHe7kYjOE~g#Dc2k`#w=DNL^x2snN5vmp zVm5v-XvQjU<)q`B_MX+6Lb>eQQ$=yp{H3unxp6VMO=ZXWly0jmHJJKVE~h6LTzOCF zIJsP+d;h4J{4NIMt{3fmdk-qRHP|ccPhx%aMb8BHjoUd^2G#M*5(DLtLn2+$cJ_U1 zVsko;CihCVOAWXeXNE0l@m>EiZXl~AG;>DKdwbR|E&f&wI)O#Al%dI(OC9w=C)#Ps z)ult}t++RsL1mq*GkbON`n`Jo!;LPUef|5+&u8RNv*z{;R0#DIT^rke?_-UA!L*ae zN_1@aqs@*y>z$szirxH3s%w$o-il=B2FdoyZYp!KCeGoRbbs^$_F(VOyD|3dE7?)a zrYpNCuP&D6Z%?zFN?w1ieQ-KrU*9y%J37bZ!Ca+*dHO-sWDDzqs##XFgL4-nojkaP zcKsJA?v`ii&zMl+Z=6>^uK1{iF&G+XqDHM@i>@G`ACzpUTcF>A0eZ9`zSiE`i&}0n za`<&xvqsB+@Aiq?`j?At>1Y=hT=n>MxqHa&Jw_nDJgtO7HDO7aHUZAZ;uXD_Y{#gn z*h3-jKM|h5@AMUDE09FdHdA9lMULI{Q2&wP zO`Vj!iQ4?8ZD(9vp%0&C0AgH&eSk1RI4k~5WLe0)qtv|miCN6x%He?+ofH`!DcX_~ zQ9+`0eI6PdCYhTY(>0jsTgp-`BrOx(xTTB#20s`nB536{p7N!m^8&TPjkTs4{ka~j zU97h!woD(-w5R0r2yo;J_84x>OSX8U?IkHCxSp4GO^SCcR*Qr}44d3~&Ajj+&NqlF zf?5W0mn8*m8OS+Gwuufb5pde9+UhFrI`Q=8(SgO!*i7+0C-ruXJkP2@=rs^=BKUb( zyN~3pj3Q^N)Rrl1T>7|pUDmCteI1<{QTv=qHN4VO3my;ad{mTYc-L-gr17S=KVx@h zXR)iE`q9IkDH~v$`v#JJfOh-O+&}2MO;uF3uLU zjYoIp&%9@kUQ?+Reyp4t=c`awqNd*|Sa~6R@l|#8@nJ5?y@v;3!`d6C*p8#C$ z-#97M)cC!dx)1ji31=PKjFk&2Gas$aYO2(Ak=v$A?Vxp(3AD`5bv6sF?5K7B*y!Dy z-t@Zo8&*q}4VM*}HLDuOO+6Z3l;N#?d&W$eQhH)~z5J`1^Hg>7 z_Wy!5E&czcp@5qu6RWlKdpuY=?Pv7}qE6K8wF4&`d>5Kqt}S3w9LzJ#A6DG5vN*W4 z=@4IGx0#%K0;mrdZGJz$Jt%PU1Pq^;>L4beAQ9v!NVk`#Zq)S=2bi2qj(SPP3T0Q%2(9*|UK?$Bpg#&s8>%06r>?^v0 zyZoe>={ms)3Hm%#seMVT#}@dXH$^tGaPpqcNI}#SWeIX_tKGuQt+&U0;a;4@_9tq( zs6Qg${D(uMwfU&}IH&$(55!pZ=wZakhqutPArvRCNi>5zqhldr$M%4sjl{dRxwUBG za{kK?y+c7b^arq=P~#J$Q&Un?m%~l+y({j(>|wj|)xQye`2W@qXBd`e;rLlk$ba{5 zBI`mY)Hwd->;1R>tfC}5NagrRN%Pmi zfAL*M{AZ_KW`1V=UqV0qzfbv-)Z-HWe8~FEVSLa}oXwO6y#IXU@88};z549u)nmNv zACG=&jF|7Xo}8^1x#+myACLUoFK;^3BIN$b<*=XGW literal 0 HcmV?d00001 diff --git a/audits/internal5/analysis/slither_Depository-flatten.sol.ERC721TokenReceiver.call-graph.png b/audits/internal5/analysis/slither_Depository-flatten.sol.ERC721TokenReceiver.call-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..70f08c24f14b590940cd6e88246fff54acfc93c3 GIT binary patch literal 8998 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 Cu<{rH literal 0 HcmV?d00001 diff --git a/audits/internal5/analysis/slither_Depository-flatten.sol.IBondCalculator.call-graph.png b/audits/internal5/analysis/slither_Depository-flatten.sol.IBondCalculator.call-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ff462e900254d3a5270566529b714e3cd827a078 GIT binary patch literal 14589 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 Ph`M)IMXo^B=+%D%SDDUV literal 0 HcmV?d00001 diff --git a/audits/internal5/analysis/slither_Depository-flatten.sol.IToken.call-graph.png b/audits/internal5/analysis/slither_Depository-flatten.sol.IToken.call-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..44c9bda81c27ef31478fd3c5d2983a9cffb36ad9 GIT binary patch literal 25191 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 f+W&8eruDUdDaw$TYA(Y!N02se@^rt+@lW^G literal 0 HcmV?d00001 diff --git a/audits/internal5/analysis/slither_Depository-flatten.sol.ITokenomics.call-graph.png b/audits/internal5/analysis/slither_Depository-flatten.sol.ITokenomics.call-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..407c3c7eaf293c42462f112c96bbe4a359db3a0b GIT binary patch literal 33494 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 literal 0 HcmV?d00001 diff --git a/audits/internal5/analysis/slither_Depository-flatten.sol.ITreasury.call-graph.png b/audits/internal5/analysis/slither_Depository-flatten.sol.ITreasury.call-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..600bad7c67c2bd7108dceb75dfb08e9f0f2ebf3e GIT binary patch literal 23225 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�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 ow}t%Ma`-M;_1Fm_0rvLx| literal 0 HcmV?d00001 diff --git a/audits/internal5/analysis/slither_Depository-flatten.sol.all_contracts.call-graph.png b/audits/internal5/analysis/slither_Depository-flatten.sol.all_contracts.call-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d0354775bf7aac3fc7ad72994740902f1e0134be GIT binary patch literal 422219 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