Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 30 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Process Guild Ac... | 11114127 | 1974 days ago | IN | 0 ETH | 0.00270057 | ||||
| Process Guild Ac... | 11114123 | 1974 days ago | IN | 0 ETH | 0.00286936 | ||||
| Process Guild Ac... | 11114117 | 1974 days ago | IN | 0 ETH | 0.00286559 | ||||
| Process Guild Ac... | 11114113 | 1974 days ago | IN | 0 ETH | 0.00683502 | ||||
| Process Guild Ac... | 11114109 | 1974 days ago | IN | 0 ETH | 0.00548554 | ||||
| Process Guild Ac... | 11114099 | 1974 days ago | IN | 0 ETH | 0.00658265 | ||||
| Sponsor Proposal | 10996334 | 1992 days ago | IN | 0 ETH | 0.01047607 | ||||
| Submit Guild Act... | 10996331 | 1992 days ago | IN | 0 ETH | 0.0187928 | ||||
| Sponsor Proposal | 10996267 | 1992 days ago | IN | 0 ETH | 0.00996426 | ||||
| Submit Guild Act... | 10996260 | 1992 days ago | IN | 0 ETH | 0.02123067 | ||||
| Submit Vote | 10821427 | 2019 days ago | IN | 0 ETH | 0.00933169 | ||||
| Submit Vote | 10821427 | 2019 days ago | IN | 0 ETH | 0.00977301 | ||||
| Sponsor Proposal | 10817674 | 2020 days ago | IN | 0 ETH | 0.01048099 | ||||
| Submit Guild Act... | 10817666 | 2020 days ago | IN | 0 ETH | 0.01788201 | ||||
| Sponsor Proposal | 10817657 | 2020 days ago | IN | 0 ETH | 0.010603 | ||||
| Submit Guild Act... | 10817654 | 2020 days ago | IN | 0 ETH | 0.02127447 | ||||
| Claim Shares | 10804574 | 2022 days ago | IN | 0 ETH | 0.01646472 | ||||
| Sponsor Proposal | 10680703 | 2041 days ago | IN | 0 ETH | 0.0109871 | ||||
| Sponsor Proposal | 10680703 | 2041 days ago | IN | 0 ETH | 0.01098624 | ||||
| Submit Guild Act... | 10680650 | 2041 days ago | IN | 0 ETH | 0.02507113 | ||||
| Submit Guild Act... | 10680650 | 2041 days ago | IN | 0 ETH | 0.02481183 | ||||
| Process Whitelis... | 10641113 | 2047 days ago | IN | 0 ETH | 0.01846618 | ||||
| Process Proposal | 10632752 | 2048 days ago | IN | 0 ETH | 0.01471324 | ||||
| Submit Vote | 10628721 | 2049 days ago | IN | 0 ETH | 0.00479016 | ||||
| Submit Vote | 10627087 | 2049 days ago | IN | 0 ETH | 0.0095427 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 10621803 | 2050 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MysticMoloch
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-08-08
*/
pragma solidity 0.5.17;
library SafeMath { // wrappers over solidity arithmetic operations with added overflow checks
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a);
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b);
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0);
uint256 c = a / b;
return c;
}
}
interface IERC20 { // brief interface for moloch erc20 token txs
function balanceOf(address who) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
contract ReentrancyGuard { // contract module that helps prevent reentrant calls to a function
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor () internal {
_status = _NOT_ENTERED;
}
modifier nonReentrant() {
require(_status != _ENTERED, "reentrant call");
_status = _ENTERED;
_;
_status = _NOT_ENTERED;
}
}
interface IWETH { // brief interface for canonical ether token wrapper contract
function deposit() payable external;
function transfer(address dst, uint wad) external returns (bool);
}
contract MysticMoloch is ReentrancyGuard {
using SafeMath for uint256;
/***************
GLOBAL CONSTANTS
***************/
address public depositToken; // deposit token contract reference; default = wETH
address public voteToken; // wrapper token contract reference for guild voting shares
address public wETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // canonical ether token wrapper contract reference
uint256 public proposalDeposit; // default = 10 ETH (~$1,000 worth of ETH at contract deployment)
uint256 public processingReward; // default = 0.1 - amount of ETH to give to whoever processes a proposal
uint256 public periodDuration; // default = 17280 = 4.8 hours in seconds (5 periods per day)
uint256 public votingPeriodLength; // default = 35 periods (7 days)
uint256 public gracePeriodLength; // default = 35 periods (7 days)
uint256 public dilutionBound; // default = 3 - maximum multiplier a YES voter will be obligated to pay in case of mass ragequit
uint256 public summoningTime; // needed to determine the current period
// HARD-CODED LIMITS
// These numbers are quite arbitrary; they are small enough to avoid overflows when doing calculations
// with periods or shares, yet big enough to not limit reasonable use cases.
uint256 constant MAX_GUILD_BOUND = 10**36; // maximum bound for guild shares / loot (reflects guild token 18 decimal default)
uint256 constant MAX_TOKEN_WHITELIST_COUNT = 400; // maximum number of whitelisted tokens
uint256 constant MAX_TOKEN_GUILDBANK_COUNT = 200; // maximum number of tokens with non-zero balance in guildbank
// BANK TOKEN DETAILS
string private _name = "Moloch DAO v2x Bank";
string private _symbol = "MOL-V2X";
uint8 private _decimals = 18;
// ***************
// EVENTS
// ***************
event SubmitProposal(address indexed applicant, uint256 sharesRequested, uint256 lootRequested, uint256 tributeOffered, address tributeToken, uint256 paymentRequested, address paymentToken, bytes32 details, uint8[7] flags, bytes actionData, uint256 proposalId, address indexed delegateKey, address indexed memberAddress);
event CancelProposal(uint256 indexed proposalId, address applicantAddress);
event SponsorProposal(address indexed delegateKey, address indexed memberAddress, uint256 proposalId, uint256 proposalIndex, uint256 startingPeriod);
event SubmitVote(uint256 proposalId, uint256 indexed proposalIndex, address indexed delegateKey, address indexed memberAddress, uint8 uintVote);
event ProcessProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
event ProcessWhitelistProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
event ProcessGuildActionProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
event ProcessGuildKickProposal(uint256 indexed proposalIndex, uint256 indexed proposalId, bool didPass);
event UpdateDelegateKey(address indexed memberAddress, address newDelegateKey);
event Transfer(address indexed from, address indexed to, uint256 amount); // guild token mint, burn & (loot) transfer tracking
event Ragequit(address indexed memberAddress, uint256 sharesToBurn, uint256 lootToBurn);
event TokensCollected(address indexed token, uint256 amountToCollect);
event Withdraw(address indexed memberAddress, address token, uint256 amount);
// *******************
// INTERNAL ACCOUNTING
// *******************
address public constant GUILD = address(0xfeed);
address public constant ESCROW = address(0xbeef);
address public constant TOTAL = address(0xbabe);
uint256 public proposalCount; // total proposals submitted
uint256 public totalShares; // total shares across all members
uint256 public totalLoot; // total loot across all members
uint256 public totalGuildBankTokens; // total tokens with non-zero balance in guild bank
mapping(uint256 => Action) public actions; // proposalId => Action
mapping(address => uint256) private balances; // guild token balances
mapping(address => mapping(address => uint256)) private userTokenBalances; // userTokenBalances[userAddress][tokenAddress]
enum Vote {
Null, // default value, counted as abstention
Yes,
No
}
struct Member {
address delegateKey; // the key responsible for submitting proposals and voting - defaults to member address unless updated
uint8 exists; // always true (1) once a member has been created
uint256 shares; // the # of voting shares assigned to this member
uint256 loot; // the loot amount available to this member (combined with shares on ragekick) / transferable by guild token
uint256 highestIndexYesVote; // highest proposal index # on which the member voted YES
uint256 jailed; // set to proposalIndex of a passing guild kick proposal for this member, prevents voting on and sponsoring proposals
}
struct Action {
address to; // target for function call
uint256 value; // ether value in function call, if any
bytes data; // raw data for function call
}
struct Proposal {
address applicant; // the applicant who wishes to become a member - this key will be used for withdrawals (doubles as guild kick target for gkick proposals)
address proposer; // the account that submitted the proposal (can be non-member)
address sponsor; // the member that sponsored the proposal (moving it into the queue)
address tributeToken; // tribute token contract reference
address paymentToken; // payment token contract reference
uint8[7] flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
uint256 sharesRequested; // the # of shares the applicant is requesting
uint256 lootRequested; // the amount of loot the applicant is requesting
uint256 paymentRequested; // amount of tokens requested as payment
uint256 tributeOffered; // amount of tokens offered as tribute
uint256 startingPeriod; // the period in which voting can start for this proposal
uint256 yesVotes; // the total number of YES votes for this proposal
uint256 noVotes; // the total number of NO votes for this proposal
uint256 maxTotalSharesAndLootAtYesVote; // the maximum # of total shares encountered at a yes vote on this proposal
bytes32 details; // proposal details to add context for members
mapping(address => Vote) votesByMember; // the votes on this proposal by each member
}
mapping(address => bool) public tokenWhitelist;
address[] public approvedTokens;
mapping(address => bool) public proposedToWhitelist;
mapping(address => bool) public proposedToKick;
mapping(address => Member) public members;
mapping(address => address) public memberAddressByDelegateKey;
mapping(uint256 => Proposal) public proposals;
uint256[] private proposalQueue;
modifier onlyDelegate {
require(members[memberAddressByDelegateKey[msg.sender]].shares > 0, "not delegate");
_;
}
constructor(
address _depositToken,
address _voteToken,
address[] memory _summoner,
uint256[] memory _summonerShares,
uint256 _summonerDeposit,
uint256 _proposalDeposit,
uint256 _processingReward,
uint256 _periodDuration,
uint256 _votingPeriodLength,
uint256 _gracePeriodLength,
uint256 _dilutionBound
) public {
for (uint256 i = 0; i < _summoner.length; i++) {
registerMember(_summoner[i], _summonerShares[i]);
mintGuildToken(_summoner[i], _summonerShares[i]);
totalShares += _summonerShares[i];
}
require(totalShares <= MAX_GUILD_BOUND, "guild maxed");
tokenWhitelist[_depositToken] = true;
approvedTokens.push(_depositToken);
if (_summonerDeposit > 0) {
totalGuildBankTokens += 1;
unsafeAddToBalance(GUILD, _depositToken, _summonerDeposit);
}
depositToken = _depositToken;
voteToken = _voteToken;
proposalDeposit = _proposalDeposit;
processingReward = _processingReward;
periodDuration = _periodDuration;
votingPeriodLength = _votingPeriodLength;
gracePeriodLength = _gracePeriodLength;
dilutionBound = _dilutionBound;
summoningTime = now;
}
/*****************
PROPOSAL FUNCTIONS
*****************/
function submitProposal(
address applicant,
uint256 sharesRequested,
uint256 lootRequested,
uint256 tributeOffered,
address tributeToken,
uint256 paymentRequested,
address paymentToken,
bytes32 details
) payable external nonReentrant returns (uint256 proposalId) {
require(sharesRequested.add(lootRequested) <= MAX_GUILD_BOUND, "guild maxed");
require(tokenWhitelist[tributeToken], "tributeToken not whitelisted");
require(tokenWhitelist[paymentToken], "paymentToken not whitelisted");
require(applicant != GUILD && applicant != ESCROW && applicant != TOTAL, "applicant unreservable");
require(members[applicant].jailed == 0, "applicant jailed");
if (tributeOffered > 0 && userTokenBalances[GUILD][tributeToken] == 0) {
require(totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT, "guildbank maxed");
}
// collect tribute from proposer and store it in the Moloch until the proposal is processed / if ether, wrap into wETH
if (tributeToken == wETH && msg.value > 0) {
require(msg.value == tributeOffered, "insufficient ETH");
IWETH(wETH).deposit();
(bool success, ) = wETH.call.value(msg.value)("");
require(success, "transfer failed");
IWETH(wETH).transfer(address(this), msg.value);
} else {
require(IERC20(tributeToken).transferFrom(msg.sender, address(this), tributeOffered), "transfer failed");
}
unsafeAddToBalance(ESCROW, tributeToken, tributeOffered);
uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
_submitProposal(applicant, sharesRequested, lootRequested, tributeOffered, tributeToken, paymentRequested, paymentToken, details, flags, "");
return proposalCount - 1; // return proposalId - contracts calling submit might want it
}
function submitWhitelistProposal(address tokenToWhitelist, bytes32 details) external returns (uint256 proposalId) {
require(tokenToWhitelist != address(0), "need token");
require(tokenToWhitelist != voteToken, "whitelist/voteToken match");
require(!tokenWhitelist[tokenToWhitelist], "already whitelisted");
require(approvedTokens.length < MAX_TOKEN_WHITELIST_COUNT, "whitelist maxed");
uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
flags[4] = 1; // whitelist
_submitProposal(address(0), 0, 0, 0, tokenToWhitelist, 0, address(0), details, flags, "");
return proposalCount - 1;
}
function submitGuildActionProposal( // stages arbitrary function calls for member vote (based on Raid Guild 'Minion')
address actionTo,
uint256 actionValue,
bytes calldata actionData,
bytes32 details
) external returns (uint256 proposalId) {
uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
flags[6] = 1; // guild action
_submitProposal(actionTo, 0, 0, 0, address(0), actionValue, address(0), details, flags, actionData);
return proposalCount - 1;
}
function submitGuildKickProposal(address memberToKick, bytes32 details) external returns (uint256 proposalId) {
Member memory member = members[memberToKick];
require(member.shares > 0 || member.loot > 0, "must have share or loot");
require(members[memberToKick].jailed == 0, "already jailed");
uint8[7] memory flags; // [sponsored, processed, didPass, cancelled, whitelist, guildkick, action]
flags[5] = 1; // guild kick
_submitProposal(memberToKick, 0, 0, 0, address(0), 0, address(0), details, flags, "");
return proposalCount - 1;
}
function _submitProposal(
address applicant,
uint256 sharesRequested,
uint256 lootRequested,
uint256 tributeOffered,
address tributeToken,
uint256 paymentRequested,
address paymentToken,
bytes32 details,
uint8[7] memory flags,
bytes memory actionData
) internal {
Proposal memory proposal = Proposal({
applicant : applicant,
proposer : msg.sender,
sponsor : address(0),
tributeToken : tributeToken,
paymentToken : paymentToken,
flags : flags,
sharesRequested : sharesRequested,
lootRequested : lootRequested,
paymentRequested : paymentRequested,
tributeOffered : tributeOffered,
startingPeriod : 0,
yesVotes : 0,
noVotes : 0,
maxTotalSharesAndLootAtYesVote : 0,
details : details
});
// collect action data
if (proposal.flags[6] == 1) {
Action memory action = Action({
to : applicant,
value : paymentRequested,
data : actionData
});
actions[proposalCount] = action;
}
proposals[proposalCount] = proposal;
address memberAddress = memberAddressByDelegateKey[msg.sender];
// NOTE: argument order matters, avoid stack too deep
emit SubmitProposal(applicant, sharesRequested, lootRequested, tributeOffered, tributeToken, paymentRequested, paymentToken, details, flags, actionData, proposalCount, msg.sender, memberAddress);
proposalCount += 1;
}
function sponsorProposal(uint256 proposalId) external nonReentrant onlyDelegate {
// collect proposal deposit from sponsor and store it in the Moloch until the proposal is processed
require(IERC20(depositToken).transferFrom(msg.sender, address(this), proposalDeposit), "transfer failed");
unsafeAddToBalance(ESCROW, depositToken, proposalDeposit);
Proposal storage proposal = proposals[proposalId];
require(proposal.proposer != address(0), "unproposed");
require(proposal.flags[0] == 0, "already sponsored");
require(proposal.flags[3] == 0, "cancelled");
require(members[proposal.applicant].jailed == 0, "applicant jailed");
if (proposal.tributeOffered > 0 && userTokenBalances[GUILD][proposal.tributeToken] == 0) {
require(totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT, "guildbank maxed");
}
// whitelist proposal
if (proposal.flags[4] == 1) {
require(!tokenWhitelist[address(proposal.tributeToken)], "already whitelisted");
require(!proposedToWhitelist[address(proposal.tributeToken)], "already whitelist proposed");
require(approvedTokens.length < MAX_TOKEN_WHITELIST_COUNT, "whitelist maxed");
proposedToWhitelist[address(proposal.tributeToken)] = true;
// guild kick proposal
} else if (proposal.flags[5] == 1) {
require(!proposedToKick[proposal.applicant], "kick already proposed");
proposedToKick[proposal.applicant] = true;
}
// compute startingPeriod for proposal
uint256 startingPeriod = max(
getCurrentPeriod(),
proposalQueue.length == 0 ? 0 : proposals[proposalQueue[proposalQueue.length - 1]].startingPeriod
) + 1;
proposal.startingPeriod = startingPeriod;
address memberAddress = memberAddressByDelegateKey[msg.sender];
proposal.sponsor = memberAddress;
proposal.flags[0] = 1; // sponsored
// append proposal to the queue
proposalQueue.push(proposalId);
emit SponsorProposal(msg.sender, memberAddress, proposalId, proposalQueue.length - 1, startingPeriod);
}
// NOTE: In MolochV2 proposalIndex !== proposalId
function submitVote(uint256 proposalIndex, uint8 uintVote) external onlyDelegate {
address memberAddress = memberAddressByDelegateKey[msg.sender];
Member storage member = members[memberAddress];
require(proposalIndex < proposalQueue.length, "unproposed");
Proposal storage proposal = proposals[proposalQueue[proposalIndex]];
require(uintVote < 3, "not < 3");
Vote vote = Vote(uintVote);
require(getCurrentPeriod() >= proposal.startingPeriod, "voting pending");
require(!hasVotingPeriodExpired(proposal.startingPeriod), "proposal expired");
require(proposal.votesByMember[memberAddress] == Vote.Null, "member voted");
require(vote == Vote.Yes || vote == Vote.No, "vote Yes or No");
proposal.votesByMember[memberAddress] = vote;
if (vote == Vote.Yes) {
proposal.yesVotes += member.shares;
// set highest index (latest) yes vote - must be processed for member to ragequit
if (proposalIndex > member.highestIndexYesVote) {
member.highestIndexYesVote = proposalIndex;
}
// set maximum of total shares encountered at a yes vote - used to bound dilution for yes voters
if (totalSupply() > proposal.maxTotalSharesAndLootAtYesVote) {
proposal.maxTotalSharesAndLootAtYesVote = totalSupply();
}
} else if (vote == Vote.No) {
proposal.noVotes += member.shares;
}
// NOTE: subgraph indexes by proposalId not proposalIndex since proposalIndex isn't set until it's been sponsored but proposal is created on submission
emit SubmitVote(proposalQueue[proposalIndex], proposalIndex, msg.sender, memberAddress, uintVote);
}
function processProposal(uint256 proposalIndex) external {
_validateProposalForProcessing(proposalIndex);
uint256 proposalId = proposalQueue[proposalIndex];
Proposal storage proposal = proposals[proposalId];
require(proposal.flags[4] == 0 && proposal.flags[5] == 0 && proposal.flags[6] == 0, "not standard proposal");
proposal.flags[1] = 1; // processed
bool didPass = _didPass(proposalIndex);
// Make the proposal fail if the new total number of shares and loot exceeds the limit
if (totalSupply().add(proposal.sharesRequested).add(proposal.lootRequested) > MAX_GUILD_BOUND) {
didPass = false;
}
// Make the proposal fail if it is requesting more tokens as payment than the available guild bank balance
if (proposal.paymentRequested > userTokenBalances[GUILD][proposal.paymentToken]) {
didPass = false;
}
// Make the proposal fail if it would result in too many tokens with non-zero balance in guild bank
if (proposal.tributeOffered > 0 && userTokenBalances[GUILD][proposal.tributeToken] == 0 && totalGuildBankTokens >= MAX_TOKEN_GUILDBANK_COUNT) {
didPass = false;
}
// PROPOSAL PASSED
if (didPass == true) {
proposal.flags[2] = 1; // didPass
// if the applicant is already a member, add to their existing shares & loot
if (members[proposal.applicant].exists == 1) {
members[proposal.applicant].shares += proposal.sharesRequested;
members[proposal.applicant].loot += proposal.lootRequested;
// if the applicant is a new member, create a new record for them
} else {
registerMember(proposal.applicant, proposal.sharesRequested);
}
// mint new guild token, shares, loot
mintGuildToken(proposal.applicant, proposal.sharesRequested + proposal.lootRequested);
totalShares += proposal.sharesRequested;
totalLoot += proposal.lootRequested;
// if the proposal tribute is the first tokens of its kind to make it into the guild bank, increment total guild bank tokens
if (userTokenBalances[GUILD][proposal.tributeToken] == 0 && proposal.tributeOffered > 0) {
totalGuildBankTokens += 1;
}
unsafeInternalTransfer(ESCROW, GUILD, proposal.tributeToken, proposal.tributeOffered);
unsafeInternalTransfer(GUILD, proposal.applicant, proposal.paymentToken, proposal.paymentRequested);
// if the proposal spends 100% of guild bank balance for a token, decrement total guild bank tokens
if (userTokenBalances[GUILD][proposal.paymentToken] == 0 && proposal.paymentRequested > 0) {
totalGuildBankTokens -= 1;
}
// PROPOSAL FAILED
} else {
// return all tokens to the proposer (not the applicant, because funds come from proposer)
unsafeInternalTransfer(ESCROW, proposal.proposer, proposal.tributeToken, proposal.tributeOffered);
}
_returnDeposit(proposal.sponsor);
emit ProcessProposal(proposalIndex, proposalId, didPass);
}
function processWhitelistProposal(uint256 proposalIndex) external {
_validateProposalForProcessing(proposalIndex);
uint256 proposalId = proposalQueue[proposalIndex];
Proposal storage proposal = proposals[proposalId];
require(proposal.flags[4] == 1, "not whitelist proposal");
proposal.flags[1] = 1; // processed
bool didPass = _didPass(proposalIndex);
if (approvedTokens.length >= MAX_TOKEN_WHITELIST_COUNT) {
didPass = false;
}
if (didPass == true) {
proposal.flags[2] = 1; // didPass
tokenWhitelist[address(proposal.tributeToken)] = true;
approvedTokens.push(proposal.tributeToken);
}
proposedToWhitelist[address(proposal.tributeToken)] = false;
_returnDeposit(proposal.sponsor);
emit ProcessWhitelistProposal(proposalIndex, proposalId, didPass);
}
function processGuildActionProposal(uint256 proposalIndex) external returns (bytes memory) {
_validateProposalForProcessing(proposalIndex);
uint256 proposalId = proposalQueue[proposalIndex];
Action storage action = actions[proposalId];
Proposal storage proposal = proposals[proposalId];
require(proposal.flags[6] == 1, "not action proposal");
proposal.flags[1] = 1; // processed
bool didPass = _didPass(proposalIndex);
if (didPass == true) {
proposal.flags[2] = 1; // didPass
// execute call
(bool success, bytes memory retData) = action.to.call.value(action.value)(action.data);
require(success, "call failure");
return retData;
}
emit ProcessGuildActionProposal(proposalIndex, proposalId, didPass);
}
function processGuildKickProposal(uint256 proposalIndex) external {
_validateProposalForProcessing(proposalIndex);
uint256 proposalId = proposalQueue[proposalIndex];
Proposal storage proposal = proposals[proposalId];
require(proposal.flags[5] == 1, "not kick proposal");
proposal.flags[1] = 1; // processed
bool didPass = _didPass(proposalIndex);
if (didPass == true) {
proposal.flags[2] = 1; // didPass
Member storage member = members[proposal.applicant];
member.jailed = proposalIndex;
// transfer shares to loot
member.shares = 0; // revoke all shares
member.loot += member.shares;
totalShares -= member.shares;
totalLoot += member.shares;
}
proposedToKick[proposal.applicant] = false;
_returnDeposit(proposal.sponsor);
emit ProcessGuildKickProposal(proposalIndex, proposalId, didPass);
}
function _didPass(uint256 proposalIndex) internal view returns (bool didPass) {
Proposal memory proposal = proposals[proposalQueue[proposalIndex]];
if (proposal.yesVotes > proposal.noVotes) {
didPass = true;
}
// Make the proposal fail if the dilutionBound is exceeded
if ((totalSupply().mul(dilutionBound)) < proposal.maxTotalSharesAndLootAtYesVote) {
didPass = false;
}
// Make the proposal fail if the applicant is jailed
// - for standard proposals, we don't want the applicant to get any shares/loot/payment
// - for guild kick proposals, we should never be able to propose to kick a jailed member (or have two kick proposals active), so it doesn't matter
if (members[proposal.applicant].jailed != 0) {
didPass = false;
}
return didPass;
}
function _validateProposalForProcessing(uint256 proposalIndex) internal view {
require(proposalIndex < proposalQueue.length, "no such proposal");
Proposal memory proposal = proposals[proposalQueue[proposalIndex]];
require(getCurrentPeriod() >= proposal.startingPeriod + votingPeriodLength + gracePeriodLength, "proposal not ready");
require(proposal.flags[1] == 0, "proposal already processed");
require(proposalIndex == 0 || proposals[proposalQueue[proposalIndex - 1]].flags[1] == 1, "previous proposal unprocessed");
}
function _returnDeposit(address sponsor) internal {
unsafeInternalTransfer(ESCROW, msg.sender, depositToken, processingReward);
unsafeInternalTransfer(ESCROW, sponsor, depositToken, proposalDeposit - processingReward);
}
function ragequit(uint256 sharesToBurn, uint256 lootToBurn) external {
require(members[msg.sender].exists == 1, "not member");
_ragequit(msg.sender, sharesToBurn, lootToBurn);
}
function _ragequit(address memberAddress, uint256 sharesToBurn, uint256 lootToBurn) internal {
uint256 initialTotalSharesAndLoot = totalSupply();
Member storage member = members[memberAddress];
require(member.shares >= sharesToBurn, "insufficient shares");
require(member.loot >= lootToBurn, "insufficient loot");
require(canRagequit(member.highestIndexYesVote), "cannot ragequit until highest index proposal member voted YES on is processed");
uint256 sharesAndLootToBurn = sharesToBurn.add(lootToBurn);
// burn tokens, shares and loot
member.shares -= sharesToBurn;
member.loot -= lootToBurn;
burnGuildToken(memberAddress, sharesAndLootToBurn);
totalShares -= sharesToBurn;
totalLoot -= lootToBurn;
for (uint256 i = 0; i < approvedTokens.length; i++) {
uint256 amountToRagequit = fairShare(userTokenBalances[GUILD][approvedTokens[i]], sharesAndLootToBurn, initialTotalSharesAndLoot);
if (amountToRagequit > 0) { // gas optimization to allow a higher maximum token limit
// deliberately not using safemath here to keep overflows from preventing the function execution (which would break ragekicks)
// if a token overflows, it is because the supply was artificially inflated to oblivion, so we probably don't care about it anyways
userTokenBalances[GUILD][approvedTokens[i]] -= amountToRagequit;
userTokenBalances[memberAddress][approvedTokens[i]] += amountToRagequit;
}
}
emit Ragequit(memberAddress, sharesToBurn, lootToBurn);
}
function ragekick(address memberToKick) external {
Member storage member = members[memberToKick];
require(member.jailed != 0, "not jailed");
require(member.loot > 0, "no loot"); // note - should be impossible for jailed member to have shares
require(canRagequit(member.highestIndexYesVote), "cannot ragequit until highest index proposal member voted YES on is processed");
_ragequit(memberToKick, 0, member.loot);
}
function withdrawBalance(address token, uint256 amount) external nonReentrant {
_withdrawBalance(token, amount);
}
function withdrawBalances(address[] calldata tokens, uint256[] calldata amounts, bool max) external nonReentrant {
require(tokens.length == amounts.length, "tokens & amounts must match");
for (uint256 i=0; i < tokens.length; i++) {
uint256 withdrawAmount = amounts[i];
if (max) { // withdraw the maximum balance
withdrawAmount = userTokenBalances[msg.sender][tokens[i]];
}
_withdrawBalance(tokens[i], withdrawAmount);
}
}
function _withdrawBalance(address token, uint256 amount) internal {
require(userTokenBalances[msg.sender][token] >= amount, "insufficient balance");
require(IERC20(token).transfer(msg.sender, amount), "transfer failed");
unsafeSubtractFromBalance(msg.sender, token, amount);
emit Withdraw(msg.sender, token, amount);
}
function collectTokens(address token) external {
uint256 amountToCollect = IERC20(token).balanceOf(address(this)) - userTokenBalances[TOTAL][token];
// only collect if 1) there are tokens to collect and 2) token is whitelisted
require(amountToCollect > 0, "no tokens");
require(tokenWhitelist[token], "not whitelisted");
if (userTokenBalances[GUILD][token] == 0 && totalGuildBankTokens < MAX_TOKEN_GUILDBANK_COUNT) {totalGuildBankTokens += 1;}
unsafeAddToBalance(GUILD, token, amountToCollect);
emit TokensCollected(token, amountToCollect);
}
// NOTE: requires that delegate key which sent the original proposal cancels, msg.sender == proposal.proposer
function cancelProposal(uint256 proposalId) external {
Proposal storage proposal = proposals[proposalId];
require(proposal.flags[0] == 0, "proposal already sponsored");
require(proposal.flags[3] == 0, "proposal already cancelled");
require(msg.sender == proposal.proposer, "only proposer cancels");
proposal.flags[3] = 1; // cancelled
unsafeInternalTransfer(ESCROW, proposal.proposer, proposal.tributeToken, proposal.tributeOffered);
emit CancelProposal(proposalId, msg.sender);
}
function updateDelegateKey(address newDelegateKey) external {
require(members[msg.sender].shares > 0, "not shareholder");
require(newDelegateKey != address(0), "newDelegateKey zeroed");
// skip checks if member is setting the delegate key to their member address
if (newDelegateKey != msg.sender) {
require(members[newDelegateKey].exists == 0, "cannot overwrite members");
require(members[memberAddressByDelegateKey[newDelegateKey]].exists == 0, "cannot overwrite keys");
}
Member storage member = members[msg.sender];
memberAddressByDelegateKey[member.delegateKey] = address(0);
memberAddressByDelegateKey[newDelegateKey] = msg.sender;
member.delegateKey = newDelegateKey;
emit UpdateDelegateKey(msg.sender, newDelegateKey);
}
// can only ragequit if the latest proposal you voted YES on has been processed
function canRagequit(uint256 highestIndexYesVote) public view returns (bool) {
require(highestIndexYesVote < proposalQueue.length, "no such proposal");
return proposals[proposalQueue[highestIndexYesVote]].flags[1] == 1;
}
function hasVotingPeriodExpired(uint256 startingPeriod) public view returns (bool) {
return getCurrentPeriod() >= startingPeriod + votingPeriodLength;
}
/***************
GETTER FUNCTIONS
***************/
function max(uint256 x, uint256 y) internal pure returns (uint256) {
return x >= y ? x : y;
}
function getCurrentPeriod() public view returns (uint256) {
return now.sub(summoningTime).div(periodDuration);
}
function getMemberProposalVote(address memberAddress, uint256 proposalIndex) public view returns (Vote) {
require(members[memberAddress].exists == 1, "not member");
require(proposalIndex < proposalQueue.length, "unproposed");
return proposals[proposalQueue[proposalIndex]].votesByMember[memberAddress];
}
function getProposalFlags(uint256 proposalId) public view returns (uint8[7] memory) {
return proposals[proposalId].flags;
}
function getProposalQueueLength() public view returns (uint256) {
return proposalQueue.length;
}
function getTokenCount() public view returns (uint256) {
return approvedTokens.length;
}
function getUserTokenBalance(address user, address token) public view returns (uint256) {
return userTokenBalances[user][token];
}
/***************
HELPER FUNCTIONS
***************/
function() external payable {}
function fairShare(uint256 balance, uint256 shares, uint256 totalSharesAndLoot) internal pure returns (uint256) {
require(totalSharesAndLoot != 0);
if (balance == 0) { return 0; }
uint256 prod = balance * shares;
if (prod / balance == shares) { // no overflow in multiplication above?
return prod / totalSharesAndLoot;
}
return (balance / totalSharesAndLoot) * shares;
}
function registerMember(address newMember, uint256 shares) internal {
// if new member is already taken by a member's delegateKey, reset it to their member address
if (members[memberAddressByDelegateKey[newMember]].exists == 1) {
address memberToOverride = memberAddressByDelegateKey[newMember];
memberAddressByDelegateKey[memberToOverride] = memberToOverride;
members[memberToOverride].delegateKey = memberToOverride;
}
members[newMember] = Member({
delegateKey : newMember,
exists : 1, // 'true'
shares : shares,
loot : 0,
highestIndexYesVote : 0,
jailed : 0
});
memberAddressByDelegateKey[newMember] = newMember;
}
function unsafeAddToBalance(address user, address token, uint256 amount) internal {
userTokenBalances[user][token] += amount;
userTokenBalances[TOTAL][token] += amount;
}
function unsafeInternalTransfer(address from, address to, address token, uint256 amount) internal {
unsafeSubtractFromBalance(from, token, amount);
unsafeAddToBalance(to, token, amount);
}
function unsafeSubtractFromBalance(address user, address token, uint256 amount) internal {
userTokenBalances[user][token] -= amount;
userTokenBalances[TOTAL][token] -= amount;
}
/********************
GUILD TOKEN FUNCTIONS
********************/
// GETTER FUNCTIONS
function balanceOf(address account) external view returns (uint256) {
return balances[account];
}
function name() external view returns (string memory) {
return _name;
}
function symbol() external view returns (string memory) {
return _symbol;
}
function decimals() external view returns (uint8) {
return _decimals;
}
function totalSupply() public view returns (uint256) {
return totalShares + totalLoot;
}
// BALANCE MGMT FUNCTIONS
function burnGuildToken(address memberAddress, uint256 amount) internal {
balances[memberAddress] -= amount;
emit Transfer(memberAddress, address(0), amount);
}
function claimShares(uint256 amount) external nonReentrant {
require(IERC20(voteToken).transferFrom(msg.sender, address(0xdead), amount), "transfer failed"); // burn vote wrapper token and claim shares (1:1)
// if the sender is already a member, add to their existing shares
if (members[msg.sender].exists == 1) {
members[msg.sender].shares = members[msg.sender].shares.add(amount);
// if the sender is a new member, create a new record for them
} else {
registerMember(msg.sender, amount);
}
// mint new guild token & shares
mintGuildToken(msg.sender, amount);
totalShares += amount;
require(totalShares <= MAX_GUILD_BOUND, "guild maxed");
}
function convertSharesToLoot(uint256 sharesToLoot) external {
members[msg.sender].shares -= sharesToLoot;
members[msg.sender].loot += sharesToLoot;
}
function mintGuildToken(address memberAddress, uint256 amount) internal {
balances[memberAddress] += amount;
emit Transfer(address(0), memberAddress, amount);
}
// LOOT TRANSFER FUNCTION
function transfer(address receiver, uint256 lootToTransfer) external {
members[msg.sender].loot = members[msg.sender].loot.sub(lootToTransfer);
members[receiver].loot = members[receiver].loot.add(lootToTransfer);
balances[msg.sender] -= lootToTransfer;
balances[receiver] += lootToTransfer;
emit Transfer(msg.sender, receiver, lootToTransfer);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_depositToken","type":"address"},{"internalType":"address","name":"_voteToken","type":"address"},{"internalType":"address[]","name":"_summoner","type":"address[]"},{"internalType":"uint256[]","name":"_summonerShares","type":"uint256[]"},{"internalType":"uint256","name":"_summonerDeposit","type":"uint256"},{"internalType":"uint256","name":"_proposalDeposit","type":"uint256"},{"internalType":"uint256","name":"_processingReward","type":"uint256"},{"internalType":"uint256","name":"_periodDuration","type":"uint256"},{"internalType":"uint256","name":"_votingPeriodLength","type":"uint256"},{"internalType":"uint256","name":"_gracePeriodLength","type":"uint256"},{"internalType":"uint256","name":"_dilutionBound","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"applicantAddress","type":"address"}],"name":"CancelProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessGuildActionProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessGuildKickProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessWhitelistProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesToBurn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lootToBurn","type":"uint256"}],"name":"Ragequit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startingPeriod","type":"uint256"}],"name":"SponsorProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"applicant","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lootRequested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"indexed":false,"internalType":"address","name":"tributeToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"indexed":false,"internalType":"address","name":"paymentToken","type":"address"},{"indexed":false,"internalType":"bytes32","name":"details","type":"bytes32"},{"indexed":false,"internalType":"uint8[7]","name":"flags","type":"uint8[7]"},{"indexed":false,"internalType":"bytes","name":"actionData","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"}],"name":"SubmitProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint8","name":"uintVote","type":"uint8"}],"name":"SubmitVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToCollect","type":"uint256"}],"name":"TokensCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newDelegateKey","type":"address"}],"name":"UpdateDelegateKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"ESCROW","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GUILD","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"actions","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"approvedTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"}],"name":"canRagequit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancelProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimShares","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"collectTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"sharesToLoot","type":"uint256"}],"name":"convertSharesToLoot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"depositToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dilutionBound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"memberAddress","type":"address"},{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"getMemberProposalVote","outputs":[{"internalType":"enum MysticMoloch.Vote","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposalFlags","outputs":[{"internalType":"uint8[7]","name":"","type":"uint8[7]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getProposalQueueLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"getUserTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gracePeriodLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"startingPeriod","type":"uint256"}],"name":"hasVotingPeriodExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"memberAddressByDelegateKey","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"members","outputs":[{"internalType":"address","name":"delegateKey","type":"address"},{"internalType":"uint8","name":"exists","type":"uint8"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"loot","type":"uint256"},{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"},{"internalType":"uint256","name":"jailed","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processGuildActionProposal","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processGuildKickProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processWhitelistProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"processingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"address","name":"applicant","type":"address"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"address","name":"sponsor","type":"address"},{"internalType":"address","name":"tributeToken","type":"address"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"internalType":"uint256","name":"lootRequested","type":"uint256"},{"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"internalType":"uint256","name":"startingPeriod","type":"uint256"},{"internalType":"uint256","name":"yesVotes","type":"uint256"},{"internalType":"uint256","name":"noVotes","type":"uint256"},{"internalType":"uint256","name":"maxTotalSharesAndLootAtYesVote","type":"uint256"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proposedToKick","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"proposedToWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"memberToKick","type":"address"}],"name":"ragekick","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"sharesToBurn","type":"uint256"},{"internalType":"uint256","name":"lootToBurn","type":"uint256"}],"name":"ragequit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"sponsorProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"actionTo","type":"address"},{"internalType":"uint256","name":"actionValue","type":"uint256"},{"internalType":"bytes","name":"actionData","type":"bytes"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitGuildActionProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"memberToKick","type":"address"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitGuildKickProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"applicant","type":"address"},{"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"internalType":"uint256","name":"lootRequested","type":"uint256"},{"internalType":"uint256","name":"tributeOffered","type":"uint256"},{"internalType":"address","name":"tributeToken","type":"address"},{"internalType":"uint256","name":"paymentRequested","type":"uint256"},{"internalType":"address","name":"paymentToken","type":"address"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"internalType":"uint8","name":"uintVote","type":"uint8"}],"name":"submitVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenToWhitelist","type":"address"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"submitWhitelistProposal","outputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"summoningTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalGuildBankTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalLoot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"lootToTransfer","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newDelegateKey","type":"address"}],"name":"updateDelegateKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"voteToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriodLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wETH","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bool","name":"max","type":"bool"}],"name":"withdrawBalances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
600380546001600160a01b03191673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905560c0604052601360808190527f4d6f6c6f63682044414f207632782042616e6b0000000000000000000000000060a09081526200006691600b919062000608565b506040805180820190915260078082526609a9e985aac64b60cb1b60209092019182526200009791600c9162000608565b50600d805460ff19166012179055348015620000b257600080fd5b506040516200597f3803806200597f8339818101604052610160811015620000d957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200010557600080fd5b9083019060208201858111156200011b57600080fd5b82518660208202830111640100000000821117156200013957600080fd5b82525081516020918201928201910280838360005b83811015620001685781810151838201526020016200014e565b50505050905001604052602001805160405193929190846401000000008211156200019257600080fd5b908301906020820185811115620001a857600080fd5b8251866020820283011164010000000082111715620001c657600080fd5b82525081516020918201928201910280838360005b83811015620001f5578181015183820152602001620001db565b505050509190910160409081526020830151908301516060840151608085015160a086015160c087015160e09097015160016000908155959950939750919590945090929091905b8951811015620002e557620002818a82815181106200025857fe5b60200260200101518a83815181106200026d57fe5b60200260200101516200042060201b60201c565b620002bb8a82815181106200029257fe5b60200260200101518a8381518110620002a757fe5b60200260200101516200055360201b60201c565b888181518110620002c857fe5b6020908102919091010151600f805490910190556001016200023d565b506ec097ce7bc90715b34b9f1000000000600f5411156200033b576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6001600160a01b038b166000818152601560205260408120805460ff191660019081179091556016805491820181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b03191690911790558615620003c857601180546001019055620003c861feed8c896001600160e01b03620005aa16565b600180546001600160a01b039c8d166001600160a01b031991821617909155600280549b909c169a169990991790995560049390935560059190915560065560075550505060089190915560095542600a55620006ad565b6001600160a01b038083166000908152601a6020908152604080832054909316825260199052205460ff600160a01b9091041660011415620004a9576001600160a01b038083166000908152601a602090815260408083205490931680835283832080546001600160a01b03199081168317909155601990925292909120805490911690911790555b6040805160c0810182526001600160a01b03938416808252600160208084018281528486019687526000606086018181526080870182815260a088018381528784526019865289842098518954955160ff16600160a01b0260ff60a01b1991909d166001600160a01b031996871617169b909b17885598519487019490945592516002860155955160038501559551600490930192909255601a9094522080549091169091179055565b6001600160a01b0382166000818152601360209081526040808320805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b6001600160a01b0392831660009081526014602090815260408083209490951682529283528381208054830190557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c2590925291902080549091019055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200064b57805160ff19168380011785556200067b565b828001600101855582156200067b579182015b828111156200067b5782518255916020019190600101906200065e565b50620006899291506200068d565b5090565b620006aa91905b8082111562000689576000815560010162000694565b90565b6152c280620006bd6000396000f3fe6080604052600436106103815760003560e01c80637d5b6c72116101d1578063b2643aab11610102578063e1780345116100a0578063ea00d3311161006f578063ea00d33114610f21578063ea7b6ffd14610f4b578063f242862114610fa0578063f5d54c7714610fb557610381565b8063e178034514610e85578063e1a0e3fa14610eb8578063e63bc62d14610ee2578063e681c4aa14610f0c57610381565b8063c89039c5116100dc578063c89039c514610dfe578063da35c66414610e13578063dfdd369e14610e28578063e0a8f6f514610e5b57610381565b8063b2643aab14610d5d578063b470aade14610dbf578063c68e45b714610dd457610381565b80639746d9401161016f578063a3dc380011610149578063a3dc380014610cac578063a4d2d9ec14610cd6578063a9059cbb14610d0f578063afe5475f14610d4857610381565b80639746d94014610c3a57806399653fbe14610c645780639d1722cb14610c9757610381565b80638a027690116101ab5780638a02769014610b565780638b15a60514610be65780639425a47614610bfb57806395d89b4114610c2557610381565b80637d5b6c7214610a6a57806383240f8314610a7f5780638340bbce14610b4157610381565b80633793ab3c116102b657806363858f2d11610254578063753d756311610223578063753d7563146109e357806378a8956714610a16578063797daf7014610a2b5780637a60964114610a4057610381565b806363858f2d146109275780636d4475eb1461093c57806370a082311461097557806373f8fd4b146109a857610381565b8063402c179411610290578063402c1794146107df5780634482394b1461081257806359999b41146108df578063635e99aa1461091257610381565b80633793ab3c146107595780633a98ef39146107835780633fc24bba1461079857610381565b806315eb349e116103235780631dafede0116102fd5780631dafede0146106bc5780632582bf2a146106e657806327efc08614610719578063313ce5671461072e57610381565b806315eb349e14610646578063160d66ae1461067657806318160ddd146106a757610381565b806306fdde031161035f57806306fdde03146104fc578063086146d21461058657806308ae4b0c1461059b5780630cf20cc91461060d57610381565b8063013cf08b1461038357806303e32fa114610478578063044a0ca81461049f575b005b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610fca565b604051808f6001600160a01b03166001600160a01b031681526020018e6001600160a01b03166001600160a01b031681526020018d6001600160a01b03166001600160a01b031681526020018c6001600160a01b03166001600160a01b031681526020018b6001600160a01b03166001600160a01b031681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b34801561048457600080fd5b5061048d611049565b60408051918252519081900360200190f35b3480156104ab57600080fd5b506104d8600480360360408110156104c257600080fd5b506001600160a01b03813516906020013561104f565b604051808260028111156104e857fe5b60ff16815260200191505060405180910390f35b34801561050857600080fd5b50610511611146565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054b578181015183820152602001610533565b50505050905090810190601f1680156105785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561059257600080fd5b5061048d6111dd565b3480156105a757600080fd5b506105ce600480360360208110156105be57600080fd5b50356001600160a01b031661120b565b604080516001600160a01b03909716875260ff9095166020870152858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561061957600080fd5b506103816004803603604081101561063057600080fd5b506001600160a01b03813516906020013561124b565b34801561065257600080fd5b506103816004803603604081101561066957600080fd5b50803590602001356112ac565b34801561068257600080fd5b5061068b611316565b604080516001600160a01b039092168252519081900360200190f35b3480156106b357600080fd5b5061048d611325565b3480156106c857600080fd5b5061068b600480360360208110156106df57600080fd5b503561132f565b3480156106f257600080fd5b506103816004803603602081101561070957600080fd5b50356001600160a01b0316611356565b34801561072557600080fd5b5061068b611589565b34801561073a57600080fd5b5061074361158f565b6040805160ff9092168252519081900360200190f35b34801561076557600080fd5b506103816004803603602081101561077c57600080fd5b5035611598565b34801561078f57600080fd5b5061048d611764565b3480156107a457600080fd5b506107cb600480360360208110156107bb57600080fd5b50356001600160a01b031661176a565b604080519115158252519081900360200190f35b3480156107eb57600080fd5b5061068b6004803603602081101561080257600080fd5b50356001600160a01b031661177f565b34801561081e57600080fd5b506103816004803603606081101561083557600080fd5b810190602081018135600160201b81111561084f57600080fd5b82018360208201111561086157600080fd5b803590602001918460208302840111600160201b8311171561088257600080fd5b919390929091602081019035600160201b81111561089f57600080fd5b8201836020820111156108b157600080fd5b803590602001918460208302840111600160201b831117156108d257600080fd5b919350915035151561179a565b3480156108eb57600080fd5b506103816004803603602081101561090257600080fd5b50356001600160a01b03166118ef565b34801561091e57600080fd5b5061048d611ac5565b34801561093357600080fd5b5061048d611acb565b34801561094857600080fd5b5061048d6004803603604081101561095f57600080fd5b506001600160a01b038135169060200135611ad1565b34801561098157600080fd5b5061048d6004803603602081101561099857600080fd5b50356001600160a01b0316611c4c565b3480156109b457600080fd5b5061048d600480360360408110156109cb57600080fd5b506001600160a01b0381358116916020013516611c6b565b3480156109ef57600080fd5b506107cb60048036036020811015610a0657600080fd5b50356001600160a01b0316611c96565b348015610a2257600080fd5b5061048d611cab565b348015610a3757600080fd5b5061048d611cb1565b348015610a4c57600080fd5b5061038160048036036020811015610a6357600080fd5b5035611cb7565b348015610a7657600080fd5b5061048d611cdd565b348015610a8b57600080fd5b50610aa960048036036020811015610aa257600080fd5b5035611ce3565b60405180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b04578181015183820152602001610aec565b50505050905090810190601f168015610b315780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610b4d57600080fd5b5061048d611d99565b348015610b6257600080fd5b5061048d60048036036080811015610b7957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610ba857600080fd5b820183602082011115610bba57600080fd5b803590602001918460018302840111600160201b83111715610bdb57600080fd5b919350915035611d9f565b348015610bf257600080fd5b5061048d611e1c565b348015610c0757600080fd5b506107cb60048036036020811015610c1e57600080fd5b5035611e22565b348015610c3157600080fd5b50610511611e39565b348015610c4657600080fd5b5061038160048036036020811015610c5d57600080fd5b5035611e9a565b348015610c7057600080fd5b5061038160048036036040811015610c8757600080fd5b508035906020013560ff16612558565b348015610ca357600080fd5b5061048d612954565b348015610cb857600080fd5b506107cb60048036036020811015610ccf57600080fd5b503561295a565b348015610ce257600080fd5b5061048d60048036036040811015610cf957600080fd5b506001600160a01b038135169060200135612a02565b348015610d1b57600080fd5b5061038160048036036040811015610d3257600080fd5b506001600160a01b038135169060200135612ba4565b348015610d5457600080fd5b5061048d612c7a565b348015610d6957600080fd5b50610d8760048036036020811015610d8057600080fd5b5035612c80565b604051808260e080838360005b83811015610dac578181015183820152602001610d94565b5050505090500191505060405180910390f35b348015610dcb57600080fd5b5061048d612ce8565b348015610de057600080fd5b5061038160048036036020811015610df757600080fd5b5035612cee565b348015610e0a57600080fd5b5061068b612edc565b348015610e1f57600080fd5b5061048d612eeb565b348015610e3457600080fd5b5061038160048036036020811015610e4b57600080fd5b50356001600160a01b0316612ef1565b348015610e6757600080fd5b5061038160048036036020811015610e7e57600080fd5b5035612fe7565b348015610e9157600080fd5b506107cb60048036036020811015610ea857600080fd5b50356001600160a01b0316613183565b348015610ec457600080fd5b5061038160048036036020811015610edb57600080fd5b5035613198565b348015610eee57600080fd5b5061038160048036036020811015610f0557600080fd5b50356132fb565b348015610f1857600080fd5b5061068b6136fc565b348015610f2d57600080fd5b5061051160048036036020811015610f4457600080fd5b5035613702565b61048d6004803603610100811015610f6257600080fd5b506001600160a01b038135811691602081013591604082013591606081013591608082013581169160a08101359160c0820135169060e00135613934565b348015610fac57600080fd5b5061068b613f2f565b348015610fc157600080fd5b5061068b613f3e565b601b602052600090815260409020805460018201546002830154600384015460048501546006860154600787015460088801546009890154600a8a0154600b8b0154600c8c0154600d8d0154600e909d01546001600160a01b039c8d169d9b8d169c9a8b169b998b169a9098169896979596949593949293919290918e565b60055481565b6001600160a01b038216600090815260196020526040812054600160a01b900460ff166001146110b3576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b601c5482106110f6576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b601b6000601c848154811061110757fe5b6000918252602080832090910154835282810193909352604091820181206001600160a01b0387168252600f0190925290205460ff1690505b92915050565b600b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b820191906000526020600020905b8154815290600101906020018083116111b557829003601f168201915b505050505090505b90565b60006112066006546111fa600a5442613f4490919063ffffffff16565b9063ffffffff613f5916565b905090565b601960205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03841694600160a01b90940460ff16939086565b60026000541415611294576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556112a38282613f7b565b50506001600055565b33600090815260196020526040902054600160a01b900460ff16600114611307576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b6113123383836140fa565b5050565b6002546001600160a01b031681565b601054600f540190565b6016818154811061133c57fe5b6000918252602090912001546001600160a01b0316905081565b336000908152601960205260409020600101546113ac576040805162461bcd60e51b815260206004820152600f60248201526e3737ba1039b430b932b437b63232b960891b604482015290519081900360640190fd5b6001600160a01b0381166113ff576040805162461bcd60e51b81526020600482015260156024820152741b995dd1195b1959d85d1952d95e481e995c9bd959605a1b604482015290519081900360640190fd5b6001600160a01b0381163314611500576001600160a01b038116600090815260196020526040902054600160a01b900460ff1615611484576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206f7665727772697465206d656d626572730000000000000000604482015290519081900360640190fd5b6001600160a01b038181166000908152601a60209081526040808320549093168252601990522054600160a01b900460ff1615611500576040805162461bcd60e51b815260206004820152601560248201527463616e6e6f74206f7665727772697465206b65797360581b604482015290519081900360640190fd5b33600081815260196020908152604080832080546001600160a01b039081168552601a845282852080546001600160a01b031990811690915590871680865294839020805482168717905581541684178155815193845290519093927fde7b64a369e10562cc2e71f0f1f944eaf144b75fead6ecb51fac9c4dd693488592908290030190a25050565b61babe81565b600d5460ff1690565b6115a1816143be565b6000601c82815481106115b057fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff1660011461162c576040805162461bcd60e51b81526020600482015260166024820152751b9bdd081dda1a5d195b1a5cdd081c1c9bdc1bdcd85b60521b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000611648846146a7565b6016549091506101901161165a575060005b600181151514156116f05760058201805462ff00001916620100001790556003820180546001600160a01b039081166000908152601560205260408120805460ff1916600190811790915592546016805494850181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899092018054929091166001600160a01b03199092169190911790555b60038201546001600160a01b039081166000908152601760205260409020805460ff191690556002830154611725911661484a565b6040805182151581529051849186917f2094fc13d2ecb0acd6861e82bd006c7e5ab6f312ec0c6cdfe3d1a01ee54d885a9181900360200190a350505050565b600f5481565b60186020526000908152604090205460ff1681565b601a602052600090815260409020546001600160a01b031681565b600260005414156117e3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260005583821461183c576040805162461bcd60e51b815260206004820152601b60248201527f746f6b656e73202620616d6f756e7473206d757374206d617463680000000000604482015290519081900360640190fd5b60005b848110156118e257600084848381811061185557fe5b90506020020135905082156118b4573360009081526014602052604081209088888581811061188057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205490505b6118d98787848181106118c357fe5b905060200201356001600160a01b031682613f7b565b5060010161183f565b5050600160005550505050565b6001600160a01b03811660008181527fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c25602090815260408083205481516370a0823160e01b815230600482015291519394909390926370a082319260248082019391829003018186803b15801561196557600080fd5b505afa158015611979573d6000803e3d6000fd5b505050506040513d602081101561198f57600080fd5b5051039050806119d2576040805162461bcd60e51b81526020600482015260096024820152686e6f20746f6b656e7360b81b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16611a31576040805162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604482015290519081900360640190fd5b6001600160a01b038216600090815260008051602061526e8339815191526020526040902054158015611a66575060c8601154105b15611a75576011805460010190555b611a8261feed8383614891565b6040805182815290516001600160a01b038416917f9381e53ffdc9733a6783a6f8665be3f89c231bb81a6771996ed553b4e75c0fe3919081900360200190a25050565b60105481565b60085481565b6000611adb614fd1565b506001600160a01b03838116600090815260196020908152604091829020825160c08101845281549485168152600160a01b90940460ff1691840191909152600181015491830182905260028101546060840152600381015460808401526004015460a0830152151580611b53575060008160600151115b611ba4576040805162461bcd60e51b815260206004820152601760248201527f6d7573742068617665207368617265206f72206c6f6f74000000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526019602052604090206004015415611c03576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a985a5b195960921b604482015290519081900360640190fd5b611c0b615013565b600160a082015260408051602081019091526000808252611c3c91879190819081908190819081908c908a906148ef565b5050600e54600019019392505050565b6001600160a01b0381166000908152601360205260409020545b919050565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b60156020526000908152604090205460ff1681565b60165490565b601c5490565b336000908152601960205260409020600181018054839003905560020180549091019055565b600a5481565b60126020908152600091825260409182902080546001808301546002808501805488516101009582161595909502600019011691909104601f81018790048702840187019097528683526001600160a01b03909316959094919291830182828015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b5050505050905083565b60075481565b6000611da9615013565b6001816006602002019060ff16908160ff1681525050611e0a876000806000808b60008a898e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506148ef92505050565b5050600e546000190195945050505050565b60045481565b60006007548201611e316111dd565b101592915050565b600c8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b60026000541415611ee3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000908155338152601a60209081526040808320546001600160a01b031683526019909152902060010154611f50576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b60015460048054604080516323b872dd60e01b815233938101939093523060248401526044830191909152516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611fb057600080fd5b505af1158015611fc4573d6000803e3d6000fd5b505050506040513d6020811015611fda57600080fd5b505161201f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60015460045461203e9161beef916001600160a01b0390911690614891565b6000818152601b6020526040902060018101546001600160a01b0316612098576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b600581015460ff16156120e6576040805162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481cdc1bdb9cdbdc9959607a1b604482015290519081900360640190fd5b60058101546301000000900460ff1615612133576040805162461bcd60e51b815260206004820152600960248201526818d85b98d95b1b195960ba1b604482015290519081900360640190fd5b80546001600160a01b031660009081526019602052604090206004015415612195576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600081600901541180156121d0575060038101546001600160a01b0316600090815260008051602061526e8339815191526020526040902054155b1561221e5760c86011541061221e576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6005810154600160201b900460ff16600114156123855760038101546001600160a01b031660009081526015602052604090205460ff161561229d576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60038101546001600160a01b031660009081526017602052604090205460ff161561230f576040805162461bcd60e51b815260206004820152601a60248201527f616c72656164792077686974656c6973742070726f706f736564000000000000604482015290519081900360640190fd5b60165461019011612359576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b60038101546001600160a01b03166000908152601760205260409020805460ff1916600117905561242a565b600581015465010000000000900460ff166001141561242a5780546001600160a01b031660009081526018602052604090205460ff1615612405576040805162461bcd60e51b81526020600482015260156024820152741ada58dac8185b1c9958591e481c1c9bdc1bdcd959605a1b604482015290519081900360640190fd5b80546001600160a01b03166000908152601860205260409020805460ff191660011790555b60006124816124376111dd565b601c541561247957601c8054601b91600091600019810190811061245757fe5b90600052602060002001548152602001908152602001600020600a015461247c565b60005b614ccb565b6001908101600a8401819055336000818152601a60209081526040808320546002890180546001600160a01b0319166001600160a01b03909216918217905560058901805460ff191688179055601c80549788018155938490527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2119096018990559154825189815260001990910191810191909152808201849052905192945083927f2a383a979381335e3eb401ac01dd8083e024ff0256bf5338456ffc0063390bbd9181900360600190a3505060016000555050565b336000908152601a60209081526040808320546001600160a01b0316835260199091529020600101546125c1576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b336000908152601a60209081526040808320546001600160a01b03168084526019909252909120601c54841061262b576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b6000601b6000601c878154811061263e57fe5b90600052602060002001548152602001908152602001600020905060038460ff161061269b576040805162461bcd60e51b81526020600482015260076024820152666e6f74203c203360c81b604482015290519081900360640190fd5b60008460ff1660028111156126ac57fe5b905081600a01546126bb6111dd565b10156126ff576040805162461bcd60e51b815260206004820152600e60248201526d766f74696e672070656e64696e6760901b604482015290519081900360640190fd5b61270c82600a0154611e22565b15612751576040805162461bcd60e51b815260206004820152601060248201526f1c1c9bdc1bdcd85b08195e1c1a5c995960821b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f8301602052604081205460ff16600281111561277a57fe5b146127bb576040805162461bcd60e51b815260206004820152600c60248201526b1b595b58995c881d9bdd195960a21b604482015290519081900360640190fd5b60018160028111156127c957fe5b14806127e0575060028160028111156127de57fe5b145b612822576040805162461bcd60e51b815260206004820152600e60248201526d766f746520596573206f72204e6f60901b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f830160205260409020805482919060ff1916600183600281111561285357fe5b0217905550600181600281111561286657fe5b14156128b6576001830154600b830180549091019055600383015486111561289057600383018690555b81600d015461289d611325565b11156128b1576128ab611325565b600d8301555b6128db565b60028160028111156128c457fe5b14156128db576001830154600c8301805490910190555b836001600160a01b0316336001600160a01b0316877f804f03797630bf8b8a46b9371608abbf7d78a20df720e477bab641957ca68a20601c8a8154811061291e57fe5b906000526020600020015489604051808381526020018260ff1660ff1681526020019250505060405180910390a4505050505050565b60115481565b601c5460009082106129a6576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b601b6000601c84815481106129b757fe5b906000526020600020015481526020019081526020016000206005016001600781106129df57fe5b602091828204019190069054906101000a900460ff1660ff166001149050919050565b60006001600160a01b038316612a4c576040805162461bcd60e51b815260206004820152600a6024820152693732b2b2103a37b5b2b760b11b604482015290519081900360640190fd5b6002546001600160a01b0384811691161415612aaf576040805162461bcd60e51b815260206004820152601960248201527f77686974656c6973742f766f7465546f6b656e206d6174636800000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff1615612b13576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60165461019011612b5d576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b612b65615013565b6001608082015260408051602081019091526000808252612b95918190819081908990829081908b908a906148ef565b5050600e546000190192915050565b33600090815260196020526040902060020154612bc7908263ffffffff613f4416565b336000908152601960205260408082206002908101939093556001600160a01b038516825290200154612c00908263ffffffff614ce416565b6001600160a01b0383166000818152601960209081526040808320600201949094553380835260138252848320805487900390558383529184902080548601905583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60095481565b612c88615013565b6000828152601b6020526040808220815160e0810192839052926005909101916007918390855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612caf575094979650505050505050565b60065481565b60026000541415612d37576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260008181559054604080516323b872dd60e01b815233600482015261dead60248201526044810185905290516001600160a01b03909216926323b872dd926064808401936020939083900390910190829087803b158015612d9957600080fd5b505af1158015612dad573d6000803e3d6000fd5b505050506040513d6020811015612dc357600080fd5b5051612e08576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b33600090815260196020526040902054600160a01b900460ff1660011415612e655733600090815260196020526040902060010154612e4d908263ffffffff614ce416565b33600090815260196020526040902060010155612e6f565b612e6f3382614cf6565b612e793382614e28565b600f80548201908190556ec097ce7bc90715b34b9f10000000001015612ed4576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b506001600055565b6001546001600160a01b031681565b600e5481565b6001600160a01b03811660009081526019602052604090206004810154612f4c576040805162461bcd60e51b815260206004820152600a6024820152691b9bdd081a985a5b195960b21b604482015290519081900360640190fd5b6000816002015411612f8f576040805162461bcd60e51b81526020600482015260076024820152661b9bc81b1bdbdd60ca1b604482015290519081900360640190fd5b612f9c816003015461295a565b612fd75760405162461bcd60e51b815260040180806020018281038252604d815260200180615221604d913960600191505060405180910390fd5b61131282600083600201546140fa565b6000818152601b60205260409020600581015460ff161561304f576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792073706f6e736f726564000000000000604482015290519081900360640190fd5b60058101546301000000900460ff16156130b0576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792063616e63656c6c6564000000000000604482015290519081900360640190fd5b60018101546001600160a01b03163314613109576040805162461bcd60e51b81526020600482015260156024820152746f6e6c792070726f706f7365722063616e63656c7360581b604482015290519081900360640190fd5b60058101805463ff000000191663010000001790556001810154600382015460098301546131499261beef926001600160a01b0391821692911690614e7f565b60408051338152905183917fc215fed6680bb02d323dc3f8b8f85241572607538426059c9232601bd293c3be919081900360200190a25050565b60176020526000908152604090205460ff1681565b6131a1816143be565b6000601c82815481106131b057fe5b600091825260208083209190910154808352601b909152604090912060058101549192509065010000000000900460ff16600114613229576040805162461bcd60e51b81526020600482015260116024820152701b9bdd081ada58dac81c1c9bdc1bdcd85b607a1b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000613245846146a7565b90506001811515141561328a5760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040812060048101869055600101555b81546001600160a01b039081166000908152601860205260409020805460ff1916905560028301546132bc911661484a565b6040805182151581529051849186917f0e347d00d3e9e6cdff9e6c09092c9ff1bd448f9b3dfb7091b30939ec5e7a3c739181900360200190a350505050565b613304816143be565b6000601c828154811061331357fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff1615801561335d5750600581015465010000000000900460ff16155b8015613378575060058101546601000000000000900460ff16155b6133c1576040805162461bcd60e51b81526020600482015260156024820152741b9bdd081cdd185b99185c99081c1c9bdc1bdcd85b605a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006133dd846146a7565b90506ec097ce7bc90715b34b9f100000000061341383600701546134078560060154613407611325565b9063ffffffff614ce416565b111561341d575060005b60048201546001600160a01b0316600090815260008051602061526e833981519152602052604090205460088301541115613456575060005b60008260090154118015613491575060038201546001600160a01b0316600090815260008051602061526e8339815191526020526040902054155b80156134a0575060c860115410155b156134a9575060005b6001811515141561367b5760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040902054600160a01b900460ff166001141561353e57600682015482546001600160a01b0390811660009081526019602052604080822060010180549094019093556007850154855490921681529190912060020180549091019055613558565b81546006830154613558916001600160a01b031690614cf6565b815460078301546006840154613578926001600160a01b03169101614e28565b6006820154600f80549091019055600782015460108054909101905560038201546001600160a01b0316600090815260008051602061526e83398151915260205260409020541580156135cf575060008260090154115b156135de576011805460010190555b600382015460098301546136039161beef9161feed916001600160a01b031690614e7f565b81546004830154600884015461362b9261feed926001600160a01b0391821692911690614e7f565b60048201546001600160a01b0316600090815260008051602061526e8339815191526020526040902054158015613666575060008260080154115b1561367657601180546000190190555b6136a6565b6001820154600383015460098401546136a69261beef926001600160a01b0391821692911690614e7f565b60028201546136bd906001600160a01b031661484a565b6040805182151581529051849186917f86f74240ecee9e4230d26ff92e17fee978460d9c0f78f5c88b2864c9e7a494279181900360200190a350505050565b61beef81565b606061370d826143be565b6000601c838154811061371c57fe5b600091825260208083209190910154808352601282526040808420601b909352909220600581015492935090916601000000000000900460ff166001146137a0576040805162461bcd60e51b81526020600482015260136024820152721b9bdd081858dd1a5bdb881c1c9bdc1bdcd85b606a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006137bc866146a7565b9050600181151514156138f25760058201805462ff00001916620100001790558254600184810154604051600287810180546000966060966001600160a01b039091169594929383928592600019908216156101000201160480156138585780601f10613836576101008083540402835291820191613858565b820191906000526020600020905b815481529060010190602001808311613844575b505091505060006040518083038185875af1925050503d806000811461389a576040519150601f19603f3d011682016040523d82523d6000602084013e61389f565b606091505b5091509150816138e5576040805162461bcd60e51b815260206004820152600c60248201526b63616c6c206661696c75726560a01b604482015290519081900360640190fd5b9550611c66945050505050565b6040805182151581529051859188917facc0e8fc789590d1cf21203e356b7b1cd28911b1309c24883c5fcdc305b497a39181900360200190a350505050919050565b60006002600054141561397f576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556ec097ce7bc90715b34b9f10000000006139a4898963ffffffff614ce416565b11156139e5576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff16613a52576040805162461bcd60e51b815260206004820152601c60248201527f74726962757465546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff16613abf576040805162461bcd60e51b815260206004820152601c60248201527f7061796d656e74546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03891661feed14801590613ae557506001600160a01b03891661beef14155b8015613afc57506001600160a01b03891661babe14155b613b46576040805162461bcd60e51b81526020600482015260166024820152756170706c6963616e7420756e72657365727661626c6560501b604482015290519081900360640190fd5b6001600160a01b03891660009081526019602052604090206004015415613ba7576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600086118015613bda57506001600160a01b038516600090815260008051602061526e8339815191526020526040902054155b15613c285760c860115410613c28576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6003546001600160a01b038681169116148015613c455750600034115b15613e1b57853414613c91576040805162461bcd60e51b815260206004820152601060248201526f0d2dce6eaccccd2c6d2cadce8408aa8960831b604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ce157600080fd5b505af1158015613cf5573d6000803e3d6000fd5b5050600354604051600093506001600160a01b03909116915034908381818185875af1925050503d8060008114613d48576040519150601f19603f3d011682016040523d82523d6000602084013e613d4d565b606091505b5050905080613d95576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6003546040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015613de857600080fd5b505af1158015613dfc573d6000803e3d6000fd5b505050506040513d6020811015613e1257600080fd5b50613edf915050565b604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b158015613e7057600080fd5b505af1158015613e84573d6000803e3d6000fd5b505050506040513d6020811015613e9a57600080fd5b5051613edf576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b613eec61beef8688614891565b613ef4615013565b613f158a8a8a8a8a8a8a8a89604051806020016040528060008152506148ef565b5050600e5460001901600160005598975050505050505050565b6003546001600160a01b031681565b61feed81565b600082821115613f5357600080fd5b50900390565b6000808211613f6757600080fd5b6000828481613f7257fe5b04949350505050565b3360009081526014602090815260408083206001600160a01b0386168452909152902054811115613fea576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561403957600080fd5b505af115801561404d573d6000803e3d6000fd5b505050506040513d602081101561406357600080fd5b50516140a8576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6140b3338383614e9b565b604080516001600160a01b038416815260208101839052815133927f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb928290030190a25050565b6000614104611325565b6001600160a01b038516600090815260196020526040902060018101549192509084111561416f576040805162461bcd60e51b8152602060048201526013602482015272696e73756666696369656e742073686172657360681b604482015290519081900360640190fd5b82816002015410156141bc576040805162461bcd60e51b81526020600482015260116024820152701a5b9cdd59999a58da595b9d081b1bdbdd607a1b604482015290519081900360640190fd5b6141c9816003015461295a565b6142045760405162461bcd60e51b815260040180806020018281038252604d815260200180615221604d913960600191505060405180910390fd5b6000614216858563ffffffff614ce416565b6001830180548790039055600283018054869003905590506142388682614efb565b600f8054869003905560108054859003905560005b6016548110156143725761feed60009081526014602052601680546142b59160008051602061526e833981519152918491908690811061428957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548487614f56565b905080156143695761feed6000908152601460205260168054839260008051602061526e833981519152929091869081106142ec57fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220805495909503909455918b168252601490925290812060168054849391908690811061433d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020805490910190555b5060010161424d565b50604080518681526020810186905281516001600160a01b038916927fcad1a1c68982832d9abc314de8a1e5d5e8c81b0588961e360766736d10c3be1a928290030190a2505050505050565b601c548110614407576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b61440f615031565b601b6000601c848154811061442057fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116144a65790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250509050600854600754826101400151010161454f6111dd565b1015614597576040805162461bcd60e51b815260206004820152601260248201527170726f706f73616c206e6f7420726561647960701b604482015290519081900360640190fd5b60a08101516020015160ff16156145f5576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792070726f636573736564000000000000604482015290519081900360640190fd5b8115806146565750601b6000601c600185038154811061461157fe5b9060005260206000200154815260200190815260200160002060050160016007811061463957fe5b602091828204019190069054906101000a900460ff1660ff166001145b611312576040805162461bcd60e51b815260206004820152601d60248201527f70726576696f75732070726f706f73616c20756e70726f636573736564000000604482015290519081900360640190fd5b60006146b1615031565b601b6000601c85815481106146c257fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116147485790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050905080610180015181610160015111156147f257600191505b806101a00151614812600954614806611325565b9063ffffffff614faa16565b101561481d57600091505b80516001600160a01b03166000908152601960205260409020600401541561484457600091505b50919050565b6001546005546148699161beef9133916001600160a01b031690614e7f565b60015460055460045461488e9261beef9285926001600160a01b039092169103614e7f565b50565b6001600160a01b0392831660009081526014602090815260408083209490951682529283528381208054830190557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c2590925291902080549091019055565b6148f7615031565b604051806101e001604052808c6001600160a01b03168152602001336001600160a01b0316815260200160006001600160a01b03168152602001886001600160a01b03168152602001866001600160a01b031681526020018481526020018b81526020018a8152602001878152602001898152602001600081526020016000815260200160008152602001600081526020018581525090508060a001516006600781106149a057fe5b602002015160ff1660011415614a27576149b86150b1565b50604080516060810182526001600160a01b038d8116825260208083018a8152838501878152600e5460009081526012845295909520845181546001600160a01b03191694169390931783555160018301559251805192938493614a2292600285019201906150db565b505050505b600e546000908152601b6020908152604091829020835181546001600160a01b03199081166001600160a01b03928316178355928501516001830180548516918316919091179055928401516002820180548416918516919091179055606084015160038201805484169185169190911790556080840151600482018054909316931692909217905560a0820151829190614ac89060058301906007615159565b5060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d01556101c082015181600e01559050506000601a6000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050806001600160a01b0316336001600160a01b03168d6001600160a01b03167f698b6b5a7173505e04fab049527190ad00a5d40a2dfb3d6e811f0e9c47c00c058e8e8e8e8e8e8e8e8e600e54604051808b81526020018a8152602001898152602001886001600160a01b03166001600160a01b03168152602001878152602001866001600160a01b03166001600160a01b0316815260200185815260200184600760200280838360005b83811015614c2b578181015183820152602001614c13565b5050505090500180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015614c71578181015183820152602001614c59565b50505050905090810190601f168015614c9e5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a45050600e8054600101905550505050505050505050565b600081831015614cdb5781614cdd565b825b9392505050565b600082820183811015614cdd57600080fd5b6001600160a01b038083166000908152601a6020908152604080832054909316825260199052205460ff600160a01b9091041660011415614d7e576001600160a01b038083166000908152601a602090815260408083205490931680835283832080546001600160a01b03199081168317909155601990925292909120805490911690911790555b6040805160c0810182526001600160a01b03938416808252600160208084018281528486019687526000606086018181526080870182815260a088018381528784526019865289842098518954955160ff16600160a01b0260ff60a01b1991909d166001600160a01b031996871617169b909b17885598519487019490945592516002860155955160038501559551600490930192909255601a9094522080549091169091179055565b6001600160a01b0382166000818152601360209081526040808320805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b614e8a848383614e9b565b614e95838383614891565b50505050565b6001600160a01b039283166000908152601460209081526040808320949095168252928352838120805483900390557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c259092529190208054919091039055565b6001600160a01b038216600081815260136020908152604080832080548690039055805185815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b600081614f6257600080fd5b83614f6f57506000614cdd565b83830283858281614f7c57fe5b041415614f9557828181614f8c57fe5b04915050614cdd565b83838681614f9f57fe5b040295945050505050565b600082614fb957506000611140565b82820282848281614fc657fe5b0414614cdd57600080fd5b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600081526020016000815260200160008152602001600081525090565b6040518060e001604052806007906020820280388339509192915050565b604080516101e08101825260008082526020820181905291810182905260608101829052608081019190915260a08101615069615013565b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600080191681525090565b604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061511c57805160ff1916838001178555615149565b82800160010185558215615149579182015b8281111561514957825182559160200191906001019061512e565b506151559291506151e8565b5090565b6001830191839082156151dc5791602002820160005b838211156151ad57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261516f565b80156151da5782816101000a81549060ff02191690556001016020816000010492830192600103026151ad565b505b50615155929150615202565b6111da91905b8082111561515557600081556001016151ee565b6111da91905b8082111561515557805460ff1916815560010161520856fe63616e6e6f7420726167657175697420756e74696c206869676865737420696e6465782070726f706f73616c206d656d62657220766f74656420594553206f6e2069732070726f636573736564291e1481dae41b51b6404ba358c8259ad6b0de3f914493d2e7ed96a33d862da1a265627a7a72315820227121a2135ec339658823c070078e6eaab7f5e2bc8f83f49ab84cf5822966ab64736f6c63430005110032000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b1840000000000000000000000001e1c9929bc7865ad39ebfcb0cc8c92cfabddbc48000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004380000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20000000000000000000000000cc4dc8e92a6e30b6f5f6e65156b121d9f83ca18f000000000000000000000000f290f3d843826d00f8176182fd76550535f6dbb4000000000000000000000000756ce9c56b02f05b5faffafc707b552bedce83ee000000000000000000000000d5b3988ed0ab5ec375e51bb6fd10e205cec16a2e000000000000000000000000130093a5aebc07e78e16f0ecef09d1c45afd8178000000000000000000000000a3564677fc4907a15c9a7eae1dbc1ae9ac57b8e10000000000000000000000004744cda32be7b3e75b9334001da9ed21789d4c0d0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca000000000000000000000000b7f49e02552751b249cae86959fd50d887708b1d00000000000000000000000036306c060497b8df0b34485181c012b7acae77b10000000000000000000000007285502ed0a0ed25f65941e480bda7114492acf9000000000000000000000000c2d6416f5be67aacbcd516580b36d06884e3a2e1000000000000000000000000423afc4406d10c726d5d664d2997571e69d1875f0000000000000000000000001bc9e52baa93dab1a47c3168f6d82ed08856ec83000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e80000
Deployed Bytecode
0x6080604052600436106103815760003560e01c80637d5b6c72116101d1578063b2643aab11610102578063e1780345116100a0578063ea00d3311161006f578063ea00d33114610f21578063ea7b6ffd14610f4b578063f242862114610fa0578063f5d54c7714610fb557610381565b8063e178034514610e85578063e1a0e3fa14610eb8578063e63bc62d14610ee2578063e681c4aa14610f0c57610381565b8063c89039c5116100dc578063c89039c514610dfe578063da35c66414610e13578063dfdd369e14610e28578063e0a8f6f514610e5b57610381565b8063b2643aab14610d5d578063b470aade14610dbf578063c68e45b714610dd457610381565b80639746d9401161016f578063a3dc380011610149578063a3dc380014610cac578063a4d2d9ec14610cd6578063a9059cbb14610d0f578063afe5475f14610d4857610381565b80639746d94014610c3a57806399653fbe14610c645780639d1722cb14610c9757610381565b80638a027690116101ab5780638a02769014610b565780638b15a60514610be65780639425a47614610bfb57806395d89b4114610c2557610381565b80637d5b6c7214610a6a57806383240f8314610a7f5780638340bbce14610b4157610381565b80633793ab3c116102b657806363858f2d11610254578063753d756311610223578063753d7563146109e357806378a8956714610a16578063797daf7014610a2b5780637a60964114610a4057610381565b806363858f2d146109275780636d4475eb1461093c57806370a082311461097557806373f8fd4b146109a857610381565b8063402c179411610290578063402c1794146107df5780634482394b1461081257806359999b41146108df578063635e99aa1461091257610381565b80633793ab3c146107595780633a98ef39146107835780633fc24bba1461079857610381565b806315eb349e116103235780631dafede0116102fd5780631dafede0146106bc5780632582bf2a146106e657806327efc08614610719578063313ce5671461072e57610381565b806315eb349e14610646578063160d66ae1461067657806318160ddd146106a757610381565b806306fdde031161035f57806306fdde03146104fc578063086146d21461058657806308ae4b0c1461059b5780630cf20cc91461060d57610381565b8063013cf08b1461038357806303e32fa114610478578063044a0ca81461049f575b005b34801561038f57600080fd5b506103ad600480360360208110156103a657600080fd5b5035610fca565b604051808f6001600160a01b03166001600160a01b031681526020018e6001600160a01b03166001600160a01b031681526020018d6001600160a01b03166001600160a01b031681526020018c6001600160a01b03166001600160a01b031681526020018b6001600160a01b03166001600160a01b031681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b34801561048457600080fd5b5061048d611049565b60408051918252519081900360200190f35b3480156104ab57600080fd5b506104d8600480360360408110156104c257600080fd5b506001600160a01b03813516906020013561104f565b604051808260028111156104e857fe5b60ff16815260200191505060405180910390f35b34801561050857600080fd5b50610511611146565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054b578181015183820152602001610533565b50505050905090810190601f1680156105785780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561059257600080fd5b5061048d6111dd565b3480156105a757600080fd5b506105ce600480360360208110156105be57600080fd5b50356001600160a01b031661120b565b604080516001600160a01b03909716875260ff9095166020870152858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561061957600080fd5b506103816004803603604081101561063057600080fd5b506001600160a01b03813516906020013561124b565b34801561065257600080fd5b506103816004803603604081101561066957600080fd5b50803590602001356112ac565b34801561068257600080fd5b5061068b611316565b604080516001600160a01b039092168252519081900360200190f35b3480156106b357600080fd5b5061048d611325565b3480156106c857600080fd5b5061068b600480360360208110156106df57600080fd5b503561132f565b3480156106f257600080fd5b506103816004803603602081101561070957600080fd5b50356001600160a01b0316611356565b34801561072557600080fd5b5061068b611589565b34801561073a57600080fd5b5061074361158f565b6040805160ff9092168252519081900360200190f35b34801561076557600080fd5b506103816004803603602081101561077c57600080fd5b5035611598565b34801561078f57600080fd5b5061048d611764565b3480156107a457600080fd5b506107cb600480360360208110156107bb57600080fd5b50356001600160a01b031661176a565b604080519115158252519081900360200190f35b3480156107eb57600080fd5b5061068b6004803603602081101561080257600080fd5b50356001600160a01b031661177f565b34801561081e57600080fd5b506103816004803603606081101561083557600080fd5b810190602081018135600160201b81111561084f57600080fd5b82018360208201111561086157600080fd5b803590602001918460208302840111600160201b8311171561088257600080fd5b919390929091602081019035600160201b81111561089f57600080fd5b8201836020820111156108b157600080fd5b803590602001918460208302840111600160201b831117156108d257600080fd5b919350915035151561179a565b3480156108eb57600080fd5b506103816004803603602081101561090257600080fd5b50356001600160a01b03166118ef565b34801561091e57600080fd5b5061048d611ac5565b34801561093357600080fd5b5061048d611acb565b34801561094857600080fd5b5061048d6004803603604081101561095f57600080fd5b506001600160a01b038135169060200135611ad1565b34801561098157600080fd5b5061048d6004803603602081101561099857600080fd5b50356001600160a01b0316611c4c565b3480156109b457600080fd5b5061048d600480360360408110156109cb57600080fd5b506001600160a01b0381358116916020013516611c6b565b3480156109ef57600080fd5b506107cb60048036036020811015610a0657600080fd5b50356001600160a01b0316611c96565b348015610a2257600080fd5b5061048d611cab565b348015610a3757600080fd5b5061048d611cb1565b348015610a4c57600080fd5b5061038160048036036020811015610a6357600080fd5b5035611cb7565b348015610a7657600080fd5b5061048d611cdd565b348015610a8b57600080fd5b50610aa960048036036020811015610aa257600080fd5b5035611ce3565b60405180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b04578181015183820152602001610aec565b50505050905090810190601f168015610b315780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b348015610b4d57600080fd5b5061048d611d99565b348015610b6257600080fd5b5061048d60048036036080811015610b7957600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610ba857600080fd5b820183602082011115610bba57600080fd5b803590602001918460018302840111600160201b83111715610bdb57600080fd5b919350915035611d9f565b348015610bf257600080fd5b5061048d611e1c565b348015610c0757600080fd5b506107cb60048036036020811015610c1e57600080fd5b5035611e22565b348015610c3157600080fd5b50610511611e39565b348015610c4657600080fd5b5061038160048036036020811015610c5d57600080fd5b5035611e9a565b348015610c7057600080fd5b5061038160048036036040811015610c8757600080fd5b508035906020013560ff16612558565b348015610ca357600080fd5b5061048d612954565b348015610cb857600080fd5b506107cb60048036036020811015610ccf57600080fd5b503561295a565b348015610ce257600080fd5b5061048d60048036036040811015610cf957600080fd5b506001600160a01b038135169060200135612a02565b348015610d1b57600080fd5b5061038160048036036040811015610d3257600080fd5b506001600160a01b038135169060200135612ba4565b348015610d5457600080fd5b5061048d612c7a565b348015610d6957600080fd5b50610d8760048036036020811015610d8057600080fd5b5035612c80565b604051808260e080838360005b83811015610dac578181015183820152602001610d94565b5050505090500191505060405180910390f35b348015610dcb57600080fd5b5061048d612ce8565b348015610de057600080fd5b5061038160048036036020811015610df757600080fd5b5035612cee565b348015610e0a57600080fd5b5061068b612edc565b348015610e1f57600080fd5b5061048d612eeb565b348015610e3457600080fd5b5061038160048036036020811015610e4b57600080fd5b50356001600160a01b0316612ef1565b348015610e6757600080fd5b5061038160048036036020811015610e7e57600080fd5b5035612fe7565b348015610e9157600080fd5b506107cb60048036036020811015610ea857600080fd5b50356001600160a01b0316613183565b348015610ec457600080fd5b5061038160048036036020811015610edb57600080fd5b5035613198565b348015610eee57600080fd5b5061038160048036036020811015610f0557600080fd5b50356132fb565b348015610f1857600080fd5b5061068b6136fc565b348015610f2d57600080fd5b5061051160048036036020811015610f4457600080fd5b5035613702565b61048d6004803603610100811015610f6257600080fd5b506001600160a01b038135811691602081013591604082013591606081013591608082013581169160a08101359160c0820135169060e00135613934565b348015610fac57600080fd5b5061068b613f2f565b348015610fc157600080fd5b5061068b613f3e565b601b602052600090815260409020805460018201546002830154600384015460048501546006860154600787015460088801546009890154600a8a0154600b8b0154600c8c0154600d8d0154600e909d01546001600160a01b039c8d169d9b8d169c9a8b169b998b169a9098169896979596949593949293919290918e565b60055481565b6001600160a01b038216600090815260196020526040812054600160a01b900460ff166001146110b3576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b601c5482106110f6576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b601b6000601c848154811061110757fe5b6000918252602080832090910154835282810193909352604091820181206001600160a01b0387168252600f0190925290205460ff1690505b92915050565b600b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b820191906000526020600020905b8154815290600101906020018083116111b557829003601f168201915b505050505090505b90565b60006112066006546111fa600a5442613f4490919063ffffffff16565b9063ffffffff613f5916565b905090565b601960205260009081526040902080546001820154600283015460038401546004909401546001600160a01b03841694600160a01b90940460ff16939086565b60026000541415611294576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556112a38282613f7b565b50506001600055565b33600090815260196020526040902054600160a01b900460ff16600114611307576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b2b6b132b960b11b604482015290519081900360640190fd5b6113123383836140fa565b5050565b6002546001600160a01b031681565b601054600f540190565b6016818154811061133c57fe5b6000918252602090912001546001600160a01b0316905081565b336000908152601960205260409020600101546113ac576040805162461bcd60e51b815260206004820152600f60248201526e3737ba1039b430b932b437b63232b960891b604482015290519081900360640190fd5b6001600160a01b0381166113ff576040805162461bcd60e51b81526020600482015260156024820152741b995dd1195b1959d85d1952d95e481e995c9bd959605a1b604482015290519081900360640190fd5b6001600160a01b0381163314611500576001600160a01b038116600090815260196020526040902054600160a01b900460ff1615611484576040805162461bcd60e51b815260206004820152601860248201527f63616e6e6f74206f7665727772697465206d656d626572730000000000000000604482015290519081900360640190fd5b6001600160a01b038181166000908152601a60209081526040808320549093168252601990522054600160a01b900460ff1615611500576040805162461bcd60e51b815260206004820152601560248201527463616e6e6f74206f7665727772697465206b65797360581b604482015290519081900360640190fd5b33600081815260196020908152604080832080546001600160a01b039081168552601a845282852080546001600160a01b031990811690915590871680865294839020805482168717905581541684178155815193845290519093927fde7b64a369e10562cc2e71f0f1f944eaf144b75fead6ecb51fac9c4dd693488592908290030190a25050565b61babe81565b600d5460ff1690565b6115a1816143be565b6000601c82815481106115b057fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff1660011461162c576040805162461bcd60e51b81526020600482015260166024820152751b9bdd081dda1a5d195b1a5cdd081c1c9bdc1bdcd85b60521b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000611648846146a7565b6016549091506101901161165a575060005b600181151514156116f05760058201805462ff00001916620100001790556003820180546001600160a01b039081166000908152601560205260408120805460ff1916600190811790915592546016805494850181559091527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899092018054929091166001600160a01b03199092169190911790555b60038201546001600160a01b039081166000908152601760205260409020805460ff191690556002830154611725911661484a565b6040805182151581529051849186917f2094fc13d2ecb0acd6861e82bd006c7e5ab6f312ec0c6cdfe3d1a01ee54d885a9181900360200190a350505050565b600f5481565b60186020526000908152604090205460ff1681565b601a602052600090815260409020546001600160a01b031681565b600260005414156117e3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260005583821461183c576040805162461bcd60e51b815260206004820152601b60248201527f746f6b656e73202620616d6f756e7473206d757374206d617463680000000000604482015290519081900360640190fd5b60005b848110156118e257600084848381811061185557fe5b90506020020135905082156118b4573360009081526014602052604081209088888581811061188057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000205490505b6118d98787848181106118c357fe5b905060200201356001600160a01b031682613f7b565b5060010161183f565b5050600160005550505050565b6001600160a01b03811660008181527fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c25602090815260408083205481516370a0823160e01b815230600482015291519394909390926370a082319260248082019391829003018186803b15801561196557600080fd5b505afa158015611979573d6000803e3d6000fd5b505050506040513d602081101561198f57600080fd5b5051039050806119d2576040805162461bcd60e51b81526020600482015260096024820152686e6f20746f6b656e7360b81b604482015290519081900360640190fd5b6001600160a01b03821660009081526015602052604090205460ff16611a31576040805162461bcd60e51b815260206004820152600f60248201526e1b9bdd081dda1a5d195b1a5cdd1959608a1b604482015290519081900360640190fd5b6001600160a01b038216600090815260008051602061526e8339815191526020526040902054158015611a66575060c8601154105b15611a75576011805460010190555b611a8261feed8383614891565b6040805182815290516001600160a01b038416917f9381e53ffdc9733a6783a6f8665be3f89c231bb81a6771996ed553b4e75c0fe3919081900360200190a25050565b60105481565b60085481565b6000611adb614fd1565b506001600160a01b03838116600090815260196020908152604091829020825160c08101845281549485168152600160a01b90940460ff1691840191909152600181015491830182905260028101546060840152600381015460808401526004015460a0830152151580611b53575060008160600151115b611ba4576040805162461bcd60e51b815260206004820152601760248201527f6d7573742068617665207368617265206f72206c6f6f74000000000000000000604482015290519081900360640190fd5b6001600160a01b03841660009081526019602052604090206004015415611c03576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a985a5b195960921b604482015290519081900360640190fd5b611c0b615013565b600160a082015260408051602081019091526000808252611c3c91879190819081908190819081908c908a906148ef565b5050600e54600019019392505050565b6001600160a01b0381166000908152601360205260409020545b919050565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b60156020526000908152604090205460ff1681565b60165490565b601c5490565b336000908152601960205260409020600181018054839003905560020180549091019055565b600a5481565b60126020908152600091825260409182902080546001808301546002808501805488516101009582161595909502600019011691909104601f81018790048702840187019097528683526001600160a01b03909316959094919291830182828015611d8f5780601f10611d6457610100808354040283529160200191611d8f565b820191906000526020600020905b815481529060010190602001808311611d7257829003601f168201915b5050505050905083565b60075481565b6000611da9615013565b6001816006602002019060ff16908160ff1681525050611e0a876000806000808b60008a898e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506148ef92505050565b5050600e546000190195945050505050565b60045481565b60006007548201611e316111dd565b101592915050565b600c8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156111d25780601f106111a7576101008083540402835291602001916111d2565b60026000541415611ee3576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000908155338152601a60209081526040808320546001600160a01b031683526019909152902060010154611f50576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b60015460048054604080516323b872dd60e01b815233938101939093523060248401526044830191909152516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611fb057600080fd5b505af1158015611fc4573d6000803e3d6000fd5b505050506040513d6020811015611fda57600080fd5b505161201f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60015460045461203e9161beef916001600160a01b0390911690614891565b6000818152601b6020526040902060018101546001600160a01b0316612098576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b600581015460ff16156120e6576040805162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481cdc1bdb9cdbdc9959607a1b604482015290519081900360640190fd5b60058101546301000000900460ff1615612133576040805162461bcd60e51b815260206004820152600960248201526818d85b98d95b1b195960ba1b604482015290519081900360640190fd5b80546001600160a01b031660009081526019602052604090206004015415612195576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600081600901541180156121d0575060038101546001600160a01b0316600090815260008051602061526e8339815191526020526040902054155b1561221e5760c86011541061221e576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6005810154600160201b900460ff16600114156123855760038101546001600160a01b031660009081526015602052604090205460ff161561229d576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60038101546001600160a01b031660009081526017602052604090205460ff161561230f576040805162461bcd60e51b815260206004820152601a60248201527f616c72656164792077686974656c6973742070726f706f736564000000000000604482015290519081900360640190fd5b60165461019011612359576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b60038101546001600160a01b03166000908152601760205260409020805460ff1916600117905561242a565b600581015465010000000000900460ff166001141561242a5780546001600160a01b031660009081526018602052604090205460ff1615612405576040805162461bcd60e51b81526020600482015260156024820152741ada58dac8185b1c9958591e481c1c9bdc1bdcd959605a1b604482015290519081900360640190fd5b80546001600160a01b03166000908152601860205260409020805460ff191660011790555b60006124816124376111dd565b601c541561247957601c8054601b91600091600019810190811061245757fe5b90600052602060002001548152602001908152602001600020600a015461247c565b60005b614ccb565b6001908101600a8401819055336000818152601a60209081526040808320546002890180546001600160a01b0319166001600160a01b03909216918217905560058901805460ff191688179055601c80549788018155938490527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2119096018990559154825189815260001990910191810191909152808201849052905192945083927f2a383a979381335e3eb401ac01dd8083e024ff0256bf5338456ffc0063390bbd9181900360600190a3505060016000555050565b336000908152601a60209081526040808320546001600160a01b0316835260199091529020600101546125c1576040805162461bcd60e51b815260206004820152600c60248201526b6e6f742064656c656761746560a01b604482015290519081900360640190fd5b336000908152601a60209081526040808320546001600160a01b03168084526019909252909120601c54841061262b576040805162461bcd60e51b815260206004820152600a6024820152691d5b9c1c9bdc1bdcd95960b21b604482015290519081900360640190fd5b6000601b6000601c878154811061263e57fe5b90600052602060002001548152602001908152602001600020905060038460ff161061269b576040805162461bcd60e51b81526020600482015260076024820152666e6f74203c203360c81b604482015290519081900360640190fd5b60008460ff1660028111156126ac57fe5b905081600a01546126bb6111dd565b10156126ff576040805162461bcd60e51b815260206004820152600e60248201526d766f74696e672070656e64696e6760901b604482015290519081900360640190fd5b61270c82600a0154611e22565b15612751576040805162461bcd60e51b815260206004820152601060248201526f1c1c9bdc1bdcd85b08195e1c1a5c995960821b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f8301602052604081205460ff16600281111561277a57fe5b146127bb576040805162461bcd60e51b815260206004820152600c60248201526b1b595b58995c881d9bdd195960a21b604482015290519081900360640190fd5b60018160028111156127c957fe5b14806127e0575060028160028111156127de57fe5b145b612822576040805162461bcd60e51b815260206004820152600e60248201526d766f746520596573206f72204e6f60901b604482015290519081900360640190fd5b6001600160a01b0384166000908152600f830160205260409020805482919060ff1916600183600281111561285357fe5b0217905550600181600281111561286657fe5b14156128b6576001830154600b830180549091019055600383015486111561289057600383018690555b81600d015461289d611325565b11156128b1576128ab611325565b600d8301555b6128db565b60028160028111156128c457fe5b14156128db576001830154600c8301805490910190555b836001600160a01b0316336001600160a01b0316877f804f03797630bf8b8a46b9371608abbf7d78a20df720e477bab641957ca68a20601c8a8154811061291e57fe5b906000526020600020015489604051808381526020018260ff1660ff1681526020019250505060405180910390a4505050505050565b60115481565b601c5460009082106129a6576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b601b6000601c84815481106129b757fe5b906000526020600020015481526020019081526020016000206005016001600781106129df57fe5b602091828204019190069054906101000a900460ff1660ff166001149050919050565b60006001600160a01b038316612a4c576040805162461bcd60e51b815260206004820152600a6024820152693732b2b2103a37b5b2b760b11b604482015290519081900360640190fd5b6002546001600160a01b0384811691161415612aaf576040805162461bcd60e51b815260206004820152601960248201527f77686974656c6973742f766f7465546f6b656e206d6174636800000000000000604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff1615612b13576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481dda1a5d195b1a5cdd1959606a1b604482015290519081900360640190fd5b60165461019011612b5d576040805162461bcd60e51b815260206004820152600f60248201526e1dda1a5d195b1a5cdd081b585e1959608a1b604482015290519081900360640190fd5b612b65615013565b6001608082015260408051602081019091526000808252612b95918190819081908990829081908b908a906148ef565b5050600e546000190192915050565b33600090815260196020526040902060020154612bc7908263ffffffff613f4416565b336000908152601960205260408082206002908101939093556001600160a01b038516825290200154612c00908263ffffffff614ce416565b6001600160a01b0383166000818152601960209081526040808320600201949094553380835260138252848320805487900390558383529184902080548601905583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60095481565b612c88615013565b6000828152601b6020526040808220815160e0810192839052926005909101916007918390855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411612caf575094979650505050505050565b60065481565b60026000541415612d37576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b600260008181559054604080516323b872dd60e01b815233600482015261dead60248201526044810185905290516001600160a01b03909216926323b872dd926064808401936020939083900390910190829087803b158015612d9957600080fd5b505af1158015612dad573d6000803e3d6000fd5b505050506040513d6020811015612dc357600080fd5b5051612e08576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b33600090815260196020526040902054600160a01b900460ff1660011415612e655733600090815260196020526040902060010154612e4d908263ffffffff614ce416565b33600090815260196020526040902060010155612e6f565b612e6f3382614cf6565b612e793382614e28565b600f80548201908190556ec097ce7bc90715b34b9f10000000001015612ed4576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b506001600055565b6001546001600160a01b031681565b600e5481565b6001600160a01b03811660009081526019602052604090206004810154612f4c576040805162461bcd60e51b815260206004820152600a6024820152691b9bdd081a985a5b195960b21b604482015290519081900360640190fd5b6000816002015411612f8f576040805162461bcd60e51b81526020600482015260076024820152661b9bc81b1bdbdd60ca1b604482015290519081900360640190fd5b612f9c816003015461295a565b612fd75760405162461bcd60e51b815260040180806020018281038252604d815260200180615221604d913960600191505060405180910390fd5b61131282600083600201546140fa565b6000818152601b60205260409020600581015460ff161561304f576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792073706f6e736f726564000000000000604482015290519081900360640190fd5b60058101546301000000900460ff16156130b0576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792063616e63656c6c6564000000000000604482015290519081900360640190fd5b60018101546001600160a01b03163314613109576040805162461bcd60e51b81526020600482015260156024820152746f6e6c792070726f706f7365722063616e63656c7360581b604482015290519081900360640190fd5b60058101805463ff000000191663010000001790556001810154600382015460098301546131499261beef926001600160a01b0391821692911690614e7f565b60408051338152905183917fc215fed6680bb02d323dc3f8b8f85241572607538426059c9232601bd293c3be919081900360200190a25050565b60176020526000908152604090205460ff1681565b6131a1816143be565b6000601c82815481106131b057fe5b600091825260208083209190910154808352601b909152604090912060058101549192509065010000000000900460ff16600114613229576040805162461bcd60e51b81526020600482015260116024820152701b9bdd081ada58dac81c1c9bdc1bdcd85b607a1b604482015290519081900360640190fd5b60058101805461ff0019166101001790556000613245846146a7565b90506001811515141561328a5760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040812060048101869055600101555b81546001600160a01b039081166000908152601860205260409020805460ff1916905560028301546132bc911661484a565b6040805182151581529051849186917f0e347d00d3e9e6cdff9e6c09092c9ff1bd448f9b3dfb7091b30939ec5e7a3c739181900360200190a350505050565b613304816143be565b6000601c828154811061331357fe5b600091825260208083209190910154808352601b9091526040909120600581015491925090600160201b900460ff1615801561335d5750600581015465010000000000900460ff16155b8015613378575060058101546601000000000000900460ff16155b6133c1576040805162461bcd60e51b81526020600482015260156024820152741b9bdd081cdd185b99185c99081c1c9bdc1bdcd85b605a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006133dd846146a7565b90506ec097ce7bc90715b34b9f100000000061341383600701546134078560060154613407611325565b9063ffffffff614ce416565b111561341d575060005b60048201546001600160a01b0316600090815260008051602061526e833981519152602052604090205460088301541115613456575060005b60008260090154118015613491575060038201546001600160a01b0316600090815260008051602061526e8339815191526020526040902054155b80156134a0575060c860115410155b156134a9575060005b6001811515141561367b5760058201805462ff000019166201000017905581546001600160a01b0316600090815260196020526040902054600160a01b900460ff166001141561353e57600682015482546001600160a01b0390811660009081526019602052604080822060010180549094019093556007850154855490921681529190912060020180549091019055613558565b81546006830154613558916001600160a01b031690614cf6565b815460078301546006840154613578926001600160a01b03169101614e28565b6006820154600f80549091019055600782015460108054909101905560038201546001600160a01b0316600090815260008051602061526e83398151915260205260409020541580156135cf575060008260090154115b156135de576011805460010190555b600382015460098301546136039161beef9161feed916001600160a01b031690614e7f565b81546004830154600884015461362b9261feed926001600160a01b0391821692911690614e7f565b60048201546001600160a01b0316600090815260008051602061526e8339815191526020526040902054158015613666575060008260080154115b1561367657601180546000190190555b6136a6565b6001820154600383015460098401546136a69261beef926001600160a01b0391821692911690614e7f565b60028201546136bd906001600160a01b031661484a565b6040805182151581529051849186917f86f74240ecee9e4230d26ff92e17fee978460d9c0f78f5c88b2864c9e7a494279181900360200190a350505050565b61beef81565b606061370d826143be565b6000601c838154811061371c57fe5b600091825260208083209190910154808352601282526040808420601b909352909220600581015492935090916601000000000000900460ff166001146137a0576040805162461bcd60e51b81526020600482015260136024820152721b9bdd081858dd1a5bdb881c1c9bdc1bdcd85b606a1b604482015290519081900360640190fd5b60058101805461ff00191661010017905560006137bc866146a7565b9050600181151514156138f25760058201805462ff00001916620100001790558254600184810154604051600287810180546000966060966001600160a01b039091169594929383928592600019908216156101000201160480156138585780601f10613836576101008083540402835291820191613858565b820191906000526020600020905b815481529060010190602001808311613844575b505091505060006040518083038185875af1925050503d806000811461389a576040519150601f19603f3d011682016040523d82523d6000602084013e61389f565b606091505b5091509150816138e5576040805162461bcd60e51b815260206004820152600c60248201526b63616c6c206661696c75726560a01b604482015290519081900360640190fd5b9550611c66945050505050565b6040805182151581529051859188917facc0e8fc789590d1cf21203e356b7b1cd28911b1309c24883c5fcdc305b497a39181900360200190a350505050919050565b60006002600054141561397f576040805162461bcd60e51b815260206004820152600e60248201526d1c99595b9d1c985b9d0818d85b1b60921b604482015290519081900360640190fd5b60026000556ec097ce7bc90715b34b9f10000000006139a4898963ffffffff614ce416565b11156139e5576040805162461bcd60e51b815260206004820152600b60248201526a19dd5a5b19081b585e195960aa1b604482015290519081900360640190fd5b6001600160a01b03851660009081526015602052604090205460ff16613a52576040805162461bcd60e51b815260206004820152601c60248201527f74726962757465546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03831660009081526015602052604090205460ff16613abf576040805162461bcd60e51b815260206004820152601c60248201527f7061796d656e74546f6b656e206e6f742077686974656c697374656400000000604482015290519081900360640190fd5b6001600160a01b03891661feed14801590613ae557506001600160a01b03891661beef14155b8015613afc57506001600160a01b03891661babe14155b613b46576040805162461bcd60e51b81526020600482015260166024820152756170706c6963616e7420756e72657365727661626c6560501b604482015290519081900360640190fd5b6001600160a01b03891660009081526019602052604090206004015415613ba7576040805162461bcd60e51b815260206004820152601060248201526f185c1c1b1a58d85b9d081a985a5b195960821b604482015290519081900360640190fd5b600086118015613bda57506001600160a01b038516600090815260008051602061526e8339815191526020526040902054155b15613c285760c860115410613c28576040805162461bcd60e51b815260206004820152600f60248201526e19dd5a5b1918985b9ac81b585e1959608a1b604482015290519081900360640190fd5b6003546001600160a01b038681169116148015613c455750600034115b15613e1b57853414613c91576040805162461bcd60e51b815260206004820152601060248201526f0d2dce6eaccccd2c6d2cadce8408aa8960831b604482015290519081900360640190fd5b600360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ce157600080fd5b505af1158015613cf5573d6000803e3d6000fd5b5050600354604051600093506001600160a01b03909116915034908381818185875af1925050503d8060008114613d48576040519150601f19603f3d011682016040523d82523d6000602084013e613d4d565b606091505b5050905080613d95576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6003546040805163a9059cbb60e01b815230600482015234602482015290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015613de857600080fd5b505af1158015613dfc573d6000803e3d6000fd5b505050506040513d6020811015613e1257600080fd5b50613edf915050565b604080516323b872dd60e01b81523360048201523060248201526044810188905290516001600160a01b038716916323b872dd9160648083019260209291908290030181600087803b158015613e7057600080fd5b505af1158015613e84573d6000803e3d6000fd5b505050506040513d6020811015613e9a57600080fd5b5051613edf576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b613eec61beef8688614891565b613ef4615013565b613f158a8a8a8a8a8a8a8a89604051806020016040528060008152506148ef565b5050600e5460001901600160005598975050505050505050565b6003546001600160a01b031681565b61feed81565b600082821115613f5357600080fd5b50900390565b6000808211613f6757600080fd5b6000828481613f7257fe5b04949350505050565b3360009081526014602090815260408083206001600160a01b0386168452909152902054811115613fea576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742062616c616e636560601b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81523360048201526024810183905290516001600160a01b0384169163a9059cbb9160448083019260209291908290030181600087803b15801561403957600080fd5b505af115801561404d573d6000803e3d6000fd5b505050506040513d602081101561406357600080fd5b50516140a8576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b6140b3338383614e9b565b604080516001600160a01b038416815260208101839052815133927f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb928290030190a25050565b6000614104611325565b6001600160a01b038516600090815260196020526040902060018101549192509084111561416f576040805162461bcd60e51b8152602060048201526013602482015272696e73756666696369656e742073686172657360681b604482015290519081900360640190fd5b82816002015410156141bc576040805162461bcd60e51b81526020600482015260116024820152701a5b9cdd59999a58da595b9d081b1bdbdd607a1b604482015290519081900360640190fd5b6141c9816003015461295a565b6142045760405162461bcd60e51b815260040180806020018281038252604d815260200180615221604d913960600191505060405180910390fd5b6000614216858563ffffffff614ce416565b6001830180548790039055600283018054869003905590506142388682614efb565b600f8054869003905560108054859003905560005b6016548110156143725761feed60009081526014602052601680546142b59160008051602061526e833981519152918491908690811061428957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548487614f56565b905080156143695761feed6000908152601460205260168054839260008051602061526e833981519152929091869081106142ec57fe5b60009182526020808320909101546001600160a01b0390811684528382019490945260409283018220805495909503909455918b168252601490925290812060168054849391908690811061433d57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020805490910190555b5060010161424d565b50604080518681526020810186905281516001600160a01b038916927fcad1a1c68982832d9abc314de8a1e5d5e8c81b0588961e360766736d10c3be1a928290030190a2505050505050565b601c548110614407576040805162461bcd60e51b815260206004820152601060248201526f1b9bc81cdd58da081c1c9bdc1bdcd85b60821b604482015290519081900360640190fd5b61440f615031565b601b6000601c848154811061442057fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116144a65790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250509050600854600754826101400151010161454f6111dd565b1015614597576040805162461bcd60e51b815260206004820152601260248201527170726f706f73616c206e6f7420726561647960701b604482015290519081900360640190fd5b60a08101516020015160ff16156145f5576040805162461bcd60e51b815260206004820152601a60248201527f70726f706f73616c20616c72656164792070726f636573736564000000000000604482015290519081900360640190fd5b8115806146565750601b6000601c600185038154811061461157fe5b9060005260206000200154815260200190815260200160002060050160016007811061463957fe5b602091828204019190069054906101000a900460ff1660ff166001145b611312576040805162461bcd60e51b815260206004820152601d60248201527f70726576696f75732070726f706f73616c20756e70726f636573736564000000604482015290519081900360640190fd5b60006146b1615031565b601b6000601c85815481106146c257fe5b6000918252602080832091909101548352828101939093526040918201812082516101e08101845281546001600160a01b0390811682526001830154811695820195909552600282015485168185015260038201548516606082015260048201549094166080850152825160e0810193849052909260a085019260058501916007918390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116147485790505050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050905080610180015181610160015111156147f257600191505b806101a00151614812600954614806611325565b9063ffffffff614faa16565b101561481d57600091505b80516001600160a01b03166000908152601960205260409020600401541561484457600091505b50919050565b6001546005546148699161beef9133916001600160a01b031690614e7f565b60015460055460045461488e9261beef9285926001600160a01b039092169103614e7f565b50565b6001600160a01b0392831660009081526014602090815260408083209490951682529283528381208054830190557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c2590925291902080549091019055565b6148f7615031565b604051806101e001604052808c6001600160a01b03168152602001336001600160a01b0316815260200160006001600160a01b03168152602001886001600160a01b03168152602001866001600160a01b031681526020018481526020018b81526020018a8152602001878152602001898152602001600081526020016000815260200160008152602001600081526020018581525090508060a001516006600781106149a057fe5b602002015160ff1660011415614a27576149b86150b1565b50604080516060810182526001600160a01b038d8116825260208083018a8152838501878152600e5460009081526012845295909520845181546001600160a01b03191694169390931783555160018301559251805192938493614a2292600285019201906150db565b505050505b600e546000908152601b6020908152604091829020835181546001600160a01b03199081166001600160a01b03928316178355928501516001830180548516918316919091179055928401516002820180548416918516919091179055606084015160038201805484169185169190911790556080840151600482018054909316931692909217905560a0820151829190614ac89060058301906007615159565b5060c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d01556101c082015181600e01559050506000601a6000336001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03169050806001600160a01b0316336001600160a01b03168d6001600160a01b03167f698b6b5a7173505e04fab049527190ad00a5d40a2dfb3d6e811f0e9c47c00c058e8e8e8e8e8e8e8e8e600e54604051808b81526020018a8152602001898152602001886001600160a01b03166001600160a01b03168152602001878152602001866001600160a01b03166001600160a01b0316815260200185815260200184600760200280838360005b83811015614c2b578181015183820152602001614c13565b5050505090500180602001838152602001828103825284818151815260200191508051906020019080838360005b83811015614c71578181015183820152602001614c59565b50505050905090810190601f168015614c9e5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a45050600e8054600101905550505050505050505050565b600081831015614cdb5781614cdd565b825b9392505050565b600082820183811015614cdd57600080fd5b6001600160a01b038083166000908152601a6020908152604080832054909316825260199052205460ff600160a01b9091041660011415614d7e576001600160a01b038083166000908152601a602090815260408083205490931680835283832080546001600160a01b03199081168317909155601990925292909120805490911690911790555b6040805160c0810182526001600160a01b03938416808252600160208084018281528486019687526000606086018181526080870182815260a088018381528784526019865289842098518954955160ff16600160a01b0260ff60a01b1991909d166001600160a01b031996871617169b909b17885598519487019490945592516002860155955160038501559551600490930192909255601a9094522080549091169091179055565b6001600160a01b0382166000818152601360209081526040808320805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b614e8a848383614e9b565b614e95838383614891565b50505050565b6001600160a01b039283166000908152601460209081526040808320949095168252928352838120805483900390557fcd6c9e8693baf2aea18f79e385722f542743d61c3b774ead68b01ba6b0789c259092529190208054919091039055565b6001600160a01b038216600081815260136020908152604080832080548690039055805185815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a35050565b600081614f6257600080fd5b83614f6f57506000614cdd565b83830283858281614f7c57fe5b041415614f9557828181614f8c57fe5b04915050614cdd565b83838681614f9f57fe5b040295945050505050565b600082614fb957506000611140565b82820282848281614fc657fe5b0414614cdd57600080fd5b6040518060c0016040528060006001600160a01b03168152602001600060ff168152602001600081526020016000815260200160008152602001600081525090565b6040518060e001604052806007906020820280388339509192915050565b604080516101e08101825260008082526020820181905291810182905260608101829052608081019190915260a08101615069615013565b81526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600080191681525090565b604051806060016040528060006001600160a01b0316815260200160008152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061511c57805160ff1916838001178555615149565b82800160010185558215615149579182015b8281111561514957825182559160200191906001019061512e565b506151559291506151e8565b5090565b6001830191839082156151dc5791602002820160005b838211156151ad57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261516f565b80156151da5782816101000a81549060ff02191690556001016020816000010492830192600103026151ad565b505b50615155929150615202565b6111da91905b8082111561515557600081556001016151ee565b6111da91905b8082111561515557805460ff1916815560010161520856fe63616e6e6f7420726167657175697420756e74696c206869676865737420696e6465782070726f706f73616c206d656d62657220766f74656420594553206f6e2069732070726f636573736564291e1481dae41b51b6404ba358c8259ad6b0de3f914493d2e7ed96a33d862da1a265627a7a72315820227121a2135ec339658823c070078e6eaab7f5e2bc8f83f49ab84cf5822966ab64736f6c63430005110032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b1840000000000000000000000001e1c9929bc7865ad39ebfcb0cc8c92cfabddbc48000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004380000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20000000000000000000000000cc4dc8e92a6e30b6f5f6e65156b121d9f83ca18f000000000000000000000000f290f3d843826d00f8176182fd76550535f6dbb4000000000000000000000000756ce9c56b02f05b5faffafc707b552bedce83ee000000000000000000000000d5b3988ed0ab5ec375e51bb6fd10e205cec16a2e000000000000000000000000130093a5aebc07e78e16f0ecef09d1c45afd8178000000000000000000000000a3564677fc4907a15c9a7eae1dbc1ae9ac57b8e10000000000000000000000004744cda32be7b3e75b9334001da9ed21789d4c0d0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca000000000000000000000000b7f49e02552751b249cae86959fd50d887708b1d00000000000000000000000036306c060497b8df0b34485181c012b7acae77b10000000000000000000000007285502ed0a0ed25f65941e480bda7114492acf9000000000000000000000000c2d6416f5be67aacbcd516580b36d06884e3a2e1000000000000000000000000423afc4406d10c726d5d664d2997571e69d1875f0000000000000000000000001bc9e52baa93dab1a47c3168f6d82ed08856ec83000000000000000000000000000000000000000000000000000000000000000f0000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000000000000000000000000000008ac7230489e80000
-----Decoded View---------------
Arg [0] : _depositToken (address): 0xcD62b1C403fa761BAadFC74C525ce2B51780b184
Arg [1] : _voteToken (address): 0x1E1C9929Bc7865AD39EbfcB0Cc8c92cfAbDDBc48
Arg [2] : _summoner (address[]): 0x1C0Aa8cCD568d90d61659F060D1bFb1e6f855A20,0xcC4Dc8e92A6E30b6F5F6E65156b121D9f83Ca18F,0xf290f3d843826d00f8176182fd76550535f6dbb4,0x756CE9C56B02f05b5FaFfaFc707B552bEDce83eE,0xd5B3988eD0AB5ec375E51bB6fd10e205cEC16A2E,0x130093A5aEbc07e78e16f0EcEF09d1c45AfD8178,0xa3564677FC4907A15c9A7EAe1DBc1ae9aC57b8E1,0x4744cda32bE7b3e75b9334001da9ED21789d4c0d,0x7136fbDdD4DFfa2369A9283B6E90A040318011Ca,0xb7f49E02552751b249caE86959fD50D887708B1D,0x36306C060497B8df0b34485181c012b7aCAE77B1,0x7285502ED0A0Ed25F65941E480bda7114492acF9,0xC2d6416F5BE67AaCBcd516580b36D06884E3A2E1,0x423afc4406d10C726d5d664D2997571e69D1875F,0x1bc9e52bAa93Dab1a47c3168f6d82ED08856Ec83
Arg [3] : _summonerShares (uint256[]): 10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000,10000000000000000000
Arg [4] : _summonerDeposit (uint256): 0
Arg [5] : _proposalDeposit (uint256): 0
Arg [6] : _processingReward (uint256): 0
Arg [7] : _periodDuration (uint256): 17280
Arg [8] : _votingPeriodLength (uint256): 5
Arg [9] : _gracePeriodLength (uint256): 2
Arg [10] : _dilutionBound (uint256): 3
-----Encoded View---------------
43 Constructor Arguments found :
Arg [0] : 000000000000000000000000cd62b1c403fa761baadfc74c525ce2b51780b184
Arg [1] : 0000000000000000000000001e1c9929bc7865ad39ebfcb0cc8c92cfabddbc48
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000360
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000004380
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [12] : 0000000000000000000000001c0aa8ccd568d90d61659f060d1bfb1e6f855a20
Arg [13] : 000000000000000000000000cc4dc8e92a6e30b6f5f6e65156b121d9f83ca18f
Arg [14] : 000000000000000000000000f290f3d843826d00f8176182fd76550535f6dbb4
Arg [15] : 000000000000000000000000756ce9c56b02f05b5faffafc707b552bedce83ee
Arg [16] : 000000000000000000000000d5b3988ed0ab5ec375e51bb6fd10e205cec16a2e
Arg [17] : 000000000000000000000000130093a5aebc07e78e16f0ecef09d1c45afd8178
Arg [18] : 000000000000000000000000a3564677fc4907a15c9a7eae1dbc1ae9ac57b8e1
Arg [19] : 0000000000000000000000004744cda32be7b3e75b9334001da9ed21789d4c0d
Arg [20] : 0000000000000000000000007136fbddd4dffa2369a9283b6e90a040318011ca
Arg [21] : 000000000000000000000000b7f49e02552751b249cae86959fd50d887708b1d
Arg [22] : 00000000000000000000000036306c060497b8df0b34485181c012b7acae77b1
Arg [23] : 0000000000000000000000007285502ed0a0ed25f65941e480bda7114492acf9
Arg [24] : 000000000000000000000000c2d6416f5be67aacbcd516580b36d06884e3a2e1
Arg [25] : 000000000000000000000000423afc4406d10c726d5d664d2997571e69d1875f
Arg [26] : 0000000000000000000000001bc9e52baa93dab1a47c3168f6d82ed08856ec83
Arg [27] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [28] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [29] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [30] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [31] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [32] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [33] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [34] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [35] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [36] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [37] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [38] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [39] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [40] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [41] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Arg [42] : 0000000000000000000000000000000000000000000000008ac7230489e80000
Deployed Bytecode Sourcemap
1841:38774:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8986:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8986:45:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8986:45:0;;:::i;:::-;;;;;-1:-1:-1;;;;;8986:45:0;-1:-1:-1;;;;;8986:45:0;;;;;;-1:-1:-1;;;;;8986:45:0;-1:-1:-1;;;;;8986:45:0;;;;;;-1:-1:-1;;;;;8986:45:0;-1:-1:-1;;;;;8986:45:0;;;;;;-1:-1:-1;;;;;8986:45:0;-1:-1:-1;;;;;8986:45:0;;;;;;-1:-1:-1;;;;;8986:45:0;-1:-1:-1;;;;;8986:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2401:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2401:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;35178:346;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35178:346:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;35178:346:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38322:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38322:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;38322:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35040:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35040:126:0;;;:::i;8864:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8864:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8864:41:0;-1:-1:-1;;;;;8864:41:0;;:::i;:::-;;;;-1:-1:-1;;;;;8864:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31080:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31080:128:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;31080:128:0;;;;;;;;:::i;28682:210::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28682:210:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28682:210:0;;;;;;;:::i;2077:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2077:24:0;;;:::i;:::-;;;;-1:-1:-1;;;;;2077:24:0;;;;;;;;;;;;;;38609:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38609:103:0;;;:::i;8707:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8707:31:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8707:31:0;;:::i;33464:854::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33464:854:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33464:854:0;-1:-1:-1;;;;;33464:854:0;;:::i;5567:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5567:47:0;;;:::i;38512:85::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38512:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23987:952;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23987:952:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23987:952:0;;:::i;5691:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5691:26:0;;;:::i;8805:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8805:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8805:46:0;-1:-1:-1;;;;;8805:46:0;;:::i;:::-;;;;;;;;;;;;;;;;;;8912:61;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8912:61:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8912:61:0;-1:-1:-1;;;;;8912:61:0;;:::i;31216:526::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31216:526:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31216:526:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31216:526:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31216:526:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31216:526:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;31216:526:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31216:526:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31216:526:0;;-1:-1:-1;31216:526:0;-1:-1:-1;31216:526:0;;;;:::i;32141:622::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32141:622:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32141:622:0;-1:-1:-1;;;;;32141:622:0;;:::i;5759:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5759:24:0;;;:::i;2683:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2683:32:0;;;:::i;14108:619::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14108:619:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14108:619:0;;;;;;;;:::i;38198:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38198:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38198:112:0;-1:-1:-1;;;;;38198:112:0;;:::i;35913:144::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35913:144:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;35913:144:0;;;;;;;;;;:::i;8654:46::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8654:46:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8654:46:0;-1:-1:-1;;;;;8654:46:0;;:::i;35803:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35803:102:0;;;:::i;35681:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35681:110:0;;;:::i;39781:172::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39781:172:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39781:172:0;;:::i;2888:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2888:28:0;;;:::i;5919:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5919:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5919:41:0;;:::i;:::-;;;;;-1:-1:-1;;;;;5919:41:0;-1:-1:-1;;;;;5919:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5919:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2610:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2610:33:0;;;:::i;13489:611::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13489:611:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;13489:611:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;13489:611:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;13489:611:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;13489:611:0;;-1:-1:-1;13489:611:0;-1:-1:-1;13489:611:0;;:::i;2298:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2298:30:0;;;:::i;34677:166::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34677:166:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34677:166:0;;:::i;38415:89::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38415:89:0;;;:::i;16510:2252::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16510:2252:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16510:2252:0;;:::i;18825:1813::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18825:1813:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18825:1813:0;;;;;;;;;:::i;5823:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5823:35:0;;;:::i;34415:254::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34415:254:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34415:254:0;;:::i;12756:721::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12756:721:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12756:721:0;;;;;;;;:::i;40197:415::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40197:415:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40197:415:0;;;;;;;;:::i;2755:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2755:28:0;;;:::i;35532:137::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35532:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35532:137:0;;:::i;:::-;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;35532:137:0;;;;;;;;;;;;;;;;2512:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2512:29:0;;;:::i;38960:809::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38960:809:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38960:809:0;;:::i;1991:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1991:27:0;;;:::i;5627:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5627:28:0;;;:::i;30599:469::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30599:469:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30599:469:0;-1:-1:-1;;;;;30599:469:0;;:::i;32886:570::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32886:570:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32886:570:0;;:::i;8747:51::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8747:51:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8747:51:0;-1:-1:-1;;;;;8747:51:0;;:::i;25890:1025::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25890:1025:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25890:1025:0;;:::i;20646:3333::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20646:3333:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20646:3333:0;;:::i;5512:48::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5512:48:0;;;:::i;24947:935::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24947:935:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24947:935:0;;:::i;10714:2030::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;10714:2030:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2169:64::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2169:64:0;;;:::i;5458:47::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5458:47:0;;;:::i;8986:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8986:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2401:31::-;;;;:::o;35178:346::-;-1:-1:-1;;;;;35301:22:0;;35276:4;35301:22;;;:7;:22;;;;;:29;-1:-1:-1;;;35301:29:0;;;;35334:1;35301:34;35293:57;;;;;-1:-1:-1;;;35293:57:0;;;;;;;;;;;;-1:-1:-1;;;35293:57:0;;;;;;;;;;;;;;;35385:13;:20;35369:36;;35361:59;;;;;-1:-1:-1;;;35361:59:0;;;;;;;;;;;;-1:-1:-1;;;35361:59:0;;;;;;;;;;;;;;;35448:9;:39;35458:13;35472;35458:28;;;;;;;;;;;;;;;;;;;;35448:39;;;;;;;;;;;;;;;-1:-1:-1;;;;;35448:68:0;;;;:53;;:68;;;;;;;;;-1:-1:-1;35178:346:0;;;;;:::o;38322:85::-;38394:5;38387:12;;;;;;;;-1:-1:-1;;38387:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38361:13;;38387:12;;38394:5;;38387:12;;38394:5;38387:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38322:85;;:::o;35040:126::-;35089:7;35116:42;35143:14;;35116:22;35124:13;;35116:3;:7;;:22;;;;:::i;:::-;:26;:42;:26;:42;:::i;:::-;35109:49;;35040:126;:::o;8864:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8864:41:0;;;-1:-1:-1;;;8864:41:0;;;;;;;;:::o;31080:128::-;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;31169:31;31186:5;31193:6;31169:16;:31::i;:::-;-1:-1:-1;;1284:1:0;1598:7;:22;31080:128::o;28682:210::-;28778:10;28770:19;;;;:7;:19;;;;;:26;-1:-1:-1;;;28770:26:0;;;;28800:1;28770:31;28762:54;;;;;-1:-1:-1;;;28762:54:0;;;;;;;;;;;;-1:-1:-1;;;28762:54:0;;;;;;;;;;;;;;;28837:47;28847:10;28859:12;28873:10;28837:9;:47::i;:::-;28682:210;;:::o;2077:24::-;;;-1:-1:-1;;;;;2077:24:0;;:::o;38609:103::-;38695:9;;38681:11;;:23;38609:103;:::o;8707:31::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8707:31:0;;-1:-1:-1;8707:31:0;:::o;33464:854::-;33551:10;33572:1;33543:19;;;:7;:19;;;;;:26;;;33535:58;;;;;-1:-1:-1;;;33535:58:0;;;;;;;;;;;;-1:-1:-1;;;33535:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33612:28:0;;33604:62;;;;;-1:-1:-1;;;33604:62:0;;;;;;;;;;;;-1:-1:-1;;;33604:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33769:28:0;;33787:10;33769:28;33765:245;;-1:-1:-1;;;;;33822:23:0;;;;;;:7;:23;;;;;:30;-1:-1:-1;;;33822:30:0;;;;:35;33814:72;;;;;-1:-1:-1;;;33814:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33917:42:0;;;33909:51;33917:42;;;:26;:42;;;;;;;;;;;;33909:51;;:7;:51;;;:58;-1:-1:-1;;;33909:58:0;;;;:63;33901:97;;;;;-1:-1:-1;;;33901:97:0;;;;;;;;;;;;-1:-1:-1;;;33901:97:0;;;;;;;;;;;;;;;34054:10;34022:21;34046:19;;;:7;:19;;;;;;;;34103:18;;-1:-1:-1;;;;;34103:18:0;;;34076:46;;:26;:46;;;;;:59;;-1:-1:-1;;;;;;34076:59:0;;;;;;34146:42;;;;;;;;;;:55;;;;;;;;34212:35;;;;;;;34265:45;;;;;;;34046:19;;34054:10;34265:45;;;;;;;;;33464:854;;:::o;5567:47::-;5607:6;5567:47;:::o;38512:85::-;38580:9;;;;38512:85;:::o;23987:952::-;24064:45;24095:13;24064:30;:45::i;:::-;24122:18;24143:13;24157;24143:28;;;;;;;;;;;;;;;;;;;;;24210:21;;;:9;:21;;;;;;;24252:14;;;:17;24143:28;;-1:-1:-1;24210:21:0;-1:-1:-1;;;24252:17:0;;;;24273:1;24252:22;24244:57;;;;;-1:-1:-1;;;24244:57:0;;;;;;;;;;;;-1:-1:-1;;;24244:57:0;;;;;;;;;;;;;;;24314:14;;;:21;;-1:-1:-1;;24314:21:0;;;;;:17;24376:23;24385:13;24376:8;:23::i;:::-;24416:14;:21;24361:38;;-1:-1:-1;3363:3:0;-1:-1:-1;24412:98:0;;-1:-1:-1;24493:5:0;24412:98;24537:4;24526:15;;;;24522:207;;;24558:14;;;:21;;-1:-1:-1;;24558:21:0;;;;;24630;;;;;-1:-1:-1;;;;;24630:21:0;;;24558:17;24607:46;;;:14;24558:17;24607:46;;;;:53;;-1:-1:-1;;24607:53:0;24578:1;24607:53;;;;;;24695:21;;24675:14;27:10:-1;;23:18;;;45:23;;24675:42:0;;;;;;;;;24695:21;;;;-1:-1:-1;;;;;;24675:42:0;;;;;;;;;24522:207;24769:21;;;;-1:-1:-1;;;;;24769:21:0;;;24795:5;24741:51;;;:19;:51;;;;;:59;;-1:-1:-1;;24741:59:0;;;24828:16;;;;24813:32;;24828:16;24813:14;:32::i;:::-;24871:60;;;;;;;;;;24911:10;;24896:13;;24871:60;;;;;;;;;23987:952;;;;:::o;5691:26::-;;;;:::o;8805:46::-;;;;;;;;;;;;;;;:::o;8912:61::-;;;;;;;;;;;;-1:-1:-1;;;;;8912:61:0;;:::o;31216:526::-;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;31348:31;;;31340:71;;;;;-1:-1:-1;;;31340:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31429:9;31424:311;31442:17;;;31424:311;;;31481:22;31506:7;;31514:1;31506:10;;;;;;;;;;;;;31481:35;;31535:3;31531:133;;;31626:10;31608:29;;;;:17;:29;;;;;;31638:6;;31645:1;31638:9;;;;;;;;;;;;;-1:-1:-1;;;;;31638:9:0;-1:-1:-1;;;;;31608:40:0;-1:-1:-1;;;;;31608:40:0;;;;;;;;;;;;;31591:57;;31531:133;31680:43;31697:6;;31704:1;31697:9;;;;;;;;;;;;;-1:-1:-1;;;;;31697:9:0;31708:14;31680:16;:43::i;:::-;-1:-1:-1;31461:3:0;;31424:311;;;-1:-1:-1;;1284:1:0;1598:7;:22;-1:-1:-1;;;;31216:526:0:o;32141:622::-;-1:-1:-1;;;;;32266:31:0;;32199:23;32266:31;;;:24;;:31;;;:24;:31;;;;32225:38;;-1:-1:-1;;;32225:38:0;;32257:4;32225:38;;;;;;32199:23;;32266:31;;;;32225:23;;:38;;;;;;;;;;;32266:31;32225:38;;;5:2:-1;;;;30:1;27;20:12;5:2;32225:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32225:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32225:38:0;:72;;-1:-1:-1;32403:19:0;32395:41;;;;;-1:-1:-1;;;32395:41:0;;;;;;;;;;;;-1:-1:-1;;;32395:41:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32455:21:0;;;;;;:14;:21;;;;;;;;32447:49;;;;;-1:-1:-1;;;32447:49:0;;;;;;;;;;;;-1:-1:-1;;;32447:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32521:31:0;;:24;:31;;;-1:-1:-1;;;;;;;;;;;32521:24:0;:31;:24;:31;;;:36;:88;;;;;3458:3;32561:20;;:48;32521:88;32517:122;;;32612:20;:25;;32636:1;32612:25;;;32517:122;32649:49;5498:6;32675:5;32682:15;32649:18;:49::i;:::-;32716:39;;;;;;;;-1:-1:-1;;;;;32716:39:0;;;;;;;;;;;;;32141:622;;:::o;5759:24::-;;;;:::o;2683:32::-;;;;:::o;14108:619::-;14198:18;14229:20;;:::i;:::-;-1:-1:-1;;;;;;14252:21:0;;;;;;;:7;:21;;;;;;;;;14229:44;;;;;;;;;;;;;;-1:-1:-1;;;14229:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14294:17;;;:36;;;14329:1;14315:6;:11;;;:15;14294:36;14286:72;;;;;-1:-1:-1;;;14286:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14377:21:0;;;;;;:7;:21;;;;;:28;;;:33;14369:60;;;;;-1:-1:-1;;;14369:60:0;;;;;;;;;;;;-1:-1:-1;;;14369:60:0;;;;;;;;;;;;;;;14442:21;;:::i;:::-;14561:1;14550:8;;;:12;14589:85;;;14550:8;14589:85;;;;;14619:1;14589:85;;;;;14605:12;;14619:1;;;;;;;;;;;14655:7;;14550:5;;14589:15;:85::i;:::-;-1:-1:-1;;14702:13:0;;-1:-1:-1;;14702:17:0;;14108:619;-1:-1:-1;;;14108:619:0:o;38198:112::-;-1:-1:-1;;;;;38285:17:0;;38257:7;38285:17;;;:8;:17;;;;;;38198:112;;;;:::o;35913:144::-;-1:-1:-1;;;;;36019:23:0;;;35992:7;36019:23;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;;35913:144::o;8654:46::-;;;;;;;;;;;;;;;:::o;35803:102::-;35876:14;:21;35803:102;:::o;35681:110::-;35763:13;:20;35681:110;:::o;39781:172::-;39860:10;39852:19;;;;:7;:19;;;;;:26;;;:42;;;;;;;39905:24;;:40;;;;;;;39781:172::o;2888:28::-;;;;:::o;5919:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5919:41:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5919:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2610:33::-;;;;:::o;13489:611::-;13750:18;13791:21;;:::i;:::-;13910:1;13899:5;13905:1;13899:8;;;:12;;;;;;;;;;;13948:99;13964:8;13974:1;13977;13980;13991;13995:11;14016:1;14020:7;14029:5;14036:10;;13948:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13948:15:0;;-1:-1:-1;;;13948:99:0:i;:::-;-1:-1:-1;;14075:13:0;;-1:-1:-1;;14075:17:0;13489:611;;;;;;;:::o;2298:30::-;;;;:::o;34677:166::-;34754:4;34817:18;;34800:14;:35;34778:18;:16;:18::i;:::-;:57;;;34677:166;-1:-1:-1;;34677:166:0:o;38415:89::-;38489:7;38482:14;;;;;;;;-1:-1:-1;;38482:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38456:13;;38482:14;;38489:7;;38482:14;;38489:7;38482:14;;;;;;;;;;;;;;;;;;;;;;;;16510:2252;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;;;9156:10;9129:38;;:26;:38;;;;;;;;;-1:-1:-1;;;;;9129:38:0;9121:47;;:7;:47;;;;;9129:38;9121:54;;9113:83;;;;;-1:-1:-1;;;9113:83:0;;;;;;;;;;;;-1:-1:-1;;;9113:83:0;;;;;;;;;;;;;;;16725:12;;16779:15;;;16718:77;;;-1:-1:-1;;;16718:77:0;;16752:10;16718:77;;;;;;;16772:4;16718:77;;;;;;;;;;;;-1:-1:-1;;;;;16725:12:0;;;;16718:33;;:77;;;;;;;;;;;;;;;16725:12;;16718:77;;;5:2:-1;;;;30:1;27;20:12;5:2;16718:77:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16718:77:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16718:77:0;16710:105;;;;;-1:-1:-1;;;16710:105:0;;;;;;;;;;;;-1:-1:-1;;;16710:105:0;;;;;;;;;;;;;;;16853:12;;16867:15;;16826:57;;5553:6;;-1:-1:-1;;;;;16853:12:0;;;;16826:18;:57::i;:::-;16896:25;16924:21;;;:9;:21;;;;;16966:17;;;;-1:-1:-1;;;;;16966:17:0;16958:54;;;;;-1:-1:-1;;;16958:54:0;;;;;;;;;;;;-1:-1:-1;;;16958:54:0;;;;;;;;;;;;;;;17031:14;;;:17;;;:22;17023:52;;;;;-1:-1:-1;;;17023:52:0;;;;;;;;;;;;-1:-1:-1;;;17023:52:0;;;;;;;;;;;;;;;17094:14;;;:17;;;;;;:22;17086:44;;;;;-1:-1:-1;;;17086:44:0;;;;;;;;;;;;-1:-1:-1;;;17086:44:0;;;;;;;;;;;;;;;17157:18;;-1:-1:-1;;;;;17157:18:0;17149:27;;;;:7;:27;;;;;:34;;;:39;17141:68;;;;;-1:-1:-1;;;17141:68:0;;;;;;;;;;;;-1:-1:-1;;;17141:68:0;;;;;;;;;;;;;;;17252:1;17226:8;:23;;;:27;:83;;;;-1:-1:-1;17282:21:0;;;;-1:-1:-1;;;;;17282:21:0;17257:24;:47;;;-1:-1:-1;;;;;;;;;;;17257:24:0;:47;:24;:47;;;:52;17226:83;17222:192;;;3458:3;17334:20;;:48;17326:76;;;;;-1:-1:-1;;;17326:76:0;;;;;;;;;;;;-1:-1:-1;;;17326:76:0;;;;;;;;;;;;;;;17461:14;;;:17;-1:-1:-1;;;17461:17:0;;;;17482:1;17461:22;17457:625;;;17532:21;;;;-1:-1:-1;;;;;17532:21:0;17509:46;;;;:14;:46;;;;;;;;17508:47;17500:79;;;;;-1:-1:-1;;;17500:79:0;;;;;;;;;;;;-1:-1:-1;;;17500:79:0;;;;;;;;;;;;;;;17631:21;;;;-1:-1:-1;;;;;17631:21:0;17603:51;;;;:19;:51;;;;;;;;17602:52;17594:91;;;;;-1:-1:-1;;;17594:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17708:14;:21;3363:3;-1:-1:-1;17700:77:0;;;;;-1:-1:-1;;;17700:77:0;;;;;;;;;;;;-1:-1:-1;;;17700:77:0;;;;;;;;;;;;;;;17820:21;;;;-1:-1:-1;;;;;17820:21:0;17792:51;;;;:19;:51;;;;;:58;;-1:-1:-1;;17792:58:0;17846:4;17792:58;;;17457:625;;;17906:14;;;:17;;;;;;17927:1;17906:22;17902:180;;;17969:18;;-1:-1:-1;;;;;17969:18:0;17954:34;;;;:14;:34;;;;;;;;17953:35;17945:69;;;;;-1:-1:-1;;;17945:69:0;;;;;;;;;;;;-1:-1:-1;;;17945:69:0;;;;;;;;;;;;;;;18044:18;;-1:-1:-1;;;;;18044:18:0;18029:34;;;;:14;:34;;;;;:41;;-1:-1:-1;;18029:41:0;18066:4;18029:41;;;17902:180;18142:22;18167:159;18185:18;:16;:18::i;:::-;18218:13;:20;:25;:97;;18260:13;18274:20;;18250:9;;:50;;-1:-1:-1;;18274:24:0;;;18260:39;;;;;;;;;;;;;;18250:50;;;;;;;;;;;:65;;;18218:97;;;18246:1;18218:97;18167:3;:159::i;:::-;18329:1;18167:163;;;18343:23;;;:40;;;18447:10;18396:21;18420:38;;;:26;:38;;;;;;;;;18469:16;;;:32;;-1:-1:-1;;;;;;18469:32:0;-1:-1:-1;;;;;18420:38:0;;;18469:32;;;;;18514:14;;;:21;;-1:-1:-1;;18514:21:0;;;;;18602:13;27:10:-1;;23:18;;;45:23;;18602:30:0;;;;;;;;;;;18713:20;;18658:96;;;;;-1:-1:-1;;18713:24:0;;;18658:96;;;;;;;;;;;;;;;18167:163;;-1:-1:-1;18420:38:0;;18658:96;;;;;;;;;-1:-1:-1;;1284:1:0;1598:7;:22;-1:-1:-1;;16510:2252:0:o;18825:1813::-;9156:10;9178:1;9129:38;;;:26;:38;;;;;;;;;-1:-1:-1;;;;;9129:38:0;9121:47;;:7;:47;;;;;9129:38;9121:54;;9113:83;;;;;-1:-1:-1;;;9113:83:0;;;;;;;;;;;;-1:-1:-1;;;9113:83:0;;;;;;;;;;;;;;;18968:10;18917:21;18941:38;;;:26;:38;;;;;;;;;-1:-1:-1;;;;;18941:38:0;19014:22;;;:7;:22;;;;;;19073:13;:20;19057:36;;19049:59;;;;;-1:-1:-1;;;19049:59:0;;;;;;;;;;;;-1:-1:-1;;;19049:59:0;;;;;;;;;;;;;;;19119:25;19147:9;:39;19157:13;19171;19157:28;;;;;;;;;;;;;;;;19147:39;;;;;;;;;;;19119:67;;19218:1;19207:8;:12;;;19199:32;;;;;-1:-1:-1;;;19199:32:0;;;;;;;;;;;;-1:-1:-1;;;19199:32:0;;;;;;;;;;;;;;;19242:9;19259:8;19254:14;;;;;;;;;;19242:26;;19311:8;:23;;;19289:18;:16;:18::i;:::-;:45;;19281:72;;;;;-1:-1:-1;;;19281:72:0;;;;;;;;;;;;-1:-1:-1;;;19281:72:0;;;;;;;;;;;;;;;19373:47;19396:8;:23;;;19373:22;:47::i;:::-;19372:48;19364:77;;;;;-1:-1:-1;;;19364:77:0;;;;;;;;;;;;-1:-1:-1;;;19364:77:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19460:37:0;;19501:9;19460:37;;;:22;;;:37;;;;;;;;:50;;;;;;;;;19452:75;;;;;-1:-1:-1;;;19452:75:0;;;;;;;;;;;;-1:-1:-1;;;19452:75:0;;;;;;;;;;;;;;;19554:8;19546:4;:16;;;;;;;;;:35;;;-1:-1:-1;19574:7:0;19566:4;:15;;;;;;;;;19546:35;19538:62;;;;;-1:-1:-1;;;19538:62:0;;;;;;;;;;;;-1:-1:-1;;;19538:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;19613:37:0;;;;;;:22;;;:37;;;;;:44;;19653:4;;19613:37;-1:-1:-1;;19613:44:0;;19653:4;19613:44;;;;;;;;;;;;-1:-1:-1;19682:8:0;19674:4;:16;;;;;;;;;19670:685;;;19728:13;;;;19707:17;;;:34;;;;;;;19873:26;;;;19857:42;;19853:125;;;19920:26;;;:42;;;19853:125;20124:8;:39;;;20108:13;:11;:13::i;:::-;:55;20104:151;;;20226:13;:11;:13::i;:::-;20184:39;;;:55;20104:151;19670:685;;;20286:7;20278:4;:15;;;;;;;;;20274:81;;;20330:13;;;;20310:16;;;:33;;;;;;;20274:81;20606:13;-1:-1:-1;;;;;20538:92:0;20594:10;-1:-1:-1;;;;;20538:92:0;20579:13;20538:92;20549:13;20563;20549:28;;;;;;;;;;;;;;;;20621:8;20538:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;9207:1;;;;18825:1813;;:::o;5823:35::-;;;;:::o;34415:254::-;34533:13;:20;34486:4;;34511:42;;34503:71;;;;;-1:-1:-1;;;34503:71:0;;;;;;;;;;;;-1:-1:-1;;;34503:71:0;;;;;;;;;;;;;;;34602:9;:45;34612:13;34626:19;34612:34;;;;;;;;;;;;;;;;34602:45;;;;;;;;;;;:51;;34654:1;34602:54;;;;;;;;;;;;;;;;;;;;;;;;;:59;;34660:1;34602:59;34595:66;;34415:254;;;:::o;12756:721::-;12850:18;-1:-1:-1;;;;;12889:30:0;;12881:53;;;;;-1:-1:-1;;;12881:53:0;;;;;;;;;;;;-1:-1:-1;;;12881:53:0;;;;;;;;;;;;;;;12973:9;;-1:-1:-1;;;;;12953:29:0;;;12973:9;;12953:29;;12945:67;;;;;-1:-1:-1;;;12945:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13032:32:0;;;;;;:14;:32;;;;;;;;13031:33;13023:65;;;;;-1:-1:-1;;;13023:65:0;;;;;;;;;;;;-1:-1:-1;;;13023:65:0;;;;;;;;;;;;;;;13107:14;:21;3363:3;-1:-1:-1;13099:77:0;;;;;-1:-1:-1;;;13099:77:0;;;;;;;;;;;;-1:-1:-1;;;13099:77:0;;;;;;;;;;;;;;;13189:21;;:::i;:::-;13308:1;13297:8;;;:12;13335:89;;;13297:8;13335:89;;;;;13359:1;13335:89;;;;;13359:1;;;;;;13372:16;;13359:1;;;;13405:7;;13297:5;;13335:15;:89::i;:::-;-1:-1:-1;;13452:13:0;;-1:-1:-1;;13452:17:0;12756:721;;;;:::o;40197:415::-;40312:10;40304:19;;;;:7;:19;;;;;:24;;;:44;;40333:14;40304:44;:28;:44;:::i;:::-;40285:10;40277:19;;;;:7;:19;;;;;;:24;;;;:71;;;;-1:-1:-1;;;;;40384:17:0;;;;;;:22;;:42;;40411:14;40384:42;:26;:42;:::i;:::-;-1:-1:-1;;;;;40359:17:0;;;;;;:7;:17;;;;;;;;:22;;:67;;;;40456:10;40447:20;;;:8;:20;;;;;:38;;;;;;;40496:18;;;;;;;:36;;;;;;40558:46;;;;;;;40359:17;;40456:10;;40558:46;;;;;;;;;;40197:415;;:::o;2755:28::-;;;;:::o;35532:137::-;35599:15;;:::i;:::-;35634:21;;;;:9;:21;;;;;;35627:34;;;;;;;;;;35634:27;;;;;35627:34;;35634:27;;35627:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35627:34:0;;35532:137;-1:-1:-1;;;;;;;35532:137:0:o;2512:29::-;;;;:::o;38960:809::-;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;;;39045:9;;39038:67;;;-1:-1:-1;;;39038:67:0;;39069:10;39038:67;;;;39089:6;39038:67;;;;;;;;;;;;-1:-1:-1;;;;;39045:9:0;;;;39038:30;;:67;;;;;;;;;;;;;;;;;39045:9;39038:67;;;5:2:-1;;;;30:1;27;20:12;5:2;39038:67:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39038:67:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39038:67:0;39030:95;;;;;-1:-1:-1;;;39030:95:0;;;;;;;;;;;;-1:-1:-1;;;39030:95:0;;;;;;;;;;;;;;;39285:10;39277:19;;;;:7;:19;;;;;:26;-1:-1:-1;;;39277:26:0;;;;39307:1;39277:31;39273:288;;;39362:10;39354:19;;;;:7;:19;;;;;:26;;;:38;;39385:6;39354:38;:30;:38;:::i;:::-;39333:10;39325:19;;;;:7;:19;;;;;:26;;:67;39273:288;;;39511:34;39526:10;39538:6;39511:14;:34::i;:::-;39616;39631:10;39643:6;39616:14;:34::i;:::-;39661:11;:21;;;;;;;;3222:6;-1:-1:-1;39715:30:0;39707:54;;;;;-1:-1:-1;;;39707:54:0;;;;;;;;;;;;-1:-1:-1;;;39707:54:0;;;;;;;;;;;;;;;-1:-1:-1;1284:1:0;1598:7;:22;38960:809::o;1991:27::-;;;-1:-1:-1;;;;;1991:27:0;;:::o;5627:28::-;;;;:::o;30599:469::-;-1:-1:-1;;;;;30683:21:0;;30659;30683;;;:7;:21;;;;;30725:13;;;;30717:41;;;;;-1:-1:-1;;;30717:41:0;;;;;;;;;;;;-1:-1:-1;;;30717:41:0;;;;;;;;;;;;;;;30791:1;30777:6;:11;;;:15;30769:35;;;;;-1:-1:-1;;;30769:35:0;;;;;;;;;;;;-1:-1:-1;;;30769:35:0;;;;;;;;;;;;;;;30887:39;30899:6;:26;;;30887:11;:39::i;:::-;30879:129;;;;-1:-1:-1;;;30879:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31021:39;31031:12;31045:1;31048:6;:11;;;31021:9;:39::i;32886:570::-;32950:25;32978:21;;;:9;:21;;;;;33018:14;;;:17;;;:22;33010:61;;;;;-1:-1:-1;;;33010:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33090:14;;;:17;;;;;;:22;33082:61;;;;;-1:-1:-1;;;33082:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33176:17;;;;-1:-1:-1;;;;;33176:17:0;33162:10;:31;33154:65;;;;;-1:-1:-1;;;33154:65:0;;;;;;;;;;;;-1:-1:-1;;;33154:65:0;;;;;;;;;;;;;;;33232:14;;;:21;;-1:-1:-1;;33232:21:0;;;;;33252:1;33318:17;;;33247:1;33337:21;;;33360:23;;;;33287:97;;5553:6;;-1:-1:-1;;;;;33318:17:0;;;;33337:21;;;33287:22;:97::i;:::-;33410:38;;;33437:10;33410:38;;;;33425:10;;33410:38;;;;;;;;;;32886:570;;:::o;8747:51::-;;;;;;;;;;;;;;;:::o;25890:1025::-;25967:45;25998:13;25967:30;:45::i;:::-;26025:18;26046:13;26060;26046:28;;;;;;;;;;;;;;;;;;;;;26113:21;;;:9;:21;;;;;;;26155:14;;;:17;26046:28;;-1:-1:-1;26113:21:0;26155:17;;;;;26176:1;26155:22;26147:52;;;;;-1:-1:-1;;;26147:52:0;;;;;;;;;;;;-1:-1:-1;;;26147:52:0;;;;;;;;;;;;;;;26212:14;;;:21;;-1:-1:-1;;26212:21:0;;;;;:17;26274:23;26283:13;26274:8;:23::i;:::-;26259:38;-1:-1:-1;26325:4:0;26314:15;;;;26310:412;;;26346:14;;;:21;;-1:-1:-1;;26346:21:0;;;;;26425:18;;-1:-1:-1;;;;;26425:18:0;26346:17;26417:27;;;:7;26346:17;26417:27;;;;26459:13;;;:29;;;26366:1;26545:13;:17;26310:412;26749:18;;-1:-1:-1;;;;;26749:18:0;;;26771:5;26734:34;;;:14;:34;;;;;:42;;-1:-1:-1;;26734:42:0;;;26804:16;;;;26789:32;;26804:16;26789:14;:32::i;:::-;26847:60;;;;;;;;;;26887:10;;26872:13;;26847:60;;;;;;;;;25890:1025;;;;:::o;20646:3333::-;20714:45;20745:13;20714:30;:45::i;:::-;20772:18;20793:13;20807;20793:28;;;;;;;;;;;;;;;;;;;;;20860:21;;;:9;:21;;;;;;;20902:14;;;:17;20793:28;;-1:-1:-1;20860:21:0;-1:-1:-1;;;20902:17:0;;;;:22;:48;;;;-1:-1:-1;20928:14:0;;;:17;;;;;;:22;20902:48;:74;;;;-1:-1:-1;20954:14:0;;;:17;;;;;;:22;20902:74;20894:108;;;;;-1:-1:-1;;;20894:108:0;;;;;;;;;;;;-1:-1:-1;;;20894:108:0;;;;;;;;;;;;;;;21015:14;;;:21;;-1:-1:-1;;21015:21:0;;;;;:17;21077:23;21086:13;21077:8;:23::i;:::-;21062:38;;3222:6;21213:71;21261:8;:22;;;21213:43;21231:8;:24;;;21213:13;:11;:13::i;:::-;:17;:43;:17;:43;:::i;:71::-;:89;21209:137;;;-1:-1:-1;21329:5:0;21209:137;21531:21;;;;-1:-1:-1;;;;;21531:21:0;21506:24;:47;;;-1:-1:-1;;;;;;;;;;;21506:24:0;:47;:24;:47;;;21478:25;;;;:75;21474:123;;;-1:-1:-1;21580:5:0;21474:123;21748:1;21722:8;:23;;;:27;:83;;;;-1:-1:-1;21778:21:0;;;;-1:-1:-1;;;;;21778:21:0;21753:24;:47;;;-1:-1:-1;;;;;;;;;;;21753:24:0;:47;:24;:47;;;:52;21722:83;:136;;;;;3458:3;21809:20;;:49;;21722:136;21718:184;;;-1:-1:-1;21885:5:0;21718:184;21957:4;21946:15;;;;21942:1908;;;21978:14;;;:21;;-1:-1:-1;;21978:21:0;;;;;22129:18;;-1:-1:-1;;;;;22129:18:0;21978:17;22121:27;;;:7;21978:17;22121:27;;;;:34;-1:-1:-1;;;22121:34:0;;21978:21;22121:34;21998:1;22121:39;22117:401;;;22219:24;;;;22189:18;;-1:-1:-1;;;;;22189:18:0;;;22181:27;;;;:7;:27;;;;;;22189:18;22181:34;:62;;;;;;;;22298:22;;;;22270:18;;;;;22262:27;;;;;;:32;;:58;;;;;;;22117:401;;;22457:18;;22477:24;;;;22442:60;;-1:-1:-1;;;;;22457:18:0;;22442:14;:60::i;:::-;22601:18;;22648:22;;;;22621:24;;;;22586:85;;-1:-1:-1;;;;;22601:18:0;;22621:49;22586:14;:85::i;:::-;22701:24;;;;22686:11;:39;;;;;;;22753:22;;;;22740:9;:35;;;;;;;22959:21;;;;-1:-1:-1;;;;;22959:21:0;22686:11;22934:47;;;-1:-1:-1;;;;;;;;;;;22934:24:0;:47;:24;:47;;;:52;:83;;;;;23016:1;22990:8;:23;;;:27;22934:83;22930:149;;;23038:20;:25;;23062:1;23038:25;;;22930:149;23133:21;;;;23156:23;;;;23095:85;;5553:6;;5498;;-1:-1:-1;;;;;23133:21:0;;23095:22;:85::i;:::-;23225:18;;23245:21;;;;23268:25;;;;23195:99;;5498:6;;-1:-1:-1;;;;;23225:18:0;;;;23245:21;;;23195:22;:99::i;:::-;23453:21;;;;-1:-1:-1;;;;;23453:21:0;23428:24;:47;;;-1:-1:-1;;;;;;;;;;;23428:24:0;:47;:24;:47;;;:52;:85;;;;;23512:1;23484:8;:25;;;:29;23428:85;23424:151;;;23534:20;:25;;-1:-1:-1;;23534:25:0;;;23424:151;21942:1908;;;23772:17;;;;23791:21;;;;23814:23;;;;23741:97;;5553:6;;-1:-1:-1;;;;;23772:17:0;;;;23791:21;;;23741:22;:97::i;:::-;23877:16;;;;23862:32;;-1:-1:-1;;;;;23877:16:0;23862:14;:32::i;:::-;23920:51;;;;;;;;;;23951:10;;23936:13;;23920:51;;;;;;;;;20646:3333;;;;:::o;5512:48::-;5553:6;5512:48;:::o;24947:935::-;25024:12;25049:45;25080:13;25049:30;:45::i;:::-;25115:18;25136:13;25150;25136:28;;;;;;;;;;;;;;;;;;;;;25199:19;;;:7;:19;;;;;;25257:9;:21;;;;;;25307:14;;;:17;25136:28;;-1:-1:-1;25199:19:0;;25307:17;;;;;25328:1;25307:22;25299:54;;;;;-1:-1:-1;;;25299:54:0;;;;;;;;;;;;-1:-1:-1;;;25299:54:0;;;;;;;;;;;;;;;25366:14;;;:21;;-1:-1:-1;;25366:21:0;;;;;:17;25428:23;25437:13;25428:8;:23::i;:::-;25413:38;-1:-1:-1;25487:4:0;25476:15;;;;25472:315;;;25508:14;;;:21;;-1:-1:-1;;25508:21:0;;;;;25638:9;;25528:1;25659:12;;;;25638:47;;25523:1;25673:11;;;25638:47;;25508:17;;25614:20;;-1:-1:-1;;;;;25638:9:0;;;;25659:12;25673:11;;25638:47;;25673:11;;-1:-1:-1;;25638:47:0;;;;25508:21;25638:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;25599:86:0;;;;25708:7;25700:32;;;;;-1:-1:-1;;;25700:32:0;;;;;;;;;;;;-1:-1:-1;;;25700:32:0;;;;;;;;;;;;;;;25768:7;-1:-1:-1;25761:14:0;;-1:-1:-1;;;;;25761:14:0;25472:315;25812:62;;;;;;;;;;25854:10;;25839:13;;25812:62;;;;;;;;;24947:935;;;;;;;:::o;10714:2030::-;11034:18;1328:1;1486:7;;:19;;1478:46;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;-1:-1:-1;;;1478:46:0;;;;;;;;;;;;;;;1328:1;1537:7;:18;3222:6;11073:34;:15;11093:13;11073:34;:19;:34;:::i;:::-;:53;;11065:77;;;;;-1:-1:-1;;;11065:77:0;;;;;;;;;;;;-1:-1:-1;;;11065:77:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11161:28:0;;;;;;:14;:28;;;;;;;;11153:69;;;;;-1:-1:-1;;;11153:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11241:28:0;;;;;;:14;:28;;;;;;;;11233:69;;;;;-1:-1:-1;;;11233:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11321:18:0;;5498:6;11321:18;;;;:41;;-1:-1:-1;;;;;;11343:19:0;;5553:6;11343:19;;11321:41;:63;;;;-1:-1:-1;;;;;;11366:18:0;;5607:6;11366:18;;11321:63;11313:98;;;;;-1:-1:-1;;;11313:98:0;;;;;;;;;;;;-1:-1:-1;;;11313:98:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;11430:18:0;;;;;;:7;:18;;;;;:25;;;:30;11422:59;;;;;-1:-1:-1;;;11422:59:0;;;;;;;;;;;;-1:-1:-1;;;11422:59:0;;;;;;;;;;;;;;;11515:1;11498:14;:18;:65;;;;-1:-1:-1;;;;;;11520:38:0;;:24;:38;;;-1:-1:-1;;;;;;;;;;;11520:24:0;:38;:24;:38;;;:43;11498:65;11494:174;;;3458:3;11588:20;;:48;11580:76;;;;;-1:-1:-1;;;11580:76:0;;;;;;;;;;;;-1:-1:-1;;;11580:76:0;;;;;;;;;;;;;;;11836:4;;-1:-1:-1;;;;;11820:20:0;;;11836:4;;11820:20;:37;;;;;11856:1;11844:9;:13;11820:37;11816:474;;;11895:14;11882:9;:27;11874:56;;;;;-1:-1:-1;;;11874:56:0;;;;;;;;;;;;-1:-1:-1;;;11874:56:0;;;;;;;;;;;;;;;11951:4;;;;;;;;;-1:-1:-1;;;;;11951:4:0;-1:-1:-1;;;;;11945:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11945:21:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;12000:4:0;;:30;;11982:12;;-1:-1:-1;;;;;;12000:4:0;;;;-1:-1:-1;12016:9:0;;11982:12;12000:30;11982:12;12000:30;12016:9;12000:4;:30;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;11981:49:0;;;12053:7;12045:35;;;;;-1:-1:-1;;;12045:35:0;;;;;;;;;;;;-1:-1:-1;;;12045:35:0;;;;;;;;;;;;;;;12101:4;;12095:46;;;-1:-1:-1;;;12095:46:0;;12124:4;12095:46;;;;12131:9;12095:46;;;;;;-1:-1:-1;;;;;12101:4:0;;;;12095:20;;:46;;;;;;;;;;;;;;;12101:4;;12095:46;;;5:2:-1;;;;30:1;27;20:12;5:2;12095:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12095:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11816:474:0;;-1:-1:-1;;11816:474:0;;12182:76;;;-1:-1:-1;;;12182:76:0;;12216:10;12182:76;;;;12236:4;12182:76;;;;;;;;;;;;-1:-1:-1;;;;;12182:33:0;;;;;:76;;;;;;;;;;;;;;-1:-1:-1;12182:33:0;:76;;;5:2:-1;;;;30:1;27;20:12;5:2;12182:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12182:76:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12182:76:0;12174:104;;;;;-1:-1:-1;;;12174:104:0;;;;;;;;;;;;-1:-1:-1;;;12174:104:0;;;;;;;;;;;;;;;12310:56;5553:6;12337:12;12351:14;12310:18;:56::i;:::-;12379:21;;:::i;:::-;12489:140;12505:9;12516:15;12533:13;12548:14;12564:12;12578:16;12596:12;12610:7;12619:5;12489:140;;;;;;;;;;;;:15;:140::i;:::-;-1:-1:-1;;12657:13:0;;-1:-1:-1;;12657:17:0;1284:1;1598:7;:22;10714:2030;;-1:-1:-1;;;;;;;;10714:2030:0:o;2169:64::-;;;-1:-1:-1;;;;;2169:64:0;;:::o;5458:47::-;5498:6;5458:47;:::o;288:150::-;346:7;379:1;374;:6;;366:15;;;;;;-1:-1:-1;404:5:0;;;288:150::o;671:149::-;729:7;761:1;757;:5;749:14;;;;;;774:9;790:1;786;:5;;;;;;;671:149;-1:-1:-1;;;;671:149:0:o;31754:379::-;31857:10;31839:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;31839:36:0;;;;;;;;;;:46;-1:-1:-1;31839:46:0;31831:79;;;;;-1:-1:-1;;;31831:79:0;;;;;;;;;;;;-1:-1:-1;;;31831:79:0;;;;;;;;;;;;;;;31939:42;;;-1:-1:-1;;;31939:42:0;;31962:10;31939:42;;;;;;;;;;;;-1:-1:-1;;;;;31939:22:0;;;;;:42;;;;;;;;;;;;;;-1:-1:-1;31939:22:0;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;31939:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31939:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31939:42:0;31931:70;;;;;-1:-1:-1;;;31931:70:0;;;;;;;;;;;;-1:-1:-1;;;31931:70:0;;;;;;;;;;;;;;;32012:52;32038:10;32050:5;32057:6;32012:25;:52::i;:::-;32090:35;;;-1:-1:-1;;;;;32090:35:0;;;;;;;;;;;;32099:10;;32090:35;;;;;;;;31754:379;;:::o;28900:1691::-;29004:33;29040:13;:11;:13::i;:::-;-1:-1:-1;;;;;29090:22:0;;29066:21;29090:22;;;:7;:22;;;;;29133:13;;;;29004:49;;-1:-1:-1;29090:22:0;29133:29;-1:-1:-1;29133:29:0;29125:61;;;;;-1:-1:-1;;;29125:61:0;;;;;;;;;;;;-1:-1:-1;;;29125:61:0;;;;;;;;;;;;;;;29220:10;29205:6;:11;;;:25;;29197:55;;;;;-1:-1:-1;;;29197:55:0;;;;;;;;;;;;-1:-1:-1;;;29197:55:0;;;;;;;;;;;;;;;29273:39;29285:6;:26;;;29273:11;:39::i;:::-;29265:129;;;;-1:-1:-1;;;29265:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29407:27;29437:28;:12;29454:10;29437:28;:16;:28;:::i;:::-;29519:13;;;:29;;;;;;;29559:11;;;:25;;;;;;;29407:58;-1:-1:-1;29595:50:0;29610:13;29407:58;29595:14;:50::i;:::-;29656:11;:27;;;;;;;29694:9;:23;;;;;;;29656:11;29730:787;29754:14;:21;29750:25;;29730:787;;;5498:6;29797:24;29834;;;:17;:24;;29859:14;:17;;29824:102;;-1:-1:-1;;;;;;;;;;;29834:24:0;29797;;29859:14;29874:1;;29859:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29859:17:0;29834:43;;;;;;;;;;;;;29879:19;29900:25;29824:9;:102::i;:::-;29797:129;-1:-1:-1;29945:20:0;;29941:565;;5498:6;30337:24;;;;:17;:24;;30362:14;:17;;30384:16;;-1:-1:-1;;;;;;;;;;;30337:24:0;;;30377:1;;30362:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30362:17:0;;;30337:43;;;;;;;;;;;;;;;:63;;;;;;;;;30419:32;;;;;:17;:32;;;;;;30452:14;:17;;30474:16;;30362:17;30452:14;30467:1;;30452:17;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30452:17:0;30419:51;;;;;;;;;;;;:71;;;;;;;29941:565;-1:-1:-1;29777:3:0;;29730:787;;;-1:-1:-1;30534:49:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30534:49:0;;;;;;;;;;;28900:1691;;;;;;:::o;27851:572::-;27963:13;:20;27947:36;;27939:65;;;;;-1:-1:-1;;;27939:65:0;;;;;;;;;;;;-1:-1:-1;;;27939:65:0;;;;;;;;;;;;;;;28015:24;;:::i;:::-;28042:9;:39;28052:13;28066;28052:28;;;;;;;;;;;;;;;;;;;;;28042:39;;;;;;;;;;;;;;;28015:66;;;;;;;;;-1:-1:-1;;;;;28015:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28042:39;;28015:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28171:17;;28150:18;;28124:8;:23;;;:44;:64;28102:18;:16;:18::i;:::-;:86;;28094:117;;;;;-1:-1:-1;;;28094:117:0;;;;;;;;;;;;-1:-1:-1;;;28094:117:0;;;;;;;;;;;;;;;28230:14;;;;:17;;;:22;;;28222:61;;;;;-1:-1:-1;;;28222:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;28302:18;;;:79;;;28324:9;:43;28334:13;28364:1;28348:13;:17;28334:32;;;;;;;;;;;;;;;;28324:43;;;;;;;;;;;:49;;28374:1;28324:52;;;;;;;;;;;;;;;;;;;;;;;;;:57;;28380:1;28324:57;28302:79;28294:121;;;;;-1:-1:-1;;;28294:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;26923:920;26987:12;27012:24;;:::i;:::-;27039:9;:39;27049:13;27063;27049:28;;;;;;;;;;;;;;;;;;;;;27039:39;;;;;;;;;;;;;;;27012:66;;;;;;;;;-1:-1:-1;;;;;27012:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27039:39;;27012:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27123:8;:16;;;27103:8;:17;;;:36;27099:83;;;27166:4;27156:14;;27099:83;27311:8;:39;;;27275:32;27293:13;;27275;:11;:13::i;:::-;:17;:32;:17;:32;:::i;:::-;27274:76;27270:124;;;27377:5;27367:15;;27270:124;27734:18;;-1:-1:-1;;;;;27726:27:0;;;;;:7;:27;;;;;:34;;;:39;27722:87;;27792:5;27782:15;;27722:87;-1:-1:-1;26923:920:0;;;:::o;28431:243::-;28535:12;;28549:16;;28492:74;;5553:6;;28523:10;;-1:-1:-1;;;;;28535:12:0;;28492:22;:74::i;:::-;28617:12;;28649:16;;28631:15;;28577:89;;5553:6;;28608:7;;-1:-1:-1;;;;;28617:12:0;;;;28631:34;28577:22;:89::i;:::-;28431:243;:::o;37456:193::-;-1:-1:-1;;;;;37549:23:0;;;;;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;:40;;;;;;37600:24;:31;;;;;;:41;;;;;;;37456:193::o;14739:1763::-;15107:24;;:::i;:::-;15134:595;;;;;;;;15170:9;-1:-1:-1;;;;;15134:595:0;;;;;15205:10;-1:-1:-1;;;;;15134:595:0;;;;;15248:1;-1:-1:-1;;;;;15134:595:0;;;;;15280:12;-1:-1:-1;;;;;15134:595:0;;;;;15322:12;-1:-1:-1;;;;;15134:595:0;;;;;15357:5;15134:595;;;;15395:15;15134:595;;;;15441:13;15134:595;;;;15488:16;15134:595;;;;15536:14;15134:595;;;;15582:1;15134:595;;;;15609:1;15134:595;;;;15635:1;15134:595;;;;15684:1;15134:595;;;;15710:7;15134:595;;;15107:622;;15786:8;:14;;;15801:1;15786:17;;;;;;;;;;;:22;;15807:1;15786:22;15782:277;;;15825:20;;:::i;:::-;-1:-1:-1;15848:135:0;;;;;;;;-1:-1:-1;;;;;15848:135:0;;;;;;;;;;;;;;;;;;16024:13;;-1:-1:-1;16016:22:0;;;:7;:22;;;;;;:31;;;;-1:-1:-1;;;;;;16016:31:0;;;;;;;;;;-1:-1:-1;16016:31:0;;;;;;;15848:135;;;;16016:31;;;;;;;;;:::i;:::-;-1:-1:-1;;;;15782:277:0;16089:13;;16079:24;;;;:9;:24;;;;;;;;;:35;;;;-1:-1:-1;;;;;;16079:35:0;;;-1:-1:-1;;;;;16079:35:0;;;;;;;;;;-1:-1:-1;16079:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16125:21;16149:26;:38;16176:10;-1:-1:-1;;;;;16149:38:0;-1:-1:-1;;;;;16149:38:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16149:38:0;16125:62;;16441:13;-1:-1:-1;;;;;16266:189:0;16429:10;-1:-1:-1;;;;;16266:189:0;16281:9;-1:-1:-1;;;;;16266:189:0;;16292:15;16309:13;16324:14;16340:12;16354:16;16372:12;16386:7;16395:5;16402:10;16414:13;;16266:189;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16266:189:0;-1:-1:-1;;;;;16266:189:0;;;;;;;;;;;-1:-1:-1;;;;;16266:189:0;-1:-1:-1;;;;;16266:189:0;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16266:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;16266:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16476:13:0;:18;;16493:1;16476:18;;;-1:-1:-1;;;;;;;;;;14739:1763:0:o;34921:107::-;34979:7;35011:1;35006;:6;;:14;;35019:1;35006:14;;;35015:1;35006:14;34999:21;34921:107;-1:-1:-1;;;34921:107:0:o;126:150::-;184:7;216:5;;;240:6;;;;232:15;;;;;36639:805;-1:-1:-1;;;;;36833:37:0;;;36825:46;36833:37;;;:26;:37;;;;;;;;;;;;36825:46;;:7;:46;;;:53;;-1:-1:-1;;;36825:53:0;;;;36833:37;36825:58;36821:304;;;-1:-1:-1;;;;;36927:37:0;;;36900:24;36927:37;;;:26;:37;;;;;;;;;;;;36979:44;;;;;;:63;;-1:-1:-1;;;;;;36979:63:0;;;;;;;;37057:7;:25;;;;;;;:56;;;;;;;;;;36821:304;37166:208;;;;;;;;-1:-1:-1;;;;;37166:208:0;;;;;;37235:1;37166:208;;;;;;;;;;;;;-1:-1:-1;37166:208:0;;;;;;;;;;;;;;;;;;37145:18;;;:7;:18;;;;;:229;;;;;;37166:208;37145:229;-1:-1:-1;;;37145:229:0;-1:-1:-1;;;;37145:229:0;;;;-1:-1:-1;;;;;;37145:229:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37387:26;:37;;;;:49;;;;;;;;;;36639:805::o;39965:193::-;-1:-1:-1;;;;;40048:23:0;;;;;;:8;:23;;;;;;;;:33;;;;;;40107:43;;;;;;;;;;;;;;;;;;39965:193;;:::o;37661:211::-;37770:46;37796:4;37802:5;37809:6;37770:25;:46::i;:::-;37827:37;37846:2;37850:5;37857:6;37827:18;:37::i;:::-;37661:211;;;;:::o;37880:200::-;-1:-1:-1;;;;;37980:23:0;;;;;;;:17;:23;;;;;;;;:30;;;;;;;;;;;;:40;;;;;;;38031:24;:31;;;;;;:41;;;;;;;;37880:200::o;38755:193::-;-1:-1:-1;;;;;38838:23:0;;;;;;:8;:23;;;;;;;;:33;;;;;;;38897:43;;;;;;;38838:23;;;38897:43;;;;;;;;;;;38755:193;;:::o;36177:450::-;36280:7;36308:23;36300:32;;;;;;36349:12;36345:31;;-1:-1:-1;36372:1:0;36365:8;;36345:31;36403:16;;;36413:6;36403:7;:16;:7;36436:14;;;;;:24;36432:129;;;36531:18;36524:4;:25;;;;;;36517:32;;;;;36432:129;36613:6;36591:18;36581:7;:28;;;;;;36580:39;;36177:450;-1:-1:-1;;;;;36177:450:0:o;450:213::-;508:7;532:6;528:47;;-1:-1:-1;562:1:0;555:8;;528:47;599:5;;;603:1;599;:5;:1;623:5;;;;;:10;615:19;;;;;1841:38774;;;;;;;;;;-1:-1:-1;;;;;1841:38774:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;-1:-1;1841:38774:0;;;-1:-1:-1;;1841:38774:0:o;:::-;;;;;;;;;-1:-1:-1;1841:38774:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;1841:38774:0;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1841:38774:0;;;-1:-1:-1;1841:38774:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1841:38774:0;;;-1:-1:-1;1841:38774:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1841:38774:0;;;;;;
Swarm Source
bzzr://227121a2135ec339658823c070078e6eaab7f5e2bc8f83f49ab84cf5822966ab
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.