Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 164 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Multicall | 21940843 | 10 hrs ago | IN | 0 ETH | 0.00053987 | ||||
Multicall | 21928621 | 2 days ago | IN | 0 ETH | 0.00042162 | ||||
Multicall | 21925748 | 2 days ago | IN | 0 ETH | 0.00063121 | ||||
Get Reward | 21925570 | 2 days ago | IN | 0 ETH | 0.00015982 | ||||
Multicall | 21925560 | 2 days ago | IN | 0 ETH | 0.00033792 | ||||
Multicall | 21919733 | 3 days ago | IN | 0 ETH | 0.00414303 | ||||
Multicall | 21918599 | 3 days ago | IN | 0 ETH | 0.00071172 | ||||
Multicall | 21918313 | 3 days ago | IN | 0 ETH | 0.00035458 | ||||
Multicall | 21918303 | 3 days ago | IN | 0 ETH | 0.00036092 | ||||
Multicall | 21917453 | 3 days ago | IN | 0 ETH | 0.00043069 | ||||
Multicall | 21917175 | 3 days ago | IN | 0 ETH | 0.00113095 | ||||
Multicall | 21917167 | 3 days ago | IN | 0 ETH | 0.00048574 | ||||
Multicall | 21916795 | 3 days ago | IN | 0 ETH | 0.00039476 | ||||
Multicall | 21911727 | 4 days ago | IN | 0 ETH | 0.00025955 | ||||
Multicall | 21910123 | 4 days ago | IN | 0 ETH | 0.0002249 | ||||
Multicall | 21908226 | 4 days ago | IN | 0 ETH | 0.00052332 | ||||
Multicall | 21905069 | 5 days ago | IN | 0 ETH | 0.00031026 | ||||
Multicall | 21896161 | 6 days ago | IN | 0 ETH | 0.00081263 | ||||
Multicall | 21894937 | 6 days ago | IN | 0 ETH | 0.00061869 | ||||
Multicall | 21894482 | 6 days ago | IN | 0 ETH | 0.00041334 | ||||
Multicall | 21894199 | 6 days ago | IN | 0 ETH | 0.00044203 | ||||
Multicall | 21889461 | 7 days ago | IN | 0 ETH | 0.00098528 | ||||
Multicall | 21889386 | 7 days ago | IN | 0 ETH | 0.00017392 | ||||
Multicall | 21889357 | 7 days ago | IN | 0 ETH | 0.00019108 | ||||
Multicall | 21887063 | 7 days ago | IN | 0 ETH | 0.00030083 |
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers. Name tag integration is not available in advanced view.
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
||||
---|---|---|---|---|---|---|---|
21940843 | 10 hrs ago | 0 ETH | |||||
21940843 | 10 hrs ago | 0 ETH | |||||
21940843 | 10 hrs ago | 0 ETH | |||||
21940843 | 10 hrs ago | 0 ETH | |||||
21940843 | 10 hrs ago | 0 ETH | |||||
21940843 | 10 hrs ago | 0 ETH | |||||
21940843 | 10 hrs ago | 0 ETH | |||||
21940843 | 10 hrs ago | 0 ETH | |||||
21940843 | 10 hrs ago | 0 ETH | |||||
21940843 | 10 hrs ago | 0 ETH | |||||
21940843 | 10 hrs ago | Contract Creation | 0 ETH | ||||
21940843 | 10 hrs ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH | |||||
21928621 | 2 days ago | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
LockstakeEngine
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-FileCopyrightText: © 2023 Dai Foundation <www.daifoundation.org> // SPDX-License-Identifier: AGPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. pragma solidity ^0.8.21; import { LockstakeUrn } from "src/LockstakeUrn.sol"; import { Multicall } from "src/Multicall.sol"; interface VoteDelegateFactoryLike { function created(address) external returns (uint256); } interface VoteDelegateLike { function lock(uint256) external; function free(uint256) external; } interface VatLike { function ilks(bytes32) external view returns (uint256, uint256, uint256, uint256, uint256); function urns(bytes32, address) external view returns (uint256, uint256); function hope(address) external; function slip(bytes32, address, int256) external; function frob(bytes32, address, address, address, int256, int256) external; function grab(bytes32, address, address, address, int256, int256) external; } interface UsdsJoinLike { function vat() external view returns (VatLike); function usds() external view returns (GemLike); function join(address, uint256) external; function exit(address, uint256) external; } interface GemLike { function approve(address, uint256) external; function transfer(address, uint256) external; function transferFrom(address, address, uint256) external; function mint(address, uint256) external; function burn(address, uint256) external; } interface JugLike { function drip(bytes32) external returns (uint256); } interface MkrSkyLike { function rate() external view returns (uint256); function mkr() external view returns (GemLike); function sky() external view returns (GemLike); function skyToMkr(address, uint256) external; function mkrToSky(address, uint256) external; } contract LockstakeEngine is Multicall { // --- storage variables --- mapping(address usr => uint256 allowed) public wards; mapping(address farm => FarmStatus) public farms; mapping(address owner => uint256 count) public ownerUrnsCount; mapping(address owner => mapping(uint256 index => address urn)) public ownerUrns; mapping(address urn => address owner) public urnOwners; mapping(address urn => mapping(address usr => uint256 allowed)) public urnCan; mapping(address urn => address voteDelegate) public urnVoteDelegates; mapping(address urn => address farm) public urnFarms; mapping(address urn => uint256 auctionsCount) public urnAuctions; JugLike public jug; uint256 public fee; // --- constants and enums --- uint256 constant WAD = 10**18; uint256 constant RAY = 10**27; enum FarmStatus { UNSUPPORTED, ACTIVE, DELETED } // --- immutables --- VoteDelegateFactoryLike immutable public voteDelegateFactory; VatLike immutable public vat; UsdsJoinLike immutable public usdsJoin; GemLike immutable public usds; bytes32 immutable public ilk; GemLike immutable public mkr; GemLike immutable public lsmkr; MkrSkyLike immutable public mkrSky; GemLike immutable public sky; uint256 immutable public mkrSkyRate; address immutable public urnImplementation; // --- events --- event Rely(address indexed usr); event Deny(address indexed usr); event File(bytes32 indexed what, address data); event File(bytes32 indexed what, uint256 data); event AddFarm(address farm); event DelFarm(address farm); event Open(address indexed owner, uint256 indexed index, address urn); event Hope(address indexed owner, uint256 indexed index, address indexed usr); event Nope(address indexed owner, uint256 indexed index, address indexed usr); event SelectVoteDelegate(address indexed owner, uint256 indexed index, address indexed voteDelegate); event SelectFarm(address indexed owner, uint256 indexed index, address indexed farm, uint16 ref); event Lock(address indexed owner, uint256 indexed index, uint256 wad, uint16 ref); event LockSky(address indexed owner, uint256 indexed index, uint256 skyWad, uint16 ref); event Free(address indexed owner, uint256 indexed index, address to, uint256 wad, uint256 freed); event FreeSky(address indexed owner, uint256 indexed index, address to, uint256 skyWad, uint256 skyFreed); event FreeNoFee(address indexed owner, uint256 indexed index, address to, uint256 wad); event Draw(address indexed owner, uint256 indexed index, address to, uint256 wad); event Wipe(address indexed owner, uint256 indexed index, uint256 wad); event GetReward(address indexed owner, uint256 indexed index, address indexed farm, address to, uint256 amt); event OnKick(address indexed urn, uint256 wad); event OnTake(address indexed urn, address indexed who, uint256 wad); event OnRemove(address indexed urn, uint256 sold, uint256 burn, uint256 refund); // --- modifiers --- modifier auth { require(wards[msg.sender] == 1, "LockstakeEngine/not-authorized"); _; } // --- constructor --- constructor(address voteDelegateFactory_, address usdsJoin_, bytes32 ilk_, address mkrSky_, address lsmkr_) { voteDelegateFactory = VoteDelegateFactoryLike(voteDelegateFactory_); usdsJoin = UsdsJoinLike(usdsJoin_); vat = usdsJoin.vat(); usds = usdsJoin.usds(); ilk = ilk_; mkrSky = MkrSkyLike(mkrSky_); mkr = mkrSky.mkr(); sky = mkrSky.sky(); mkrSkyRate = mkrSky.rate(); lsmkr = GemLike(lsmkr_); urnImplementation = address(new LockstakeUrn(address(vat), lsmkr_)); vat.hope(usdsJoin_); usds.approve(usdsJoin_, type(uint256).max); sky.approve(address(mkrSky), type(uint256).max); mkr.approve(address(mkrSky), type(uint256).max); wards[msg.sender] = 1; emit Rely(msg.sender); } // --- internals --- function _min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x <= y ? x : y; } function _divup(uint256 x, uint256 y) internal pure returns (uint256 z) { // Note: _divup(0,0) will return 0 differing from natural solidity division unchecked { z = x != 0 ? ((x - 1) / y) + 1 : 0; } } function _urnAuth(address owner, address urn, address usr) internal view returns (bool ok) { ok = owner == usr || urnCan[urn][usr] == 1; } function _getUrn(address owner, uint256 index) internal view returns (address urn) { urn = ownerUrns[owner][index]; require(urn != address(0), "LockstakeEngine/invalid-urn"); } function _getAuthedUrn(address owner, uint256 index) internal view returns (address urn) { urn = _getUrn(owner, index); require(_urnAuth(owner, urn, msg.sender), "LockstakeEngine/urn-not-authorized"); } // See the reference implementation in https://eips.ethereum.org/EIPS/eip-1167 function _initCode() internal view returns (bytes memory code) { code = new bytes(0x37); bytes20 impl = bytes20(urnImplementation); assembly { mstore(add(code, 0x20), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000) mstore(add(code, add(0x20, 0x14)), impl) mstore(add(code, add(0x20, 0x28)), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000) } } // --- administration --- function rely(address usr) external auth { wards[usr] = 1; emit Rely(usr); } function deny(address usr) external auth { wards[usr] = 0; emit Deny(usr); } function file(bytes32 what, address data) external auth { if (what == "jug") { jug = JugLike(data); } else revert("LockstakeEngine/file-unrecognized-param"); emit File(what, data); } function file(bytes32 what, uint256 data) external auth { if (what == "fee") { require(data < WAD, "LockstakeEngine/fee-equal-or-greater-wad"); fee = data; } else revert("LockstakeEngine/file-unrecognized-param"); emit File(what, data); } function addFarm(address farm) external auth { farms[farm] = FarmStatus.ACTIVE; emit AddFarm(farm); } function delFarm(address farm) external auth { farms[farm] = FarmStatus.DELETED; emit DelFarm(farm); } // --- getters --- function isUrnAuth(address owner, uint256 index, address usr) external view returns (bool ok) { ok = _urnAuth(owner, _getUrn(owner, index), usr); } // --- urn management functions --- function open(uint256 index) external returns (address urn) { require(index == ownerUrnsCount[msg.sender]++, "LockstakeEngine/wrong-urn-index"); bytes memory initCode = _initCode(); assembly { urn := create(0, add(initCode, 0x20), 0x37) } LockstakeUrn(urn).init(); // would revert if create had failed ownerUrns[msg.sender][index] = urn; urnOwners[urn] = msg.sender; emit Open(msg.sender, index, urn); } function hope(address owner, uint256 index, address usr) external { address urn = _getAuthedUrn(owner, index); urnCan[urn][usr] = 1; emit Hope(owner, index, usr); } function nope(address owner, uint256 index, address usr) external { address urn = _getAuthedUrn(owner, index); urnCan[urn][usr] = 0; emit Nope(owner, index, usr); } // --- delegation/staking functions --- function selectVoteDelegate(address owner, uint256 index, address voteDelegate) external { address urn = _getAuthedUrn(owner, index); require(urnAuctions[urn] == 0, "LockstakeEngine/urn-in-auction"); require(voteDelegate == address(0) || voteDelegateFactory.created(voteDelegate) == 1, "LockstakeEngine/not-valid-vote-delegate"); address prevVoteDelegate = urnVoteDelegates[urn]; require(prevVoteDelegate != voteDelegate, "LockstakeEngine/same-vote-delegate"); (uint256 ink, uint256 art) = vat.urns(ilk, urn); if (art > 0 && voteDelegate != address(0)) { (,, uint256 spot,,) = vat.ilks(ilk); require(ink * spot >= art * jug.drip(ilk), "LockstakeEngine/urn-unsafe"); } _selectVoteDelegate(urn, ink, prevVoteDelegate, voteDelegate); emit SelectVoteDelegate(owner, index, voteDelegate); } function _selectVoteDelegate(address urn, uint256 wad, address prevVoteDelegate, address voteDelegate) internal { if (wad > 0) { if (prevVoteDelegate != address(0)) { VoteDelegateLike(prevVoteDelegate).free(wad); } if (voteDelegate != address(0)) { mkr.approve(voteDelegate, wad); VoteDelegateLike(voteDelegate).lock(wad); } } urnVoteDelegates[urn] = voteDelegate; } function selectFarm(address owner, uint256 index, address farm, uint16 ref) external { address urn = _getAuthedUrn(owner, index); require(urnAuctions[urn] == 0, "LockstakeEngine/urn-in-auction"); require(farm == address(0) || farms[farm] == FarmStatus.ACTIVE, "LockstakeEngine/farm-unsupported-or-deleted"); address prevFarm = urnFarms[urn]; require(prevFarm != farm, "LockstakeEngine/same-farm"); (uint256 ink,) = vat.urns(ilk, urn); _selectFarm(urn, ink, prevFarm, farm, ref); emit SelectFarm(owner, index, farm, ref); } function _selectFarm(address urn, uint256 wad, address prevFarm, address farm, uint16 ref) internal { if (wad > 0) { if (prevFarm != address(0)) { LockstakeUrn(urn).withdraw(prevFarm, wad); } if (farm != address(0)) { LockstakeUrn(urn).stake(farm, wad, ref); } } urnFarms[urn] = farm; } function lock(address owner, uint256 index, uint256 wad, uint16 ref) external { address urn = _getUrn(owner, index); mkr.transferFrom(msg.sender, address(this), wad); _lock(urn, wad, ref); emit Lock(owner, index, wad, ref); } function lockSky(address owner, uint256 index, uint256 skyWad, uint16 ref) external { address urn = _getUrn(owner, index); sky.transferFrom(msg.sender, address(this), skyWad); mkrSky.skyToMkr(address(this), skyWad); _lock(urn, skyWad / mkrSkyRate, ref); emit LockSky(owner, index, skyWad, ref); } function _lock(address urn, uint256 wad, uint16 ref) internal { require(wad <= uint256(type(int256).max), "LockstakeEngine/overflow"); address voteDelegate = urnVoteDelegates[urn]; if (voteDelegate != address(0)) { mkr.approve(voteDelegate, wad); VoteDelegateLike(voteDelegate).lock(wad); } vat.slip(ilk, urn, int256(wad)); vat.frob(ilk, urn, urn, address(0), int256(wad), 0); lsmkr.mint(urn, wad); address urnFarm = urnFarms[urn]; if (urnFarm != address(0)) { require(farms[urnFarm] == FarmStatus.ACTIVE, "LockstakeEngine/farm-deleted"); LockstakeUrn(urn).stake(urnFarm, wad, ref); } } function free(address owner, uint256 index, address to, uint256 wad) external returns (uint256 freed) { address urn = _getAuthedUrn(owner, index); freed = _free(urn, wad, fee); mkr.transfer(to, freed); emit Free(owner, index, to, wad, freed); } function freeSky(address owner, uint256 index, address to, uint256 skyWad) external returns (uint256 skyFreed) { address urn = _getAuthedUrn(owner, index); uint256 wad = skyWad / mkrSkyRate; uint256 freed = _free(urn, wad, fee); skyFreed = freed * mkrSkyRate; mkrSky.mkrToSky(to, freed); emit FreeSky(owner, index, to, skyWad, skyFreed); } function freeNoFee(address owner, uint256 index, address to, uint256 wad) external auth { address urn = _getAuthedUrn(owner, index); _free(urn, wad, 0); mkr.transfer(to, wad); emit FreeNoFee(owner, index, to, wad); } function _free(address urn, uint256 wad, uint256 fee_) internal returns (uint256 freed) { require(wad <= uint256(type(int256).max), "LockstakeEngine/overflow"); address urnFarm = urnFarms[urn]; if (urnFarm != address(0)) { LockstakeUrn(urn).withdraw(urnFarm, wad); } lsmkr.burn(urn, wad); vat.frob(ilk, urn, urn, address(0), -int256(wad), 0); vat.slip(ilk, urn, -int256(wad)); address voteDelegate = urnVoteDelegates[urn]; if (voteDelegate != address(0)) { VoteDelegateLike(voteDelegate).free(wad); } uint256 burn = wad * fee_ / WAD; if (burn > 0) { mkr.burn(address(this), burn); } unchecked { freed = wad - burn; } // burn <= wad always } // --- loan functions --- function draw(address owner, uint256 index, address to, uint256 wad) external { address urn = _getAuthedUrn(owner, index); uint256 rate = jug.drip(ilk); uint256 dart = _divup(wad * RAY, rate); require(dart <= uint256(type(int256).max), "LockstakeEngine/overflow"); vat.frob(ilk, urn, address(0), address(this), 0, int256(dart)); usdsJoin.exit(to, wad); emit Draw(owner, index, to, wad); } function wipe(address owner, uint256 index, uint256 wad) external { address urn = _getUrn(owner, index); usds.transferFrom(msg.sender, address(this), wad); usdsJoin.join(address(this), wad); (, uint256 rate,,,) = vat.ilks(ilk); uint256 dart = wad * RAY / rate; require(dart <= uint256(type(int256).max), "LockstakeEngine/overflow"); vat.frob(ilk, urn, address(0), address(this), 0, -int256(dart)); emit Wipe(owner, index, wad); } function wipeAll(address owner, uint256 index) external returns (uint256 wad) { address urn = _getUrn(owner, index); (, uint256 art) = vat.urns(ilk, urn); require(art <= uint256(type(int256).max), "LockstakeEngine/overflow"); (, uint256 rate,,,) = vat.ilks(ilk); wad = _divup(art * rate, RAY); usds.transferFrom(msg.sender, address(this), wad); usdsJoin.join(address(this), wad); vat.frob(ilk, urn, address(0), address(this), 0, -int256(art)); emit Wipe(owner, index, wad); } // --- staking rewards function --- function getReward(address owner, uint256 index, address farm, address to) external returns (uint256 amt) { address urn = _getAuthedUrn(owner, index); require(farms[farm] > FarmStatus.UNSUPPORTED, "LockstakeEngine/farm-unsupported"); amt = LockstakeUrn(urn).getReward(farm, to); emit GetReward(owner, index, farm, to, amt); } // --- liquidation callback functions --- function onKick(address urn, uint256 wad) external auth { // Urn confiscation happens in Dog contract where ilk vat.gem is sent to the LockstakeClipper (uint256 ink,) = vat.urns(ilk, urn); uint256 inkBeforeKick = ink + wad; _selectVoteDelegate(urn, inkBeforeKick, urnVoteDelegates[urn], address(0)); _selectFarm(urn, inkBeforeKick, urnFarms[urn], address(0), 0); lsmkr.burn(urn, wad); urnAuctions[urn]++; emit OnKick(urn, wad); } function onTake(address urn, address who, uint256 wad) external auth { mkr.transfer(who, wad); // Free MKR to the auction buyer emit OnTake(urn, who, wad); } function onRemove(address urn, uint256 sold, uint256 left) external auth { uint256 burn; uint256 refund; if (left > 0) { uint256 fee_ = fee; burn = _min(sold * fee_ / (WAD - fee_), left); mkr.burn(address(this), burn); unchecked { refund = left - burn; } if (refund > 0) { // The following is ensured by the dog and clip but we still prefer to be explicit require(refund <= uint256(type(int256).max), "LockstakeEngine/overflow"); vat.slip(ilk, urn, int256(refund)); vat.grab(ilk, urn, urn, address(0), int256(refund), 0); lsmkr.mint(urn, refund); } } urnAuctions[urn]--; emit OnRemove(urn, sold, burn, refund); } }
// SPDX-FileCopyrightText: © 2023 Dai Foundation <www.daifoundation.org> // SPDX-License-Identifier: AGPL-3.0-or-later // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. pragma solidity ^0.8.21; interface VatLike { function hope(address) external; } interface GemLike { function balanceOf(address) external view returns (uint256); function approve(address, uint256) external; function transfer(address, uint256) external; } interface StakingRewardsLike { function rewardsToken() external view returns (GemLike); function stake(uint256, uint16) external; function withdraw(uint256) external; function getReward() external; } contract LockstakeUrn { // --- immutables --- address immutable public engine; GemLike immutable public lsmkr; VatLike immutable public vat; // --- modifiers --- modifier isEngine { require(msg.sender == engine, "LockstakeUrn/not-engine"); _; } // --- constructor & init --- constructor(address vat_, address lsmkr_) { engine = msg.sender; vat = VatLike(vat_); lsmkr = GemLike(lsmkr_); } function init() external isEngine { vat.hope(msg.sender); lsmkr.approve(msg.sender, type(uint256).max); } // --- staking functions --- function stake(address farm, uint256 wad, uint16 ref) external isEngine { lsmkr.approve(farm, wad); StakingRewardsLike(farm).stake(wad, ref); } function withdraw(address farm, uint256 wad) external isEngine { StakingRewardsLike(farm).withdraw(wad); } function getReward(address farm, address to) external isEngine returns (uint256 amt) { StakingRewardsLike(farm).getReward(); GemLike rewardsToken = StakingRewardsLike(farm).rewardsToken(); amt = rewardsToken.balanceOf(address(this)); rewardsToken.transfer(to, amt); } }
// SPDX-License-Identifier: GPL-2.0-or-later // Based on https://github.com/Uniswap/v3-periphery/blob/697c2474757ea89fec12a4e6db16a574fe259610/contracts/base/Multicall.sol pragma solidity ^0.8.21; // Enables calling multiple methods in a single call to the contract abstract contract Multicall { function multicall(bytes[] calldata data) external returns (bytes[] memory results) { results = new bytes[](data.length); for (uint256 i = 0; i < data.length; i++) { (bool success, bytes memory result) = address(this).delegatecall(data[i]); if (!success) { if (result.length == 0) revert("multicall failed"); assembly ("memory-safe") { revert(add(32, result), mload(result)) } } results[i] = result; } } }
{ "remappings": [ "dss-interfaces/=lib/token-tests/lib/dss-test/lib/dss-interfaces/src/", "dss-test/=lib/token-tests/lib/dss-test/src/", "forge-std/=lib/token-tests/lib/dss-test/lib/forge-std/src/", "token-tests/=lib/token-tests/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"voteDelegateFactory_","type":"address"},{"internalType":"address","name":"usdsJoin_","type":"address"},{"internalType":"bytes32","name":"ilk_","type":"bytes32"},{"internalType":"address","name":"mkrSky_","type":"address"},{"internalType":"address","name":"lsmkr_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"farm","type":"address"}],"name":"AddFarm","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"farm","type":"address"}],"name":"DelFarm","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Draw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"address","name":"data","type":"address"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"what","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"data","type":"uint256"}],"name":"File","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"freed","type":"uint256"}],"name":"Free","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"FreeNoFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"skyWad","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"skyFreed","type":"uint256"}],"name":"FreeSky","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"farm","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amt","type":"uint256"}],"name":"GetReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Hope","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"ref","type":"uint16"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"skyWad","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"ref","type":"uint16"}],"name":"LockSky","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Nope","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"urn","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"OnKick","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"urn","type":"address"},{"indexed":false,"internalType":"uint256","name":"sold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"refund","type":"uint256"}],"name":"OnRemove","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"urn","type":"address"},{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"OnTake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"urn","type":"address"}],"name":"Open","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"usr","type":"address"}],"name":"Rely","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"farm","type":"address"},{"indexed":false,"internalType":"uint16","name":"ref","type":"uint16"}],"name":"SelectFarm","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"voteDelegate","type":"address"}],"name":"SelectVoteDelegate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Wipe","type":"event"},{"inputs":[{"internalType":"address","name":"farm","type":"address"}],"name":"addFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"farm","type":"address"}],"name":"delFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"draw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"farm","type":"address"}],"name":"farms","outputs":[{"internalType":"enum LockstakeEngine.FarmStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"uint256","name":"data","type":"uint256"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"what","type":"bytes32"},{"internalType":"address","name":"data","type":"address"}],"name":"file","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"free","outputs":[{"internalType":"uint256","name":"freed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"freeNoFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"skyWad","type":"uint256"}],"name":"freeSky","outputs":[{"internalType":"uint256","name":"skyFreed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"farm","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"usr","type":"address"}],"name":"hope","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ilk","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"usr","type":"address"}],"name":"isUrnAuth","outputs":[{"internalType":"bool","name":"ok","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jug","outputs":[{"internalType":"contract JugLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"wad","type":"uint256"},{"internalType":"uint16","name":"ref","type":"uint16"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"skyWad","type":"uint256"},{"internalType":"uint16","name":"ref","type":"uint16"}],"name":"lockSky","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lsmkr","outputs":[{"internalType":"contract GemLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mkr","outputs":[{"internalType":"contract GemLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mkrSky","outputs":[{"internalType":"contract MkrSkyLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mkrSkyRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"usr","type":"address"}],"name":"nope","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"onKick","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"},{"internalType":"uint256","name":"sold","type":"uint256"},{"internalType":"uint256","name":"left","type":"uint256"}],"name":"onRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"},{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"onTake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"open","outputs":[{"internalType":"address","name":"urn","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"ownerUrns","outputs":[{"internalType":"address","name":"urn","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ownerUrnsCount","outputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"rely","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"farm","type":"address"},{"internalType":"uint16","name":"ref","type":"uint16"}],"name":"selectFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"voteDelegate","type":"address"}],"name":"selectVoteDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sky","outputs":[{"internalType":"contract GemLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"}],"name":"urnAuctions","outputs":[{"internalType":"uint256","name":"auctionsCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"},{"internalType":"address","name":"usr","type":"address"}],"name":"urnCan","outputs":[{"internalType":"uint256","name":"allowed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"}],"name":"urnFarms","outputs":[{"internalType":"address","name":"farm","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"urnImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"}],"name":"urnOwners","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"urn","type":"address"}],"name":"urnVoteDelegates","outputs":[{"internalType":"address","name":"voteDelegate","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usds","outputs":[{"internalType":"contract GemLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdsJoin","outputs":[{"internalType":"contract UsdsJoinLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vat","outputs":[{"internalType":"contract VatLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voteDelegateFactory","outputs":[{"internalType":"contract VoteDelegateFactoryLike","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"wards","outputs":[{"internalType":"uint256","name":"allowed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"wipe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"wipeAll","outputs":[{"internalType":"uint256","name":"wad","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101e06040523480156200001257600080fd5b50604051620052083803806200520883398101604081905262000035916200051f565b6001600160a01b03808616608052841660c0819052604080516336569e7760e01b815290516336569e77916004808201926020929091908290030181865afa15801562000086573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ac919062000593565b6001600160a01b031660a0816001600160a01b03168152505060c0516001600160a01b0316634cf282fb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000106573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012c919062000593565b6001600160a01b0390811660e052610100849052821661016081905260408051630fd3259760e31b81529051637e992cb8916004808201926020929091908290030181865afa15801562000184573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001aa919062000593565b6001600160a01b0316610120816001600160a01b031681525050610160516001600160a01b031663692318046040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000206573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022c919062000593565b6001600160a01b0316610180816001600160a01b031681525050610160516001600160a01b0316632c4e722e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000288573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ae9190620005ba565b6101a0526001600160a01b0381166101405260a0516040518290620002d390620004f8565b6001600160a01b03928316815291166020820152604001604051809103906000f08015801562000307573d6000803e3d6000fd5b506001600160a01b039081166101c05260a0516040516328ec8bf160e21b8152868316600482015291169063a3b22fc490602401600060405180830381600087803b1580156200035657600080fd5b505af11580156200036b573d6000803e3d6000fd5b505060e05160405163095ea7b360e01b81526001600160a01b0388811660048301526000196024830152909116925063095ea7b39150604401600060405180830381600087803b158015620003bf57600080fd5b505af1158015620003d4573d6000803e3d6000fd5b5050610180516101605160405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b39150604401600060405180830381600087803b1580156200042c57600080fd5b505af115801562000441573d6000803e3d6000fd5b5050610120516101605160405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116925063095ea7b39150604401600060405180830381600087803b1580156200049957600080fd5b505af1158015620004ae573d6000803e3d6000fd5b50503360008181526020819052604080822060019055519193507fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a60925090a25050505050620005d4565b6108cb806200493d83390190565b6001600160a01b03811681146200051c57600080fd5b50565b600080600080600060a086880312156200053857600080fd5b8551620005458162000506565b6020870151909550620005588162000506565b604087015160608801519195509350620005728162000506565b6080870151909250620005858162000506565b809150509295509295909350565b600060208284031215620005a657600080fd5b8151620005b38162000506565b9392505050565b600060208284031215620005cd57600080fd5b5051919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051614145620007f86000396000818161078901526139dd01526000818161053f01528181610eda015281816121eb01526122280152600081816104b80152610de90152600081816102b401528181610e69015261226701526000818161059f0152818161131a015281816116be01528181613091015261369a01526000818161051801528181610d0f01528181611118015281816119ae0152818161286b01528181612c8101528181612eda0152818161332801526134700152600081816106d6015281816109f001528181610ac501528181610b75015281816111c3015281816112a00152818161159a01528181611a8601528181611b6501528181611d5e01528181611e4b01528181611f5d0152818161272f01528181612a4c01528181612b6f0152818161312b015281816131de01528181613543015261362001526000818161041401528181611c4201526129540152600081816107b001528181611cc201528181611fd701526129d401526000818161039401528181610a2b01528181610aee0152818161120001528181611271015281816115d301528181611ac201528181611b8e01528181611d2f01528181611f300152818161276801528181612a7601528181612b48015281816130fc015281816131af0152818161358001526135f10152600081816102f8015261089c01526141456000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c806384718d8911610167578063bf0700fe116100ce578063d9c415f411610087578063d9c415f41461071e578063d9f0619214610747578063ddca3f431461077b578063e88e94be14610784578063fa1e2e86146107ab578063fdc56a18146107d257600080fd5b8063bf0700fe1461068b578063bf353dbb1461069e578063c3b6cb4b146106be578063c5ce281e146106d1578063d0294ea5146106f8578063d4e8be831461070b57600080fd5b8063aad8438711610120578063aad84387146105f4578063ac57c9bc14610607578063ac9650d81461061a578063aff7b07d1461063a578063b2b192e61461064d578063b5331d5e1461067857600080fd5b806384718d891461056157806390a01441146105745780639c52a7f1146105875780639da256771461059a578063a1c03731146105c1578063a496d520146105e157600080fd5b80634cf282fb1161020b57806369231804116101c457806369231804146104b35780636c3dead4146104da5780636ddb4566146104ed5780637abdf250146105005780637e992cb81461051357806381c44fcc1461053a57600080fd5b80634cf282fb1461040f57806358771079146104365780635c2e41c114610457578063631c84a51461046a57806365fae35e1461048d578063690e7c09146104a057600080fd5b806329ae81141161025d57806329ae8114146103405780632a95b45d146103535780632d074bbd1461037c57806336569e771461038f5780633d64fc52146103b6578063421adfa0146103df57600080fd5b80630adfd1bf1461029a57806315cd07b6146102af5780631b7a353e146102f35780631c6eb67b1461031a57806321e2e3691461032d575b600080fd5b6102ad6102a8366004613a6b565b6107f2565b005b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b6102ad610328366004613aa7565b610cae565b6102ad61033b366004613afd565b610dc3565b6102ad61034e366004613b43565b610f50565b6102d6610361366004613b65565b6007602052600090815260409020546001600160a01b031681565b6102ad61038a366004613b80565b611094565b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b6102d66103c4366004613b65565b6004602052600090815260409020546001600160a01b031681565b6104026103ed366004613b65565b60016020526000908152604090205460ff1681565b6040516102ea9190613bc9565b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b610449610444366004613bf1565b611404565b6040519081526020016102ea565b6102ad610465366004613c33565b61155c565b61047d610478366004613a6b565b611799565b60405190151581526020016102ea565b6102ad61049b366004613b65565b6117b7565b6102d66104ae366004613c5d565b61182b565b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b6102ad6104e8366004613afd565b611988565b6104496104fb366004613c33565b611a6a565b6102ad61050e366004613aa7565b611e2d565b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b6104497f000000000000000000000000000000000000000000000000000000000000000081565b6009546102d6906001600160a01b031681565b6102ad610582366004613a6b565b61208f565b6102ad610595366004613b65565b6120f9565b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b6104496105cf366004613b65565b60026020526000908152604090205481565b6102ad6105ef366004613a6b565b61216c565b610449610602366004613aa7565b6121d5565b6102ad610615366004613b65565b61232c565b61062d610628366004613c76565b6123b6565b6040516102ea9190613ceb565b6102ad610648366004613b65565b612518565b61044961065b366004613d7d565b600560209081526000928352604080842090915290825290205481565b6102ad610686366004613db0565b61259c565b610449610699366004613aa7565b612835565b6104496106ac366004613b65565b60006020819052908152604090205481565b6102ad6106cc366004613b80565b61292e565b6104497f000000000000000000000000000000000000000000000000000000000000000081565b6102ad610706366004613df2565b612c3b565b6102ad610719366004613e2e565b612d3c565b6102d661072c366004613b65565b6006602052600090815260409020546001600160a01b031681565b6102d6610755366004613c33565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b610449600a5481565b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b6104496107e0366004613b65565b60086020526000908152604090205481565b60006107fe8484612dce565b6001600160a01b0381166000908152600860205260409020549091501561086c5760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b7374616b65456e67696e652f75726e2d696e2d61756374696f6e000060448201526064015b60405180910390fd5b6001600160a01b038216158061090d575060405163d42efd8360e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063d42efd83906024016020604051808303816000875af11580156108e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109099190613e51565b6001145b6109695760405162461bcd60e51b815260206004820152602760248201527f4c6f636b7374616b65456e67696e652f6e6f742d76616c69642d766f74652d64604482015266656c656761746560c81b6064820152608401610863565b6001600160a01b03808216600090815260066020526040902054811690831681036109e15760405162461bcd60e51b815260206004820152602260248201527f4c6f636b7374616b65456e67696e652f73616d652d766f74652d64656c656761604482015261746560f01b6064820152608401610863565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b03838116602483015260009182917f00000000000000000000000000000000000000000000000000000000000000001690632424be5c906044016040805180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190613e6a565b91509150600081118015610ab157506001600160a01b03851615155b15610c5857604051636cb1c69b60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d9638d369060240160a060405180830381865afa158015610b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b619190613e8e565b505060095460405163089c54b560e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201529194506001600160a01b031692506344e2a5a891506024016020604051808303816000875af1158015610bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf49190613e51565b610bfe9083613ee4565b610c088285613ee4565b1015610c565760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b7374616b65456e67696e652f75726e2d756e736166650000000000006044820152606401610863565b505b610c6484838588612e44565b846001600160a01b031686886001600160a01b03167f7af85b23b513d22f5f9daec6f2ad07e68c4953757a0d52e2d1013a5cc4995cef60405160405180910390a450505050505050565b33600090815260208190526040902054600114610cdd5760405162461bcd60e51b815260040161086390613efb565b6000610ce98585612dce565b9050610cf781836000612fcf565b5060405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90610d469086908690600401613f32565b600060405180830381600087803b158015610d6057600080fd5b505af1158015610d74573d6000803e3d6000fd5b5050505083856001600160a01b03167fcd6427026c24aea1d465d0e880edc743f7ba98ea5a30a21702762edbb61c148d8585604051610db4929190613f32565b60405180910390a35050505050565b6000610dcf858561339e565b6040516323b872dd60e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610e2290339030908890600401613f4b565b600060405180830381600087803b158015610e3c57600080fd5b505af1158015610e50573d6000803e3d6000fd5b5050604051633093064560e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063c24c19149150610ea29030908790600401613f32565b600060405180830381600087803b158015610ebc57600080fd5b505af1158015610ed0573d6000803e3d6000fd5b50505050610f0a817f000000000000000000000000000000000000000000000000000000000000000085610f049190613f85565b84613411565b6040805184815261ffff8416602082015285916001600160a01b038816917fdbe1fb728973022399a0db0e7e89f75bc1e84a5c9023b3ea6ecfc12cd7c748169101610db4565b33600090815260208190526040902054600114610f7f5760405162461bcd60e51b815260040161086390613efb565b816266656560e81b03610ffe57670de0b6b3a76400008110610ff45760405162461bcd60e51b815260206004820152602860248201527f4c6f636b7374616b65456e67696e652f6665652d657175616c2d6f722d677265604482015267185d195c8b5dd85960c21b6064820152608401610863565b600a819055611056565b60405162461bcd60e51b815260206004820152602760248201527f4c6f636b7374616b65456e67696e652f66696c652d756e7265636f676e697a65604482015266642d706172616d60c81b6064820152608401610863565b817fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c78260405161108891815260200190565b60405180910390a25050565b336000908152602081905260409020546001146110c35760405162461bcd60e51b815260040161086390613efb565b600080821561138857600a546110fe6110e482670de0b6b3a7640000613fa7565b6110ee8388613ee4565b6110f89190613f85565b85613816565b604051632770a7eb60e21b81529093506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac9061114f9030908790600401613f32565b600060405180830381600087803b15801561116957600080fd5b505af115801561117d573d6000803e3d6000fd5b505050838503925050838314611386576001600160ff1b038211156111b45760405162461bcd60e51b815260040161086390613fba565b604051633e6e9fef60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b038781166024830152604482018490527f00000000000000000000000000000000000000000000000000000000000000001690637cdd3fde90606401600060405180830381600087803b15801561124457600080fd5b505af1158015611258573d6000803e3d6000fd5b50506040516301eeacfd60e61b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250637bab3f4091506112d3907f0000000000000000000000000000000000000000000000000000000000000000908a90819060009089908290600401613ff1565b600060405180830381600087803b1580156112ed57600080fd5b505af1158015611301573d6000803e3d6000fd5b50506040516340c10f1960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506340c10f1991506113539089908690600401613f32565b600060405180830381600087803b15801561136d57600080fd5b505af1158015611381573d6000803e3d6000fd5b505050505b505b6001600160a01b03851660009081526008602052604081208054916113ac83614026565b909155505060408051858152602081018490529081018290526001600160a01b038616907fbb73c7bd9a4eafb9de35122e727b77695cc0d396aedc338b3589407028b568f69060600160405180910390a25050505050565b6000806114118686612dce565b905060006001600160a01b03851660009081526001602052604090205460ff16600281111561144257611442613bb3565b1161148f5760405162461bcd60e51b815260206004820181905260248201527f4c6f636b7374616b65456e67696e652f6661726d2d756e737570706f727465646044820152606401610863565b604051636b09169560e01b81526001600160a01b0385811660048301528481166024830152821690636b091695906044016020604051808303816000875af11580156114df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115039190613e51565b9150836001600160a01b031685876001600160a01b03167fb0787e3944c17543aef2eb910c82d62e9ba80dabf5b15e371b09ac5728839700868660405161154b929190613f32565b60405180910390a450949350505050565b3360009081526020819052604090205460011461158b5760405162461bcd60e51b815260040161086390613efb565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0383811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690632424be5c906044016040805180830381865afa15801561161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163f9190613e6a565b509050600061164e838361403d565b6001600160a01b0380861660009081526006602052604081205492935061167b9287928592911690612e44565b6001600160a01b038085166000908152600760205260408120546116a79287928592909116908061382f565b604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac906116f59087908790600401613f32565b600060405180830381600087803b15801561170f57600080fd5b505af1158015611723573d6000803e3d6000fd5b505050506001600160a01b038416600090815260086020526040812080549161174b83614050565b9190505550836001600160a01b03167fee91ffe09782821749e0fd00ad3d404b7fb3e2e8520e77aa5549c900f696f5578460405161178b91815260200190565b60405180910390a250505050565b60006117af846117a9868661339e565b84613953565b949350505050565b336000908152602081905260409020546001146117e65760405162461bcd60e51b815260040161086390613efb565b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b3360009081526002602052604081208054908261184783614050565b9190505582146118995760405162461bcd60e51b815260206004820152601f60248201527f4c6f636b7374616b65456e67696e652f77726f6e672d75726e2d696e646578006044820152606401610863565b60006118a36139a1565b90506037602082016000f09150816001600160a01b031663e1c7392a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118eb57600080fd5b505af11580156118ff573d6000803e3d6000fd5b5050336000818152600360209081526040808320898452825280832080546001600160a01b038a166001600160a01b03199182168117909255818552600484529382902080549094168517909355519182528794509192507fdde6dd354074cad07a2dacbb612a6d2bac55ac537264d73250bf5c76bc15d64d910160405180910390a350919050565b6000611994858561339e565b6040516323b872dd60e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906119e790339030908890600401613f4b565b600060405180830381600087803b158015611a0157600080fd5b505af1158015611a15573d6000803e3d6000fd5b50505050611a24818484613411565b6040805184815261ffff8416602082015285916001600160a01b038816917f15a082f86d911273b558eb3797fc962ebe7cb22d787d8d13989e1ff0dc73a6079101610db4565b600080611a77848461339e565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0380831660248301529192506000917f00000000000000000000000000000000000000000000000000000000000000001690632424be5c906044016040805180830381865afa158015611b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2c9190613e6a565b9150506001600160ff1b03811115611b565760405162461bcd60e51b815260040161086390613fba565b604051636cb1c69b60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d9638d369060240160a060405180830381865afa158015611bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c019190613e8e565b505050915050611c288183611c169190613ee4565b6b033b2e3c9fd0803ce8000000613a21565b6040516323b872dd60e01b81529094506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90611c7b90339030908990600401613f4b565b600060405180830381600087803b158015611c9557600080fd5b505af1158015611ca9573d6000803e3d6000fd5b5050604051633b4da69f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250633b4da69f9150611cfb9030908890600401613f32565b600060405180830381600087803b158015611d1557600080fd5b505af1158015611d29573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663760887037f000000000000000000000000000000000000000000000000000000000000000085600030600088611d8d90614069565b6040518763ffffffff1660e01b8152600401611dae96959493929190613ff1565b600060405180830381600087803b158015611dc857600080fd5b505af1158015611ddc573d6000803e3d6000fd5b5050505084866001600160a01b03167f7c82d5b45cb4b7df16c473bcd2c3933a1651d1c91b9f17ebb2cccacbf29e03fd86604051611e1c91815260200190565b60405180910390a350505092915050565b6000611e398585612dce565b60095460405163089c54b560e31b81527f000000000000000000000000000000000000000000000000000000000000000060048201529192506000916001600160a01b03909116906344e2a5a8906024016020604051808303816000875af1158015611ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecd9190613e51565b90506000611ef0611eea6b033b2e3c9fd0803ce800000086613ee4565b83613a21565b90506001600160ff1b03811115611f195760405162461bcd60e51b815260040161086390613fba565b604051637608870360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637608870390611f90907f0000000000000000000000000000000000000000000000000000000000000000908790600090309082908990600401613ff1565b600060405180830381600087803b158015611faa57600080fd5b505af1158015611fbe573d6000803e3d6000fd5b505060405163ef693bed60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063ef693bed91506120109088908890600401613f32565b600060405180830381600087803b15801561202a57600080fd5b505af115801561203e573d6000803e3d6000fd5b5050505085876001600160a01b03167f970ddd008a8a27402f3bcac48972a48da4954fbd2493769baba2ad596e489566878760405161207e929190613f32565b60405180910390a350505050505050565b600061209b8484612dce565b6001600160a01b038082166000908152600560209081526040808320878516808552925280832060019055519394509286928816917fda1655dfbc632499abfa84202e0f5eda082634c6c927410ed51fc2213c3fb7d891a450505050565b336000908152602081905260409020546001146121285760405162461bcd60e51b815260040161086390613efb565b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b60006121788484612dce565b6001600160a01b0380821660009081526005602090815260408083208785168085529252808320839055519394509286928816917f81a57ff14cc36197cdb39b8075f925696024dc426d81c0c798dc4632a0eb4eb891a450505050565b6000806121e28686612dce565b905060006122107f000000000000000000000000000000000000000000000000000000000000000085613f85565b905060006122218383600a54612fcf565b905061224d7f000000000000000000000000000000000000000000000000000000000000000082613ee4565b6040516355c4b02d60e11b81529094506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ab89605a9061229e9089908590600401613f32565b600060405180830381600087803b1580156122b857600080fd5b505af11580156122cc573d6000803e3d6000fd5b5050604080516001600160a01b038a81168252602082018a90529181018890528a9350908b1691507f856e108038bf5b4b585e134533bf8c4d4bcd0f6f393342d8bd8eeac2360c5f1c9060600160405180910390a3505050949350505050565b3360009081526020819052604090205460011461235b5760405162461bcd60e51b815260040161086390613efb565b6001600160a01b038116600081815260016020908152604091829020805460ff1916600217905590519182527ffae8feabc29b75519fe202a936053f133aa6ee03453dcb7bbbe544d3b697061691015b60405180910390a150565b60608167ffffffffffffffff8111156123d1576123d1614085565b60405190808252806020026020018201604052801561240457816020015b60608152602001906001900390816123ef5790505b50905060005b8281101561251157600080308686858181106124285761242861409b565b905060200281019061243a91906140b1565b6040516124489291906140ff565b600060405180830381855af49150503d8060008114612483576040519150601f19603f3d011682016040523d82523d6000602084013e612488565b606091505b5091509150816124de5780516000036124d65760405162461bcd60e51b815260206004820152601060248201526f1b5d5b1d1a58d85b1b0819985a5b195960821b6044820152606401610863565b805181602001fd5b808484815181106124f1576124f161409b565b60200260200101819052505050808061250990614050565b91505061240a565b5092915050565b336000908152602081905260409020546001146125475760405162461bcd60e51b815260040161086390613efb565b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527f169dc17e0067f1d5a355eb6a2ab8d282a8569a96f0f3dc4776e9d62023fe6c3691016123ab565b60006125a88585612dce565b6001600160a01b038116600090815260086020526040902054909150156126115760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b7374616b65456e67696e652f75726e2d696e2d61756374696f6e00006044820152606401610863565b6001600160a01b0383161580612653575060016001600160a01b03841660009081526001602052604090205460ff16600281111561265157612651613bb3565b145b6126b35760405162461bcd60e51b815260206004820152602b60248201527f4c6f636b7374616b65456e67696e652f6661726d2d756e737570706f7274656460448201526a0b5bdc8b59195b195d195960aa1b6064820152608401610863565b6001600160a01b03808216600090815260076020526040902054811690841681036127205760405162461bcd60e51b815260206004820152601960248201527f4c6f636b7374616b65456e67696e652f73616d652d6661726d000000000000006044820152606401610863565b6040516309092f9760e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0383811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690632424be5c906044016040805180830381865afa1580156127b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d49190613e6a565b5090506127e4838284888861382f565b60405161ffff851681526001600160a01b038087169188918a16907fd434da22811bf2b5c3a8fc79e3d6644a80549c3159b7b28388eace49036f44c39060200160405180910390a450505050505050565b6000806128428686612dce565b90506128518184600a54612fcf565b60405163a9059cbb60e01b81529092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906128a29087908690600401613f32565b600060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b5050604080516001600160a01b0388811682526020820188905291810186905288935090891691507fde1819362eecc26ff17e717ad1e56b0154734cd5cc609494230256154e6c7ff09060600160405180910390a350949350505050565b600061293a848461339e565b6040516323b872dd60e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd9061298d90339030908790600401613f4b565b600060405180830381600087803b1580156129a757600080fd5b505af11580156129bb573d6000803e3d6000fd5b5050604051633b4da69f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169250633b4da69f9150612a0d9030908690600401613f32565b600060405180830381600087803b158015612a2757600080fd5b505af1158015612a3b573d6000803e3d6000fd5b5050604051636cb1c69b60e11b81527f00000000000000000000000000000000000000000000000000000000000000006004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316915063d9638d369060240160a060405180830381865afa158015612ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aea9190613e8e565b5050509150506000816b033b2e3c9fd0803ce800000085612b0b9190613ee4565b612b159190613f85565b90506001600160ff1b03811115612b3e5760405162461bcd60e51b815260040161086390613fba565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663760887037f00000000000000000000000000000000000000000000000000000000000000008560003081612b9c88614069565b6040518763ffffffff1660e01b8152600401612bbd96959493929190613ff1565b600060405180830381600087803b158015612bd757600080fd5b505af1158015612beb573d6000803e3d6000fd5b5050505084866001600160a01b03167f7c82d5b45cb4b7df16c473bcd2c3933a1651d1c91b9f17ebb2cccacbf29e03fd86604051612c2b91815260200190565b60405180910390a3505050505050565b33600090815260208190526040902054600114612c6a5760405162461bcd60e51b815260040161086390613efb565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb90612cb89085908590600401613f32565b600060405180830381600087803b158015612cd257600080fd5b505af1158015612ce6573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b03167f451bc655099856594a05cf3a385ce798360d63bc64e37b85d96e99a4b988fca683604051612d2f91815260200190565b60405180910390a3505050565b33600090815260208190526040902054600114612d6b5760405162461bcd60e51b815260040161086390613efb565b81626a756760e81b03610ffe57600980546001600160a01b0319166001600160a01b0383161790556040516001600160a01b038216815282907f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba90602001611088565b6000612dda838361339e565b9050612de7838233613953565b612e3e5760405162461bcd60e51b815260206004820152602260248201527f4c6f636b7374616b65456e67696e652f75726e2d6e6f742d617574686f72697a604482015261195960f21b6064820152608401610863565b92915050565b8215612f9e576001600160a01b03821615612eb45760405163d8ccd0f360e01b8152600481018490526001600160a01b0383169063d8ccd0f390602401600060405180830381600087803b158015612e9b57600080fd5b505af1158015612eaf573d6000803e3d6000fd5b505050505b6001600160a01b03811615612f9e5760405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390612f119084908790600401613f32565b600060405180830381600087803b158015612f2b57600080fd5b505af1158015612f3f573d6000803e3d6000fd5b50506040516337519c1960e21b8152600481018690526001600160a01b038416925063dd4670649150602401600060405180830381600087803b158015612f8557600080fd5b505af1158015612f99573d6000803e3d6000fd5b505050505b6001600160a01b03938416600090815260066020526040902080546001600160a01b03191691909416179092555050565b60006001600160ff1b03831115612ff85760405162461bcd60e51b815260040161086390613fba565b6001600160a01b0380851660009081526007602052604090205416801561307a5760405163f3fef3a360e01b81526001600160a01b0386169063f3fef3a3906130479084908890600401613f32565b600060405180830381600087803b15801561306157600080fd5b505af1158015613075573d6000803e3d6000fd5b505050505b604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac906130c89088908890600401613f32565b600060405180830381600087803b1580156130e257600080fd5b505af11580156130f6573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663760887037f0000000000000000000000000000000000000000000000000000000000000000878860008961315890614069565b60006040518763ffffffff1660e01b815260040161317b96959493929190613ff1565b600060405180830381600087803b15801561319557600080fd5b505af11580156131a9573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637cdd3fde7f0000000000000000000000000000000000000000000000000000000000000000878761320890614069565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b15801561325657600080fd5b505af115801561326a573d6000803e3d6000fd5b505050506001600160a01b038581166000908152600660205260409020541680156132ea5760405163d8ccd0f360e01b8152600481018690526001600160a01b0382169063d8ccd0f390602401600060405180830381600087803b1580156132d157600080fd5b505af11580156132e5573d6000803e3d6000fd5b505050505b6000670de0b6b3a76400006132ff8688613ee4565b6133099190613f85565b9050801561339257604051632770a7eb60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639dc29fac9061335f9030908590600401613f32565b600060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b505050505b90940395945050505050565b6001600160a01b0380831660009081526003602090815260408083208584529091529020541680612e3e5760405162461bcd60e51b815260206004820152601b60248201527f4c6f636b7374616b65456e67696e652f696e76616c69642d75726e00000000006044820152606401610863565b6001600160ff1b038211156134385760405162461bcd60e51b815260040161086390613fba565b6001600160a01b038084166000908152600660205260409020541680156135345760405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906134a79084908790600401613f32565b600060405180830381600087803b1580156134c157600080fd5b505af11580156134d5573d6000803e3d6000fd5b50506040516337519c1960e21b8152600481018690526001600160a01b038416925063dd4670649150602401600060405180830381600087803b15801561351b57600080fd5b505af115801561352f573d6000803e3d6000fd5b505050505b604051633e6e9fef60e11b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b038581166024830152604482018590527f00000000000000000000000000000000000000000000000000000000000000001690637cdd3fde90606401600060405180830381600087803b1580156135c457600080fd5b505af11580156135d8573d6000803e3d6000fd5b5050604051637608870360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063760887039150613653907f000000000000000000000000000000000000000000000000000000000000000090889081906000908a908290600401613ff1565b600060405180830381600087803b15801561366d57600080fd5b505af1158015613681573d6000803e3d6000fd5b50506040516340c10f1960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506340c10f1991506136d39087908790600401613f32565b600060405180830381600087803b1580156136ed57600080fd5b505af1158015613701573d6000803e3d6000fd5b505050506001600160a01b0384811660009081526007602052604090205416801561380f5760016001600160a01b03821660009081526001602052604090205460ff16600281111561375557613755613bb3565b146137a25760405162461bcd60e51b815260206004820152601c60248201527f4c6f636b7374616b65456e67696e652f6661726d2d64656c65746564000000006044820152606401610863565b60405163e62d29df60e01b81526001600160a01b0382811660048301526024820186905261ffff8516604483015286169063e62d29df90606401600060405180830381600087803b1580156137f657600080fd5b505af115801561380a573d6000803e3d6000fd5b505050505b5050505050565b6000818311156138265781613828565b825b9392505050565b8315613921576001600160a01b038316156138a55760405163f3fef3a360e01b81526001600160a01b0386169063f3fef3a3906138729086908890600401613f32565b600060405180830381600087803b15801561388c57600080fd5b505af11580156138a0573d6000803e3d6000fd5b505050505b6001600160a01b038216156139215760405163e62d29df60e01b81526001600160a01b0383811660048301526024820186905261ffff8316604483015286169063e62d29df90606401600060405180830381600087803b15801561390857600080fd5b505af115801561391c573d6000803e3d6000fd5b505050505b506001600160a01b03938416600090815260076020526040902080546001600160a01b03191691909416179092555050565b6000816001600160a01b0316846001600160a01b031614806117af57506001600160a01b03808416600090815260056020908152604080832093861683529290522054600114949350505050565b60408051603780825260608281019093526020820181803683375050733d602d80600a3d3981f3363d3d373d3d3d363d7360601b6020830152507f000000000000000000000000000000000000000000000000000000000000000060601b60348201526e5af43d82803e903d91602b57fd5bf360881b6048820152919050565b600082600003613a32576000613828565b816001840381613a4457613a44613f6f565b046001019392505050565b80356001600160a01b0381168114613a6657600080fd5b919050565b600080600060608486031215613a8057600080fd5b613a8984613a4f565b925060208401359150613a9e60408501613a4f565b90509250925092565b60008060008060808587031215613abd57600080fd5b613ac685613a4f565b935060208501359250613adb60408601613a4f565b9396929550929360600135925050565b803561ffff81168114613a6657600080fd5b60008060008060808587031215613b1357600080fd5b613b1c85613a4f565b93506020850135925060408501359150613b3860608601613aeb565b905092959194509250565b60008060408385031215613b5657600080fd5b50508035926020909101359150565b600060208284031215613b7757600080fd5b61382882613a4f565b600080600060608486031215613b9557600080fd5b613b9e84613a4f565b95602085013595506040909401359392505050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310613beb57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060008060808587031215613c0757600080fd5b613c1085613a4f565b935060208501359250613c2560408601613a4f565b9150613b3860608601613a4f565b60008060408385031215613c4657600080fd5b613c4f83613a4f565b946020939093013593505050565b600060208284031215613c6f57600080fd5b5035919050565b60008060208385031215613c8957600080fd5b823567ffffffffffffffff80821115613ca157600080fd5b818501915085601f830112613cb557600080fd5b813581811115613cc457600080fd5b8660208260051b8501011115613cd957600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b83811015613d6f57888603603f1901855282518051808852835b81811015613d48578281018a01518982018b01528901613d2d565b508781018901849052601f01601f1916909601870195509386019391860191600101613d13565b509398975050505050505050565b60008060408385031215613d9057600080fd5b613d9983613a4f565b9150613da760208401613a4f565b90509250929050565b60008060008060808587031215613dc657600080fd5b613dcf85613a4f565b935060208501359250613de460408601613a4f565b9150613b3860608601613aeb565b600080600060608486031215613e0757600080fd5b613e1084613a4f565b9250613e1e60208501613a4f565b9150604084013590509250925092565b60008060408385031215613e4157600080fd5b82359150613da760208401613a4f565b600060208284031215613e6357600080fd5b5051919050565b60008060408385031215613e7d57600080fd5b505080516020909101519092909150565b600080600080600060a08688031215613ea657600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417612e3e57612e3e613ece565b6020808252601e908201527f4c6f636b7374616b65456e67696e652f6e6f742d617574686f72697a65640000604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b600082613fa257634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612e3e57612e3e613ece565b60208082526018908201527f4c6f636b7374616b65456e67696e652f6f766572666c6f770000000000000000604082015260600190565b9586526001600160a01b039485166020870152928416604086015292166060840152608083019190915260a082015260c00190565b60008161403557614035613ece565b506000190190565b80820180821115612e3e57612e3e613ece565b60006001820161406257614062613ece565b5060010190565b6000600160ff1b820161407e5761407e613ece565b5060000390565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126140c857600080fd5b83018035915067ffffffffffffffff8211156140e357600080fd5b6020019150368190038213156140f857600080fd5b9250929050565b818382376000910190815291905056fea2646970667358221220757a8cfcb9263f107c8af55d3e81dfebf38d6a268f32caaa6476abd2bb9df4cb64736f6c6343000815003360e060405234801561001057600080fd5b506040516108cb3803806108cb83398101604081905261002f91610066565b336080526001600160a01b0391821660c0521660a052610099565b80516001600160a01b038116811461006157600080fd5b919050565b6000806040838503121561007957600080fd5b6100828361004a565b91506100906020840161004a565b90509250929050565b60805160a05160c0516107d46100f760003960008181608701526103a401526000818160ec0152818161042301526104f901526000818161011301528181610172015281816103520152818161049601526105c901526107d46000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063c9d4623f1161005b578063c9d4623f1461010e578063e1c7392a14610135578063e62d29df1461013f578063f3fef3a31461015257600080fd5b806336569e77146100825780636b091695146100c65780639da25677146100e7575b600080fd5b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100d96100d436600461067c565b610165565b6040519081526020016100bd565b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b6100a97f000000000000000000000000000000000000000000000000000000000000000081565b61013d610347565b005b61013d61014d3660046106b5565b61048b565b61013d6101603660046106fe565b6105be565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101b85760405162461bcd60e51b81526004016101af9061072a565b60405180910390fd5b826001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156101f357600080fd5b505af1158015610207573d6000803e3d6000fd5b505050506000836001600160a01b031663d1af0c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026f9190610761565b6040516370a0823160e01b81523060048201529091506001600160a01b038216906370a0823190602401602060405180830381865afa1580156102b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102da9190610785565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529193509082169063a9059cbb90604401600060405180830381600087803b15801561032857600080fd5b505af115801561033c573d6000803e3d6000fd5b505050505092915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461038f5760405162461bcd60e51b81526004016101af9061072a565b6040516328ec8bf160e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a3b22fc490602401600060405180830381600087803b1580156103f057600080fd5b505af1158015610404573d6000803e3d6000fd5b505060405163095ea7b360e01b815233600482015260001960248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063095ea7b39150604401600060405180830381600087803b15801561047157600080fd5b505af1158015610485573d6000803e3d6000fd5b50505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104d35760405162461bcd60e51b81526004016101af9061072a565b60405163095ea7b360e01b81526001600160a01b038481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401600060405180830381600087803b15801561053d57600080fd5b505af1158015610551573d6000803e3d6000fd5b50506040516342ea02c160e01b81526004810185905261ffff841660248201526001600160a01b03861692506342ea02c19150604401600060405180830381600087803b1580156105a157600080fd5b505af11580156105b5573d6000803e3d6000fd5b50505050505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106065760405162461bcd60e51b81526004016101af9061072a565b604051632e1a7d4d60e01b8152600481018290526001600160a01b03831690632e1a7d4d90602401600060405180830381600087803b15801561064857600080fd5b505af115801561065c573d6000803e3d6000fd5b505050505050565b6001600160a01b038116811461067957600080fd5b50565b6000806040838503121561068f57600080fd5b823561069a81610664565b915060208301356106aa81610664565b809150509250929050565b6000806000606084860312156106ca57600080fd5b83356106d581610664565b925060208401359150604084013561ffff811681146106f357600080fd5b809150509250925092565b6000806040838503121561071157600080fd5b823561071c81610664565b946020939093013593505050565b60208082526017908201527f4c6f636b7374616b6555726e2f6e6f742d656e67696e65000000000000000000604082015260600190565b60006020828403121561077357600080fd5b815161077e81610664565b9392505050565b60006020828403121561079757600080fd5b505191905056fea2646970667358221220282dc506696be9a4732f729b9bfe9063cf130b3f6d43f2b15f0fce4ae8da196f64736f6c63430008150033000000000000000000000000c3d809e87a2c9da4f6d98fecea9135d834d6f5a00000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb4c53452d4d4b522d410000000000000000000000000000000000000000000000000000000000000000000000bdcfca946b6cdd965f99a839e4435bcdc1bc470b000000000000000000000000b4e0e45e142101dc3ed768bac219fc35edbed295
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102955760003560e01c806384718d8911610167578063bf0700fe116100ce578063d9c415f411610087578063d9c415f41461071e578063d9f0619214610747578063ddca3f431461077b578063e88e94be14610784578063fa1e2e86146107ab578063fdc56a18146107d257600080fd5b8063bf0700fe1461068b578063bf353dbb1461069e578063c3b6cb4b146106be578063c5ce281e146106d1578063d0294ea5146106f8578063d4e8be831461070b57600080fd5b8063aad8438711610120578063aad84387146105f4578063ac57c9bc14610607578063ac9650d81461061a578063aff7b07d1461063a578063b2b192e61461064d578063b5331d5e1461067857600080fd5b806384718d891461056157806390a01441146105745780639c52a7f1146105875780639da256771461059a578063a1c03731146105c1578063a496d520146105e157600080fd5b80634cf282fb1161020b57806369231804116101c457806369231804146104b35780636c3dead4146104da5780636ddb4566146104ed5780637abdf250146105005780637e992cb81461051357806381c44fcc1461053a57600080fd5b80634cf282fb1461040f57806358771079146104365780635c2e41c114610457578063631c84a51461046a57806365fae35e1461048d578063690e7c09146104a057600080fd5b806329ae81141161025d57806329ae8114146103405780632a95b45d146103535780632d074bbd1461037c57806336569e771461038f5780633d64fc52146103b6578063421adfa0146103df57600080fd5b80630adfd1bf1461029a57806315cd07b6146102af5780631b7a353e146102f35780631c6eb67b1461031a57806321e2e3691461032d575b600080fd5b6102ad6102a8366004613a6b565b6107f2565b005b6102d67f000000000000000000000000bdcfca946b6cdd965f99a839e4435bcdc1bc470b81565b6040516001600160a01b0390911681526020015b60405180910390f35b6102d67f000000000000000000000000c3d809e87a2c9da4f6d98fecea9135d834d6f5a081565b6102ad610328366004613aa7565b610cae565b6102ad61033b366004613afd565b610dc3565b6102ad61034e366004613b43565b610f50565b6102d6610361366004613b65565b6007602052600090815260409020546001600160a01b031681565b6102ad61038a366004613b80565b611094565b6102d67f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b6102d66103c4366004613b65565b6004602052600090815260409020546001600160a01b031681565b6104026103ed366004613b65565b60016020526000908152604090205460ff1681565b6040516102ea9190613bc9565b6102d67f000000000000000000000000dc035d45d973e3ec169d2276ddab16f1e407384f81565b610449610444366004613bf1565b611404565b6040519081526020016102ea565b6102ad610465366004613c33565b61155c565b61047d610478366004613a6b565b611799565b60405190151581526020016102ea565b6102ad61049b366004613b65565b6117b7565b6102d66104ae366004613c5d565b61182b565b6102d67f00000000000000000000000056072c95faa701256059aa122697b133aded927981565b6102ad6104e8366004613afd565b611988565b6104496104fb366004613c33565b611a6a565b6102ad61050e366004613aa7565b611e2d565b6102d67f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a281565b6104497f0000000000000000000000000000000000000000000000000000000000005dc081565b6009546102d6906001600160a01b031681565b6102ad610582366004613a6b565b61208f565b6102ad610595366004613b65565b6120f9565b6102d67f000000000000000000000000b4e0e45e142101dc3ed768bac219fc35edbed29581565b6104496105cf366004613b65565b60026020526000908152604090205481565b6102ad6105ef366004613a6b565b61216c565b610449610602366004613aa7565b6121d5565b6102ad610615366004613b65565b61232c565b61062d610628366004613c76565b6123b6565b6040516102ea9190613ceb565b6102ad610648366004613b65565b612518565b61044961065b366004613d7d565b600560209081526000928352604080842090915290825290205481565b6102ad610686366004613db0565b61259c565b610449610699366004613aa7565b612835565b6104496106ac366004613b65565b60006020819052908152604090205481565b6102ad6106cc366004613b80565b61292e565b6104497f4c53452d4d4b522d41000000000000000000000000000000000000000000000081565b6102ad610706366004613df2565b612c3b565b6102ad610719366004613e2e565b612d3c565b6102d661072c366004613b65565b6006602052600090815260409020546001600160a01b031681565b6102d6610755366004613c33565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b610449600a5481565b6102d67f00000000000000000000000028cd1e92fd9c9b7400f46688cc20e74024d30ada81565b6102d67f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb81565b6104496107e0366004613b65565b60086020526000908152604090205481565b60006107fe8484612dce565b6001600160a01b0381166000908152600860205260409020549091501561086c5760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b7374616b65456e67696e652f75726e2d696e2d61756374696f6e000060448201526064015b60405180910390fd5b6001600160a01b038216158061090d575060405163d42efd8360e01b81526001600160a01b0383811660048301527f000000000000000000000000c3d809e87a2c9da4f6d98fecea9135d834d6f5a0169063d42efd83906024016020604051808303816000875af11580156108e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109099190613e51565b6001145b6109695760405162461bcd60e51b815260206004820152602760248201527f4c6f636b7374616b65456e67696e652f6e6f742d76616c69642d766f74652d64604482015266656c656761746560c81b6064820152608401610863565b6001600160a01b03808216600090815260066020526040902054811690831681036109e15760405162461bcd60e51b815260206004820152602260248201527f4c6f636b7374616b65456e67696e652f73616d652d766f74652d64656c656761604482015261746560f01b6064820152608401610863565b6040516309092f9760e21b81527f4c53452d4d4b522d41000000000000000000000000000000000000000000000060048201526001600160a01b03838116602483015260009182917f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1690632424be5c906044016040805180830381865afa158015610a71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a959190613e6a565b91509150600081118015610ab157506001600160a01b03851615155b15610c5857604051636cb1c69b60e11b81527f4c53452d4d4b522d41000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b03169063d9638d369060240160a060405180830381865afa158015610b3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b619190613e8e565b505060095460405163089c54b560e31b81527f4c53452d4d4b522d41000000000000000000000000000000000000000000000060048201529194506001600160a01b031692506344e2a5a891506024016020604051808303816000875af1158015610bd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf49190613e51565b610bfe9083613ee4565b610c088285613ee4565b1015610c565760405162461bcd60e51b815260206004820152601a60248201527f4c6f636b7374616b65456e67696e652f75726e2d756e736166650000000000006044820152606401610863565b505b610c6484838588612e44565b846001600160a01b031686886001600160a01b03167f7af85b23b513d22f5f9daec6f2ad07e68c4953757a0d52e2d1013a5cc4995cef60405160405180910390a450505050505050565b33600090815260208190526040902054600114610cdd5760405162461bcd60e51b815260040161086390613efb565b6000610ce98585612dce565b9050610cf781836000612fcf565b5060405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2169063a9059cbb90610d469086908690600401613f32565b600060405180830381600087803b158015610d6057600080fd5b505af1158015610d74573d6000803e3d6000fd5b5050505083856001600160a01b03167fcd6427026c24aea1d465d0e880edc743f7ba98ea5a30a21702762edbb61c148d8585604051610db4929190613f32565b60405180910390a35050505050565b6000610dcf858561339e565b6040516323b872dd60e01b81529091506001600160a01b037f00000000000000000000000056072c95faa701256059aa122697b133aded927916906323b872dd90610e2290339030908890600401613f4b565b600060405180830381600087803b158015610e3c57600080fd5b505af1158015610e50573d6000803e3d6000fd5b5050604051633093064560e21b81526001600160a01b037f000000000000000000000000bdcfca946b6cdd965f99a839e4435bcdc1bc470b16925063c24c19149150610ea29030908790600401613f32565b600060405180830381600087803b158015610ebc57600080fd5b505af1158015610ed0573d6000803e3d6000fd5b50505050610f0a817f0000000000000000000000000000000000000000000000000000000000005dc085610f049190613f85565b84613411565b6040805184815261ffff8416602082015285916001600160a01b038816917fdbe1fb728973022399a0db0e7e89f75bc1e84a5c9023b3ea6ecfc12cd7c748169101610db4565b33600090815260208190526040902054600114610f7f5760405162461bcd60e51b815260040161086390613efb565b816266656560e81b03610ffe57670de0b6b3a76400008110610ff45760405162461bcd60e51b815260206004820152602860248201527f4c6f636b7374616b65456e67696e652f6665652d657175616c2d6f722d677265604482015267185d195c8b5dd85960c21b6064820152608401610863565b600a819055611056565b60405162461bcd60e51b815260206004820152602760248201527f4c6f636b7374616b65456e67696e652f66696c652d756e7265636f676e697a65604482015266642d706172616d60c81b6064820152608401610863565b817fe986e40cc8c151830d4f61050f4fb2e4add8567caad2d5f5496f9158e91fe4c78260405161108891815260200190565b60405180910390a25050565b336000908152602081905260409020546001146110c35760405162461bcd60e51b815260040161086390613efb565b600080821561138857600a546110fe6110e482670de0b6b3a7640000613fa7565b6110ee8388613ee4565b6110f89190613f85565b85613816565b604051632770a7eb60e21b81529093506001600160a01b037f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a21690639dc29fac9061114f9030908790600401613f32565b600060405180830381600087803b15801561116957600080fd5b505af115801561117d573d6000803e3d6000fd5b505050838503925050838314611386576001600160ff1b038211156111b45760405162461bcd60e51b815260040161086390613fba565b604051633e6e9fef60e11b81527f4c53452d4d4b522d41000000000000000000000000000000000000000000000060048201526001600160a01b038781166024830152604482018490527f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1690637cdd3fde90606401600060405180830381600087803b15801561124457600080fd5b505af1158015611258573d6000803e3d6000fd5b50506040516301eeacfd60e61b81526001600160a01b037f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b169250637bab3f4091506112d3907f4c53452d4d4b522d410000000000000000000000000000000000000000000000908a90819060009089908290600401613ff1565b600060405180830381600087803b1580156112ed57600080fd5b505af1158015611301573d6000803e3d6000fd5b50506040516340c10f1960e01b81526001600160a01b037f000000000000000000000000b4e0e45e142101dc3ed768bac219fc35edbed2951692506340c10f1991506113539089908690600401613f32565b600060405180830381600087803b15801561136d57600080fd5b505af1158015611381573d6000803e3d6000fd5b505050505b505b6001600160a01b03851660009081526008602052604081208054916113ac83614026565b909155505060408051858152602081018490529081018290526001600160a01b038616907fbb73c7bd9a4eafb9de35122e727b77695cc0d396aedc338b3589407028b568f69060600160405180910390a25050505050565b6000806114118686612dce565b905060006001600160a01b03851660009081526001602052604090205460ff16600281111561144257611442613bb3565b1161148f5760405162461bcd60e51b815260206004820181905260248201527f4c6f636b7374616b65456e67696e652f6661726d2d756e737570706f727465646044820152606401610863565b604051636b09169560e01b81526001600160a01b0385811660048301528481166024830152821690636b091695906044016020604051808303816000875af11580156114df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115039190613e51565b9150836001600160a01b031685876001600160a01b03167fb0787e3944c17543aef2eb910c82d62e9ba80dabf5b15e371b09ac5728839700868660405161154b929190613f32565b60405180910390a450949350505050565b3360009081526020819052604090205460011461158b5760405162461bcd60e51b815260040161086390613efb565b6040516309092f9760e21b81527f4c53452d4d4b522d41000000000000000000000000000000000000000000000060048201526001600160a01b0383811660248301526000917f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b90911690632424be5c906044016040805180830381865afa15801561161b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163f9190613e6a565b509050600061164e838361403d565b6001600160a01b0380861660009081526006602052604081205492935061167b9287928592911690612e44565b6001600160a01b038085166000908152600760205260408120546116a79287928592909116908061382f565b604051632770a7eb60e21b81526001600160a01b037f000000000000000000000000b4e0e45e142101dc3ed768bac219fc35edbed2951690639dc29fac906116f59087908790600401613f32565b600060405180830381600087803b15801561170f57600080fd5b505af1158015611723573d6000803e3d6000fd5b505050506001600160a01b038416600090815260086020526040812080549161174b83614050565b9190505550836001600160a01b03167fee91ffe09782821749e0fd00ad3d404b7fb3e2e8520e77aa5549c900f696f5578460405161178b91815260200190565b60405180910390a250505050565b60006117af846117a9868661339e565b84613953565b949350505050565b336000908152602081905260409020546001146117e65760405162461bcd60e51b815260040161086390613efb565b6001600160a01b03811660008181526020819052604080822060019055517fdd0e34038ac38b2a1ce960229778ac48a8719bc900b6c4f8d0475c6e8b385a609190a250565b3360009081526002602052604081208054908261184783614050565b9190505582146118995760405162461bcd60e51b815260206004820152601f60248201527f4c6f636b7374616b65456e67696e652f77726f6e672d75726e2d696e646578006044820152606401610863565b60006118a36139a1565b90506037602082016000f09150816001600160a01b031663e1c7392a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118eb57600080fd5b505af11580156118ff573d6000803e3d6000fd5b5050336000818152600360209081526040808320898452825280832080546001600160a01b038a166001600160a01b03199182168117909255818552600484529382902080549094168517909355519182528794509192507fdde6dd354074cad07a2dacbb612a6d2bac55ac537264d73250bf5c76bc15d64d910160405180910390a350919050565b6000611994858561339e565b6040516323b872dd60e01b81529091506001600160a01b037f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a216906323b872dd906119e790339030908890600401613f4b565b600060405180830381600087803b158015611a0157600080fd5b505af1158015611a15573d6000803e3d6000fd5b50505050611a24818484613411565b6040805184815261ffff8416602082015285916001600160a01b038816917f15a082f86d911273b558eb3797fc962ebe7cb22d787d8d13989e1ff0dc73a6079101610db4565b600080611a77848461339e565b6040516309092f9760e21b81527f4c53452d4d4b522d41000000000000000000000000000000000000000000000060048201526001600160a01b0380831660248301529192506000917f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1690632424be5c906044016040805180830381865afa158015611b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2c9190613e6a565b9150506001600160ff1b03811115611b565760405162461bcd60e51b815260040161086390613fba565b604051636cb1c69b60e11b81527f4c53452d4d4b522d41000000000000000000000000000000000000000000000060048201526000907f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b03169063d9638d369060240160a060405180830381865afa158015611bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c019190613e8e565b505050915050611c288183611c169190613ee4565b6b033b2e3c9fd0803ce8000000613a21565b6040516323b872dd60e01b81529094506001600160a01b037f000000000000000000000000dc035d45d973e3ec169d2276ddab16f1e407384f16906323b872dd90611c7b90339030908990600401613f4b565b600060405180830381600087803b158015611c9557600080fd5b505af1158015611ca9573d6000803e3d6000fd5b5050604051633b4da69f60e01b81526001600160a01b037f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb169250633b4da69f9150611cfb9030908890600401613f32565b600060405180830381600087803b158015611d1557600080fd5b505af1158015611d29573d6000803e3d6000fd5b505050507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b031663760887037f4c53452d4d4b522d41000000000000000000000000000000000000000000000085600030600088611d8d90614069565b6040518763ffffffff1660e01b8152600401611dae96959493929190613ff1565b600060405180830381600087803b158015611dc857600080fd5b505af1158015611ddc573d6000803e3d6000fd5b5050505084866001600160a01b03167f7c82d5b45cb4b7df16c473bcd2c3933a1651d1c91b9f17ebb2cccacbf29e03fd86604051611e1c91815260200190565b60405180910390a350505092915050565b6000611e398585612dce565b60095460405163089c54b560e31b81527f4c53452d4d4b522d41000000000000000000000000000000000000000000000060048201529192506000916001600160a01b03909116906344e2a5a8906024016020604051808303816000875af1158015611ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecd9190613e51565b90506000611ef0611eea6b033b2e3c9fd0803ce800000086613ee4565b83613a21565b90506001600160ff1b03811115611f195760405162461bcd60e51b815260040161086390613fba565b604051637608870360e01b81526001600160a01b037f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1690637608870390611f90907f4c53452d4d4b522d410000000000000000000000000000000000000000000000908790600090309082908990600401613ff1565b600060405180830381600087803b158015611faa57600080fd5b505af1158015611fbe573d6000803e3d6000fd5b505060405163ef693bed60e01b81526001600160a01b037f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb16925063ef693bed91506120109088908890600401613f32565b600060405180830381600087803b15801561202a57600080fd5b505af115801561203e573d6000803e3d6000fd5b5050505085876001600160a01b03167f970ddd008a8a27402f3bcac48972a48da4954fbd2493769baba2ad596e489566878760405161207e929190613f32565b60405180910390a350505050505050565b600061209b8484612dce565b6001600160a01b038082166000908152600560209081526040808320878516808552925280832060019055519394509286928816917fda1655dfbc632499abfa84202e0f5eda082634c6c927410ed51fc2213c3fb7d891a450505050565b336000908152602081905260409020546001146121285760405162461bcd60e51b815260040161086390613efb565b6001600160a01b038116600081815260208190526040808220829055517f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b9190a250565b60006121788484612dce565b6001600160a01b0380821660009081526005602090815260408083208785168085529252808320839055519394509286928816917f81a57ff14cc36197cdb39b8075f925696024dc426d81c0c798dc4632a0eb4eb891a450505050565b6000806121e28686612dce565b905060006122107f0000000000000000000000000000000000000000000000000000000000005dc085613f85565b905060006122218383600a54612fcf565b905061224d7f0000000000000000000000000000000000000000000000000000000000005dc082613ee4565b6040516355c4b02d60e11b81529094506001600160a01b037f000000000000000000000000bdcfca946b6cdd965f99a839e4435bcdc1bc470b169063ab89605a9061229e9089908590600401613f32565b600060405180830381600087803b1580156122b857600080fd5b505af11580156122cc573d6000803e3d6000fd5b5050604080516001600160a01b038a81168252602082018a90529181018890528a9350908b1691507f856e108038bf5b4b585e134533bf8c4d4bcd0f6f393342d8bd8eeac2360c5f1c9060600160405180910390a3505050949350505050565b3360009081526020819052604090205460011461235b5760405162461bcd60e51b815260040161086390613efb565b6001600160a01b038116600081815260016020908152604091829020805460ff1916600217905590519182527ffae8feabc29b75519fe202a936053f133aa6ee03453dcb7bbbe544d3b697061691015b60405180910390a150565b60608167ffffffffffffffff8111156123d1576123d1614085565b60405190808252806020026020018201604052801561240457816020015b60608152602001906001900390816123ef5790505b50905060005b8281101561251157600080308686858181106124285761242861409b565b905060200281019061243a91906140b1565b6040516124489291906140ff565b600060405180830381855af49150503d8060008114612483576040519150601f19603f3d011682016040523d82523d6000602084013e612488565b606091505b5091509150816124de5780516000036124d65760405162461bcd60e51b815260206004820152601060248201526f1b5d5b1d1a58d85b1b0819985a5b195960821b6044820152606401610863565b805181602001fd5b808484815181106124f1576124f161409b565b60200260200101819052505050808061250990614050565b91505061240a565b5092915050565b336000908152602081905260409020546001146125475760405162461bcd60e51b815260040161086390613efb565b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527f169dc17e0067f1d5a355eb6a2ab8d282a8569a96f0f3dc4776e9d62023fe6c3691016123ab565b60006125a88585612dce565b6001600160a01b038116600090815260086020526040902054909150156126115760405162461bcd60e51b815260206004820152601e60248201527f4c6f636b7374616b65456e67696e652f75726e2d696e2d61756374696f6e00006044820152606401610863565b6001600160a01b0383161580612653575060016001600160a01b03841660009081526001602052604090205460ff16600281111561265157612651613bb3565b145b6126b35760405162461bcd60e51b815260206004820152602b60248201527f4c6f636b7374616b65456e67696e652f6661726d2d756e737570706f7274656460448201526a0b5bdc8b59195b195d195960aa1b6064820152608401610863565b6001600160a01b03808216600090815260076020526040902054811690841681036127205760405162461bcd60e51b815260206004820152601960248201527f4c6f636b7374616b65456e67696e652f73616d652d6661726d000000000000006044820152606401610863565b6040516309092f9760e21b81527f4c53452d4d4b522d41000000000000000000000000000000000000000000000060048201526001600160a01b0383811660248301526000917f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b90911690632424be5c906044016040805180830381865afa1580156127b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d49190613e6a565b5090506127e4838284888861382f565b60405161ffff851681526001600160a01b038087169188918a16907fd434da22811bf2b5c3a8fc79e3d6644a80549c3159b7b28388eace49036f44c39060200160405180910390a450505050505050565b6000806128428686612dce565b90506128518184600a54612fcf565b60405163a9059cbb60e01b81529092506001600160a01b037f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2169063a9059cbb906128a29087908690600401613f32565b600060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b5050604080516001600160a01b0388811682526020820188905291810186905288935090891691507fde1819362eecc26ff17e717ad1e56b0154734cd5cc609494230256154e6c7ff09060600160405180910390a350949350505050565b600061293a848461339e565b6040516323b872dd60e01b81529091506001600160a01b037f000000000000000000000000dc035d45d973e3ec169d2276ddab16f1e407384f16906323b872dd9061298d90339030908790600401613f4b565b600060405180830381600087803b1580156129a757600080fd5b505af11580156129bb573d6000803e3d6000fd5b5050604051633b4da69f60e01b81526001600160a01b037f0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb169250633b4da69f9150612a0d9030908690600401613f32565b600060405180830381600087803b158015612a2757600080fd5b505af1158015612a3b573d6000803e3d6000fd5b5050604051636cb1c69b60e11b81527f4c53452d4d4b522d4100000000000000000000000000000000000000000000006004820152600092507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b0316915063d9638d369060240160a060405180830381865afa158015612ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aea9190613e8e565b5050509150506000816b033b2e3c9fd0803ce800000085612b0b9190613ee4565b612b159190613f85565b90506001600160ff1b03811115612b3e5760405162461bcd60e51b815260040161086390613fba565b6001600160a01b037f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1663760887037f4c53452d4d4b522d4100000000000000000000000000000000000000000000008560003081612b9c88614069565b6040518763ffffffff1660e01b8152600401612bbd96959493929190613ff1565b600060405180830381600087803b158015612bd757600080fd5b505af1158015612beb573d6000803e3d6000fd5b5050505084866001600160a01b03167f7c82d5b45cb4b7df16c473bcd2c3933a1651d1c91b9f17ebb2cccacbf29e03fd86604051612c2b91815260200190565b60405180910390a3505050505050565b33600090815260208190526040902054600114612c6a5760405162461bcd60e51b815260040161086390613efb565b60405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2169063a9059cbb90612cb89085908590600401613f32565b600060405180830381600087803b158015612cd257600080fd5b505af1158015612ce6573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b03167f451bc655099856594a05cf3a385ce798360d63bc64e37b85d96e99a4b988fca683604051612d2f91815260200190565b60405180910390a3505050565b33600090815260208190526040902054600114612d6b5760405162461bcd60e51b815260040161086390613efb565b81626a756760e81b03610ffe57600980546001600160a01b0319166001600160a01b0383161790556040516001600160a01b038216815282907f8fef588b5fc1afbf5b2f06c1a435d513f208da2e6704c3d8f0e0ec91167066ba90602001611088565b6000612dda838361339e565b9050612de7838233613953565b612e3e5760405162461bcd60e51b815260206004820152602260248201527f4c6f636b7374616b65456e67696e652f75726e2d6e6f742d617574686f72697a604482015261195960f21b6064820152608401610863565b92915050565b8215612f9e576001600160a01b03821615612eb45760405163d8ccd0f360e01b8152600481018490526001600160a01b0383169063d8ccd0f390602401600060405180830381600087803b158015612e9b57600080fd5b505af1158015612eaf573d6000803e3d6000fd5b505050505b6001600160a01b03811615612f9e5760405163095ea7b360e01b81526001600160a01b037f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2169063095ea7b390612f119084908790600401613f32565b600060405180830381600087803b158015612f2b57600080fd5b505af1158015612f3f573d6000803e3d6000fd5b50506040516337519c1960e21b8152600481018690526001600160a01b038416925063dd4670649150602401600060405180830381600087803b158015612f8557600080fd5b505af1158015612f99573d6000803e3d6000fd5b505050505b6001600160a01b03938416600090815260066020526040902080546001600160a01b03191691909416179092555050565b60006001600160ff1b03831115612ff85760405162461bcd60e51b815260040161086390613fba565b6001600160a01b0380851660009081526007602052604090205416801561307a5760405163f3fef3a360e01b81526001600160a01b0386169063f3fef3a3906130479084908890600401613f32565b600060405180830381600087803b15801561306157600080fd5b505af1158015613075573d6000803e3d6000fd5b505050505b604051632770a7eb60e21b81526001600160a01b037f000000000000000000000000b4e0e45e142101dc3ed768bac219fc35edbed2951690639dc29fac906130c89088908890600401613f32565b600060405180830381600087803b1580156130e257600080fd5b505af11580156130f6573d6000803e3d6000fd5b505050507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b031663760887037f4c53452d4d4b522d410000000000000000000000000000000000000000000000878860008961315890614069565b60006040518763ffffffff1660e01b815260040161317b96959493929190613ff1565b600060405180830381600087803b15801561319557600080fd5b505af11580156131a9573d6000803e3d6000fd5b505050507f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b6001600160a01b0316637cdd3fde7f4c53452d4d4b522d410000000000000000000000000000000000000000000000878761320890614069565b6040516001600160e01b031960e086901b16815260048101939093526001600160a01b0390911660248301526044820152606401600060405180830381600087803b15801561325657600080fd5b505af115801561326a573d6000803e3d6000fd5b505050506001600160a01b038581166000908152600660205260409020541680156132ea5760405163d8ccd0f360e01b8152600481018690526001600160a01b0382169063d8ccd0f390602401600060405180830381600087803b1580156132d157600080fd5b505af11580156132e5573d6000803e3d6000fd5b505050505b6000670de0b6b3a76400006132ff8688613ee4565b6133099190613f85565b9050801561339257604051632770a7eb60e21b81526001600160a01b037f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a21690639dc29fac9061335f9030908590600401613f32565b600060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b505050505b90940395945050505050565b6001600160a01b0380831660009081526003602090815260408083208584529091529020541680612e3e5760405162461bcd60e51b815260206004820152601b60248201527f4c6f636b7374616b65456e67696e652f696e76616c69642d75726e00000000006044820152606401610863565b6001600160ff1b038211156134385760405162461bcd60e51b815260040161086390613fba565b6001600160a01b038084166000908152600660205260409020541680156135345760405163095ea7b360e01b81526001600160a01b037f0000000000000000000000009f8f72aa9304c8b593d555f12ef6589cc3a579a2169063095ea7b3906134a79084908790600401613f32565b600060405180830381600087803b1580156134c157600080fd5b505af11580156134d5573d6000803e3d6000fd5b50506040516337519c1960e21b8152600481018690526001600160a01b038416925063dd4670649150602401600060405180830381600087803b15801561351b57600080fd5b505af115801561352f573d6000803e3d6000fd5b505050505b604051633e6e9fef60e11b81527f4c53452d4d4b522d41000000000000000000000000000000000000000000000060048201526001600160a01b038581166024830152604482018590527f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b1690637cdd3fde90606401600060405180830381600087803b1580156135c457600080fd5b505af11580156135d8573d6000803e3d6000fd5b5050604051637608870360e01b81526001600160a01b037f00000000000000000000000035d1b3f3d7966a1dfe207aa4514c12a259a0492b16925063760887039150613653907f4c53452d4d4b522d41000000000000000000000000000000000000000000000090889081906000908a908290600401613ff1565b600060405180830381600087803b15801561366d57600080fd5b505af1158015613681573d6000803e3d6000fd5b50506040516340c10f1960e01b81526001600160a01b037f000000000000000000000000b4e0e45e142101dc3ed768bac219fc35edbed2951692506340c10f1991506136d39087908790600401613f32565b600060405180830381600087803b1580156136ed57600080fd5b505af1158015613701573d6000803e3d6000fd5b505050506001600160a01b0384811660009081526007602052604090205416801561380f5760016001600160a01b03821660009081526001602052604090205460ff16600281111561375557613755613bb3565b146137a25760405162461bcd60e51b815260206004820152601c60248201527f4c6f636b7374616b65456e67696e652f6661726d2d64656c65746564000000006044820152606401610863565b60405163e62d29df60e01b81526001600160a01b0382811660048301526024820186905261ffff8516604483015286169063e62d29df90606401600060405180830381600087803b1580156137f657600080fd5b505af115801561380a573d6000803e3d6000fd5b505050505b5050505050565b6000818311156138265781613828565b825b9392505050565b8315613921576001600160a01b038316156138a55760405163f3fef3a360e01b81526001600160a01b0386169063f3fef3a3906138729086908890600401613f32565b600060405180830381600087803b15801561388c57600080fd5b505af11580156138a0573d6000803e3d6000fd5b505050505b6001600160a01b038216156139215760405163e62d29df60e01b81526001600160a01b0383811660048301526024820186905261ffff8316604483015286169063e62d29df90606401600060405180830381600087803b15801561390857600080fd5b505af115801561391c573d6000803e3d6000fd5b505050505b506001600160a01b03938416600090815260076020526040902080546001600160a01b03191691909416179092555050565b6000816001600160a01b0316846001600160a01b031614806117af57506001600160a01b03808416600090815260056020908152604080832093861683529290522054600114949350505050565b60408051603780825260608281019093526020820181803683375050733d602d80600a3d3981f3363d3d373d3d3d363d7360601b6020830152507f00000000000000000000000028cd1e92fd9c9b7400f46688cc20e74024d30ada60601b60348201526e5af43d82803e903d91602b57fd5bf360881b6048820152919050565b600082600003613a32576000613828565b816001840381613a4457613a44613f6f565b046001019392505050565b80356001600160a01b0381168114613a6657600080fd5b919050565b600080600060608486031215613a8057600080fd5b613a8984613a4f565b925060208401359150613a9e60408501613a4f565b90509250925092565b60008060008060808587031215613abd57600080fd5b613ac685613a4f565b935060208501359250613adb60408601613a4f565b9396929550929360600135925050565b803561ffff81168114613a6657600080fd5b60008060008060808587031215613b1357600080fd5b613b1c85613a4f565b93506020850135925060408501359150613b3860608601613aeb565b905092959194509250565b60008060408385031215613b5657600080fd5b50508035926020909101359150565b600060208284031215613b7757600080fd5b61382882613a4f565b600080600060608486031215613b9557600080fd5b613b9e84613a4f565b95602085013595506040909401359392505050565b634e487b7160e01b600052602160045260246000fd5b6020810160038310613beb57634e487b7160e01b600052602160045260246000fd5b91905290565b60008060008060808587031215613c0757600080fd5b613c1085613a4f565b935060208501359250613c2560408601613a4f565b9150613b3860608601613a4f565b60008060408385031215613c4657600080fd5b613c4f83613a4f565b946020939093013593505050565b600060208284031215613c6f57600080fd5b5035919050565b60008060208385031215613c8957600080fd5b823567ffffffffffffffff80821115613ca157600080fd5b818501915085601f830112613cb557600080fd5b813581811115613cc457600080fd5b8660208260051b8501011115613cd957600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b87010192508387016000805b83811015613d6f57888603603f1901855282518051808852835b81811015613d48578281018a01518982018b01528901613d2d565b508781018901849052601f01601f1916909601870195509386019391860191600101613d13565b509398975050505050505050565b60008060408385031215613d9057600080fd5b613d9983613a4f565b9150613da760208401613a4f565b90509250929050565b60008060008060808587031215613dc657600080fd5b613dcf85613a4f565b935060208501359250613de460408601613a4f565b9150613b3860608601613aeb565b600080600060608486031215613e0757600080fd5b613e1084613a4f565b9250613e1e60208501613a4f565b9150604084013590509250925092565b60008060408385031215613e4157600080fd5b82359150613da760208401613a4f565b600060208284031215613e6357600080fd5b5051919050565b60008060408385031215613e7d57600080fd5b505080516020909101519092909150565b600080600080600060a08688031215613ea657600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417612e3e57612e3e613ece565b6020808252601e908201527f4c6f636b7374616b65456e67696e652f6e6f742d617574686f72697a65640000604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b600082613fa257634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115612e3e57612e3e613ece565b60208082526018908201527f4c6f636b7374616b65456e67696e652f6f766572666c6f770000000000000000604082015260600190565b9586526001600160a01b039485166020870152928416604086015292166060840152608083019190915260a082015260c00190565b60008161403557614035613ece565b506000190190565b80820180821115612e3e57612e3e613ece565b60006001820161406257614062613ece565b5060010190565b6000600160ff1b820161407e5761407e613ece565b5060000390565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126140c857600080fd5b83018035915067ffffffffffffffff8211156140e357600080fd5b6020019150368190038213156140f857600080fd5b9250929050565b818382376000910190815291905056fea2646970667358221220757a8cfcb9263f107c8af55d3e81dfebf38d6a268f32caaa6476abd2bb9df4cb64736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c3d809e87a2c9da4f6d98fecea9135d834d6f5a00000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb4c53452d4d4b522d410000000000000000000000000000000000000000000000000000000000000000000000bdcfca946b6cdd965f99a839e4435bcdc1bc470b000000000000000000000000b4e0e45e142101dc3ed768bac219fc35edbed295
-----Decoded View---------------
Arg [0] : voteDelegateFactory_ (address): 0xC3D809E87A2C9da4F6d98fECea9135d834d6F5A0
Arg [1] : usdsJoin_ (address): 0x3C0f895007CA717Aa01c8693e59DF1e8C3777FEB
Arg [2] : ilk_ (bytes32): 0x4c53452d4d4b522d410000000000000000000000000000000000000000000000
Arg [3] : mkrSky_ (address): 0xBDcFCA946b6CDd965f99a839e4435Bcdc1bc470B
Arg [4] : lsmkr_ (address): 0xb4e0e45e142101dC3Ed768bac219fC35EDBED295
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000c3d809e87a2c9da4f6d98fecea9135d834d6f5a0
Arg [1] : 0000000000000000000000003c0f895007ca717aa01c8693e59df1e8c3777feb
Arg [2] : 4c53452d4d4b522d410000000000000000000000000000000000000000000000
Arg [3] : 000000000000000000000000bdcfca946b6cdd965f99a839e4435bcdc1bc470b
Arg [4] : 000000000000000000000000b4e0e45e142101dc3ed768bac219fc35edbed295
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $1,593.85 | 27,704.8586 | $44,157,388.95 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.