BEP-20
Overview
Max Total Supply
1,000,000,000ST
Holders
2,687
Market
Price
$0.0003 @ 0.000000 BNB
Onchain Market Cap
$310,890.00
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
10,154.423401344620153529 STValue
$3.16 ( ~0.00454620780522251 BNB) [0.0010%]Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
DAO
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/**
*Submitted for verification at BscScan.com on 2022-07-12
*/
// File: intdaofork-smartcontract/intdaofork-smartcontract/contracts/ManagedAccount.sol
/*
This file is part of the DAO.
The DAO is free software: you can redistribute it and/or modify
it under the terms of the GNU lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
The DAO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU lesser General Public License for more details.
You should have received a copy of the GNU lesser General Public License
along with the DAO. If not, see <http://www.gnu.org/licenses/>.
*/
/*
Basic account, used by the DAO contract to separately manage both the rewards
and the extraBalance accounts.
*/
pragma solidity 0.8.0;
abstract contract ManagedAccountInterface {
// The only address with permission to withdraw from this account
address public owner;
// If true, only the owner of the account can receive ether from it
bool public payOwnerOnly;
// The sum of ether (in wei) which has been sent to this contract
uint public accumulatedInput;
/// @notice Sends `_amount` of wei to _recipient
/// @param _amount The amount of wei to send to `_recipient`
/// @param _recipient The address to receive `_amount` of wei
/// @return True if the send completed
// function payOut(address _recipient, uint _amount) virtual external returns (bool);
event PayOut(address indexed _recipient, uint _amount);
}
contract ManagedAccount is ManagedAccountInterface{
// The constructor sets the owner of the account
constructor(address _owner, bool _payOwnerOnly) {
require(_owner != address(0), "Owner Address can't be zero address");
owner = _owner;
payOwnerOnly = _payOwnerOnly;
}
// When the contract receives a transaction without data this is called.
// It counts the amount of ether it receives and stores it in
// accumulatedInput.
receive() external payable {
accumulatedInput += msg.value;
}
fallback() external payable {
accumulatedInput += msg.value;
}
function payOut(address _recipient, uint _amount) external payable returns(bool){
if (msg.sender != owner || msg.value > 0 || (payOwnerOnly && _recipient != owner))
revert("Not Authorised, No BNB required to call, Recipient address cant be Owner address, Owner can call only call this");
(bool success, ) = address(_recipient).call{value: _amount}("");
require(success, "Call Failed at Payout");
if(success) {
emit PayOut(_recipient, _amount);
return true;
}
else {
return false;
}
}
function getAccumulatedInput() public view returns(uint) {
return accumulatedInput;
}
}
// File: intdaofork-smartcontract/intdaofork-smartcontract/contracts/Token.sol
/*
This file is part of the DAO.
The DAO is free software: you can redistribute it and/or modify
it under the terms of the GNU lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
The DAO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU lesser General Public License for more details.
You should have received a copy of the GNU lesser General Public License
along with the DAO. If not, see <http://www.gnu.org/licenses/>.
*/
/*
Basic, standardized Token contract with no "premine". Defines the functions to
check token balances, send tokens, send tokens on behalf of a 3rd party and the
corresponding approval process. Tokens need to be created by a derived
contract (e.g. TokenCreation.sol).
Thank you ConsenSys, this contract originated from:
https://github.com/ConsenSys/Tokens/blob/master/Token_Contracts/contracts/Standard_Token.sol
Which is itself based on the Ethereum standardized contract APIs:
https://github.com/ethereum/wiki/wiki/Standardized_Contract_APIs
*/
// @title Standard Token Contract.
pragma solidity 0.8.0;
// import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
interface AggregatorV3Interface {
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function version() external view returns (uint256);
// getRoundData and latestRoundData should both raise "No data present"
// if they do not have data to report, instead of returning unset values
// which could be misinterpreted as actual reported values.
function getRoundData(uint80 _roundId)
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}
//this contract calls the imported AggregatorV3Interface contract
//we map imported contract code to a particular contract address to get the live BNB price.
contract DAITOBNB {
AggregatorV3Interface internal priceFeed;
/**
* Network: Binance Smart Chain
* Aggregator: BNB/USD
* Address: 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE
*/
constructor() {
//priceFeed = AggregatorV3Interface(0x2514895c72f50D8bd4B4F9b1110F0D6bD2c97526); // BNB / USD
priceFeed = AggregatorV3Interface(0x0630521aC362bc7A19a4eE44b57cE72Ea34AD01c); // DAI / BNB
}
/**
* Returns the latest price
*/
function getLatestPrice() public view returns (int, uint80, uint, uint, uint80) {
(
uint80 roundID,
int price,
uint startedAt,
uint timeStamp,
uint80 answeredInRound
) = priceFeed.latestRoundData();
return (price,roundID, startedAt, timeStamp, answeredInRound);
}
//shows decimals
function decimals() external view returns (uint8) {
return priceFeed.decimals();
}
}
abstract contract TokenInterface {
mapping (address => uint256) balances;
mapping (address => mapping (address => uint256)) public _allowances;
// Total amount of tokens
uint256 _totalSupply;
uint256 _tTotal = 1 * 10**9 * 10**18;
// @param _owner The address from which the balance will be retrieved
// @return The balance
function balanceOf(address _owner) virtual external returns (uint256 balance);
// @notice Send `_amount` tokens to `_to` from `msg.sender`
// @param _to The address of the recipient
// @param _amount The amount of tokens to be transferred
// @return Whether the transfer was successful or not
// function transfer(address _to, uint256 _amount) virtual public returns (bool success);
// @notice Send `_amount` tokens to `_to` from `_from` on the condition it
// is approved by `_from`
// @param _from The address of the origin of the transfer
// @param _to The address of the recipient
// @param _amount The amount of tokens to be transferred
// @return Whether the transfer was successful or not
// function transferFrom(address _from, address _to, uint256 _amount) virtual external returns (bool success);
// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on
// its behalf
// @param _spender The address of the account able to transfer the tokens
// @param _amount The amount of tokens to be approved for transfer
// @return Whether the approval was successful or not
function approve(address _spender, uint256 _amount) virtual external returns (bool success);
// @param _owner The address of the account owning tokens
// @param _spender The address of the account able to transfer the tokens
// @return Amount of remaining tokens of _owner that _spender is allowed
// to spend
function allowance(
address _owner,
address _spender
) virtual external returns (uint256 remaining);
event Transfer(address indexed _from, address indexed _to, uint256 _amount);
event Approval(
address indexed _owner,
address indexed _spender,
uint256 _amount
);
}
abstract contract Token is TokenInterface {
address public curators;
constructor( address _curator) {
curators = _curator;
}
}
// File: intdaofork-smartcontract/intdaofork-smartcontract/contracts/TokenCreation.sol
/*
This file is part of the DAO.
The DAO is free software: you can redistribute it and/or modify
it under the terms of the GNU lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
The DAO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU lesser General Public License for more details.
You should have received a copy of the GNU lesser General Public License
along with the DAO. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Token Creation contract, used by the DAO to create its tokens and initialize
* its ether. Feel free to modify the divisor method to implement different
* Token Creation parameters
*/
pragma solidity 0.8.0;
abstract contract TokenCreationInterface {
// End of token creation, in Unix time
uint public closingTime;
// Minimum fueling goal of the token creation, denominated in tokens to
// be created
uint public minTokensToCreate;
// True if the DAO reached its minimum fueling goal, false otherwise
bool public isFueled;
// For DAO splits - if privateCreation is 0, then it is a public token
// creation, otherwise only the address stored in privateCreation is
// allowed to create tokens
address public privateCreation;
// tracks the amount of wei given from each contributor (used for refund)
mapping (address => uint256) weiGiven;
// @dev Constructor setting the minimum fueling goal and the
// end of the Token Creation
// @param _minTokensToCreate Minimum fueling goal in number of
// Tokens to be created
// @param _closingTime Date (in Unix time) of the end of the Token Creation
// @param _privateCreation Zero means that the creation is public. A
// non-zero address represents the only address that can create Tokens
// (the address can also create Tokens on behalf of other accounts)
// This is the constructor: it can not be overloaded so it is commented out
// function TokenCreation(
// uint _minTokensTocreate,
// uint _closingTime,
// address _privateCreation
// );
// @notice Create Token with `_tokenHolder` as the initial owner of the Token
// @param _tokenHolder The address of the Tokens's recipient
// @return Whether the token creation was successful
function createTokenProxy(address _tokenHolder) virtual public payable returns (bool success);
// @notice Refund `msg.sender` in the case the Token Creation did
// not reach its minimum fueling goal
function refund() virtual external;
// @return The divisor used to calculate the token creation rate during
// the creation phase
function divisor() virtual internal returns (uint _divisor);
event FuelingToDate(uint value);
event CreatedToken(address indexed to, uint amount);
event Refund(address indexed to, uint value);
}
abstract contract TokenCreation is TokenCreationInterface, Token {
// hold extra ether which has been sent after the DAO token
// creation rate has increased
ManagedAccount public extraBalance;
constructor(
uint _minTokensToCreate,
uint _closingTime,
address _privateCreation) {
closingTime = _closingTime;
minTokensToCreate = _minTokensToCreate;
privateCreation = _privateCreation;
extraBalance = new ManagedAccount(address(this), true);
}
function initialTransfer(address from, address _to, uint256 _amount) internal returns (bool success) {
if (balances[from] >= _amount && _amount > 0) {
balances[from] -= _amount;
balances[_to] += _amount;
emit Transfer(from, _to, _amount);
return true;
} else {
return false;
}
}
function createTokenProxy(address _tokenHolder) override public payable returns (bool success) {
uint token;
if (block.timestamp < closingTime && msg.value > 0
&& (privateCreation == address(0) || privateCreation == msg.sender)) {
token = (msg.value * 20) / divisor();
(bool succes,) = address(extraBalance).call{value: msg.value - token}("");
require(succes, "failed to send at createTokenProxy");
balances[curators] += token;
require(initialTransfer(curators, _tokenHolder, token), "Failed at InitialTransfer");
balances[_tokenHolder] += token;
balances[curators] -= token;
_tTotal += token;
weiGiven[_tokenHolder] += msg.value;
emit CreatedToken(_tokenHolder, token);
if (_tTotal >= minTokensToCreate && !isFueled) {
isFueled = true;
emit FuelingToDate(_tTotal);
}
return true;
}
revert();
}
function refund() override external {
if (block.timestamp > closingTime && !isFueled) {
// Get extraBalance - will only succeed when called for the first time
if (address(extraBalance).balance >= extraBalance.getAccumulatedInput()) {
extraBalance.payOut(address(this), extraBalance.getAccumulatedInput());
}
// Execute refund
// if (msg.sender.call{ value: (weiGiven[msg.sender]) }("")) {
(bool success,) = msg.sender.call{ value: (weiGiven[msg.sender]) }("");
if(success) {
emit Refund(msg.sender, weiGiven[msg.sender]);
_totalSupply -= balances[msg.sender];
balances[msg.sender] = 0;
weiGiven[msg.sender] = 0;
}
}
}
function divisor() override internal view returns (uint _divisor) {
// The number of (base unit) tokens per wei is calculated
// as `msg.value` * 20 / `divisor`
// The fueling period starts with a 1:1 ratio
if (closingTime - 2 weeks > block.timestamp) {
return 20;
// Followed by 10 days with a daily creation rate increase of 5%
} else if (closingTime - 4 days > block.timestamp) {
return (20 + (block.timestamp - (closingTime - 2 weeks)) / (1 days));
// The last 4 days there is a virtual creation rate ratio of 1:1.5
} else {
return 30;
}
}
function getClosingTime() public view returns(uint) {
return closingTime;
}
}
// File: intdaofork-smartcontract/intdaofork-smartcontract/contracts/DAO.sol
/*
This file is part of the DAO.
The DAO is free software: you can redistribute it and/or modify
it under the terms of the GNU lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
The DAO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU lesser General Public License for more details.
You should have received a copy of the GNU lesser General Public License
along with the DAO. If not, see <http://www.gnu.org/licenses/>.
*/
/*
Standard smart contract for a Decentralized Autonomous Organization (DAO)
to automate organizational governance and decision-making.
*/
pragma solidity 0.8.0;
interface IpancakeV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
// pragma solidity >=0.5.0;
interface IpancakeV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_Swapping() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint Swapping);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
// pragma solidity >=0.6.2;
interface IpancakeV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
// pragma solidity >=0.6.2;
interface IpancakeV2Router02 is IpancakeV2Router01 {
function removeSwappingETHSupportingFeeOnTransferTokens(
address token,
uint Swapping,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeSwappingETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint Swapping,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
abstract contract DAOInterface {
// The amount of days for which people who try to participate in the
// creation by calling the fallback function will still get their ether back
uint constant CREATION_GRACE_PERIOD = 40 days;
// The minimum debate period that a generic proposal can have
uint constant MIN_PROPOSAL_DEBATE_PERIOD = 2 weeks;
// The minimum debate period that a split proposal can have
uint constant MIN_SPLIT_DEBATE_PERIOD = 1 weeks;
// Period of days inside which it's possible to execute a DAO split
uint constant SPLIT_EXECUTION_PERIOD = 27 days;
// Period of time after which the minimum Quorum is halved
uint constant QUORUM_HALVING_PERIOD = 25 weeks;
// Period after which a proposal is closed
// (used in the case `executeProposal` fails because it revert()s)
uint constant EXECUTE_PROPOSAL_PERIOD = 10 days;
// Denotes the maximum proposal deposit that can be given. It is given as
// a fraction of total Ether spent plus balance of the DAO
uint constant MAX_DEPOSIT_DIVISOR = 100;
// Proposals to spend the DAO's ether or to choose a new Curator
// Proposal[] public proposals;
uint public proposalsTotal;
// The quorum needed for each proposal is partially calculated by
// _totalSupply / minQuorumDivisor
uint minQuorumDivisor;
// The unix time of the last time quorum was reached on a proposal
uint lastTimeMinQuorumMet;
// Address of the curator
address public curator;
// The whitelist: List of addresses the DAO is allowed to send ether to
mapping (address => bool) public allowedRecipients;
// Tracks the addresses that own Reward Tokens. Those addresses can only be
// DAOs that have split from the original DAO. Conceptually, Reward Tokens
// represent the proportion of the rewards that the DAO has the right to
// receive. These Reward Tokens are generated when the DAO spends ether.
mapping (address => uint) public rewardToken;
// Total supply of rewardToken
uint public totalRewardToken;
// The account used to manage the rewards which are to be distributed to the
// DAO Token Holders of this DAO
ManagedAccount public rewardAccount;
// The account used to manage the rewards which are to be distributed to
// any DAO that holds Reward Tokens
ManagedAccount public DAOrewardAccount;
// Amount of rewards (in wei) already paid out to a certain DAO
mapping (address => uint) public DAOpaidOut;
// Amount of rewards (in wei) already paid out to a certain address
mapping (address => uint) public paidOut;
// Map of addresses blocked during a vote (not allowed to transfer DAO
// tokens). The address points to the proposal ID.
mapping (address => uint) public blocked;
// The minimum deposit (in wei) required to submit any proposal that is not
// requesting a new Curator (no deposit is required for splits)
uint public proposalDeposit;
// the accumulated sum of all current proposal deposits
uint sumOfProposalDeposits;
// Contract that is able to create a new DAO (with the same code as
// this one), used for splits
DAO_Creator public daoCreator;
// A proposal with `newCurator == false` represents a transaction
// to be issued by this DAO
// A proposal with `newCurator == true` represents a DAO split
mapping(uint => Proposal) public proposals;
struct Proposal {
// The address where the `amount` will go to if the proposal is accepted
// or if `newCurator` is true, the proposed Curator of
// the new DAO).
address recipient;
// The amount to transfer to `recipient` if the proposal is accepted.
uint amount;
// A plain text description of the proposal
string description;
// A unix timestamp, denoting the end of the voting period
uint votingDeadline;
// True if the proposal's votes have yet to be counted, otherwise False
bool open;
// True if quorum has been reached, the votes have been counted, and
// the majority said yes
bool proposalPassed;
// A hash to check validity of a proposal
bytes32 proposalHash;
// Deposit in wei the creator added when submitting their proposal. It
// is taken from the msg.value of a newProposal call.
uint proposalDeposit;
// True if this proposal is to assign a new Curator
bool newCurator;
// Data needed for splitting the DAO
SplitData[] splitData;
// Number of Tokens in favor of the proposal
uint yea;
// Number of Tokens opposed to the proposal
uint nay;
// Simple mapping to check if a shareholder has voted for it
mapping (address => bool) votedYes;
// Simple mapping to check if a shareholder has voted against it
mapping (address => bool) votedNo;
// Address of the shareholder who created the proposal
address creator;
}
// Used only in the case of a newCurator proposal.
struct SplitData {
// The balance of the current DAO minus the deposit at the time of split
uint splitBalance;
// The total amount of DAO Tokens in existence at the time of split.
uint _totalSupply;
// Amount of Reward Tokens owned by the DAO at the time of split.
uint rewardToken;
// The new DAO contract created at the time of split.
DAO newDAO;
}
// Used to restrict access to certain functions to only DAO Token Holders
// modifier onlyTokenholders virtual {_;}
// @dev Constructor setting the Curator and the address
// for the contract able to create another DAO as well as the parameters
// for the DAO Token Creation
// @param _curator The Curator
// @param _daoCreator The contract able to (re)create this DAO
// @param _proposalDeposit The deposit to be paid for a regular proposal
// @param _minTokensToCreate Minimum required wei-equivalent tokens
// to be created for a successful DAO Token Creation
// @param _closingTime Date (in Unix time) of the end of the DAO Token Creation
// @param _privateCreation If zero the DAO Token Creation is open to public, a
// non-zero address means that the DAO Token Creation is only for the address
// This is the constructor: it can not be overloaded so it is commented out
// function DAO(
// address _curator,
// DAO_Creator _daoCreator,
// uint _proposalDeposit,
// uint _minTokensToCreate,
// uint _closingTime,
// address _privateCreation
// );
// @notice Create Token with `msg.sender` as the beneficiary
// @return Whether the token creation was successful
// function () external returns (bool success);
// @dev This function is used to send ether back
// to the DAO, it can also be used to receive payments that should not be
// counted as rewards (donations, grants, etc.)
// @return Whether the DAO received the ether successfully
function receiveEther() virtual external payable returns(bool);
// @notice `msg.sender` creates a proposal to send `_amount` Wei to
// `_recipient` with the transaction data `_transactionData`. If
// `_newCurator` is true, then this is a proposal that splits the
// DAO and sets `_recipient` as the new DAO's Curator.
// @param _recipient Address of the recipient of the proposed transaction
// @param _amount Amount of wei to be sent with the proposed transaction
// @param _description String describing the proposal
// @param _transactionData Data of the proposed transaction
// @param _debatingPeriod Time used for debating a proposal, at least 2
// weeks for a regular proposal, 10 days for new Curator proposal
// @param _newCurator Bool defining whether this proposal is about
// a new Curator or not
// @return The proposal ID. Needed for voting on the proposal
function newProposal(
address _recipient,
uint _amount,
string memory _description,
bytes memory _transactionData,
uint _debatingPeriod,
bool _newCurator
) virtual external payable returns (uint); //use modifier tokenHolders
// @notice Check that the proposal with the ID `_proposalID` matches the
// transaction which sends `_amount` with data `_transactionData`
// to `_recipient`
// @param _proposalID The proposal ID
// @param _recipient The recipient of the proposed transaction
// @param _amount The amount of wei to be sent in the proposed transaction
// @param _transactionData The data of the proposed transaction
// @return Whether the proposal ID matches the transaction data or not
function checkProposalCode(
uint _proposalID,
address _recipient,
uint _amount,
bytes memory _transactionData
) virtual external returns (bool _codeChecksOut);
// @notice Vote on proposal `_proposalID` with `_supportsProposal`
// @param _proposalID The proposal ID
// @param _supportsProposal Yes/No - support of the proposal
// @return The vote ID.
function vote(
uint _proposalID,
bool _supportsProposal
)virtual external ;//use tokenHolders modifier
// @notice Checks whether proposal `_proposalID` with transaction data
// `_transactionData` has been voted for or rejected, and executes the
// transaction in the case it has been voted for.
// @param _proposalID The proposal ID
// @param _transactionData The data of the proposed transaction
// @return Whether the proposed transaction has been executed or not
function executeProposal(
uint _proposalID,
bytes memory _transactionData
)virtual external returns (bool _success);
// @notice ATTENTION! I confirm to move my remaining ether to a new DAO
// with `_newCurator` as the new Curator, as has been
// proposed in proposal `_proposalID`. This will burn my tokens. This can
// not be undone and will split the DAO into two DAO's, with two
// different underlying tokens.
// @param _proposalID The proposal ID
// @param _newCurator The new Curator of the new DAO
// @dev This function, when called for the first time for this proposal,
// will create a new DAO and send the sender's portion of the remaining
// ether and Reward Tokens to the new DAO. It will also burn the DAO Tokens
// of the sender.
function splitDAO(
uint _proposalID,
address _newCurator
)virtual external returns (bool _success);
// @dev can only be called by the DAO itself through a proposal
// updates the contract of the DAO by sending all ether and rewardTokens
// to the new DAO. The new DAO needs to be approved by the Curator
// @param _newContract the address of the new contract
function newContract(address _newContract) virtual internal;
// @notice Add a new possible recipient `_recipient` to the whitelist so
// that the DAO can send transactions to them (using proposals)
// @param _recipient New recipient address
// @dev Can only be called by the current Curator
// @return Whether successful or not
function changeAllowedRecipients(address _recipient, bool _allowed) virtual external returns (bool _success);
// @notice Change the minimum deposit required to submit a proposal
// @param _proposalDeposit The new proposal deposit
// @dev Can only be called by this DAO (through proposals with the
// recipient being this DAO itself)
function changeProposalDeposit(uint _proposalDeposit) virtual external ;
// @notice Move rewards from the DAORewards managed account
// @param _toMembers If true rewards are moved to the actual reward account
// for the DAO. If not then it's moved to the DAO itself
// @return Whether the call was successful
function retrieveDAOReward(bool _toMembers) virtual external returns (bool _success);
// @notice Get my portion of the reward that was sent to `rewardAccount`
// @return Whether the call was successful
function getMyReward() virtual internal returns(bool _success);
// @notice Withdraw `_account`'s portion of the reward from `rewardAccount`
// to `_account`'s balance
// @return Whether the call was successful
function withdrawRewardFor(address _account) virtual internal returns (bool _success);
// @notice Send `_amount` tokens to `_to` from `msg.sender`. Prior to this
// getMyReward() is called.
// @param _to The address of the recipient
// @param _amount The amount of tokens to be transfered
// @return Whether the transfer was successful or not
function transferWithoutReward(address _to, uint256 _amount) virtual external returns (bool success);
// @notice Send `_amount` tokens to `_to` from `_from` on the condition it
// is approved by `_from`. Prior to this getMyReward() is called.
// @param _from The address of the sender
// @param _to The address of the recipient
// @param _amount The amount of tokens to be transfered
// @return Whether the transfer was successful or not
function transferFromWithoutReward(
address _from,
address _to,
uint256 _amount
) virtual external returns (bool success);
// @notice Doubles the 'minQuorumDivisor' in the case quorum has not been
// achieved in 52 weeks
// @return Whether the change was successful or not
function halveMinQuorum() virtual internal returns (bool _success);
// @return total number of proposals ever created
function numberOfProposals() virtual external returns (uint _numberOfProposals);
// @param _proposalID Id of the new curator proposal
// @return Address of the new DAO
function getNewDAOAddress(uint _proposalID) virtual external returns (address _newDAO);
// @param _account The address of the account which is checked.
// @return Whether the account is blocked (not allowed to transfer tokens) or not.
function isBlocked(address _account) virtual internal returns (bool);
// @notice If the caller is blocked by a proposal whose voting deadline
// has exprired then unblock him.
// @return Whether the account is blocked (not allowed to transfer tokens) or not.
function unblockMe() virtual external returns (bool);
event ProposalAdded(
uint indexed proposalID,
address recipient,
uint amount,
bool newCurator,
string description
);
event Voted(uint indexed proposalID, bool position, address indexed voter);
event ProposalTallied(uint indexed proposalID, bool result, uint quorum);
event NewCurator(address indexed _newCurator);
event AllowedRecipientChanged(address indexed _recipient, bool _allowed);
}
// The DAO contract itself
contract DAO is DAOInterface, Token, TokenCreation {
bool private lock;
mapping (address => uint256) private _rOwned;
mapping (address => uint256) private _tOwned;
mapping (address => uint256) private feesValues;
mapping (address => bool) private _isExcludedFromFee;
mapping (address => bool) private _isExcludedFromAntiwhale;
mapping (address => bool) private _isExcludedFromSellMax;
mapping (address => bool) private _isExcluded;
address[] private _excluded;
uint256 private constant MAX = ~uint256(0);
uint256 private _rTotal = (MAX - (MAX % _tTotal));
uint256 private _tFeeTotal;
string constant NAME = "Sacred Tails";
string constant SYMBOL = "ST";
uint constant DECIMALS = 18;
uint private thValue;
uint private rThValue;
uint256 public buyRewardfee = 2;
uint256 private previousbuyRewardfee = buyRewardfee;
uint256 public buyTreasuryFee = 3;
uint256 public buyTournamentFee = 1;
uint256 public totalBuyFees = buyTreasuryFee + buyTournamentFee;
uint256 private previoustotalBuyFees = totalBuyFees;
uint256 public sellRewardfee = 3;
uint256 private previoussellRewardfee = sellRewardfee;
uint256 public sellTreasuryFee = 3;
uint256 public sellTournamentFee = 1;
uint256 public sellCharityFee = 1;
uint256 public totalSellFees = sellTreasuryFee + sellTournamentFee + sellCharityFee;
uint256 private previoustotalSellFees = totalSellFees;
uint256 public transferRewardfee = 2;
uint256 private previoustransferRewardfee = transferRewardfee;
uint256 public transferTreasuryFee = 2;
uint256 public transferTournamentFee = 1;
uint256 public totalTransferFees = transferTreasuryFee + transferTournamentFee;
uint256 private previoustotalTranferFees = totalTransferFees;
IpancakeV2Router02 public pancakeV2Router;
address public pancakeV2Pair;
uint256 private _maxTxAmount = (_tTotal * 500) / 10000;
uint private sellMaxTxAmount = (_tTotal * 500) / 10000;
address public treasuryAddress;
address public tournamentAddress;
address public charityAddress;
constructor(
address _curator,
DAO_Creator _daoCreator,
uint _proposalDeposit,
uint _minTokensToCreate,
uint _closingTime,
address _privateCreation,
address routerAddress,
address _treasuryAddress,
address _tournamentAddress,
address _charityAddress
) TokenCreation(_minTokensToCreate, _closingTime, _privateCreation) Token(_curator) {
_rOwned[msg.sender] = _rTotal;
require(_curator != address(0), "Curator address can't be zero address");
curator = _curator;
daoCreator = _daoCreator;
proposalDeposit = _proposalDeposit;
rewardAccount = new ManagedAccount(address(this), false);
DAOrewardAccount = new ManagedAccount(address(this), false);
lastTimeMinQuorumMet = block.timestamp;
minQuorumDivisor = 5; // sets the minimal quorum to 20%
//proposalsTotal += 1; // avoids a proposal with ID 0 because it is used
allowedRecipients[address(this)] = true;
allowedRecipients[curator] = true;
IpancakeV2Router02 _pancakeV2Router = IpancakeV2Router02(routerAddress);
//swap
pancakeV2Pair = IpancakeV2Factory(_pancakeV2Router.factory())
.createPair(address(this), _pancakeV2Router.WETH());
// set the rest of the contract variables
pancakeV2Router = _pancakeV2Router;
require(_treasuryAddress != address(0), "Treasury address can't be zero address");
treasuryAddress = _treasuryAddress;
require(_tournamentAddress != address(0), "Tournament address can't be zero address");
tournamentAddress = _tournamentAddress;
require(_charityAddress != address(0), "Charity address can't be zero address");
charityAddress = _charityAddress;
//exclude owner and this contract from fee
_isExcludedFromFee[curator] = true;
_isExcludedFromFee[address(this)] = true;
_isExcludedFromFee[_treasuryAddress] = true;
_isExcludedFromFee[_tournamentAddress] = true;
_isExcludedFromFee[_charityAddress] = true;
_isExcludedFromAntiwhale[curator] = true;
_isExcludedFromAntiwhale[address(this)] = true;
_isExcludedFromSellMax[address(this)] = true;
_isExcludedFromSellMax[curator] = true;
excludeFromReward(address(pancakeV2Pair));
excludeFromReward(msg.sender);
emit Transfer(address(0), msg.sender, _tTotal);
}
receive() external payable {
createTokenProxy(msg.sender);
}
function name() public pure returns (string memory) {
return NAME;
}
function symbol() public pure returns (string memory) {
return SYMBOL;
}
function decimals() public pure returns (uint) {
return DECIMALS;
}
function totalSupply() public view returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];
return tokenFromReflection(_rOwned[account]);
}
function isExcludedFromAntiwhale(address acc) public view returns(bool) {
return _isExcludedFromAntiwhale[acc];
}
function setExcludeFromAntiwhale(address acc, bool value) external {
require(msg.sender == curator, "Only a curator can do this");
_isExcludedFromAntiwhale[acc] = value;
}
function isExcludedFromMaxSell(address acc) public view returns(bool) {
return _isExcludedFromSellMax[acc];
}
function setExcludeFromMaxSell(address acc, bool value) external {
require(msg.sender == curator, "Only a curator can do this");
_isExcludedFromSellMax[acc] = value;
}
function transfer(address recipient, uint256 amount) public returns (bool) {
_transfer(msg.sender, recipient, amount);
allowedRecipients[recipient] = true;
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) external override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
allowedRecipients[recipient] = true;
return true;
}
function isExcludedFromReward(address account) public view returns (bool) {
return _isExcluded[account];
}
function totalFees() public view returns (uint256) {
return _tFeeTotal;
}
// function deliver(uint256 tAmount,uint256 _type) public {
// address sender = msg.sender;
// require(!_isExcluded[sender], "Excluded addresses cannot call this function");
// (uint256 rAmount,,,,,) = _getValues(tAmount, _type);
// _rOwned[sender] = _rOwned[sender] - rAmount;
// _rTotal = _rTotal - rAmount;
// _tFeeTotal = _tFeeTotal + tAmount;
// }
function reflectionFromToken(uint256 tAmount, bool deductTransferFee, uint256 _type) public view returns(uint256) {
require(tAmount <= _tTotal, "Amount must be less than supply");
if (!deductTransferFee) {
(uint256 rAmount,,,,,) = _getValues(tAmount, _type);
return rAmount;
} else {
(,uint256 rTransferAmount,,,,) = _getValues(tAmount,_type);
return rTransferAmount;
}
}
function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
require(rAmount <= _rTotal, "Amount must be less than total reflections");
uint256 currentRate = _getRate();
return (rAmount/currentRate);
}
function excludeFromReward(address account) public {
require(msg.sender == curator, "Only a curator can do this");
// require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude pancake router.');
require(!_isExcluded[account], "Account is already excluded");
if(_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
}
function includeInReward(address account) external {
require(msg.sender == curator, "Only a curator can do this");
require(_isExcluded[account], "Account is already excluded");
for (uint256 i = 0; i < _excluded.length; i++) {
if (_excluded[i] == account) {
_excluded[i] = _excluded[_excluded.length - 1];
_tOwned[account] = 0;
_isExcluded[account] = false;
_excluded.pop();
break;
}
}
}
function _transferBothExcluded(address sender, address recipient, uint256 tAmount, uint256 _type) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tSwapping) = _getValues(tAmount, _type);
thValue = tFee;
rThValue = rFee;
_tOwned[sender] = _tOwned[sender] - tAmount;
_rOwned[sender] = _rOwned[sender] - rAmount;
_tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
_takeSwapping(tSwapping);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function excludeFromFee(address account) external {
require(msg.sender == curator, "Only a curator can do this");
_isExcludedFromFee[account] = true;
}
function includeInFee(address account) external {
require(msg.sender == curator, "Only a curator can do this");
_isExcludedFromFee[account] = false;
}
function setBuyFeePercent(uint256 BuyFee) external {
require(msg.sender == curator, "Only a curator can do this");
require(buyTreasuryFee + buyTournamentFee + BuyFee <= 25, "Exceeds Max Fee Limit");
buyRewardfee = BuyFee;
}
function setSellFeePercent(uint256 SellFee) external {
require(msg.sender == curator, "Only a curator can do this");
require(sellTreasuryFee + sellTournamentFee + sellCharityFee + SellFee <= 25, "Exceeds Max Fee Limit");
sellRewardfee = SellFee;
}
function setTransferFeePercent(uint256 TransferFee) external {
require(msg.sender == curator, "Only a curator can do this");
require(transferTreasuryFee + transferTournamentFee + TransferFee <= 25, "Exceeds Max Fee Limit");
transferRewardfee = TransferFee;
}
function setBuySwappingFeePercent(uint256 _buyTreasuryFee, uint256 _buyTournamentFee) external {
require(msg.sender == curator, "Only a curator can do this");
require(_buyTreasuryFee + _buyTournamentFee + buyRewardfee <= 25, "Exceeds Max Fee Limit");
buyTreasuryFee = _buyTreasuryFee;
buyTournamentFee = _buyTournamentFee;
totalBuyFees = buyTreasuryFee + buyTournamentFee;
}
function setSellSwappingFeePercent(uint256 _sellTreasuryFee, uint256 _sellTournamentFee, uint256 _sellCharityFee) external {
require(msg.sender == curator, "Only a curator can do this");
require(_sellTreasuryFee + _sellTournamentFee + _sellCharityFee + sellRewardfee <= 25, "Exceeds Max Fee Limit");
sellTreasuryFee = _sellTreasuryFee;
sellTournamentFee = _sellTournamentFee;
sellCharityFee = _sellCharityFee;
totalSellFees = sellTreasuryFee + sellTournamentFee + sellCharityFee;
}
function setTransferSwappingFeePercent(uint256 _transferTreasuryFee, uint256 _transferTournamentFee) external {
require(msg.sender == curator, "Only a curator can do this");
require(_transferTreasuryFee + _transferTournamentFee + transferRewardfee <= 25, "Exceeds Max Fee Limit");
transferTreasuryFee = _transferTreasuryFee;
transferTournamentFee = _transferTournamentFee;
totalTransferFees = transferTreasuryFee + transferTournamentFee;
}
function setTreasuryAddress(address payable _treasury) external {
require(msg.sender == curator, "Only a curator can do this");
require(_treasury != address(0), "Treasury address can't zero address");
treasuryAddress = _treasury;
}
function setTournamentAddress(address payable _tournament) external {
require(msg.sender == curator, "Only a curator can do this");
require(_tournament != address(0), "Tournament address can't zero address");
tournamentAddress = _tournament;
}
function setCharityAddress(address payable _charity) external {
require(msg.sender == curator, "Only a curator can do this");
require(_charity != address(0), "Charity address can't zero address");
charityAddress = _charity;
}
function setMaxTxPercent(uint256 maxTxPercent) external {
require(msg.sender == curator, "Only a curator can do this");
require(maxTxPercent > 0 && maxTxPercent <= 500, "max 5%");
_maxTxAmount = ((_tTotal * maxTxPercent) / 10000);
}
function _reflectFee(uint256 rFee, uint256 tFee) private {
_rTotal = _rTotal - rFee;
_tFeeTotal = _tFeeTotal + tFee;
}
function _getValues(uint256 tAmount,uint256 _type) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
(uint256 tTransferAmount, uint256 tFee, uint256 tSwapping) = _getTValues(tAmount,_type);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tSwapping, _getRate());
return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tSwapping);
}
function tokenHolderRewards() public view returns(uint256, uint256) {
return(thValue, rThValue);
}
function _getTValues(uint256 tAmount, uint256 _type) private view returns (uint256, uint256, uint256) {
uint256 tFee = calculateTaxFee(tAmount,_type);
uint256 tSwapping = calculateSwappingFee(tAmount,_type);
uint256 tTransferAmount = tAmount - tFee - tSwapping;
return (tTransferAmount, tFee, tSwapping);
}
function _getRValues(uint256 tAmount, uint256 tFee, uint256 tSwapping, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
uint256 rAmount = tAmount * currentRate;
uint256 rFee = tFee * currentRate;
uint256 rSwapping = tSwapping * currentRate;
uint256 rTransferAmount = rAmount - rFee - rSwapping;
return (rAmount, rTransferAmount, rFee);
}
function _getRate() private view returns(uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return (rSupply / tSupply);
}
function _getCurrentSupply() private view returns(uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _tTotal;
for (uint256 i = 0; i < _excluded.length; i++) {
if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
rSupply = rSupply - _rOwned[_excluded[i]];
tSupply = tSupply - _tOwned[_excluded[i]];
}
if (rSupply < (_rTotal/ _tTotal)) return (_rTotal, _tTotal);
return (rSupply, tSupply);
}
function _takeSwapping(uint256 tSwapping) private {
uint256 currentRate = _getRate();
uint256 rSwapping = tSwapping * currentRate;
_rOwned[address(this)] = _rOwned[address(this)] + rSwapping;
if(_isExcluded[address(this)])
_tOwned[address(this)] = _tOwned[address(this)] + tSwapping;
}
function calculateTaxFee(uint256 _amount, uint256 _type) private view returns (uint256) {
uint256 fees;
if(_type == 1) {
fees = buyRewardfee;
}
else if(_type == 2) {
fees = sellRewardfee;
}
else{
fees = transferRewardfee;
}
return ((_amount * fees) / (10**2));
}
function calculateSwappingFee(uint256 _amount, uint256 _type) private view returns (uint256) {
uint256 fees;
if(_type == 1) {
fees = totalBuyFees;
}
else if(_type == 2) {
fees = totalSellFees;
}
else{
fees = totalTransferFees;
}
return ((_amount * fees) / (10**2));
}
function removeAllFee(uint256 _type) private {
if(_type == 1){
previousbuyRewardfee = buyRewardfee;
buyRewardfee = 0;
previoustotalBuyFees = totalBuyFees;
totalBuyFees = 0;
}
else if(_type == 2){
previoussellRewardfee = sellRewardfee;
sellRewardfee = 0;
previoustotalSellFees = totalSellFees;
totalSellFees = 0;
}
else{
previoustransferRewardfee = transferRewardfee;
transferRewardfee = 0;
previoustotalTranferFees = totalTransferFees;
totalTransferFees = 0;
}
}
function restoreAllFee(uint256 _type) private {
if(_type == 1){
buyRewardfee = previousbuyRewardfee;
totalBuyFees = previoustotalBuyFees;
}
else if(_type == 2){
sellRewardfee = previoussellRewardfee;
totalSellFees = previoustotalSellFees;
}
else{
transferRewardfee = previoustransferRewardfee;
totalTransferFees = previoustotalTranferFees;
}
}
function isExcludedFromFee(address account) public view returns(bool) {
return _isExcludedFromFee[account];
}
function _approve(address owner, address spender, uint256 amount) private {
require(owner != address(0), "BEP20: approve from the zero address");
require(spender != address(0), "BEP20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function setMaxSellAmount(uint val) external {
require(val > 0 && val <= 500, "max 5%");
sellMaxTxAmount = (totalSupply() * val) / 10000;
}
function _transfer(
address from,
address to,
uint256 amount
) private {
require(from != address(0), "BEP20: transfer from the zero address");
require(to != address(0), "BEP20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
if(!_isExcludedFromAntiwhale[from] && !_isExcludedFromAntiwhale[to]) {
require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
}
//indicates if fee should be deducted from transfer
bool takeFee = true;
uint256 _type;
//if any account belongs to _isExcludedFromFee account then remove the fee
if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
takeFee = false;
}
if((from == address(pancakeV2Pair)) && to != curator){ // Buy
_type = 1;
}
else if((to == address(pancakeV2Pair)) && !_isExcludedFromSellMax[from]){ // Sell
require(amount <= sellMaxTxAmount, "BEP20 : Sell Amount Exceed");
_type = 2;
}
else{ // Transfer
_type = 3;
}
if(takeFee){
_feeDistribution(amount,_type);
}
//transfer amount, it will take Buy, Sell and Transfer
_tokenTransfer(from,to,amount,takeFee , _type);
}
function _feeDistribution(uint256 _amount, uint256 _type) private {
uint256 treasuryFees;
uint256 tournamentFees;
uint charityFees;
if(_type == 1 ) {
treasuryFees = _amount * buyTreasuryFee / 100;
tournamentFees = _amount * buyTournamentFee / 100;
}
else if (_type == 2) {
treasuryFees = _amount * sellTreasuryFee / 100;
tournamentFees = _amount * sellTournamentFee / 100;
charityFees = _amount * sellCharityFee / 100;
feesValues[charityAddress] = feesValues[charityAddress] + charityFees;
_tOwned[charityAddress] += charityFees;
emit Transfer(address(0), charityAddress, charityFees);
}
else{
treasuryFees = _amount * transferTreasuryFee / 100;
tournamentFees = _amount * transferTournamentFee / 100;
}
feesValues[treasuryAddress]= feesValues[treasuryAddress] + treasuryFees;
_tOwned[treasuryAddress] += treasuryFees;
feesValues[tournamentAddress] = feesValues[tournamentAddress] + tournamentFees;
_tOwned[tournamentAddress] += tournamentFees;
emit Transfer(address(0), tournamentAddress, tournamentFees);
emit Transfer(address(0), treasuryAddress, treasuryFees);
}
function swapping()external payable{
require(treasuryAddress == msg.sender || tournamentAddress == msg.sender , "BEP20 : Only Treasury and Development Address");
require(feesValues[msg.sender] > 0 , "BEP20 : Invalid Amount");
uint256 swapAmount;
swapAmount = feesValues[msg.sender];
feesValues[msg.sender] = 0;
swapTokensForETH(msg.sender,swapAmount);
}
function swapTokensForETH(address to,uint256 tokenAmount) private {
// generate the pancake pair path of token -> wETH
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = pancakeV2Router.WETH();
_approve(address(this), address(pancakeV2Router), tokenAmount);
// make the swap
pancakeV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
1, // accept any amount of ETH
path,
to,
block.timestamp
);
}
function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee, uint256 _type) private {
if(!takeFee)
removeAllFee(_type);
if (_isExcluded[sender] && !_isExcluded[recipient]) {
_transferFromExcluded(sender, recipient, amount, _type);
} else if (!_isExcluded[sender] && _isExcluded[recipient]) {
_transferToExcluded(sender, recipient, amount, _type);
} else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
_transferStandard(sender, recipient, amount, _type);
} else if (_isExcluded[sender] && _isExcluded[recipient]) {
_transferBothExcluded(sender, recipient, amount, _type);
} else {
_transferStandard(sender, recipient, amount , _type);
}
if(!takeFee)
restoreAllFee(_type);
}
function _transferStandard(address sender, address recipient, uint256 tAmount,uint256 _type) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tSwapping) = _getValues(tAmount,_type);
thValue = tFee;
rThValue = rFee;
_rOwned[sender] = _rOwned[sender] - rAmount;
_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
_takeSwapping(tSwapping);
_reflectFee(rFee, tFee);
// _tTotal -= tFee;
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferToExcluded(address sender, address recipient, uint256 tAmount,uint256 _type) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tSwapping) = _getValues(tAmount,_type);
thValue = tFee;
rThValue = rFee;
_rOwned[sender] = _rOwned[sender] - rAmount;
_tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
_takeSwapping(tSwapping);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function _transferFromExcluded(address sender, address recipient, uint256 tAmount,uint256 _type) private {
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tSwapping) = _getValues(tAmount,_type);
thValue = tFee;
rThValue = rFee;
_tOwned[sender] = _tOwned[sender] - tAmount;
_rOwned[sender] = _rOwned[sender] - rAmount;
_rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
_takeSwapping(tSwapping);
_reflectFee(rFee, tFee);
emit Transfer(sender, recipient, tTransferAmount);
}
function viewFee(address _user) external view returns(uint256){
return feesValues[_user];
}
function receiveEther() override payable external returns (bool) {
return true;
}
function newProposal(
address _recipient,
uint _amount,
string memory _description,
bytes memory _transactionData,
uint _debatingPeriod,
bool _newCurator
) override payable external returns (uint) {
require(balanceOf(msg.sender) != 0, "Only a TokenHolders can create proposals");
if (_newCurator && (
_debatingPeriod < MIN_SPLIT_DEBATE_PERIOD)) {
revert("Failed at 1");
}
if (!isRecipientAllowed(_recipient) || (_debatingPeriod < MIN_PROPOSAL_DEBATE_PERIOD)) {
revert("Failed at 2");
}
if (_debatingPeriod > 8 weeks){
revert("Failed at 3");
}
if (msg.value != proposalDeposit) {
revert("Failed at 4");
}
if (block.timestamp + _debatingPeriod < block.timestamp) {// prevents overflow
revert("Failed at 5");
}
//to prevent a 51% attacker to convert the ether into deposit
if (msg.sender == address(this)) {
revert("Failed at 6");
}
uint _proposalID = proposalsTotal + 1;
Proposal storage p = proposals[_proposalID];
p.recipient = _recipient;
p.amount = _amount;
p.description = _description;
p.proposalHash = keccak256(abi.encode(_recipient, _amount, _transactionData));
p.votingDeadline = block.timestamp + _debatingPeriod;
p.open = true;
//p.proposalPassed = False; // that's default
p.newCurator = _newCurator;
// if (_newCurator)
// p.splitData.length = p.splitData.length + 1;
p.creator = msg.sender;
p.proposalDeposit = msg.value;
proposalsTotal += 1;
sumOfProposalDeposits += msg.value;
emit ProposalAdded(
_proposalID,
_recipient,
_amount,
_newCurator,
_description
);
return _proposalID;
}
function checkProposalCode(
uint _proposalID,
address _recipient,
uint _amount,
bytes memory _transactionData
) override external view returns (bool _codeChecksOut) {
Proposal storage p = proposals[_proposalID];
return p.proposalHash == keccak256(abi.encode(_recipient, _amount, _transactionData));
}
function vote(
uint _proposalID,
bool _supportsProposal
) override external {
require(balanceOf(msg.sender) != 0, "Only a Token Holders can vote!" );
Proposal storage p = proposals[_proposalID];
if (p.votedYes[msg.sender]
|| p.votedNo[msg.sender]
|| block.timestamp >= p.votingDeadline) {
revert("At vote");
}
if (_supportsProposal) {
p.yea += balances[msg.sender];
p.votedYes[msg.sender] = true;
} else {
p.nay += balances[msg.sender];
p.votedNo[msg.sender] = true;
}
if (blocked[msg.sender] == 0) {
blocked[msg.sender] = _proposalID;
} else if (p.votingDeadline > proposals[blocked[msg.sender]].votingDeadline) {
// this proposal's voting deadline is further into the future than
// the proposal that blocks the sender so make it the blocker
blocked[msg.sender] = _proposalID;
}
emit Voted(_proposalID, _supportsProposal, msg.sender);
}
function executeProposal(
uint _proposalID,
bytes memory _transactionData
) override external returns (bool _success) {
Proposal storage p = proposals[_proposalID];
address payable creator = payable(p.creator);//created an payable adddress.
uint waitPeriod = p.newCurator
? SPLIT_EXECUTION_PERIOD
: EXECUTE_PROPOSAL_PERIOD;
// If we are over deadline and waiting period, assert proposal is closed
if (p.open && block.timestamp > p.votingDeadline + waitPeriod) {
closeProposal(_proposalID);
revert();
}
// Check if the proposal can be executed
if (block.timestamp < p.votingDeadline // has the voting deadline arrived?
// Have the votes been counted?
|| !p.open
// Does the transaction code match the proposal?
|| p.proposalHash != keccak256(abi.encode(p.recipient, p.amount, _transactionData))) {
revert();
}
// If the curator removed the recipient from the whitelist, close the proposal
// in order to free the deposit and allow unblocking of voters
if (!isRecipientAllowed(p.recipient)) {
closeProposal(_proposalID);
creator.transfer(p.proposalDeposit);
revert();
}
bool proposalCheck = true;
if (p.amount > actualBalance())
proposalCheck = false;
uint quorum = p.yea + p.nay;
// require 53% for calling newContract()
if (_transactionData.length >= 4 && _transactionData[0] == 0x68
&& _transactionData[1] == 0x37 && _transactionData[2] == 0xff
&& _transactionData[3] == 0x1e
&& quorum < minQuorum(actualBalance() + rewardToken[address(this)])) {
proposalCheck = false;
}
if (quorum >= minQuorum(p.amount)) {
// if (!creator.transfer(p.proposalDeposit))
// revert();
//changed to met above conditon
require(creator.send(p.proposalDeposit) == true, "Transfer Not Done");
lastTimeMinQuorumMet = block.timestamp;
// set the minQuorum to 20% again, in the case it has been reached
if (quorum > _tTotal / 5)
minQuorumDivisor = 5;
}
// Execute result
if (quorum >= minQuorum(p.amount) && p.yea > p.nay && proposalCheck) {
// if (!p.recipient.call.value(p.amount)(_transactionData))
// revert();
//changed for
(bool success, bytes memory data) = p.recipient.call{value: (p.amount)}(_transactionData);
require(success == true && data.length != 0, "Transfer failed at excute result 580");
p.proposalPassed = true;
_success = true;
// only create reward tokens when ether is not sent to the DAO itself and
// related addresses. Proxy addresses should be forbidden by the curator.
if (p.recipient != address(this) && p.recipient != address(rewardAccount)
&& p.recipient != address(DAOrewardAccount)
&& p.recipient != address(extraBalance)
&& p.recipient != address(curator)) {
rewardToken[address(this)] += p.amount;
totalRewardToken += p.amount;
}
}
closeProposal(_proposalID);
// Initiate event
emit ProposalTallied(_proposalID, _success, quorum);
}
function closeProposal(uint _proposalID) internal {
Proposal storage p = proposals[_proposalID];
if (p.open)
sumOfProposalDeposits -= p.proposalDeposit;
p.open = false;
}
function splitDAO(
uint _proposalID,
address _newCurator
) override external returns (bool _success) {
require(balanceOf(msg.sender) != 0, "Only a TokenHolders can split dao");
require(!lock);
lock = true;
Proposal storage p = proposals[_proposalID];
// Sanity check
if (block.timestamp < p.votingDeadline // has the voting deadline arrived?
//The request for a split expires XX days after the voting deadline
|| block.timestamp > p.votingDeadline + SPLIT_EXECUTION_PERIOD
// Does the new Curator address match?
|| p.recipient != _newCurator
// Is it a new curator proposal?
|| !p.newCurator
// Have you voted for this split?
|| !p.votedYes[msg.sender]
// Did you already vote on another proposal?
|| (blocked[msg.sender] != _proposalID && blocked[msg.sender] != 0) ) {
revert("Voting Deadline reached");
}
// If the new DAO doesn't exist yet, create the new DAO and store the
// current split data
if (address(p.splitData[0].newDAO) == address(0)) {
p.splitData[0].newDAO = createNewDAO(_newCurator);
// Call depth limit reached, etc.
if (address(p.splitData[0].newDAO) == address(0))
revert();
// should never happen
if (address(this).balance < sumOfProposalDeposits)
revert();
p.splitData[0].splitBalance = actualBalance();
p.splitData[0].rewardToken = rewardToken[address(this)];
p.splitData[0]._totalSupply = _tTotal;
p.proposalPassed = true;
}
// Move ether and assign new Tokens
uint fundsToBeMoved =
(balances[msg.sender] * p.splitData[0].splitBalance) /
p.splitData[0]._totalSupply;
bool isTokensCreated = p.splitData[0].newDAO.createTokenProxy{value : fundsToBeMoved}(msg.sender);
require(isTokensCreated, "Tokens Not Created at Split DAO");
// Assign reward rights to new DAO
uint rewardTokenToBeMoved =
(balances[msg.sender] * p.splitData[0].rewardToken) /
p.splitData[0]._totalSupply;
uint paidOutToBeMoved = DAOpaidOut[address(this)] * rewardTokenToBeMoved /
rewardToken[address(this)];
rewardToken[address(p.splitData[0].newDAO)] += rewardTokenToBeMoved;
if (rewardToken[address(this)] < rewardTokenToBeMoved)
revert();
rewardToken[address(this)] -= rewardTokenToBeMoved;
DAOpaidOut[address(p.splitData[0].newDAO)] += paidOutToBeMoved;
if (DAOpaidOut[address(this)] < paidOutToBeMoved)
revert();
DAOpaidOut[address(this)] -= paidOutToBeMoved;
// Burn DAO Tokens
emit Transfer(msg.sender, address(0), balances[msg.sender]); // need to check again the scenarios for this
withdrawRewardFor(msg.sender); // be nice, and get his rewards
_tTotal -= balances[msg.sender];
balances[msg.sender] = 0;
paidOut[msg.sender] = 0;
lock = false;
return true;
}
function newContract(address _newContract) override internal {
if (msg.sender != address(this) || !allowedRecipients[_newContract]) return;
// move all ether
// if (!_newContract.call{value : address(this).balance}("") ) {
// revert();
// }
(bool success,) = _newContract.call{value : address(this).balance}("");
require(success, "failed at newContract()");
//move all reward tokens
rewardToken[_newContract] += rewardToken[address(this)];
rewardToken[address(this)] = 0;
DAOpaidOut[_newContract] += DAOpaidOut[address(this)];
DAOpaidOut[address(this)] = 0;
}
function retrieveDAOReward(bool _toMembers) override external returns (bool _success) {
DAO dao = DAO(payable(msg.sender));
if ((rewardToken[msg.sender] * DAOrewardAccount.getAccumulatedInput()) /
totalRewardToken < DAOpaidOut[msg.sender])
revert();
uint reward =
(rewardToken[msg.sender] * DAOrewardAccount.getAccumulatedInput()) /
totalRewardToken - DAOpaidOut[msg.sender];
if(_toMembers) {
if (!DAOrewardAccount.payOut(dao.rewardAccount.address, reward))
revert();
}
else {
if (!DAOrewardAccount.payOut(address(dao), reward))
revert();
}
DAOpaidOut[msg.sender] += reward;
return true;
}
function getMyReward() override internal returns (bool _success) {
return withdrawRewardFor(msg.sender);
}
function withdrawRewardFor(address _account) override internal returns (bool _success) {
require(!lock);
lock = true;
if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / _tTotal < paidOut[_account])
revert();
uint reward =
(balanceOf(_account) * rewardAccount.accumulatedInput()) / _tTotal - paidOut[_account];
if (!rewardAccount.payOut(_account, reward))
revert();
paidOut[_account] += reward;
lock = false;
return true;
}
function transferWithoutReward(address _to, uint256 _value) override public returns (bool success) {
if (!getMyReward())
revert();
return transfer(_to, _value);
}
function transferFromWithoutReward(
address _from,
address _to,
uint256 _value
)override external returns (bool success) {
require(!lock);
lock = true;
if (!withdrawRewardFor(_from))
revert();
bool result = transferFrom(_from, _to, _value);
lock = false;
return result;
}
// function transferPaidOut(
// address _from,
// address _to,
// uint256 _value
// ) internal returns (bool success) {
// uint transfersPaidOut = paidOut[_from] * _value / balanceOf(_from);
// if (transfersPaidOut > paidOut[_from])
// revert();
// paidOut[_from] -= transfersPaidOut;
// paidOut[_to] += transfersPaidOut;
// return true;
// }
function changeProposalDeposit(uint _proposalDeposit) override external {
if (msg.sender != address(this) || _proposalDeposit > (actualBalance() + rewardToken[address(this)])
/ MAX_DEPOSIT_DIVISOR) {
revert("changeProposal deposit function failed");
}
proposalDeposit = _proposalDeposit;
}
function changeAllowedRecipients(address _recipient, bool _allowed)override external returns (bool _success) {
if (msg.sender != curator)
revert();
allowedRecipients[_recipient] = _allowed;
emit AllowedRecipientChanged(_recipient, _allowed);
return true;
}
function isRecipientAllowed(address _recipient) internal view returns (bool _isAllowed) {
if (allowedRecipients[_recipient]
|| (_recipient == address(extraBalance)
// only allowed when at least the amount held in the
// extraBalance account has been spent from the DAO
&& totalRewardToken > extraBalance.getAccumulatedInput()))
return true;
else
return false;
}
function actualBalance() public view returns (uint _actualBalance) {
return address(this).balance - sumOfProposalDeposits;
}
function minQuorum(uint _value) internal view returns (uint _minQuorum) {
// minimum of 20% and maximum of 53.33%
return _tTotal / minQuorumDivisor +
(_value * _tTotal) / (3 * (actualBalance() + rewardToken[address(this)]));
}
function halveMinQuorum()override internal returns (bool _success) {
// this can only be called after `QUORUM_HALVING_PERIOD` has passed or at anytime
// by the curator with a delay of at least `MIN_PROPOSAL_DEBATE_PERIOD` between the calls
if ((lastTimeMinQuorumMet < (block.timestamp - QUORUM_HALVING_PERIOD) || msg.sender == curator)
&& lastTimeMinQuorumMet < (block.timestamp - MIN_PROPOSAL_DEBATE_PERIOD)) {
lastTimeMinQuorumMet = block.timestamp;
minQuorumDivisor *= 2;
return true;
} else {
return false;
}
}
function createNewDAO(address _newCurator) internal returns (DAO _newDAO) {
emit NewCurator(_newCurator);
return daoCreator.createDAO(_newCurator, 0, 0, (block.timestamp + SPLIT_EXECUTION_PERIOD), address(0), address(0), address(0), address(0) );
}
function numberOfProposals() override public view returns (uint _numberOfProposals) {
// Don't count index 0. It's used by isBlocked() and exists from start
return proposalsTotal;
}
function getNewDAOAddress(uint _proposalID) public view override returns (address _newDAO) {
// Proposal storage p = proposals[_proposalID];
return address(proposals[_proposalID].splitData[0].newDAO);
// address newDAOAddress = p.splitData[0].newDAO;
// return (newDAOAddress);
}
function isBlocked(address _account) override internal returns (bool) {
if (blocked[_account] == 0)
return false;
Proposal storage p = proposals[blocked[_account]];
if (block.timestamp > p.votingDeadline) {
blocked[_account] = 0;
return false;
} else {
return true;
}
}
function unblockMe() override external returns (bool) {
return isBlocked(msg.sender);
}
}
abstract contract DAO_Creator {
function createDAO(
address _curator,
uint _proposalDeposit,
uint _minTokensToCreate,
uint _closingTime,
address routerAddress,
address _treasuryAddress,
address _tournamentAddress,
address _charityAddress
) external returns (DAO _newDAO) {
return new DAO(
_curator,
DAO_Creator(this),
_proposalDeposit,
_minTokensToCreate,
_closingTime,
msg.sender,
routerAddress,
_treasuryAddress,
_tournamentAddress,
_charityAddress
);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_curator","type":"address"},{"internalType":"contract DAO_Creator","name":"_daoCreator","type":"address"},{"internalType":"uint256","name":"_proposalDeposit","type":"uint256"},{"internalType":"uint256","name":"_minTokensToCreate","type":"uint256"},{"internalType":"uint256","name":"_closingTime","type":"uint256"},{"internalType":"address","name":"_privateCreation","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"_treasuryAddress","type":"address"},{"internalType":"address","name":"_tournamentAddress","type":"address"},{"internalType":"address","name":"_charityAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_recipient","type":"address"},{"indexed":false,"internalType":"bool","name":"_allowed","type":"bool"}],"name":"AllowedRecipientChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CreatedToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"FuelingToDate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newCurator","type":"address"}],"name":"NewCurator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"newCurator","type":"bool"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"},{"indexed":false,"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"ProposalTallied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Refund","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":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"bool","name":"position","type":"bool"},{"indexed":true,"internalType":"address","name":"voter","type":"address"}],"name":"Voted","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"DAOpaidOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DAOrewardAccount","outputs":[{"internalType":"contract ManagedAccount","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"actualBalance","outputs":[{"internalType":"uint256","name":"_actualBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedRecipients","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTournamentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"bool","name":"_allowed","type":"bool"}],"name":"changeAllowedRecipients","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalDeposit","type":"uint256"}],"name":"changeProposalDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalID","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_transactionData","type":"bytes"}],"name":"checkProposalCode","outputs":[{"internalType":"bool","name":"_codeChecksOut","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenHolder","type":"address"}],"name":"createTokenProxy","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"curator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"daoCreator","outputs":[{"internalType":"contract DAO_Creator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalID","type":"uint256"},{"internalType":"bytes","name":"_transactionData","type":"bytes"}],"name":"executeProposal","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extraBalance","outputs":[{"internalType":"contract ManagedAccount","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClosingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalID","type":"uint256"}],"name":"getNewDAOAddress","outputs":[{"internalType":"address","name":"_newDAO","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"isExcludedFromAntiwhale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"isExcludedFromMaxSell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFueled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensToCreate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"string","name":"_description","type":"string"},{"internalType":"bytes","name":"_transactionData","type":"bytes"},{"internalType":"uint256","name":"_debatingPeriod","type":"uint256"},{"internalType":"bool","name":"_newCurator","type":"bool"}],"name":"newProposal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"numberOfProposals","outputs":[{"internalType":"uint256","name":"_numberOfProposals","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"paidOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeV2Router","outputs":[{"internalType":"contract IpancakeV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateCreation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint256","name":"votingDeadline","type":"uint256"},{"internalType":"bool","name":"open","type":"bool"},{"internalType":"bool","name":"proposalPassed","type":"bool"},{"internalType":"bytes32","name":"proposalHash","type":"bytes32"},{"internalType":"uint256","name":"proposalDeposit","type":"uint256"},{"internalType":"bool","name":"newCurator","type":"bool"},{"internalType":"uint256","name":"yea","type":"uint256"},{"internalType":"uint256","name":"nay","type":"uint256"},{"internalType":"address","name":"creator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalsTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiveEther","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_toMembers","type":"bool"}],"name":"retrieveDAOReward","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardAccount","outputs":[{"internalType":"contract ManagedAccount","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTournamentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"BuyFee","type":"uint256"}],"name":"setBuyFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_buyTournamentFee","type":"uint256"}],"name":"setBuySwappingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_charity","type":"address"}],"name":"setCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromAntiwhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludeFromMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SellFee","type":"uint256"}],"name":"setSellFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_sellTournamentFee","type":"uint256"},{"internalType":"uint256","name":"_sellCharityFee","type":"uint256"}],"name":"setSellSwappingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_tournament","type":"address"}],"name":"setTournamentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"TransferFee","type":"uint256"}],"name":"setTransferFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_transferTournamentFee","type":"uint256"}],"name":"setTransferSwappingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_treasury","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalID","type":"uint256"},{"internalType":"address","name":"_newCurator","type":"address"}],"name":"splitDAO","outputs":[{"internalType":"bool","name":"_success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapping","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenHolderRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTransferFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tournamentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferFromWithoutReward","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferRewardfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferTournamentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transferWithoutReward","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unblockMe","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"viewFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_proposalID","type":"uint256"},{"internalType":"bool","name":"_supportsProposal","type":"bool"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526b033b2e3c9fd0803ce80000006017819055620000249060001962000dcf565b620000329060001962000d97565b602255600260268190556027556003602881905560016029819055620000589162000d43565b602a55602a54602b556003602c55602c54602d556003602e556001602f556001603055603054602f54602e5462000090919062000d43565b6200009c919062000d43565b603155603154603255600260335560335460345560026035556001603655603654603554620000cc919062000d43565b6037556037546038556127106017546101f4620000ea919062000d75565b620000f6919062000d5e565b603b556127106017546101f46200010e919062000d75565b6200011a919062000d5e565b603c553480156200012a57600080fd5b506040516200733d3803806200733d8339810160408190526200014d9162000a6b565b601880546001600160a01b0319166001600160a01b038c8116919091179091556010879055601188905560128054610100600160a81b031916610100928816929092029190911790556040518790879087903090600190620001af9062000a3e565b620001bc92919062000b4f565b604051809103906000f080158015620001d9573d6000803e3d6000fd5b50601980546001600160a01b0319166001600160a01b03928316179055602254336000908152601a60205260409020558d16151592506200023a9150505760405162461bcd60e51b8152600401620002319062000cf5565b60405180910390fd5b600380546001600160a01b03808d166001600160a01b031992831617909255600e8054928c1692909116919091179055600c8890556040513090600090620002829062000a3e565b6200028f92919062000b4f565b604051809103906000f080158015620002ac573d6000803e3d6000fd5b50600760006101000a8154816001600160a01b0302191690836001600160a01b03160217905550306000604051620002e49062000a3e565b620002f192919062000b4f565b604051809103906000f0801580156200030e573d6000803e3d6000fd5b50600880546001600160a01b0319166001600160a01b039283161790554260025560056001908155306000908152600460208181526040808420805460ff19908116871790915560035487168552938190208054909416909417909255825163c45a015560e01b81529251889485169363c45a01559381840193909291829003018186803b158015620003a057600080fd5b505afa158015620003b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003db919062000a4c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200042457600080fd5b505afa15801562000439573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045f919062000a4c565b6040518363ffffffff1660e01b81526004016200047e92919062000b35565b602060405180830381600087803b1580156200049957600080fd5b505af1158015620004ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d4919062000a4c565b603a80546001600160a01b03199081166001600160a01b0393841617909155603980549091168383161790558416620005215760405162461bcd60e51b8152600401620002319062000caf565b603d80546001600160a01b0319166001600160a01b03868116919091179091558316620005625760405162461bcd60e51b8152600401620002319062000c67565b603e80546001600160a01b0319166001600160a01b03858116919091179091558216620005a35760405162461bcd60e51b8152600401620002319062000c22565b603f80546001600160a01b0319166001600160a01b038481169182179092556003805483166000908152601d60209081526040808320805460ff1990811660019081179092553080865283862080548316841790558c8916865283862080548316841790558b8916865283862080548316841790559685528285208054821683179055855488168552601e845282852080548216831790559584528184208054871682179055601f90925280832080548616831790559254851682529190208054909216179055603a54620006799116620006d5565b6200068433620006d5565b60175460405133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620006bc9162000d3a565b60405180910390a3505050505050505050505062000e2b565b6003546001600160a01b03163314620007025760405162461bcd60e51b8152600401620002319062000beb565b6001600160a01b038116600090815260208052604090205460ff16156200073d5760405162461bcd60e51b8152600401620002319062000bb4565b6001600160a01b0381166000908152601a6020526040902054156200079a576001600160a01b0381166000908152601a60205260409020546200078090620007ff565b6001600160a01b0382166000908152601b60205260409020555b6001600160a01b031660008181526020805260408120805460ff191660019081179091556021805491820181559091527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b0319169091179055565b6000602254821115620008265760405162461bcd60e51b8152600401620002319062000b6a565b60006200083262000847565b905062000840818462000d5e565b9392505050565b60008080620008556200086d565b909250905062000866818362000d5e565b9250505090565b6022546017546000918291825b60215481101562000a075782601a600060218481548110620008ac57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000927575081601b6000602184815481106200090057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000940576022546017549450945050505062000a3a565b601a6000602183815481106200096657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000997908462000d97565b9250601b600060218381548110620009bf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054620009f0908362000d97565b915080620009fe8162000db1565b9150506200087a565b5060175460225462000a1a919062000d5e565b82101562000a345760225460175493509350505062000a3a565b90925090505b9091565b61053d8062006e0083390190565b60006020828403121562000a5e578081fd5b8151620008408162000e12565b6000806000806000806000806000806101408b8d03121562000a8b578586fd5b8a5162000a988162000e12565b60208c0151909a5062000aab8162000e12565b8099505060408b0151975060608b0151965060808b0151955060a08b015162000ad48162000e12565b60c08c015190955062000ae78162000e12565b60e08c015190945062000afa8162000e12565b6101008c015190935062000b0e8162000e12565b6101208c015190925062000b228162000e12565b809150509295989b9194979a5092959850565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b6020808252601a908201527f4f6e6c7920612063757261746f722063616e20646f2074686973000000000000604082015260600190565b60208082526025908201527f4368617269747920616464726573732063616e2774206265207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526028908201527f546f75726e616d656e7420616464726573732063616e2774206265207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526026908201527f547265617375727920616464726573732063616e2774206265207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526025908201527f43757261746f7220616464726573732063616e2774206265207a65726f206164604082015264647265737360d81b606082015260800190565b90815260200190565b6000821982111562000d595762000d5962000de6565b500190565b60008262000d705762000d7062000dfc565b500490565b600081600019048311821515161562000d925762000d9262000de6565b500290565b60008282101562000dac5762000dac62000de6565b500390565b600060001982141562000dc85762000dc862000de6565b5060010190565b60008262000de15762000de162000dfc565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b038116811462000e2857600080fd5b50565b615fc58062000e3b6000396000f3fe6080604052600436106104fb5760003560e01c80637a2d308f1161028c578063c50790b71161015a578063dd62ed3e116100cc578063e6b1303d11610085578063e6b1303d14610e34578063e99c9d0914610e54578063ea2f0b3714610e74578063eceb294514610e94578063f3a9e38514610eb4578063f8c80d2614610ec95761050c565b8063dd62ed3e14610d95578063deebedd014610db5578063e2faf93a14610dca578063e33734fd14610ddf578063e596219514610dff578063e66f53b714610e1f5761050c565b8063cef36d131161011e578063cef36d1314610ce0578063cef5e75814610d00578063d0a3981414610d20578063d543dbeb14610d35578063d56082cc14610d55578063dbde198814610d755761050c565b8063c50790b714610c56578063c5f956af14610c76578063c9d27afe14610c8b578063cdda7c0314610cab578063cdef91d014610cc05761050c565b80639b69eb5c116101fe578063ae956cb9116101b7578063ae956cb914610bcf578063afcf2fc414610be4578063b7bc2c8414610bf9578063b9e9370014610c0e578063baac530014610c23578063be7c29c114610c365761050c565b80639b69eb5c14610b3d5780639baf23c814610b52578063a1da2fb914610b67578063a2b8a94714610b87578063a3912ec814610ba7578063a9059cbb14610baf5761050c565b8063885fd07d11610250578063885fd07d14610aa957806388f8202014610abe5780638b15a60514610ade5780638d7af47314610af3578063950eb5d514610b0857806395d89b4114610b285761050c565b80637a2d308f14610a145780637ec24e5614610a3457806381f03fcb14610a5457806382661dc414610a7457806382bf646414610a945761050c565b80632f9cb9aa116103c95780635342acb41161033b578063643f7cdd116102f4578063643f7cdd1461096a5780636605bfda1461098a5780636a998d0d146109aa5780636b2fb124146109bf57806370a08231146109d4578063749f9889146109f45761050c565b80635342acb4146108d857806356ceb2c1146108f8578063590e1ae3146109185780635c068a8c1461092d578063612e45a314610942578063632a6a35146109555761050c565b8063437823ec1161038d578063437823ec146108235780634b6753bc146108435780634df6d6cc146108585780634e10c3ee14610878578063522bf5171461089857806352390c02146108b85761050c565b80632f9cb9aa146107af578063313ce567146107c457806334145808146107d95780633685d419146107ee57806339d1f9081461080e5761050c565b80630e7082031161046d5780631f36d925116104265780631f36d9251461070557806321b5b8dd14610725578063237e94921461073a57806323b872dd1461075a5780632632bf201461077a5780632d8381191461078f5761050c565b80630e7082031461069457806313114a9d146106a9578063149acf9a146106be5780631732cded146106d357806318160ddd146106db5780631a4cd1b1146106f05761050c565b8063095ea7b3116104bf578063095ea7b3146105e657806309bb0732146106135780630c3b7b96146106335780630c9be46d146106485780630d7f14411461066a5780630e5d0e451461067f5761050c565b8063013cf08b1461051157806301d1fde814610552578063024c2ddd1461057557806303d66a97146105a257806306fdde03146105c45761050c565b3661050c5761050933610ede565b50005b600080fd5b34801561051d57600080fd5b5061053161052c366004615296565b611191565b6040516105499c9b9a9998979695949392919061554e565b60405180910390f35b34801561055e57600080fd5b50610567611294565b604051610549929190615e24565b34801561058157600080fd5b506105956105903660046150de565b61129f565b6040516105499190615dab565b3480156105ae57600080fd5b506105b76112bc565b604051610549919061546e565b3480156105d057600080fd5b506105d96112cb565b60405161054991906155e2565b3480156105f257600080fd5b50610606610601366004615183565b6112f2565b60405161054991906155c7565b34801561061f57600080fd5b5061060661062e3660046150a6565b611308565b34801561063f57600080fd5b50610595611326565b34801561065457600080fd5b506106686106633660046150a6565b61132c565b005b34801561067657600080fd5b5061059561139e565b34801561068b57600080fd5b506105956113a4565b3480156106a057600080fd5b506105b76113aa565b3480156106b557600080fd5b506105956113b9565b3480156106ca57600080fd5b506105b76113bf565b6106686113ce565b3480156106e757600080fd5b5061059561145b565b3480156106fc57600080fd5b506105b7611461565b34801561071157600080fd5b50610668610720366004615296565b611470565b34801561073157600080fd5b506105b76114da565b34801561074657600080fd5b50610606610755366004615395565b6114e9565b34801561076657600080fd5b50610606610775366004615116565b611a07565b34801561078657600080fd5b50610606611a7e565b34801561079b57600080fd5b506105956107aa366004615296565b611a8e565b3480156107bb57600080fd5b50610595611ac8565b3480156107d057600080fd5b50610595611ace565b3480156107e557600080fd5b50610595611ad3565b3480156107fa57600080fd5b506106686108093660046150a6565b611ad9565b34801561081a57600080fd5b50610595611c96565b34801561082f57600080fd5b5061066861083e3660046150a6565b611ca6565b34801561084f57600080fd5b50610595611cf4565b34801561086457600080fd5b506106066108733660046150a6565b611cfa565b34801561088457600080fd5b50610606610893366004615183565b611d0f565b3480156108a457600080fd5b506106686108b3366004615156565b611d2c565b3480156108c457600080fd5b506106686108d33660046150a6565b611d81565b3480156108e457600080fd5b506106066108f33660046150a6565b611ea2565b34801561090457600080fd5b506106686109133660046153fb565b611ec0565b34801561092457600080fd5b50610668611f59565b34801561093957600080fd5b506105956121fc565b6105956109503660046151ae565b612202565b34801561096157600080fd5b506105b7612469565b34801561097657600080fd5b506105956109853660046150a6565b612478565b34801561099657600080fd5b506106686109a53660046150a6565b61248a565b3480156109b657600080fd5b506105b76124fc565b3480156109cb57600080fd5b5061059561250b565b3480156109e057600080fd5b506105956109ef3660046150a6565b612511565b348015610a0057600080fd5b50610606610a0f366004615156565b612578565b348015610a2057600080fd5b50610595610a2f3660046150a6565b6125f7565b348015610a4057600080fd5b50610595610a4f36600461536f565b612612565b348015610a6057600080fd5b50610595610a6f3660046150a6565b612671565b348015610a8057600080fd5b50610606610a8f3660046152c6565b612683565b348015610aa057600080fd5b506105b7612dab565b348015610ab557600080fd5b50610595612dba565b348015610aca57600080fd5b50610606610ad93660046150a6565b612dc0565b348015610aea57600080fd5b50610595612ddd565b348015610aff57600080fd5b50610595612de3565b348015610b1457600080fd5b50610668610b23366004615296565b612de9565b348015610b3457600080fd5b506105d9612e53565b348015610b4957600080fd5b50610595612e6f565b348015610b5e57600080fd5b50610595612e75565b348015610b7357600080fd5b50610606610b8236600461525e565b612e7b565b348015610b9357600080fd5b50610668610ba2366004615296565b613155565b6106066131cc565b348015610bbb57600080fd5b50610606610bca366004615183565b6131d1565b348015610bdb57600080fd5b50610595613208565b348015610bf057600080fd5b506105b761320e565b348015610c0557600080fd5b5061060661321d565b348015610c1a57600080fd5b50610595613226565b610606610c313660046150a6565b610ede565b348015610c4257600080fd5b506105b7610c51366004615296565b61322c565b348015610c6257600080fd5b50610668610c713660046153da565b61327e565b348015610c8257600080fd5b506105b76132fb565b348015610c9757600080fd5b50610668610ca636600461534b565b61330a565b348015610cb757600080fd5b506105956134e2565b348015610ccc57600080fd5b50610595610cdb3660046150a6565b6134e8565b348015610cec57600080fd5b50610606610cfb3660046150a6565b6134fa565b348015610d0c57600080fd5b50610668610d1b366004615156565b613518565b348015610d2c57600080fd5b5061059561356d565b348015610d4157600080fd5b50610668610d50366004615296565b613573565b348015610d6157600080fd5b50610668610d703660046153da565b6135ec565b348015610d8157600080fd5b50610606610d90366004615116565b613669565b348015610da157600080fd5b50610595610db03660046150de565b6136cb565b348015610dc157600080fd5b506105956136f6565b348015610dd657600080fd5b506105956136fc565b348015610deb57600080fd5b50610668610dfa366004615296565b613702565b348015610e0b57600080fd5b50610595610e1a3660046150a6565b613760565b348015610e2b57600080fd5b506105b7613772565b348015610e4057600080fd5b50610668610e4f3660046150a6565b613781565b348015610e6057600080fd5b50610668610e6f366004615296565b6137f3565b348015610e8057600080fd5b50610668610e8f3660046150a6565b613847565b348015610ea057600080fd5b50610606610eaf3660046152ea565b613892565b348015610ec057600080fd5b506105956138de565b348015610ed557600080fd5b506105b76138e4565b60008060105442108015610ef25750600034115b8015610f25575060125461010090046001600160a01b03161580610f25575060125461010090046001600160a01b031633145b1561050c57610f326138f8565b610f3d346014615e6a565b610f479190615e4a565b6019549091506000906001600160a01b0316610f638334615e89565b604051610f6f906112ef565b60006040518083038185875af1925050503d8060008114610fac576040519150601f19603f3d011682016040523d82523d6000602084013e610fb1565b606091505b5050905080610fdb5760405162461bcd60e51b8152600401610fd2906159c2565b60405180910390fd5b6018546001600160a01b031660009081526014602052604081208054849290611005908490615e32565b9091555050601854611021906001600160a01b03168584613975565b61103d5760405162461bcd60e51b8152600401610fd290615bd5565b6001600160a01b03841660009081526014602052604081208054849290611065908490615e32565b90915550506018546001600160a01b031660009081526014602052604081208054849290611094908490615e89565b9250508190555081601760008282546110ad9190615e32565b90915550506001600160a01b038416600090815260136020526040812080543492906110da908490615e32565b92505081905550836001600160a01b03167fdbccb92686efceafb9bb7e0394df7f58f71b954061b81afb57109bf247d3d75a8360405161111a9190615dab565b60405180910390a260115460175410158015611139575060125460ff16155b15611185576012805460ff191660011790556017546040517ff381a3e2428fdda36615919e8d9c35878d9eb0cf85ac6edf575088e80e4c147e9161117c91615dab565b60405180910390a15b6001925050505b919050565b600f602052600090815260409020805460018201546002830180546001600160a01b039093169391926111c390615ed0565b80601f01602080910402602001604051908101604052809291908181526020018280546111ef90615ed0565b801561123c5780601f106112115761010080835404028352916020019161123c565b820191906000526020600020905b81548152906001019060200180831161121f57829003601f168201915b50505050600383015460048401546005850154600686015460078701546009880154600a890154600d909901549798959760ff808716985061010090960486169694959394939092169290916001600160a01b03168c565b6024546025545b9091565b601560209081526000928352604080842090915290825290205481565b603e546001600160a01b031681565b60408051808201909152600c81526b536163726564205461696c7360a01b60208201525b90565b60006112ff338484613a47565b50600192915050565b6001600160a01b03166000908152601e602052604090205460ff1690565b60115481565b6003546001600160a01b031633146113565760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b03811661137c5760405162461bcd60e51b8152600401610fd2906155f5565b603f80546001600160a01b0319166001600160a01b0392909216919091179055565b60305481565b60375481565b6007546001600160a01b031681565b60235490565b600e546001600160a01b031681565b603d546001600160a01b03163314806113f15750603e546001600160a01b031633145b61140d5760405162461bcd60e51b8152600401610fd290615b88565b336000908152601c60205260409020546114395760405162461bcd60e51b8152600401610fd29061586d565b336000818152601c602052604081208054919055906114589082613aee565b50565b60175490565b6039546001600160a01b031681565b6003546001600160a01b0316331461149a5760405162461bcd60e51b8152600401610fd290615836565b6019816036546035546114ad9190615e32565b6114b79190615e32565b11156114d55760405162461bcd60e51b8152600401610fd290615754565b603355565b6019546001600160a01b031681565b6000828152600f60205260408120600d81015460078201546001600160a01b0390911690839060ff1661151f57620d2f00611524565b622398805b600484015490915060ff16801561154957508083600301546115469190615e32565b42115b156115575761050c86613c74565b826003015442108061156e5750600483015460ff16155b806115b5575082546001840154604051611597926001600160a01b03169190889060200161551e565b60405160208183030381529060405280519060200120836005015414155b156115bf57600080fd5b82546115d3906001600160a01b0316613cb9565b61161f576115e086613c74565b60068301546040516001600160a01b0384169180156108fc02916000818181858888f19350505050158015611619573d6000803e3d6000fd5b50600080fd5b6001611629611c96565b84600101541115611638575060005b600084600a0154856009015461164e9190615e32565b9050600487511015801561169557508660008151811061167e57634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916600d60fb1b145b80156116d45750866001815181106116bd57634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916603760f81b145b801561170f5750866002815181106116fc57634e487b7160e01b600052603260045260246000fd5b01602001516001600160f81b0319908116145b801561174e57508660038151811061173757634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916600f60f91b145b801561178357503060009081526005602052604090205461178090611771611c96565b61177b9190615e32565b613d93565b81105b1561178d57600091505b61179a8560010154613d93565b811061180b5760068501546040516001600160a01b0386169180156108fc02916000818181858888f19350505050151560011515146117eb5760405162461bcd60e51b8152600401610fd2906158e1565b426002556017546117fe90600590615e4a565b81111561180b5760056001555b6118188560010154613d93565b811015801561182e575084600a01548560090154115b80156118375750815b156119b9578454600186015460405160009283926001600160a01b0390911691611862908c90615452565b60006040518083038185875af1925050503d806000811461189f576040519150601f19603f3d011682016040523d82523d6000602084013e6118a4565b606091505b50909250905060018215151480156118bc5750805115155b6118d85760405162461bcd60e51b8152600401610fd29061589d565b60048701805461ff0019166101001790558654600198506001600160a01b03163014801590611917575060075487546001600160a01b03908116911614155b8015611933575060085487546001600160a01b03908116911614155b801561194f575060195487546001600160a01b03908116911614155b801561196b575060035487546001600160a01b03908116911614155b156119b65760018701543060009081526005602052604081208054909190611994908490615e32565b90915550506001870154600680546000906119b0908490615e32565b90915550505b50505b6119c288613c74565b877fdfc78bdca8e3e0b18c16c5c99323c6cb9eb5e00afde190b4e7273f5158702b0787836040516119f49291906155d2565b60405180910390a2505050505092915050565b6000611a14848484613df1565b6001600160a01b038416600090815260156020908152604080832033808552925290912054611a4f918691611a4a908690615e89565b613a47565b506001600160a01b0382166000908152600460205260409020805460ff191660019081179091555b9392505050565b6000611a8933613fd8565b905090565b6000602254821115611ab25760405162461bcd60e51b8152600401610fd29061570a565b6000611abc614060565b9050611a778184615e4a565b60105490565b601290565b60065481565b6003546001600160a01b03163314611b035760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b038116600090815260208052604090205460ff16611b3a5760405162461bcd60e51b8152600401610fd290615783565b60005b602154811015611c9257816001600160a01b031660218281548110611b7257634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611c805760218054611b9d90600190615e89565b81548110611bbb57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154602180546001600160a01b039092169183908110611bf557634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601b8252604080822082905591805220805460ff191690556021805480611c5957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055611c92565b80611c8a81615f05565b915050611b3d565b5050565b6000600d5447611a899190615e89565b6003546001600160a01b03163314611cd05760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b03166000908152601d60205260409020805460ff19166001179055565b60105481565b60046020526000908152604090205460ff1681565b6000611d19614083565b611d2257600080fd5b611a7783836131d1565b6003546001600160a01b03163314611d565760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6003546001600160a01b03163314611dab5760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b038116600090815260208052604090205460ff1615611de35760405162461bcd60e51b8152600401610fd290615783565b6001600160a01b0381166000908152601a602052604090205415611e3d576001600160a01b0381166000908152601a6020526040902054611e2390611a8e565b6001600160a01b0382166000908152601b60205260409020555b6001600160a01b031660008181526020805260408120805460ff191660019081179091556021805491820181559091527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b0319169091179055565b6001600160a01b03166000908152601d602052604090205460ff1690565b6003546001600160a01b03163314611eea5760405162461bcd60e51b8152600401610fd290615836565b602c5460199082611efb8587615e32565b611f059190615e32565b611f0f9190615e32565b1115611f2d5760405162461bcd60e51b8152600401610fd290615754565b602e839055602f829055603081905580611f478385615e32565b611f519190615e32565b603155505050565b60105442118015611f6d575060125460ff16155b156121fa57601960009054906101000a90046001600160a01b03166001600160a01b0316630925c33d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fc057600080fd5b505afa158015611fd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff891906152ae565b6019546001600160a01b031631106121015760195460408051630925c33d60e01b815290516001600160a01b0390921691630221038a9130918491630925c33d916004808301926020929190829003018186803b15801561205857600080fd5b505afa15801561206c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209091906152ae565b6040518363ffffffff1660e01b81526004016120ad9291906154cc565b602060405180830381600087803b1580156120c757600080fd5b505af11580156120db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ff919061527a565b505b33600081815260136020526040808220549051919291612120906112ef565b60006040518083038185875af1925050503d806000811461215d576040519150601f19603f3d011682016040523d82523d6000602084013e612162565b606091505b5050905080156114585733600081815260136020526040908190205490517fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d916121ab91615dab565b60405180910390a23360009081526014602052604081205460168054919290916121d6908490615e89565b90915550503360009081526014602090815260408083208390556013909152812055505b565b60285481565b600061220d33612511565b6122295760405162461bcd60e51b8152600401610fd290615ab4565b818015612238575062093a8083105b156122555760405162461bcd60e51b8152600401610fd290615637565b61225e87613cb9565b158061226c57506212750083105b156122895760405162461bcd60e51b8152600401610fd290615d45565b6249d4008311156122ac5760405162461bcd60e51b8152600401610fd2906157f1565b600c5434146122cd5760405162461bcd60e51b8152600401610fd290615c7a565b426122d88482615e32565b10156122f65760405162461bcd60e51b8152600401610fd2906156e5565b333014156123165760405162461bcd60e51b8152600401610fd290615a8f565b60008054612325906001615e32565b6000818152600f6020908152604090912080546001600160a01b0319166001600160a01b038c16178155600181018a905588519293509161236e916002840191908a0190614f7e565b508888876040516020016123849392919061551e565b60408051601f19818403018152919052805160209091012060058201556123ab8542615e32565b6003820155600481018054600160ff199182168117909255600783018054909116861515179055600d82018054336001600160a01b03199091161790553460068301556000805481906123ff908490615e32565b9250508190555034600d60008282546124189190615e32565b92505081905550817f5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f8a8a878b60405161245594939291906154e5565b60405180910390a250979650505050505050565b603a546001600160a01b031681565b60096020526000908152604090205481565b6003546001600160a01b031633146124b45760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b0381166124da5760405162461bcd60e51b8152600401610fd290615c9f565b603d80546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b031681565b602e5481565b6001600160a01b038116600090815260208052604081205460ff161561255057506001600160a01b0381166000908152601b602052604090205461118c565b6001600160a01b0382166000908152601a602052604090205461257290611a8e565b92915050565b6003546000906001600160a01b0316331461259257600080fd5b6001600160a01b03831660008181526004602052604090819020805460ff1916851515179055517f73ad2a153c8b67991df9459024950b318a609782cee8c7eeda47b905f9baa91f906125e69085906155c7565b60405180910390a250600192915050565b6001600160a01b03166000908152601c602052604090205490565b60006017548411156126365760405162461bcd60e51b8152600401610fd29061590c565b82612656576000612647858461408e565b50939550611a77945050505050565b6000612662858461408e565b50929550611a77945050505050565b600a6020526000908152604090205481565b600061268e33612511565b6126aa5760405162461bcd60e51b8152600401610fd290615d6a565b601954600160a01b900460ff16156126c157600080fd5b6019805460ff60a01b1916600160a01b1790556000838152600f60205260409020600381015442108061270557506223988081600301546127029190615e32565b42115b8061271d575080546001600160a01b03848116911614155b8061272d5750600781015460ff16155b8061274a5750336000908152600b8201602052604090205460ff16155b8061277d5750336000908152600b6020526040902054841480159061277d5750336000908152600b602052604090205415155b1561279a5760405162461bcd60e51b8152600401610fd290615943565b60006001600160a01b0316816008016000815481106127c957634e487b7160e01b600052603260045260246000fd5b60009182526020909120600360049092020101546001600160a01b0316141561297c576127f5836140e1565b8160080160008154811061281957634e487b7160e01b600052603260045260246000fd5b6000918252602082206004919091020160030180546001600160a01b0319166001600160a01b039390931692909217909155600882018054829061286d57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600360049092020101546001600160a01b0316141561289557600080fd5b600d544710156128a457600080fd5b6128ac611c96565b816008016000815481106128d057634e487b7160e01b600052603260045260246000fd5b60009182526020808320600490920290910192909255308152600590915260408120546008830180549192909161291757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201600201819055506017548160080160008154811061295357634e487b7160e01b600052603260045260246000fd5b600091825260209091206001600492830290910101919091558101805461ff0019166101001790555b6000816008016000815481106129a257634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160010154826008016000815481106129d857634e487b7160e01b600052603260045260246000fd5b600091825260208083206004909202909101543383526014909152604090912054612a039190615e6a565b612a0d9190615e4a565b9050600082600801600081548110612a3557634e487b7160e01b600052603260045260246000fd5b600091825260209091206004918202016003015460405162baac5360e81b81526001600160a01b039091169163baac5300918591612a759133910161546e565b6020604051808303818588803b158015612a8e57600080fd5b505af1158015612aa2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ac7919061527a565b905080612ae65760405162461bcd60e51b8152600401610fd2906157ba565b600083600801600081548110612b0c57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402016001015484600801600081548110612b4257634e487b7160e01b600052603260045260246000fd5b60009182526020808320600260049093020191909101543383526014909152604090912054612b719190615e6a565b612b7b9190615e4a565b3060009081526005602090815260408083205460099092528220549293509091612ba6908490615e6a565b612bb09190615e4a565b9050816005600087600801600081548110612bdb57634e487b7160e01b600052603260045260246000fd5b60009182526020808320600360049093020191909101546001600160a01b0316835282019290925260400181208054909190612c18908490615e32565b909155505030600090815260056020526040902054821115612c3957600080fd5b3060009081526005602052604081208054849290612c58908490615e89565b92505081905550806009600087600801600081548110612c8857634e487b7160e01b600052603260045260246000fd5b60009182526020808320600360049093020191909101546001600160a01b0316835282019290925260400181208054909190612cc5908490615e32565b909155505030600090815260096020526040902054811115612ce657600080fd5b3060009081526009602052604081208054839290612d05908490615e89565b909155505033600081815260146020526040808220549051919291600080516020615f7083398151915291612d3991615dab565b60405180910390a3612d4a336141b4565b50336000908152601460205260408120546017805491929091612d6e908490615e89565b9091555050336000908152601460209081526040808320839055600a90915281205550506019805460ff60a01b1916905550600195945050505050565b6008546001600160a01b031681565b60005481565b6001600160a01b0316600090815260208052604090205460ff1690565b600c5481565b60005490565b6003546001600160a01b03163314612e135760405162461bcd60e51b8152600401610fd290615836565b601981602954602854612e269190615e32565b612e309190615e32565b1115612e4e5760405162461bcd60e51b8152600401610fd290615754565b602655565b60408051808201909152600281526114d560f21b602082015290565b60335481565b60265481565b336000818152600960209081526040808320546006546008548351630925c33d60e01b81529351959695929491936001600160a01b0390911692630925c33d92600480840193919291829003018186803b158015612ed857600080fd5b505afa158015612eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1091906152ae565b33600090815260056020526040902054612f2a9190615e6a565b612f349190615e4a565b1015612f3f57600080fd5b336000908152600960209081526040808320546006546008548351630925c33d60e01b81529351929491936001600160a01b0390911692630925c33d92600480840193919291829003018186803b158015612f9957600080fd5b505afa158015612fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd191906152ae565b33600090815260056020526040902054612feb9190615e6a565b612ff59190615e4a565b612fff9190615e89565b9050831561309a5760085460405163011081c560e11b81526001600160a01b0391821691630221038a9161303a9186169085906004016154cc565b602060405180830381600087803b15801561305457600080fd5b505af1158015613068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308c919061527a565b61309557600080fd5b613127565b60085460405163011081c560e11b81526001600160a01b0390911690630221038a906130cc90859085906004016154cc565b602060405180830381600087803b1580156130e657600080fd5b505af11580156130fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311e919061527a565b61312757600080fd5b3360009081526009602052604081208054839290613146908490615e32565b90915550600195945050505050565b6003546001600160a01b0316331461317f5760405162461bcd60e51b8152600401610fd290615836565b601981603054602f54602e546131959190615e32565b61319f9190615e32565b6131a99190615e32565b11156131c75760405162461bcd60e51b8152600401610fd290615754565b602c55565b600190565b60006131de338484613df1565b50506001600160a01b03166000908152600460205260409020805460ff1916600190811790915590565b602c5481565b603f546001600160a01b031681565b60125460ff1681565b602a5481565b6000818152600f602052604081206008018054829061325b57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600490910201600301546001600160a01b031692915050565b6003546001600160a01b031633146132a85760405162461bcd60e51b8152600401610fd290615836565b6026546019906132b88385615e32565b6132c29190615e32565b11156132e05760405162461bcd60e51b8152600401610fd290615754565b602882905560298190556132f48183615e32565b602a555050565b603d546001600160a01b031681565b61331333612511565b61332f5760405162461bcd60e51b8152600401610fd290615c0c565b6000828152600f60209081526040808320338452600b81019092529091205460ff168061336d5750336000908152600c8201602052604090205460ff165b8061337c575080600301544210155b156133995760405162461bcd60e51b8152600401610fd290615ce2565b81156133ea5733600090815260146020526040812054600983018054919290916133c4908490615e32565b9091555050336000908152600b820160205260409020805460ff19166001179055613431565b33600090815260146020526040812054600a830180549192909161340f908490615e32565b9091555050336000908152600c820160205260409020805460ff191660011790555b336000908152600b602052604090205461345c57336000908152600b6020526040902083905561349b565b336000908152600b60209081526040808320548352600f909152902060039081015490820154111561349b57336000908152600b602052604090208390555b336001600160a01b0316837f86abfce99b7dd908bec0169288797f85049ec73cbe046ed9de818fab3a497ae0846040516134d591906155c7565b60405180910390a3505050565b602f5481565b60056020526000908152604090205481565b6001600160a01b03166000908152601f602052604090205460ff1690565b6003546001600160a01b031633146135425760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b60315481565b6003546001600160a01b0316331461359d5760405162461bcd60e51b8152600401610fd290615836565b6000811180156135af57506101f48111155b6135cb5760405162461bcd60e51b8152600401610fd290615816565b612710816017546135dc9190615e6a565b6135e69190615e4a565b603b5550565b6003546001600160a01b031633146136165760405162461bcd60e51b8152600401610fd290615836565b6033546019906136268385615e32565b6136309190615e32565b111561364e5760405162461bcd60e51b8152600401610fd290615754565b603582905560368190556136628183615e32565b6037555050565b601954600090600160a01b900460ff161561368357600080fd5b6019805460ff60a01b1916600160a01b17905561369f846141b4565b6136a857600080fd5b60006136b5858585611a07565b6019805460ff60a01b1916905595945050505050565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b60365481565b60355481565b333014158061373e575030600090815260056020526040902054606490613727611c96565b6137319190615e32565b61373b9190615e4a565b81115b1561375b5760405162461bcd60e51b8152600401610fd290615a49565b600c55565b600b6020526000908152604090205481565b6003546001600160a01b031681565b6003546001600160a01b031633146137ab5760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b0381166137d15760405162461bcd60e51b8152600401610fd290615a04565b603e80546001600160a01b0319166001600160a01b0392909216919091179055565b60008111801561380557506101f48111155b6138215760405162461bcd60e51b8152600401610fd290615816565b6127108161382d61145b565b6138379190615e6a565b6138419190615e4a565b603c5550565b6003546001600160a01b031633146138715760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b03166000908152601d60205260409020805460ff19169055565b6000848152600f60209081526040808320905190916138b7918791879187910161551e565b60405160208183030381529060405280519060200120816005015414915050949350505050565b60295481565b60125461010090046001600160a01b031681565b6000426212750060105461390c9190615e89565b111561391a575060146112ef565b426205460060105461392c9190615e89565b111561396d5762015180621275006010546139479190615e89565b6139519042615e89565b61395b9190615e4a565b613966906014615e32565b90506112ef565b50601e6112ef565b6001600160a01b038316600090815260146020526040812054821180159061399d5750600082115b15613a3f576001600160a01b038416600090815260146020526040812080548492906139ca908490615e89565b90915550506001600160a01b038316600090815260146020526040812080548492906139f7908490615e32565b92505081905550826001600160a01b0316846001600160a01b0316600080516020615f7083398151915284604051613a2f9190615dab565b60405180910390a3506001611a77565b506000611a77565b6001600160a01b038316613a6d5760405162461bcd60e51b8152600401610fd2906156a1565b6001600160a01b038216613a935760405162461bcd60e51b8152600401610fd290615d03565b6001600160a01b0380841660008181526015602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906134d5908590615dab565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613b3157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152603954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613b8557600080fd5b505afa158015613b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbd91906150c2565b81600181518110613bde57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152603954613c049130911684613a47565b60395460405163791ac94760e01b81526001600160a01b039091169063791ac94790613c3d908590600190869089904290600401615db4565b600060405180830381600087803b158015613c5757600080fd5b505af1158015613c6b573d6000803e3d6000fd5b50505050505050565b6000818152600f60205260409020600481015460ff1615613cab578060060154600d6000828254613ca59190615e89565b90915550505b600401805460ff1916905550565b6001600160a01b03811660009081526004602052604081205460ff1680613d7e57506019546001600160a01b038381169116148015613d7e5750601960009054906101000a90046001600160a01b03166001600160a01b0316630925c33d6040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4157600080fd5b505afa158015613d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7991906152ae565b600654115b15613d8b5750600161118c565b50600061118c565b30600090815260056020526040812054613dab611c96565b613db59190615e32565b613dc0906003615e6a565b601754613dcd9084615e6a565b613dd79190615e4a565b600154601754613de79190615e4a565b6125729190615e32565b6001600160a01b038316613e175760405162461bcd60e51b8152600401610fd29061565c565b6001600160a01b038216613e3d5760405162461bcd60e51b8152600401610fd290615b45565b60008111613e5d5760405162461bcd60e51b8152600401610fd290615afc565b6001600160a01b0383166000908152601e602052604090205460ff16158015613e9f57506001600160a01b0382166000908152601e602052604090205460ff16155b15613ec657603b54811115613ec65760405162461bcd60e51b8152600401610fd29061597a565b6001600160a01b0383166000908152601d60205260408120546001919060ff1680613f0957506001600160a01b0384166000908152601d602052604090205460ff165b15613f1357600091505b603a546001600160a01b038681169116148015613f3e57506003546001600160a01b03858116911614155b15613f4b57506001613fb4565b603a546001600160a01b038581169116148015613f8157506001600160a01b0385166000908152601f602052604090205460ff16155b15613fb057603c54831115613fa85760405162461bcd60e51b8152600401610fd290615c43565b506002613fb4565b5060035b8115613fc457613fc48382614426565b613fd18585858585614706565b5050505050565b6001600160a01b0381166000908152600b6020526040812054613ffd5750600061118c565b6001600160a01b0382166000908152600b60209081526040808320548352600f909152902060038101544211156140505750506001600160a01b0381166000908152600b6020526040812081905561118c565b600191505061118c565b50919050565b600080600061406d614873565b909250905061407c8183615e4a565b9250505090565b6000611a89336141b4565b60008060008060008060008060006140a68b8b614a30565b92509250925060008060006140c48e86866140bf614060565b614a76565b919d509b5099509497509295509093505050509295509295509295565b6040516000906001600160a01b038316907f9046fefd66f538ab35263248a44217dcb70e2eb2cd136629e141b8b8f9f03b60908390a2600e546001600160a01b0316633df4ed5f836000806141396223988042615e32565b6000806000806040518963ffffffff1660e01b8152600401614162989796959493929190615482565b602060405180830381600087803b15801561417c57600080fd5b505af1158015614190573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257291906150c2565b601954600090600160a01b900460ff16156141ce57600080fd5b6019805460ff60a01b1916600160a01b1790556001600160a01b038083166000908152600a602090815260409182902054601754600754845163d2cc718f60e01b815294519295919491169263d2cc718f92600480840193829003018186803b15801561423a57600080fd5b505afa15801561424e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427291906152ae565b61427b85612511565b6142859190615e6a565b61428f9190615e4a565b101561429a57600080fd5b6001600160a01b038083166000908152600a6020908152604080832054601754600754835163d2cc718f60e01b8152935195969295919492169263d2cc718f926004808301939192829003018186803b1580156142f657600080fd5b505afa15801561430a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061432e91906152ae565b61433786612511565b6143419190615e6a565b61434b9190615e4a565b6143559190615e89565b60075460405163011081c560e11b81529192506001600160a01b031690630221038a9061438890869085906004016154cc565b602060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143da919061527a565b6143e357600080fd5b6001600160a01b0383166000908152600a60205260408120805483929061440b908490615e32565b90915550506019805460ff60a01b1916905550600192915050565b60008060008360011415614471576064602854866144449190615e6a565b61444e9190615e4a565b92506064602954866144609190615e6a565b61446a9190615e4a565b91506145b3565b836002141561457a576064602e548661448a9190615e6a565b6144949190615e4a565b92506064602f54866144a69190615e6a565b6144b09190615e4a565b91506064603054866144c29190615e6a565b6144cc9190615e4a565b603f546001600160a01b03166000908152601c60205260409020549091506144f5908290615e32565b603f80546001600160a01b039081166000908152601c602090815260408083209590955592549091168152601b9091529081208054839290614538908490615e32565b9091555050603f546040516001600160a01b0390911690600090600080516020615f708339815191529061456d908590615dab565b60405180910390a36145b3565b60646035548661458a9190615e6a565b6145949190615e4a565b92506064603654866145a69190615e6a565b6145b09190615e4a565b91505b603d546001600160a01b03166000908152601c60205260409020546145d9908490615e32565b603d80546001600160a01b039081166000908152601c602090815260408083209590955592549091168152601b909152908120805485929061461c908490615e32565b9091555050603e546001600160a01b03166000908152601c6020526040902054614647908390615e32565b603e80546001600160a01b039081166000908152601c602090815260408083209590955592549091168152601b909152908120805484929061468a908490615e32565b9091555050603e546040516001600160a01b0390911690600090600080516020615f70833981519152906146bf908690615dab565b60405180910390a3603d546040516001600160a01b0390911690600090600080516020615f70833981519152906146f7908790615dab565b60405180910390a35050505050565b816147145761471481614acd565b6001600160a01b038516600090815260208052604090205460ff16801561475357506001600160a01b038416600090815260208052604090205460ff16155b156147695761476485858584614b2b565b614865565b6001600160a01b038516600090815260208052604090205460ff161580156147a857506001600160a01b038416600090815260208052604090205460ff165b156147b95761476485858584614c5a565b6001600160a01b038516600090815260208052604090205460ff161580156147f957506001600160a01b038416600090815260208052604090205460ff16155b1561480a5761476485858584614d1f565b6001600160a01b038516600090815260208052604090205460ff16801561484857506001600160a01b038416600090815260208052604090205460ff165b156148595761476485858584614d7d565b61486585858584614d1f565b81613fd157613fd181614e0b565b6022546017546000918291825b6021548110156149fe5782601a6000602184815481106148b057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180614929575081601b60006021848154811061490257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15614940576022546017549450945050505061129b565b601a60006021838154811061496557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546149949084615e89565b9250601b6000602183815481106149bb57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546149ea9083615e89565b9150806149f681615f05565b915050614880565b50601754602254614a0f9190615e4a565b821015614a275760225460175493509350505061129b565b90925090509091565b600080600080614a408686614e4e565b90506000614a4e8787614e98565b9050600081614a5d848a615e89565b614a679190615e89565b95509193509150509250925092565b6000808080614a858589615e6a565b90506000614a938689615e6a565b90506000614aa18789615e6a565b9050600081614ab08486615e89565b614aba9190615e89565b939b939a50919850919650505050505050565b8060011415614af05760268054602755600090819055602a8054602b5555611458565b8060021415614b1357602c8054602d556000908190556031805460325555611458565b60338054603455600090819055603780546038555550565b600080600080600080614b3e888861408e565b955095509550955095509550816024819055508360258190555087601b60008c6001600160a01b03166001600160a01b0316815260200190815260200160002054614b899190615e89565b6001600160a01b038b166000908152601b6020908152604080832093909355601a90522054614bb9908790615e89565b6001600160a01b03808c166000908152601a602052604080822093909355908b1681522054614be9908690615e32565b6001600160a01b038a166000908152601a6020526040902055614c0b81614ecf565b614c158483614f58565b886001600160a01b03168a6001600160a01b0316600080516020615f7083398151915285604051614c469190615dab565b60405180910390a350505050505050505050565b600080600080600080614c6d888861408e565b955095509550955095509550816024819055508360258190555085601a60008c6001600160a01b03166001600160a01b0316815260200190815260200160002054614cb89190615e89565b6001600160a01b03808c166000908152601a6020908152604080832094909455918c168152601b9091522054614cef908490615e32565b6001600160a01b038a166000908152601b6020908152604080832093909355601a90522054614be9908690615e32565b600080600080600080614d32888861408e565b955095509550955095509550816024819055508360258190555085601a60008c6001600160a01b03166001600160a01b0316815260200190815260200160002054614bb99190615e89565b600080600080600080614d90888861408e565b955095509550955095509550816024819055508360258190555087601b60008c6001600160a01b03166001600160a01b0316815260200190815260200160002054614ddb9190615e89565b6001600160a01b038b166000908152601b6020908152604080832093909355601a90522054614cb8908790615e89565b8060011415614e2557602754602655602b54602a55611458565b8060021415614e3f57602d54602c55603254603155611458565b60345460335560385460375550565b6000808260011415614e635750602654614e7a565b8260021415614e755750602c54614e7a565b506033545b6064614e868286615e6a565b614e909190615e4a565b949350505050565b6000808260011415614ead5750602a54614e7a565b8260021415614ebf5750603154614e7a565b506037546064614e868286615e6a565b6000614ed9614060565b90506000614ee78284615e6a565b306000908152601a6020526040902054909150614f05908290615e32565b306000908152601a60209081526040808320939093558052205460ff1615614f5357306000908152601b6020526040902054614f42908490615e32565b306000908152601b60205260409020555b505050565b81602254614f669190615e89565b602255602354614f77908290615e32565b6023555050565b828054614f8a90615ed0565b90600052602060002090601f016020900481019282614fac5760008555614ff2565b82601f10614fc557805160ff1916838001178555614ff2565b82800160010185558215614ff2579182015b82811115614ff2578251825591602001919060010190614fd7565b50614ffe929150615002565b5090565b5b80821115614ffe5760008155600101615003565b600067ffffffffffffffff8084111561503257615032615f36565b604051601f8501601f19168101602001828111828210171561505657615056615f36565b60405284815291508183850186101561506e57600080fd5b8484602083013760006020868301015250509392505050565b600082601f830112615097578081fd5b611a7783833560208501615017565b6000602082840312156150b7578081fd5b8135611a7781615f4c565b6000602082840312156150d3578081fd5b8151611a7781615f4c565b600080604083850312156150f0578081fd5b82356150fb81615f4c565b9150602083013561510b81615f4c565b809150509250929050565b60008060006060848603121561512a578081fd5b833561513581615f4c565b9250602084013561514581615f4c565b929592945050506040919091013590565b60008060408385031215615168578182fd5b823561517381615f4c565b9150602083013561510b81615f61565b60008060408385031215615195578182fd5b82356151a081615f4c565b946020939093013593505050565b60008060008060008060c087890312156151c6578182fd5b86356151d181615f4c565b955060208701359450604087013567ffffffffffffffff808211156151f4578384fd5b818901915089601f830112615207578384fd5b6152168a833560208501615017565b9550606089013591508082111561522b578384fd5b5061523889828a01615087565b9350506080870135915060a087013561525081615f61565b809150509295509295509295565b60006020828403121561526f578081fd5b8135611a7781615f61565b60006020828403121561528b578081fd5b8151611a7781615f61565b6000602082840312156152a7578081fd5b5035919050565b6000602082840312156152bf578081fd5b5051919050565b600080604083850312156152d8578182fd5b82359150602083013561510b81615f4c565b600080600080608085870312156152ff578182fd5b84359350602085013561531181615f4c565b925060408501359150606085013567ffffffffffffffff811115615333578182fd5b61533f87828801615087565b91505092959194509250565b6000806040838503121561535d578182fd5b82359150602083013561510b81615f61565b600080600060608486031215615383578081fd5b83359250602084013561514581615f61565b600080604083850312156153a7578182fd5b82359150602083013567ffffffffffffffff8111156153c4578182fd5b6153d085828601615087565b9150509250929050565b600080604083850312156153ec578182fd5b50508035926020909101359150565b60008060006060848603121561540f578081fd5b505081359360208301359350604090920135919050565b6000815180845261543e816020860160208601615ea0565b601f01601f19169290920160200192915050565b60008251615464818460208701615ea0565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0398891681526020810197909752604087019590955260608601939093529085166080850152841660a0840152831660c083015290911660e08201526101000190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b03861682528460208301528315156040830152608060608301526155146080830184615426565b9695505050505050565b600060018060a01b0385168252836020830152606060408301526155456060830184615426565b95945050505050565b600060018060a01b03808f1683528d6020840152610180604084015261557861018084018e615426565b606084019c909c5299151560808301525096151560a088015260c087019590955260e0860193909352901515610100850152610120840152610140830152909116610160909101529392505050565b901515815260200190565b9115158252602082015260400190565b600060208252611a776020830184615426565b60208082526022908201527f4368617269747920616464726573732063616e2774207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a4661696c6564206174203160a81b604082015260600190565b60208082526025908201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252600b908201526a4661696c6564206174203560a81b604082015260600190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b602080825260159082015274115e18d959591cc813585e0811995948131a5b5a5d605a1b604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b6020808252601f908201527f546f6b656e73204e6f7420437265617465642061742053706c69742044414f00604082015260600190565b6020808252600b908201526a4661696c6564206174203360a81b604082015260600190565b6020808252600690820152656d617820352560d01b604082015260600190565b6020808252601a908201527f4f6e6c7920612063757261746f722063616e20646f2074686973000000000000604082015260600190565b6020808252601690820152751091540c8c080e88125b9d985b1a5908105b5bdd5b9d60521b604082015260600190565b60208082526024908201527f5472616e73666572206661696c65642061742065786375746520726573756c746040820152630203538360e41b606082015260800190565b6020808252601190820152705472616e73666572204e6f7420446f6e6560781b604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526017908201527f566f74696e6720446561646c696e652072656163686564000000000000000000604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b60208082526022908201527f6661696c656420746f2073656e6420617420637265617465546f6b656e50726f604082015261787960f01b606082015260800190565b60208082526025908201527f546f75726e616d656e7420616464726573732063616e2774207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526026908201527f6368616e676550726f706f73616c206465706f7369742066756e6374696f6e2060408201526519985a5b195960d21b606082015260800190565b6020808252600b908201526a2330b4b632b21030ba101b60a91b604082015260600190565b60208082526028908201527f4f6e6c79206120546f6b656e486f6c646572732063616e206372656174652070604082015267726f706f73616c7360c01b606082015260800190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526023908201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602d908201527f4245503230203a204f6e6c7920547265617375727920616e6420446576656c6f60408201526c706d656e74204164647265737360981b606082015260800190565b60208082526019908201527f4661696c656420617420496e697469616c5472616e7366657200000000000000604082015260600190565b6020808252601e908201527f4f6e6c79206120546f6b656e20486f6c646572732063616e20766f7465210000604082015260600190565b6020808252601a908201527f4245503230203a2053656c6c20416d6f756e7420457863656564000000000000604082015260600190565b6020808252600b908201526a11985a5b195908185d080d60aa1b604082015260600190565b60208082526023908201527f547265617375727920616464726573732063616e2774207a65726f206164647260408201526265737360e81b606082015260800190565b602080825260079082015266417420766f746560c81b604082015260600190565b60208082526022908201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a2330b4b632b21030ba101960a91b604082015260600190565b60208082526021908201527f4f6e6c79206120546f6b656e486f6c646572732063616e2073706c69742064616040820152606f60f81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015615e035784516001600160a01b031683529383019391830191600101615dde565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60008219821115615e4557615e45615f20565b500190565b600082615e6557634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615615e8457615e84615f20565b500290565b600082821015615e9b57615e9b615f20565b500390565b60005b83811015615ebb578181015183820152602001615ea3565b83811115615eca576000848401525b50505050565b600281046001821680615ee457607f821691505b6020821081141561405a57634e487b7160e01b600052602260045260246000fd5b6000600019821415615f1957615f19615f20565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461145857600080fd5b801515811461145857600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ca1a9a8b9c1ede316a7b16177bcebef64a002d724db1586e34c0ae1d93d3e66a64736f6c63430008000033608060405234801561001057600080fd5b5060405161053d38038061053d83398101604081905261002f91610097565b6001600160a01b03821661005e5760405162461bcd60e51b8152600401610055906100df565b60405180910390fd5b600080546001600160a01b0319166001600160a01b03939093169290921760ff60a01b1916600160a01b91151591909102179055610122565b600080604083850312156100a9578182fd5b82516001600160a01b03811681146100bf578283fd5b602084015190925080151581146100d4578182fd5b809150509250929050565b60208082526023908201527f4f776e657220416464726573732063616e2774206265207a65726f206164647260408201526265737360e81b606082015260800190565b61040c806101316000396000f3fe60806040526004361061004e5760003560e01c80630221038a1461007e5780630925c33d146100a757806318bdc79a146100c95780638da5cb5b146100de578063d2cc718f146101005761006c565b3661006c57346001600082825461006591906103b2565b9091555050005b346001600082825461006591906103b2565b61009161008c366004610287565b610115565b60405161009e91906102d4565b60405180910390f35b3480156100b357600080fd5b506100bc61025c565b60405161009e91906103a9565b3480156100d557600080fd5b50610091610262565b3480156100ea57600080fd5b506100f3610272565b60405161009e91906102c0565b34801561010c57600080fd5b506100bc610281565b600080546001600160a01b0316331415806101305750600034115b8061015d5750600054600160a01b900460ff16801561015d57506000546001600160a01b03848116911614155b156101835760405162461bcd60e51b815260040161017a906102df565b60405180910390fd5b6000836001600160a01b03168360405161019c906102bd565b60006040518083038185875af1925050503d80600081146101d9576040519150601f19603f3d011682016040523d82523d6000602084013e6101de565b606091505b50509050806101ff5760405162461bcd60e51b815260040161017a9061037a565b801561025057836001600160a01b03167f9735b0cb909f3d21d5c16bbcccd272d85fa11446f6d679f6ecb170d2dabfecfc8460405161023e91906103a9565b60405180910390a26001915050610256565b60009150505b92915050565b60015490565b600054600160a01b900460ff1681565b6000546001600160a01b031681565b60015481565b60008060408385031215610299578182fd5b82356001600160a01b03811681146102af578283fd5b946020939093013593505050565b90565b6001600160a01b0391909116815260200190565b901515815260200190565b6020808252606f908201527f4e6f7420417574686f72697365642c204e6f20424e422072657175697265642060408201527f746f2063616c6c2c20526563697069656e7420616464726573732063616e742060608201527f6265204f776e657220616464726573732c204f776e65722063616e2063616c6c60808201526e206f6e6c792063616c6c207468697360881b60a082015260c00190565b60208082526015908201527410d85b1b0811985a5b195908185d0814185e5bdd5d605a1b604082015260600190565b90815260200190565b600082198211156103d157634e487b7160e01b81526011600452602481fd5b50019056fea2646970667358221220bbf8ad78ed1302024de6d4855b1c2c8fea88d6ca183254bd851205fc18749b3964736f6c634300080000330000000000000000000000007b706b31ca65c7a11b74ef63559434d4a9704d3c0000000000000000000000007b706b31ca65c7a11b74ef63559434d4a9704d3c0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000062d6b26e0000000000000000000000007b706b31ca65c7a11b74ef63559434d4a9704d3c00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e00000000000000000000000025ff64c5dcae42886da042a120963693c2b6e351000000000000000000000000163e9f7178535b4263876e6855eb514fea04d96700000000000000000000000045e9d79b954bdfa994cfb6fd7fee0cccc77f1e6c
Deployed Bytecode
0x6080604052600436106104fb5760003560e01c80637a2d308f1161028c578063c50790b71161015a578063dd62ed3e116100cc578063e6b1303d11610085578063e6b1303d14610e34578063e99c9d0914610e54578063ea2f0b3714610e74578063eceb294514610e94578063f3a9e38514610eb4578063f8c80d2614610ec95761050c565b8063dd62ed3e14610d95578063deebedd014610db5578063e2faf93a14610dca578063e33734fd14610ddf578063e596219514610dff578063e66f53b714610e1f5761050c565b8063cef36d131161011e578063cef36d1314610ce0578063cef5e75814610d00578063d0a3981414610d20578063d543dbeb14610d35578063d56082cc14610d55578063dbde198814610d755761050c565b8063c50790b714610c56578063c5f956af14610c76578063c9d27afe14610c8b578063cdda7c0314610cab578063cdef91d014610cc05761050c565b80639b69eb5c116101fe578063ae956cb9116101b7578063ae956cb914610bcf578063afcf2fc414610be4578063b7bc2c8414610bf9578063b9e9370014610c0e578063baac530014610c23578063be7c29c114610c365761050c565b80639b69eb5c14610b3d5780639baf23c814610b52578063a1da2fb914610b67578063a2b8a94714610b87578063a3912ec814610ba7578063a9059cbb14610baf5761050c565b8063885fd07d11610250578063885fd07d14610aa957806388f8202014610abe5780638b15a60514610ade5780638d7af47314610af3578063950eb5d514610b0857806395d89b4114610b285761050c565b80637a2d308f14610a145780637ec24e5614610a3457806381f03fcb14610a5457806382661dc414610a7457806382bf646414610a945761050c565b80632f9cb9aa116103c95780635342acb41161033b578063643f7cdd116102f4578063643f7cdd1461096a5780636605bfda1461098a5780636a998d0d146109aa5780636b2fb124146109bf57806370a08231146109d4578063749f9889146109f45761050c565b80635342acb4146108d857806356ceb2c1146108f8578063590e1ae3146109185780635c068a8c1461092d578063612e45a314610942578063632a6a35146109555761050c565b8063437823ec1161038d578063437823ec146108235780634b6753bc146108435780634df6d6cc146108585780634e10c3ee14610878578063522bf5171461089857806352390c02146108b85761050c565b80632f9cb9aa146107af578063313ce567146107c457806334145808146107d95780633685d419146107ee57806339d1f9081461080e5761050c565b80630e7082031161046d5780631f36d925116104265780631f36d9251461070557806321b5b8dd14610725578063237e94921461073a57806323b872dd1461075a5780632632bf201461077a5780632d8381191461078f5761050c565b80630e7082031461069457806313114a9d146106a9578063149acf9a146106be5780631732cded146106d357806318160ddd146106db5780631a4cd1b1146106f05761050c565b8063095ea7b3116104bf578063095ea7b3146105e657806309bb0732146106135780630c3b7b96146106335780630c9be46d146106485780630d7f14411461066a5780630e5d0e451461067f5761050c565b8063013cf08b1461051157806301d1fde814610552578063024c2ddd1461057557806303d66a97146105a257806306fdde03146105c45761050c565b3661050c5761050933610ede565b50005b600080fd5b34801561051d57600080fd5b5061053161052c366004615296565b611191565b6040516105499c9b9a9998979695949392919061554e565b60405180910390f35b34801561055e57600080fd5b50610567611294565b604051610549929190615e24565b34801561058157600080fd5b506105956105903660046150de565b61129f565b6040516105499190615dab565b3480156105ae57600080fd5b506105b76112bc565b604051610549919061546e565b3480156105d057600080fd5b506105d96112cb565b60405161054991906155e2565b3480156105f257600080fd5b50610606610601366004615183565b6112f2565b60405161054991906155c7565b34801561061f57600080fd5b5061060661062e3660046150a6565b611308565b34801561063f57600080fd5b50610595611326565b34801561065457600080fd5b506106686106633660046150a6565b61132c565b005b34801561067657600080fd5b5061059561139e565b34801561068b57600080fd5b506105956113a4565b3480156106a057600080fd5b506105b76113aa565b3480156106b557600080fd5b506105956113b9565b3480156106ca57600080fd5b506105b76113bf565b6106686113ce565b3480156106e757600080fd5b5061059561145b565b3480156106fc57600080fd5b506105b7611461565b34801561071157600080fd5b50610668610720366004615296565b611470565b34801561073157600080fd5b506105b76114da565b34801561074657600080fd5b50610606610755366004615395565b6114e9565b34801561076657600080fd5b50610606610775366004615116565b611a07565b34801561078657600080fd5b50610606611a7e565b34801561079b57600080fd5b506105956107aa366004615296565b611a8e565b3480156107bb57600080fd5b50610595611ac8565b3480156107d057600080fd5b50610595611ace565b3480156107e557600080fd5b50610595611ad3565b3480156107fa57600080fd5b506106686108093660046150a6565b611ad9565b34801561081a57600080fd5b50610595611c96565b34801561082f57600080fd5b5061066861083e3660046150a6565b611ca6565b34801561084f57600080fd5b50610595611cf4565b34801561086457600080fd5b506106066108733660046150a6565b611cfa565b34801561088457600080fd5b50610606610893366004615183565b611d0f565b3480156108a457600080fd5b506106686108b3366004615156565b611d2c565b3480156108c457600080fd5b506106686108d33660046150a6565b611d81565b3480156108e457600080fd5b506106066108f33660046150a6565b611ea2565b34801561090457600080fd5b506106686109133660046153fb565b611ec0565b34801561092457600080fd5b50610668611f59565b34801561093957600080fd5b506105956121fc565b6105956109503660046151ae565b612202565b34801561096157600080fd5b506105b7612469565b34801561097657600080fd5b506105956109853660046150a6565b612478565b34801561099657600080fd5b506106686109a53660046150a6565b61248a565b3480156109b657600080fd5b506105b76124fc565b3480156109cb57600080fd5b5061059561250b565b3480156109e057600080fd5b506105956109ef3660046150a6565b612511565b348015610a0057600080fd5b50610606610a0f366004615156565b612578565b348015610a2057600080fd5b50610595610a2f3660046150a6565b6125f7565b348015610a4057600080fd5b50610595610a4f36600461536f565b612612565b348015610a6057600080fd5b50610595610a6f3660046150a6565b612671565b348015610a8057600080fd5b50610606610a8f3660046152c6565b612683565b348015610aa057600080fd5b506105b7612dab565b348015610ab557600080fd5b50610595612dba565b348015610aca57600080fd5b50610606610ad93660046150a6565b612dc0565b348015610aea57600080fd5b50610595612ddd565b348015610aff57600080fd5b50610595612de3565b348015610b1457600080fd5b50610668610b23366004615296565b612de9565b348015610b3457600080fd5b506105d9612e53565b348015610b4957600080fd5b50610595612e6f565b348015610b5e57600080fd5b50610595612e75565b348015610b7357600080fd5b50610606610b8236600461525e565b612e7b565b348015610b9357600080fd5b50610668610ba2366004615296565b613155565b6106066131cc565b348015610bbb57600080fd5b50610606610bca366004615183565b6131d1565b348015610bdb57600080fd5b50610595613208565b348015610bf057600080fd5b506105b761320e565b348015610c0557600080fd5b5061060661321d565b348015610c1a57600080fd5b50610595613226565b610606610c313660046150a6565b610ede565b348015610c4257600080fd5b506105b7610c51366004615296565b61322c565b348015610c6257600080fd5b50610668610c713660046153da565b61327e565b348015610c8257600080fd5b506105b76132fb565b348015610c9757600080fd5b50610668610ca636600461534b565b61330a565b348015610cb757600080fd5b506105956134e2565b348015610ccc57600080fd5b50610595610cdb3660046150a6565b6134e8565b348015610cec57600080fd5b50610606610cfb3660046150a6565b6134fa565b348015610d0c57600080fd5b50610668610d1b366004615156565b613518565b348015610d2c57600080fd5b5061059561356d565b348015610d4157600080fd5b50610668610d50366004615296565b613573565b348015610d6157600080fd5b50610668610d703660046153da565b6135ec565b348015610d8157600080fd5b50610606610d90366004615116565b613669565b348015610da157600080fd5b50610595610db03660046150de565b6136cb565b348015610dc157600080fd5b506105956136f6565b348015610dd657600080fd5b506105956136fc565b348015610deb57600080fd5b50610668610dfa366004615296565b613702565b348015610e0b57600080fd5b50610595610e1a3660046150a6565b613760565b348015610e2b57600080fd5b506105b7613772565b348015610e4057600080fd5b50610668610e4f3660046150a6565b613781565b348015610e6057600080fd5b50610668610e6f366004615296565b6137f3565b348015610e8057600080fd5b50610668610e8f3660046150a6565b613847565b348015610ea057600080fd5b50610606610eaf3660046152ea565b613892565b348015610ec057600080fd5b506105956138de565b348015610ed557600080fd5b506105b76138e4565b60008060105442108015610ef25750600034115b8015610f25575060125461010090046001600160a01b03161580610f25575060125461010090046001600160a01b031633145b1561050c57610f326138f8565b610f3d346014615e6a565b610f479190615e4a565b6019549091506000906001600160a01b0316610f638334615e89565b604051610f6f906112ef565b60006040518083038185875af1925050503d8060008114610fac576040519150601f19603f3d011682016040523d82523d6000602084013e610fb1565b606091505b5050905080610fdb5760405162461bcd60e51b8152600401610fd2906159c2565b60405180910390fd5b6018546001600160a01b031660009081526014602052604081208054849290611005908490615e32565b9091555050601854611021906001600160a01b03168584613975565b61103d5760405162461bcd60e51b8152600401610fd290615bd5565b6001600160a01b03841660009081526014602052604081208054849290611065908490615e32565b90915550506018546001600160a01b031660009081526014602052604081208054849290611094908490615e89565b9250508190555081601760008282546110ad9190615e32565b90915550506001600160a01b038416600090815260136020526040812080543492906110da908490615e32565b92505081905550836001600160a01b03167fdbccb92686efceafb9bb7e0394df7f58f71b954061b81afb57109bf247d3d75a8360405161111a9190615dab565b60405180910390a260115460175410158015611139575060125460ff16155b15611185576012805460ff191660011790556017546040517ff381a3e2428fdda36615919e8d9c35878d9eb0cf85ac6edf575088e80e4c147e9161117c91615dab565b60405180910390a15b6001925050505b919050565b600f602052600090815260409020805460018201546002830180546001600160a01b039093169391926111c390615ed0565b80601f01602080910402602001604051908101604052809291908181526020018280546111ef90615ed0565b801561123c5780601f106112115761010080835404028352916020019161123c565b820191906000526020600020905b81548152906001019060200180831161121f57829003601f168201915b50505050600383015460048401546005850154600686015460078701546009880154600a890154600d909901549798959760ff808716985061010090960486169694959394939092169290916001600160a01b03168c565b6024546025545b9091565b601560209081526000928352604080842090915290825290205481565b603e546001600160a01b031681565b60408051808201909152600c81526b536163726564205461696c7360a01b60208201525b90565b60006112ff338484613a47565b50600192915050565b6001600160a01b03166000908152601e602052604090205460ff1690565b60115481565b6003546001600160a01b031633146113565760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b03811661137c5760405162461bcd60e51b8152600401610fd2906155f5565b603f80546001600160a01b0319166001600160a01b0392909216919091179055565b60305481565b60375481565b6007546001600160a01b031681565b60235490565b600e546001600160a01b031681565b603d546001600160a01b03163314806113f15750603e546001600160a01b031633145b61140d5760405162461bcd60e51b8152600401610fd290615b88565b336000908152601c60205260409020546114395760405162461bcd60e51b8152600401610fd29061586d565b336000818152601c602052604081208054919055906114589082613aee565b50565b60175490565b6039546001600160a01b031681565b6003546001600160a01b0316331461149a5760405162461bcd60e51b8152600401610fd290615836565b6019816036546035546114ad9190615e32565b6114b79190615e32565b11156114d55760405162461bcd60e51b8152600401610fd290615754565b603355565b6019546001600160a01b031681565b6000828152600f60205260408120600d81015460078201546001600160a01b0390911690839060ff1661151f57620d2f00611524565b622398805b600484015490915060ff16801561154957508083600301546115469190615e32565b42115b156115575761050c86613c74565b826003015442108061156e5750600483015460ff16155b806115b5575082546001840154604051611597926001600160a01b03169190889060200161551e565b60405160208183030381529060405280519060200120836005015414155b156115bf57600080fd5b82546115d3906001600160a01b0316613cb9565b61161f576115e086613c74565b60068301546040516001600160a01b0384169180156108fc02916000818181858888f19350505050158015611619573d6000803e3d6000fd5b50600080fd5b6001611629611c96565b84600101541115611638575060005b600084600a0154856009015461164e9190615e32565b9050600487511015801561169557508660008151811061167e57634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916600d60fb1b145b80156116d45750866001815181106116bd57634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916603760f81b145b801561170f5750866002815181106116fc57634e487b7160e01b600052603260045260246000fd5b01602001516001600160f81b0319908116145b801561174e57508660038151811061173757634e487b7160e01b600052603260045260246000fd5b6020910101516001600160f81b031916600f60f91b145b801561178357503060009081526005602052604090205461178090611771611c96565b61177b9190615e32565b613d93565b81105b1561178d57600091505b61179a8560010154613d93565b811061180b5760068501546040516001600160a01b0386169180156108fc02916000818181858888f19350505050151560011515146117eb5760405162461bcd60e51b8152600401610fd2906158e1565b426002556017546117fe90600590615e4a565b81111561180b5760056001555b6118188560010154613d93565b811015801561182e575084600a01548560090154115b80156118375750815b156119b9578454600186015460405160009283926001600160a01b0390911691611862908c90615452565b60006040518083038185875af1925050503d806000811461189f576040519150601f19603f3d011682016040523d82523d6000602084013e6118a4565b606091505b50909250905060018215151480156118bc5750805115155b6118d85760405162461bcd60e51b8152600401610fd29061589d565b60048701805461ff0019166101001790558654600198506001600160a01b03163014801590611917575060075487546001600160a01b03908116911614155b8015611933575060085487546001600160a01b03908116911614155b801561194f575060195487546001600160a01b03908116911614155b801561196b575060035487546001600160a01b03908116911614155b156119b65760018701543060009081526005602052604081208054909190611994908490615e32565b90915550506001870154600680546000906119b0908490615e32565b90915550505b50505b6119c288613c74565b877fdfc78bdca8e3e0b18c16c5c99323c6cb9eb5e00afde190b4e7273f5158702b0787836040516119f49291906155d2565b60405180910390a2505050505092915050565b6000611a14848484613df1565b6001600160a01b038416600090815260156020908152604080832033808552925290912054611a4f918691611a4a908690615e89565b613a47565b506001600160a01b0382166000908152600460205260409020805460ff191660019081179091555b9392505050565b6000611a8933613fd8565b905090565b6000602254821115611ab25760405162461bcd60e51b8152600401610fd29061570a565b6000611abc614060565b9050611a778184615e4a565b60105490565b601290565b60065481565b6003546001600160a01b03163314611b035760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b038116600090815260208052604090205460ff16611b3a5760405162461bcd60e51b8152600401610fd290615783565b60005b602154811015611c9257816001600160a01b031660218281548110611b7257634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415611c805760218054611b9d90600190615e89565b81548110611bbb57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154602180546001600160a01b039092169183908110611bf557634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601b8252604080822082905591805220805460ff191690556021805480611c5957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055611c92565b80611c8a81615f05565b915050611b3d565b5050565b6000600d5447611a899190615e89565b6003546001600160a01b03163314611cd05760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b03166000908152601d60205260409020805460ff19166001179055565b60105481565b60046020526000908152604090205460ff1681565b6000611d19614083565b611d2257600080fd5b611a7783836131d1565b6003546001600160a01b03163314611d565760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6003546001600160a01b03163314611dab5760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b038116600090815260208052604090205460ff1615611de35760405162461bcd60e51b8152600401610fd290615783565b6001600160a01b0381166000908152601a602052604090205415611e3d576001600160a01b0381166000908152601a6020526040902054611e2390611a8e565b6001600160a01b0382166000908152601b60205260409020555b6001600160a01b031660008181526020805260408120805460ff191660019081179091556021805491820181559091527f3a6357012c1a3ae0a17d304c9920310382d968ebcc4b1771f41c6b304205b5700180546001600160a01b0319169091179055565b6001600160a01b03166000908152601d602052604090205460ff1690565b6003546001600160a01b03163314611eea5760405162461bcd60e51b8152600401610fd290615836565b602c5460199082611efb8587615e32565b611f059190615e32565b611f0f9190615e32565b1115611f2d5760405162461bcd60e51b8152600401610fd290615754565b602e839055602f829055603081905580611f478385615e32565b611f519190615e32565b603155505050565b60105442118015611f6d575060125460ff16155b156121fa57601960009054906101000a90046001600160a01b03166001600160a01b0316630925c33d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611fc057600080fd5b505afa158015611fd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff891906152ae565b6019546001600160a01b031631106121015760195460408051630925c33d60e01b815290516001600160a01b0390921691630221038a9130918491630925c33d916004808301926020929190829003018186803b15801561205857600080fd5b505afa15801561206c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209091906152ae565b6040518363ffffffff1660e01b81526004016120ad9291906154cc565b602060405180830381600087803b1580156120c757600080fd5b505af11580156120db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ff919061527a565b505b33600081815260136020526040808220549051919291612120906112ef565b60006040518083038185875af1925050503d806000811461215d576040519150601f19603f3d011682016040523d82523d6000602084013e612162565b606091505b5050905080156114585733600081815260136020526040908190205490517fbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d916121ab91615dab565b60405180910390a23360009081526014602052604081205460168054919290916121d6908490615e89565b90915550503360009081526014602090815260408083208390556013909152812055505b565b60285481565b600061220d33612511565b6122295760405162461bcd60e51b8152600401610fd290615ab4565b818015612238575062093a8083105b156122555760405162461bcd60e51b8152600401610fd290615637565b61225e87613cb9565b158061226c57506212750083105b156122895760405162461bcd60e51b8152600401610fd290615d45565b6249d4008311156122ac5760405162461bcd60e51b8152600401610fd2906157f1565b600c5434146122cd5760405162461bcd60e51b8152600401610fd290615c7a565b426122d88482615e32565b10156122f65760405162461bcd60e51b8152600401610fd2906156e5565b333014156123165760405162461bcd60e51b8152600401610fd290615a8f565b60008054612325906001615e32565b6000818152600f6020908152604090912080546001600160a01b0319166001600160a01b038c16178155600181018a905588519293509161236e916002840191908a0190614f7e565b508888876040516020016123849392919061551e565b60408051601f19818403018152919052805160209091012060058201556123ab8542615e32565b6003820155600481018054600160ff199182168117909255600783018054909116861515179055600d82018054336001600160a01b03199091161790553460068301556000805481906123ff908490615e32565b9250508190555034600d60008282546124189190615e32565b92505081905550817f5790de2c279e58269b93b12828f56fd5f2bc8ad15e61ce08572585c81a38756f8a8a878b60405161245594939291906154e5565b60405180910390a250979650505050505050565b603a546001600160a01b031681565b60096020526000908152604090205481565b6003546001600160a01b031633146124b45760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b0381166124da5760405162461bcd60e51b8152600401610fd290615c9f565b603d80546001600160a01b0319166001600160a01b0392909216919091179055565b6018546001600160a01b031681565b602e5481565b6001600160a01b038116600090815260208052604081205460ff161561255057506001600160a01b0381166000908152601b602052604090205461118c565b6001600160a01b0382166000908152601a602052604090205461257290611a8e565b92915050565b6003546000906001600160a01b0316331461259257600080fd5b6001600160a01b03831660008181526004602052604090819020805460ff1916851515179055517f73ad2a153c8b67991df9459024950b318a609782cee8c7eeda47b905f9baa91f906125e69085906155c7565b60405180910390a250600192915050565b6001600160a01b03166000908152601c602052604090205490565b60006017548411156126365760405162461bcd60e51b8152600401610fd29061590c565b82612656576000612647858461408e565b50939550611a77945050505050565b6000612662858461408e565b50929550611a77945050505050565b600a6020526000908152604090205481565b600061268e33612511565b6126aa5760405162461bcd60e51b8152600401610fd290615d6a565b601954600160a01b900460ff16156126c157600080fd5b6019805460ff60a01b1916600160a01b1790556000838152600f60205260409020600381015442108061270557506223988081600301546127029190615e32565b42115b8061271d575080546001600160a01b03848116911614155b8061272d5750600781015460ff16155b8061274a5750336000908152600b8201602052604090205460ff16155b8061277d5750336000908152600b6020526040902054841480159061277d5750336000908152600b602052604090205415155b1561279a5760405162461bcd60e51b8152600401610fd290615943565b60006001600160a01b0316816008016000815481106127c957634e487b7160e01b600052603260045260246000fd5b60009182526020909120600360049092020101546001600160a01b0316141561297c576127f5836140e1565b8160080160008154811061281957634e487b7160e01b600052603260045260246000fd5b6000918252602082206004919091020160030180546001600160a01b0319166001600160a01b039390931692909217909155600882018054829061286d57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600360049092020101546001600160a01b0316141561289557600080fd5b600d544710156128a457600080fd5b6128ac611c96565b816008016000815481106128d057634e487b7160e01b600052603260045260246000fd5b60009182526020808320600490920290910192909255308152600590915260408120546008830180549192909161291757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060040201600201819055506017548160080160008154811061295357634e487b7160e01b600052603260045260246000fd5b600091825260209091206001600492830290910101919091558101805461ff0019166101001790555b6000816008016000815481106129a257634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160010154826008016000815481106129d857634e487b7160e01b600052603260045260246000fd5b600091825260208083206004909202909101543383526014909152604090912054612a039190615e6a565b612a0d9190615e4a565b9050600082600801600081548110612a3557634e487b7160e01b600052603260045260246000fd5b600091825260209091206004918202016003015460405162baac5360e81b81526001600160a01b039091169163baac5300918591612a759133910161546e565b6020604051808303818588803b158015612a8e57600080fd5b505af1158015612aa2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ac7919061527a565b905080612ae65760405162461bcd60e51b8152600401610fd2906157ba565b600083600801600081548110612b0c57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600402016001015484600801600081548110612b4257634e487b7160e01b600052603260045260246000fd5b60009182526020808320600260049093020191909101543383526014909152604090912054612b719190615e6a565b612b7b9190615e4a565b3060009081526005602090815260408083205460099092528220549293509091612ba6908490615e6a565b612bb09190615e4a565b9050816005600087600801600081548110612bdb57634e487b7160e01b600052603260045260246000fd5b60009182526020808320600360049093020191909101546001600160a01b0316835282019290925260400181208054909190612c18908490615e32565b909155505030600090815260056020526040902054821115612c3957600080fd5b3060009081526005602052604081208054849290612c58908490615e89565b92505081905550806009600087600801600081548110612c8857634e487b7160e01b600052603260045260246000fd5b60009182526020808320600360049093020191909101546001600160a01b0316835282019290925260400181208054909190612cc5908490615e32565b909155505030600090815260096020526040902054811115612ce657600080fd5b3060009081526009602052604081208054839290612d05908490615e89565b909155505033600081815260146020526040808220549051919291600080516020615f7083398151915291612d3991615dab565b60405180910390a3612d4a336141b4565b50336000908152601460205260408120546017805491929091612d6e908490615e89565b9091555050336000908152601460209081526040808320839055600a90915281205550506019805460ff60a01b1916905550600195945050505050565b6008546001600160a01b031681565b60005481565b6001600160a01b0316600090815260208052604090205460ff1690565b600c5481565b60005490565b6003546001600160a01b03163314612e135760405162461bcd60e51b8152600401610fd290615836565b601981602954602854612e269190615e32565b612e309190615e32565b1115612e4e5760405162461bcd60e51b8152600401610fd290615754565b602655565b60408051808201909152600281526114d560f21b602082015290565b60335481565b60265481565b336000818152600960209081526040808320546006546008548351630925c33d60e01b81529351959695929491936001600160a01b0390911692630925c33d92600480840193919291829003018186803b158015612ed857600080fd5b505afa158015612eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1091906152ae565b33600090815260056020526040902054612f2a9190615e6a565b612f349190615e4a565b1015612f3f57600080fd5b336000908152600960209081526040808320546006546008548351630925c33d60e01b81529351929491936001600160a01b0390911692630925c33d92600480840193919291829003018186803b158015612f9957600080fd5b505afa158015612fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd191906152ae565b33600090815260056020526040902054612feb9190615e6a565b612ff59190615e4a565b612fff9190615e89565b9050831561309a5760085460405163011081c560e11b81526001600160a01b0391821691630221038a9161303a9186169085906004016154cc565b602060405180830381600087803b15801561305457600080fd5b505af1158015613068573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061308c919061527a565b61309557600080fd5b613127565b60085460405163011081c560e11b81526001600160a01b0390911690630221038a906130cc90859085906004016154cc565b602060405180830381600087803b1580156130e657600080fd5b505af11580156130fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311e919061527a565b61312757600080fd5b3360009081526009602052604081208054839290613146908490615e32565b90915550600195945050505050565b6003546001600160a01b0316331461317f5760405162461bcd60e51b8152600401610fd290615836565b601981603054602f54602e546131959190615e32565b61319f9190615e32565b6131a99190615e32565b11156131c75760405162461bcd60e51b8152600401610fd290615754565b602c55565b600190565b60006131de338484613df1565b50506001600160a01b03166000908152600460205260409020805460ff1916600190811790915590565b602c5481565b603f546001600160a01b031681565b60125460ff1681565b602a5481565b6000818152600f602052604081206008018054829061325b57634e487b7160e01b600052603260045260246000fd5b60009182526020909120600490910201600301546001600160a01b031692915050565b6003546001600160a01b031633146132a85760405162461bcd60e51b8152600401610fd290615836565b6026546019906132b88385615e32565b6132c29190615e32565b11156132e05760405162461bcd60e51b8152600401610fd290615754565b602882905560298190556132f48183615e32565b602a555050565b603d546001600160a01b031681565b61331333612511565b61332f5760405162461bcd60e51b8152600401610fd290615c0c565b6000828152600f60209081526040808320338452600b81019092529091205460ff168061336d5750336000908152600c8201602052604090205460ff165b8061337c575080600301544210155b156133995760405162461bcd60e51b8152600401610fd290615ce2565b81156133ea5733600090815260146020526040812054600983018054919290916133c4908490615e32565b9091555050336000908152600b820160205260409020805460ff19166001179055613431565b33600090815260146020526040812054600a830180549192909161340f908490615e32565b9091555050336000908152600c820160205260409020805460ff191660011790555b336000908152600b602052604090205461345c57336000908152600b6020526040902083905561349b565b336000908152600b60209081526040808320548352600f909152902060039081015490820154111561349b57336000908152600b602052604090208390555b336001600160a01b0316837f86abfce99b7dd908bec0169288797f85049ec73cbe046ed9de818fab3a497ae0846040516134d591906155c7565b60405180910390a3505050565b602f5481565b60056020526000908152604090205481565b6001600160a01b03166000908152601f602052604090205460ff1690565b6003546001600160a01b031633146135425760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b03919091166000908152601e60205260409020805460ff1916911515919091179055565b60315481565b6003546001600160a01b0316331461359d5760405162461bcd60e51b8152600401610fd290615836565b6000811180156135af57506101f48111155b6135cb5760405162461bcd60e51b8152600401610fd290615816565b612710816017546135dc9190615e6a565b6135e69190615e4a565b603b5550565b6003546001600160a01b031633146136165760405162461bcd60e51b8152600401610fd290615836565b6033546019906136268385615e32565b6136309190615e32565b111561364e5760405162461bcd60e51b8152600401610fd290615754565b603582905560368190556136628183615e32565b6037555050565b601954600090600160a01b900460ff161561368357600080fd5b6019805460ff60a01b1916600160a01b17905561369f846141b4565b6136a857600080fd5b60006136b5858585611a07565b6019805460ff60a01b1916905595945050505050565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b60365481565b60355481565b333014158061373e575030600090815260056020526040902054606490613727611c96565b6137319190615e32565b61373b9190615e4a565b81115b1561375b5760405162461bcd60e51b8152600401610fd290615a49565b600c55565b600b6020526000908152604090205481565b6003546001600160a01b031681565b6003546001600160a01b031633146137ab5760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b0381166137d15760405162461bcd60e51b8152600401610fd290615a04565b603e80546001600160a01b0319166001600160a01b0392909216919091179055565b60008111801561380557506101f48111155b6138215760405162461bcd60e51b8152600401610fd290615816565b6127108161382d61145b565b6138379190615e6a565b6138419190615e4a565b603c5550565b6003546001600160a01b031633146138715760405162461bcd60e51b8152600401610fd290615836565b6001600160a01b03166000908152601d60205260409020805460ff19169055565b6000848152600f60209081526040808320905190916138b7918791879187910161551e565b60405160208183030381529060405280519060200120816005015414915050949350505050565b60295481565b60125461010090046001600160a01b031681565b6000426212750060105461390c9190615e89565b111561391a575060146112ef565b426205460060105461392c9190615e89565b111561396d5762015180621275006010546139479190615e89565b6139519042615e89565b61395b9190615e4a565b613966906014615e32565b90506112ef565b50601e6112ef565b6001600160a01b038316600090815260146020526040812054821180159061399d5750600082115b15613a3f576001600160a01b038416600090815260146020526040812080548492906139ca908490615e89565b90915550506001600160a01b038316600090815260146020526040812080548492906139f7908490615e32565b92505081905550826001600160a01b0316846001600160a01b0316600080516020615f7083398151915284604051613a2f9190615dab565b60405180910390a3506001611a77565b506000611a77565b6001600160a01b038316613a6d5760405162461bcd60e51b8152600401610fd2906156a1565b6001600160a01b038216613a935760405162461bcd60e51b8152600401610fd290615d03565b6001600160a01b0380841660008181526015602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906134d5908590615dab565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613b3157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152603954604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015613b8557600080fd5b505afa158015613b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bbd91906150c2565b81600181518110613bde57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152603954613c049130911684613a47565b60395460405163791ac94760e01b81526001600160a01b039091169063791ac94790613c3d908590600190869089904290600401615db4565b600060405180830381600087803b158015613c5757600080fd5b505af1158015613c6b573d6000803e3d6000fd5b50505050505050565b6000818152600f60205260409020600481015460ff1615613cab578060060154600d6000828254613ca59190615e89565b90915550505b600401805460ff1916905550565b6001600160a01b03811660009081526004602052604081205460ff1680613d7e57506019546001600160a01b038381169116148015613d7e5750601960009054906101000a90046001600160a01b03166001600160a01b0316630925c33d6040518163ffffffff1660e01b815260040160206040518083038186803b158015613d4157600080fd5b505afa158015613d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7991906152ae565b600654115b15613d8b5750600161118c565b50600061118c565b30600090815260056020526040812054613dab611c96565b613db59190615e32565b613dc0906003615e6a565b601754613dcd9084615e6a565b613dd79190615e4a565b600154601754613de79190615e4a565b6125729190615e32565b6001600160a01b038316613e175760405162461bcd60e51b8152600401610fd29061565c565b6001600160a01b038216613e3d5760405162461bcd60e51b8152600401610fd290615b45565b60008111613e5d5760405162461bcd60e51b8152600401610fd290615afc565b6001600160a01b0383166000908152601e602052604090205460ff16158015613e9f57506001600160a01b0382166000908152601e602052604090205460ff16155b15613ec657603b54811115613ec65760405162461bcd60e51b8152600401610fd29061597a565b6001600160a01b0383166000908152601d60205260408120546001919060ff1680613f0957506001600160a01b0384166000908152601d602052604090205460ff165b15613f1357600091505b603a546001600160a01b038681169116148015613f3e57506003546001600160a01b03858116911614155b15613f4b57506001613fb4565b603a546001600160a01b038581169116148015613f8157506001600160a01b0385166000908152601f602052604090205460ff16155b15613fb057603c54831115613fa85760405162461bcd60e51b8152600401610fd290615c43565b506002613fb4565b5060035b8115613fc457613fc48382614426565b613fd18585858585614706565b5050505050565b6001600160a01b0381166000908152600b6020526040812054613ffd5750600061118c565b6001600160a01b0382166000908152600b60209081526040808320548352600f909152902060038101544211156140505750506001600160a01b0381166000908152600b6020526040812081905561118c565b600191505061118c565b50919050565b600080600061406d614873565b909250905061407c8183615e4a565b9250505090565b6000611a89336141b4565b60008060008060008060008060006140a68b8b614a30565b92509250925060008060006140c48e86866140bf614060565b614a76565b919d509b5099509497509295509093505050509295509295509295565b6040516000906001600160a01b038316907f9046fefd66f538ab35263248a44217dcb70e2eb2cd136629e141b8b8f9f03b60908390a2600e546001600160a01b0316633df4ed5f836000806141396223988042615e32565b6000806000806040518963ffffffff1660e01b8152600401614162989796959493929190615482565b602060405180830381600087803b15801561417c57600080fd5b505af1158015614190573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257291906150c2565b601954600090600160a01b900460ff16156141ce57600080fd5b6019805460ff60a01b1916600160a01b1790556001600160a01b038083166000908152600a602090815260409182902054601754600754845163d2cc718f60e01b815294519295919491169263d2cc718f92600480840193829003018186803b15801561423a57600080fd5b505afa15801561424e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061427291906152ae565b61427b85612511565b6142859190615e6a565b61428f9190615e4a565b101561429a57600080fd5b6001600160a01b038083166000908152600a6020908152604080832054601754600754835163d2cc718f60e01b8152935195969295919492169263d2cc718f926004808301939192829003018186803b1580156142f657600080fd5b505afa15801561430a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061432e91906152ae565b61433786612511565b6143419190615e6a565b61434b9190615e4a565b6143559190615e89565b60075460405163011081c560e11b81529192506001600160a01b031690630221038a9061438890869085906004016154cc565b602060405180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143da919061527a565b6143e357600080fd5b6001600160a01b0383166000908152600a60205260408120805483929061440b908490615e32565b90915550506019805460ff60a01b1916905550600192915050565b60008060008360011415614471576064602854866144449190615e6a565b61444e9190615e4a565b92506064602954866144609190615e6a565b61446a9190615e4a565b91506145b3565b836002141561457a576064602e548661448a9190615e6a565b6144949190615e4a565b92506064602f54866144a69190615e6a565b6144b09190615e4a565b91506064603054866144c29190615e6a565b6144cc9190615e4a565b603f546001600160a01b03166000908152601c60205260409020549091506144f5908290615e32565b603f80546001600160a01b039081166000908152601c602090815260408083209590955592549091168152601b9091529081208054839290614538908490615e32565b9091555050603f546040516001600160a01b0390911690600090600080516020615f708339815191529061456d908590615dab565b60405180910390a36145b3565b60646035548661458a9190615e6a565b6145949190615e4a565b92506064603654866145a69190615e6a565b6145b09190615e4a565b91505b603d546001600160a01b03166000908152601c60205260409020546145d9908490615e32565b603d80546001600160a01b039081166000908152601c602090815260408083209590955592549091168152601b909152908120805485929061461c908490615e32565b9091555050603e546001600160a01b03166000908152601c6020526040902054614647908390615e32565b603e80546001600160a01b039081166000908152601c602090815260408083209590955592549091168152601b909152908120805484929061468a908490615e32565b9091555050603e546040516001600160a01b0390911690600090600080516020615f70833981519152906146bf908690615dab565b60405180910390a3603d546040516001600160a01b0390911690600090600080516020615f70833981519152906146f7908790615dab565b60405180910390a35050505050565b816147145761471481614acd565b6001600160a01b038516600090815260208052604090205460ff16801561475357506001600160a01b038416600090815260208052604090205460ff16155b156147695761476485858584614b2b565b614865565b6001600160a01b038516600090815260208052604090205460ff161580156147a857506001600160a01b038416600090815260208052604090205460ff165b156147b95761476485858584614c5a565b6001600160a01b038516600090815260208052604090205460ff161580156147f957506001600160a01b038416600090815260208052604090205460ff16155b1561480a5761476485858584614d1f565b6001600160a01b038516600090815260208052604090205460ff16801561484857506001600160a01b038416600090815260208052604090205460ff165b156148595761476485858584614d7d565b61486585858584614d1f565b81613fd157613fd181614e0b565b6022546017546000918291825b6021548110156149fe5782601a6000602184815481106148b057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180614929575081601b60006021848154811061490257634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15614940576022546017549450945050505061129b565b601a60006021838154811061496557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546149949084615e89565b9250601b6000602183815481106149bb57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546149ea9083615e89565b9150806149f681615f05565b915050614880565b50601754602254614a0f9190615e4a565b821015614a275760225460175493509350505061129b565b90925090509091565b600080600080614a408686614e4e565b90506000614a4e8787614e98565b9050600081614a5d848a615e89565b614a679190615e89565b95509193509150509250925092565b6000808080614a858589615e6a565b90506000614a938689615e6a565b90506000614aa18789615e6a565b9050600081614ab08486615e89565b614aba9190615e89565b939b939a50919850919650505050505050565b8060011415614af05760268054602755600090819055602a8054602b5555611458565b8060021415614b1357602c8054602d556000908190556031805460325555611458565b60338054603455600090819055603780546038555550565b600080600080600080614b3e888861408e565b955095509550955095509550816024819055508360258190555087601b60008c6001600160a01b03166001600160a01b0316815260200190815260200160002054614b899190615e89565b6001600160a01b038b166000908152601b6020908152604080832093909355601a90522054614bb9908790615e89565b6001600160a01b03808c166000908152601a602052604080822093909355908b1681522054614be9908690615e32565b6001600160a01b038a166000908152601a6020526040902055614c0b81614ecf565b614c158483614f58565b886001600160a01b03168a6001600160a01b0316600080516020615f7083398151915285604051614c469190615dab565b60405180910390a350505050505050505050565b600080600080600080614c6d888861408e565b955095509550955095509550816024819055508360258190555085601a60008c6001600160a01b03166001600160a01b0316815260200190815260200160002054614cb89190615e89565b6001600160a01b03808c166000908152601a6020908152604080832094909455918c168152601b9091522054614cef908490615e32565b6001600160a01b038a166000908152601b6020908152604080832093909355601a90522054614be9908690615e32565b600080600080600080614d32888861408e565b955095509550955095509550816024819055508360258190555085601a60008c6001600160a01b03166001600160a01b0316815260200190815260200160002054614bb99190615e89565b600080600080600080614d90888861408e565b955095509550955095509550816024819055508360258190555087601b60008c6001600160a01b03166001600160a01b0316815260200190815260200160002054614ddb9190615e89565b6001600160a01b038b166000908152601b6020908152604080832093909355601a90522054614cb8908790615e89565b8060011415614e2557602754602655602b54602a55611458565b8060021415614e3f57602d54602c55603254603155611458565b60345460335560385460375550565b6000808260011415614e635750602654614e7a565b8260021415614e755750602c54614e7a565b506033545b6064614e868286615e6a565b614e909190615e4a565b949350505050565b6000808260011415614ead5750602a54614e7a565b8260021415614ebf5750603154614e7a565b506037546064614e868286615e6a565b6000614ed9614060565b90506000614ee78284615e6a565b306000908152601a6020526040902054909150614f05908290615e32565b306000908152601a60209081526040808320939093558052205460ff1615614f5357306000908152601b6020526040902054614f42908490615e32565b306000908152601b60205260409020555b505050565b81602254614f669190615e89565b602255602354614f77908290615e32565b6023555050565b828054614f8a90615ed0565b90600052602060002090601f016020900481019282614fac5760008555614ff2565b82601f10614fc557805160ff1916838001178555614ff2565b82800160010185558215614ff2579182015b82811115614ff2578251825591602001919060010190614fd7565b50614ffe929150615002565b5090565b5b80821115614ffe5760008155600101615003565b600067ffffffffffffffff8084111561503257615032615f36565b604051601f8501601f19168101602001828111828210171561505657615056615f36565b60405284815291508183850186101561506e57600080fd5b8484602083013760006020868301015250509392505050565b600082601f830112615097578081fd5b611a7783833560208501615017565b6000602082840312156150b7578081fd5b8135611a7781615f4c565b6000602082840312156150d3578081fd5b8151611a7781615f4c565b600080604083850312156150f0578081fd5b82356150fb81615f4c565b9150602083013561510b81615f4c565b809150509250929050565b60008060006060848603121561512a578081fd5b833561513581615f4c565b9250602084013561514581615f4c565b929592945050506040919091013590565b60008060408385031215615168578182fd5b823561517381615f4c565b9150602083013561510b81615f61565b60008060408385031215615195578182fd5b82356151a081615f4c565b946020939093013593505050565b60008060008060008060c087890312156151c6578182fd5b86356151d181615f4c565b955060208701359450604087013567ffffffffffffffff808211156151f4578384fd5b818901915089601f830112615207578384fd5b6152168a833560208501615017565b9550606089013591508082111561522b578384fd5b5061523889828a01615087565b9350506080870135915060a087013561525081615f61565b809150509295509295509295565b60006020828403121561526f578081fd5b8135611a7781615f61565b60006020828403121561528b578081fd5b8151611a7781615f61565b6000602082840312156152a7578081fd5b5035919050565b6000602082840312156152bf578081fd5b5051919050565b600080604083850312156152d8578182fd5b82359150602083013561510b81615f4c565b600080600080608085870312156152ff578182fd5b84359350602085013561531181615f4c565b925060408501359150606085013567ffffffffffffffff811115615333578182fd5b61533f87828801615087565b91505092959194509250565b6000806040838503121561535d578182fd5b82359150602083013561510b81615f61565b600080600060608486031215615383578081fd5b83359250602084013561514581615f61565b600080604083850312156153a7578182fd5b82359150602083013567ffffffffffffffff8111156153c4578182fd5b6153d085828601615087565b9150509250929050565b600080604083850312156153ec578182fd5b50508035926020909101359150565b60008060006060848603121561540f578081fd5b505081359360208301359350604090920135919050565b6000815180845261543e816020860160208601615ea0565b601f01601f19169290920160200192915050565b60008251615464818460208701615ea0565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0398891681526020810197909752604087019590955260608601939093529085166080850152841660a0840152831660c083015290911660e08201526101000190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b03861682528460208301528315156040830152608060608301526155146080830184615426565b9695505050505050565b600060018060a01b0385168252836020830152606060408301526155456060830184615426565b95945050505050565b600060018060a01b03808f1683528d6020840152610180604084015261557861018084018e615426565b606084019c909c5299151560808301525096151560a088015260c087019590955260e0860193909352901515610100850152610120840152610140830152909116610160909101529392505050565b901515815260200190565b9115158252602082015260400190565b600060208252611a776020830184615426565b60208082526022908201527f4368617269747920616464726573732063616e2774207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a4661696c6564206174203160a81b604082015260600190565b60208082526025908201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252600b908201526a4661696c6564206174203560a81b604082015260600190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b602080825260159082015274115e18d959591cc813585e0811995948131a5b5a5d605a1b604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b6020808252601f908201527f546f6b656e73204e6f7420437265617465642061742053706c69742044414f00604082015260600190565b6020808252600b908201526a4661696c6564206174203360a81b604082015260600190565b6020808252600690820152656d617820352560d01b604082015260600190565b6020808252601a908201527f4f6e6c7920612063757261746f722063616e20646f2074686973000000000000604082015260600190565b6020808252601690820152751091540c8c080e88125b9d985b1a5908105b5bdd5b9d60521b604082015260600190565b60208082526024908201527f5472616e73666572206661696c65642061742065786375746520726573756c746040820152630203538360e41b606082015260800190565b6020808252601190820152705472616e73666572204e6f7420446f6e6560781b604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b60208082526017908201527f566f74696e6720446561646c696e652072656163686564000000000000000000604082015260600190565b60208082526028908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546040820152673c20b6b7bab73a1760c11b606082015260800190565b60208082526022908201527f6661696c656420746f2073656e6420617420637265617465546f6b656e50726f604082015261787960f01b606082015260800190565b60208082526025908201527f546f75726e616d656e7420616464726573732063616e2774207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526026908201527f6368616e676550726f706f73616c206465706f7369742066756e6374696f6e2060408201526519985a5b195960d21b606082015260800190565b6020808252600b908201526a2330b4b632b21030ba101b60a91b604082015260600190565b60208082526028908201527f4f6e6c79206120546f6b656e486f6c646572732063616e206372656174652070604082015267726f706f73616c7360c01b606082015260800190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526023908201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602d908201527f4245503230203a204f6e6c7920547265617375727920616e6420446576656c6f60408201526c706d656e74204164647265737360981b606082015260800190565b60208082526019908201527f4661696c656420617420496e697469616c5472616e7366657200000000000000604082015260600190565b6020808252601e908201527f4f6e6c79206120546f6b656e20486f6c646572732063616e20766f7465210000604082015260600190565b6020808252601a908201527f4245503230203a2053656c6c20416d6f756e7420457863656564000000000000604082015260600190565b6020808252600b908201526a11985a5b195908185d080d60aa1b604082015260600190565b60208082526023908201527f547265617375727920616464726573732063616e2774207a65726f206164647260408201526265737360e81b606082015260800190565b602080825260079082015266417420766f746560c81b604082015260600190565b60208082526022908201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252600b908201526a2330b4b632b21030ba101960a91b604082015260600190565b60208082526021908201527f4f6e6c79206120546f6b656e486f6c646572732063616e2073706c69742064616040820152606f60f81b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015615e035784516001600160a01b031683529383019391830191600101615dde565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b60008219821115615e4557615e45615f20565b500190565b600082615e6557634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615615e8457615e84615f20565b500290565b600082821015615e9b57615e9b615f20565b500390565b60005b83811015615ebb578181015183820152602001615ea3565b83811115615eca576000848401525b50505050565b600281046001821680615ee457607f821691505b6020821081141561405a57634e487b7160e01b600052602260045260246000fd5b6000600019821415615f1957615f19615f20565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461145857600080fd5b801515811461145857600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220ca1a9a8b9c1ede316a7b16177bcebef64a002d724db1586e34c0ae1d93d3e66a64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007b706b31ca65c7a11b74ef63559434d4a9704d3c0000000000000000000000007b706b31ca65c7a11b74ef63559434d4a9704d3c0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000003b9aca000000000000000000000000000000000000000000000000000000000062d6b26e0000000000000000000000007b706b31ca65c7a11b74ef63559434d4a9704d3c00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e00000000000000000000000025ff64c5dcae42886da042a120963693c2b6e351000000000000000000000000163e9f7178535b4263876e6855eb514fea04d96700000000000000000000000045e9d79b954bdfa994cfb6fd7fee0cccc77f1e6c
-----Decoded View---------------
Arg [0] : _curator (address): 0x7b706B31CA65c7A11B74Ef63559434D4a9704D3C
Arg [1] : _daoCreator (address): 0x7b706B31CA65c7A11B74Ef63559434D4a9704D3C
Arg [2] : _proposalDeposit (uint256): 1000000000000000000
Arg [3] : _minTokensToCreate (uint256): 1000000000
Arg [4] : _closingTime (uint256): 1658237550
Arg [5] : _privateCreation (address): 0x7b706B31CA65c7A11B74Ef63559434D4a9704D3C
Arg [6] : routerAddress (address): 0x10ED43C718714eb63d5aA57B78B54704E256024E
Arg [7] : _treasuryAddress (address): 0x25ff64C5DCAe42886DA042a120963693C2b6E351
Arg [8] : _tournamentAddress (address): 0x163E9f7178535b4263876E6855eB514fEA04D967
Arg [9] : _charityAddress (address): 0x45e9d79B954bDFa994cFb6Fd7fEE0Cccc77F1E6C
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000007b706b31ca65c7a11b74ef63559434d4a9704d3c
Arg [1] : 0000000000000000000000007b706b31ca65c7a11b74ef63559434d4a9704d3c
Arg [2] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [3] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [4] : 0000000000000000000000000000000000000000000000000000000062d6b26e
Arg [5] : 0000000000000000000000007b706b31ca65c7a11b74ef63559434d4a9704d3c
Arg [6] : 00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e
Arg [7] : 00000000000000000000000025ff64c5dcae42886da042a120963693c2b6e351
Arg [8] : 000000000000000000000000163e9f7178535b4263876e6855eb514fea04d967
Arg [9] : 00000000000000000000000045e9d79b954bdfa994cfb6fd7fee0cccc77f1e6c
Deployed Bytecode Sourcemap
38451:43436:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43241:28;43258:10;43241:16;:28::i;:::-;;38451:43436;;;;;26586:42;;;;;;;;;;-1:-1:-1;26586:42:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;52913:112;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;6610:68::-;;;;;;;;;;-1:-1:-1;6610:68:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;40593:32::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43285:82::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;44887:161::-;;;;;;;;;;-1:-1:-1;44887:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43859:127::-;;;;;;;;;;-1:-1:-1;43859:127:0;;;;;:::i;:::-;;:::i;10143:29::-;;;;;;;;;;;;;:::i;51777:257::-;;;;;;;;;;-1:-1:-1;51777:257:0;;;;;:::i;:::-;;:::i;:::-;;39782:33;;;;;;;;;;;;;:::i;40178:79::-;;;;;;;;;;;;;:::i;25354:35::-;;;;;;;;;;;;;:::i;45494:87::-;;;;;;;;;;;;;:::i;26376:29::-;;;;;;;;;;;;;:::i;60360:414::-;;;:::i;43558:87::-;;;;;;;;;;;;;:::i;40335:42::-;;;;;;;;;;;;;:::i;49440:291::-;;;;;;;;;;-1:-1:-1;49440:291:0;;;;;:::i;:::-;;:::i;12342:34::-;;;;;;;;;;;;;:::i;67960:3643::-;;;;;;;;;;-1:-1:-1;67960:3643:0;;;;;:::i;:::-;;:::i;45056:300::-;;;;;;;;;;-1:-1:-1;45056:300:0;;;;;:::i;:::-;;:::i;81777:101::-;;;;;;;;;;;;;:::i;46480:250::-;;;;;;;;;;-1:-1:-1;46480:250:0;;;;;:::i;:::-;;:::i;15715:89::-;;;;;;;;;;;;;:::i;43469:81::-;;;;;;;;;;;;;:::i;25197:28::-;;;;;;;;;;;;;:::i;47253:539::-;;;;;;;;;;-1:-1:-1;47253:539:0;;;;;:::i;:::-;;:::i;79518:139::-;;;;;;;;;;;;;:::i;48516:174::-;;;;;;;;;;-1:-1:-1;48516:174:0;;;;;:::i;:::-;;:::i;10017:23::-;;;;;;;;;;;;;:::i;24734:50::-;;;;;;;;;;-1:-1:-1;24734:50:0;;;;;:::i;:::-;;:::i;77311:198::-;;;;;;;;;;-1:-1:-1;77311:198:0;;;;;:::i;:::-;;:::i;44324:191::-;;;;;;;;;;-1:-1:-1;44324:191:0;;;;;:::i;:::-;;:::i;46738:507::-;;;;;;;;;;-1:-1:-1;46738:507:0;;;;;:::i;:::-;;:::i;56867:123::-;;;;;;;;;;-1:-1:-1;56867:123:0;;;;;:::i;:::-;;:::i;50176:541::-;;;;;;;;;;-1:-1:-1;50176:541:0;;;;;:::i;:::-;;:::i;14195:835::-;;;;;;;;;;;;;:::i;39386:33::-;;;;;;;;;;;;;:::i;64397:2052::-;;;;;;:::i;:::-;;:::i;40384:29::-;;;;;;;;;;;;;:::i;25633:43::-;;;;;;;;;;-1:-1:-1;25633:43:0;;;;;:::i;:::-;;:::i;51223:263::-;;;;;;;;;;-1:-1:-1;51223:263:0;;;;;:::i;:::-;;:::i;8809:23::-;;;;;;;;;;;;;:::i;39698:34::-;;;;;;;;;;;;;:::i;43653:198::-;;;;;;;;;;-1:-1:-1;43653:198:0;;;;;:::i;:::-;;:::i;78714:312::-;;;;;;;;;;-1:-1:-1;78714:312:0;;;;;:::i;:::-;;:::i;64178:105::-;;;;;;;;;;-1:-1:-1;64178:105:0;;;;;:::i;:::-;;:::i;46008:464::-;;;;;;;;;;-1:-1:-1;46008:464:0;;;;;:::i;:::-;;:::i;25758:40::-;;;;;;;;;;-1:-1:-1;25758:40:0;;;;;:::i;:::-;;:::i;71836:3282::-;;;;;;;;;;-1:-1:-1;71836:3282:0;;;;;:::i;:::-;;:::i;25517:38::-;;;;;;;;;;;;;:::i;24317:26::-;;;;;;;;;;;;;:::i;45366:120::-;;;;;;;;;;-1:-1:-1;45366:120:0;;;;;:::i;:::-;;:::i;26136:27::-;;;;;;;;;;;;;:::i;80856:204::-;;;;;;;;;;;;;:::i;48888:256::-;;;;;;;;;;-1:-1:-1;48888:256:0;;;;;:::i;:::-;;:::i;43375:86::-;;;;;;;;;;;;;:::i;39975:36::-;;;;;;;;;;;;;:::i;39290:31::-;;;;;;;;;;;;;:::i;75814:796::-;;;;;;;;;;-1:-1:-1;75814:796:0;;;;;:::i;:::-;;:::i;49152:280::-;;;;;;;;;;-1:-1:-1;49152:280:0;;;;;:::i;:::-;;:::i;64291:96::-;;;:::i;44525:203::-;;;;;;;;;;-1:-1:-1;44525:203:0;;;;;:::i;:::-;;:::i;39599:32::-;;;;;;;;;;;;;:::i;40632:29::-;;;;;;;;;;;;;:::i;10253:20::-;;;;;;;;;;;;;:::i;39468:64::-;;;;;;;;;;;;;:::i;13100:1087::-;;;;;;:::i;:::-;;:::i;81068:322::-;;;;;;;;;;-1:-1:-1;81068:322:0;;;;;:::i;:::-;;:::i;49743:425::-;;;;;;;;;;-1:-1:-1;49743:425:0;;;;;:::i;:::-;;:::i;40555:31::-;;;;;;;;;;;;;:::i;66834:1116::-;;;;;;;;;;-1:-1:-1;66834:1116:0;;;;;:::i;:::-;;:::i;39739:36::-;;;;;;;;;;;;;:::i;25110:44::-;;;;;;;;;;-1:-1:-1;25110:44:0;;;;;:::i;:::-;;:::i;44195:123::-;;;;;;;;;;-1:-1:-1;44195:123:0;;;;;:::i;:::-;;:::i;43992:195::-;;;;;;;;;;-1:-1:-1;43992:195:0;;;;;:::i;:::-;;:::i;39822:84::-;;;;;;;;;;;;;:::i;52047:265::-;;;;;;;;;;-1:-1:-1;52047:265:0;;;;;:::i;:::-;;:::i;50725:490::-;;;;;;;;;;-1:-1:-1;50725:490:0;;;;;:::i;:::-;;:::i;77519:375::-;;;;;;;;;;-1:-1:-1;77519:375:0;;;;;:::i;:::-;;:::i;44736:143::-;;;;;;;;;;-1:-1:-1;44736:143:0;;;;;:::i;:::-;;:::i;40131:40::-;;;;;;;;;;;;;:::i;40086:38::-;;;;;;;;;;;;;:::i;78353:351::-;;;;;;;;;;-1:-1:-1;78353:351:0;;;;;:::i;:::-;;:::i;25937:40::-;;;;;;;;;;-1:-1:-1;25937:40:0;;;;;:::i;:::-;;:::i;24628:22::-;;;;;;;;;;;;;:::i;51494:275::-;;;;;;;;;;-1:-1:-1;51494:275:0;;;;;:::i;:::-;;:::i;57343:162::-;;;;;;;;;;-1:-1:-1;57343:162:0;;;;;:::i;:::-;;:::i;48702:174::-;;;;;;;;;;-1:-1:-1;48702:174:0;;;;;:::i;:::-;;:::i;66459:365::-;;;;;;;;;;-1:-1:-1;66459:365:0;;;;;:::i;:::-;;:::i;39426:35::-;;;;;;;;;;;;;:::i;10463:30::-;;;;;;;;;;;;;:::i;13100:1087::-;13182:12;13207:10;13250:11;;13232:15;:29;:46;;;;;13277:1;13265:9;:13;13232:46;:127;;;;-1:-1:-1;13296:15:0;;;;;-1:-1:-1;;;;;13296:15:0;:29;;:62;;-1:-1:-1;13329:15:0;;;;;-1:-1:-1;;;;;13329:15:0;13348:10;13329:29;13296:62;13228:914;;;13405:9;:7;:9::i;:::-;13387:14;:9;13399:2;13387:14;:::i;:::-;13386:28;;;;:::i;:::-;13454:12;;13378:36;;-1:-1:-1;13430:11:0;;-1:-1:-1;;;;;13454:12:0;13480:17;13378:36;13480:9;:17;:::i;:::-;13446:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13429:73;;;13525:6;13517:53;;;;-1:-1:-1;;;13517:53:0;;;;;;;:::i;:::-;;;;;;;;;13594:8;;-1:-1:-1;;;;;13594:8:0;13585:18;;;;:8;:18;;;;;:27;;13607:5;;13585:18;:27;;13607:5;;13585:27;:::i;:::-;;;;-1:-1:-1;;13651:8:0;;13635:46;;-1:-1:-1;;;;;13651:8:0;13661:12;13675:5;13635:15;:46::i;:::-;13627:84;;;;-1:-1:-1;;;13627:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13726:22:0;;;;;;:8;:22;;;;;:31;;13752:5;;13726:22;:31;;13752:5;;13726:31;:::i;:::-;;;;-1:-1:-1;;13781:8:0;;-1:-1:-1;;;;;13781:8:0;13772:18;;;;:8;:18;;;;;:27;;13794:5;;13772:18;:27;;13794:5;;13772:27;:::i;:::-;;;;;;;;13825:5;13814:7;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;13845:22:0;;;;;;:8;:22;;;;;:35;;13871:9;;13845:22;:35;;13871:9;;13845:35;:::i;:::-;;;;;;;;13913:12;-1:-1:-1;;;;;13900:33:0;;13927:5;13900:33;;;;;;:::i;:::-;;;;;;;;13963:17;;13952:7;;:28;;:41;;;;-1:-1:-1;13985:8:0;;;;13984:9;13952:41;13948:143;;;14014:8;:15;;-1:-1:-1;;14014:15:0;14025:4;14014:15;;;14067:7;;14053:22;;;;;;;:::i;:::-;;;;;;;;13948:143;14112:4;14105:11;;;;13100:1087;;;;:::o;26586:42::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26586:42:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;26586:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26586:42:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26586:42:0;;:::o;52913:112::-;52999:7;;53008:8;;52913:112;;;:::o;6610:68::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;40593:32::-;;;-1:-1:-1;;;;;40593:32:0;;:::o;43285:82::-;43355:4;;;;;;;;;;;;-1:-1:-1;;;43355:4:0;;;;43285:82;;:::o;44887:161::-;44964:4;44981:37;44990:10;45002:7;45011:6;44981:8;:37::i;:::-;-1:-1:-1;45036:4:0;44887:161;;;;:::o;43859:127::-;-1:-1:-1;;;;;43949:29:0;43925:4;43949:29;;;:24;:29;;;;;;;;;43859:127::o;10143:29::-;;;;:::o;51777:257::-;51872:7;;-1:-1:-1;;;;;51872:7:0;51858:10;:21;51850:60;;;;-1:-1:-1;;;51850:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51929:22:0;;51921:69;;;;-1:-1:-1;;;51921:69:0;;;;;;;:::i;:::-;52001:14;:25;;-1:-1:-1;;;;;;52001:25:0;-1:-1:-1;;;;;52001:25:0;;;;;;;;;;51777:257::o;39782:33::-;;;;:::o;40178:79::-;;;;:::o;25354:35::-;;;-1:-1:-1;;;;;25354:35:0;;:::o;45494:87::-;45563:10;;45494:87;:::o;26376:29::-;;;-1:-1:-1;;;;;26376:29:0;;:::o;60360:414::-;60414:15;;-1:-1:-1;;;;;60414:15:0;60433:10;60414:29;;:64;;-1:-1:-1;60447:17:0;;-1:-1:-1;;;;;60447:17:0;60468:10;60447:31;60414:64;60406:123;;;;-1:-1:-1;;;60406:123:0;;;;;;;:::i;:::-;60559:10;60573:1;60548:22;;;:10;:22;;;;;;60540:62;;;;-1:-1:-1;;;60540:62:0;;;;;;;:::i;:::-;60668:10;60613:18;60657:22;;;:10;:22;;;;;;;60690:26;;;60657:22;60727:39;;60657:22;60727:16;:39::i;:::-;60360:414;:::o;43558:87::-;43630:7;;43558:87;:::o;40335:42::-;;;-1:-1:-1;;;;;40335:42:0;;:::o;49440:291::-;49535:7;;-1:-1:-1;;;;;49535:7:0;49521:10;:21;49513:60;;;;-1:-1:-1;;;49513:60:0;;;;;;;:::i;:::-;49653:2;49638:11;49614:21;;49592:19;;:43;;;;:::i;:::-;:57;;;;:::i;:::-;:63;;49584:97;;;;-1:-1:-1;;;49584:97:0;;;;;;;:::i;:::-;49692:17;:31;49440:291::o;12342:34::-;;;-1:-1:-1;;;;;12342:34:0;;:::o;67960:3643::-;68087:13;68142:22;;;:9;:22;;;;;68210:9;;;;68282:12;;;;-1:-1:-1;;;;;68210:9:0;;;;68087:13;;68282:12;;:89;;24005:7;68282:89;;;23714:7;68282:89;68468:6;;;;68264:107;;-1:-1:-1;68468:6:0;;:57;;;;;68515:10;68496:1;:16;;;:29;;;;:::i;:::-;68478:15;:47;68468:57;68464:139;;;68542:26;68556:11;68542:13;:26::i;68464:139::-;68697:1;:16;;;68679:15;:34;:140;;;-1:-1:-1;68813:6:0;;;;;;68812:7;68679:140;:299;;;-1:-1:-1;68937:11:0;;;68950:8;;;68926:51;;;;-1:-1:-1;;;;;68937:11:0;;68950:8;68960:16;;68926:51;;;:::i;:::-;;;;;;;;;;;;;68916:62;;;;;;68898:1;:14;;;:80;;68679:299;68675:342;;;68997:8;;;68675:342;69215:11;;69196:31;;-1:-1:-1;;;;;69215:11:0;69196:18;:31::i;:::-;69191:164;;69244:26;69258:11;69244:13;:26::i;:::-;69302:17;;;;69285:35;;-1:-1:-1;;;;;69285:16:0;;;:35;;;;;;;;;69302:17;69285:16;:35;;;;;;;;;;;;;;;;;;;;;69335:8;;;69191:164;69388:4;69420:15;:13;:15::i;:::-;69409:1;:8;;;:26;69405:66;;;-1:-1:-1;69466:5:0;69405:66;69484:11;69506:1;:5;;;69498:1;:5;;;:13;;;;:::i;:::-;69484:27;;69605:1;69578:16;:23;:28;;:59;;;;;69610:16;69627:1;69610:19;;;;;;-1:-1:-1;;;69610:19:0;;;;;;;;;;;;;;-1:-1:-1;;;;;;69610:19:0;-1:-1:-1;;;69610:27:0;69578:59;:103;;;;;69654:16;69671:1;69654:19;;;;;;-1:-1:-1;;;69654:19:0;;;;;;;;;;;;;;-1:-1:-1;;;;;;69654:19:0;-1:-1:-1;;;69654:27:0;69578:103;:134;;;;;69685:16;69702:1;69685:19;;;;;;-1:-1:-1;;;69685:19:0;;;;;;;;;;;;;-1:-1:-1;;;;;;69685:19:0;;;:27;69578:134;:178;;;;;69729:16;69746:1;69729:19;;;;;;-1:-1:-1;;;69729:19:0;;;;;;;;;;;;;;-1:-1:-1;;;;;;69729:19:0;-1:-1:-1;;;69729:27:0;69578:178;:259;;;;-1:-1:-1;69830:4:0;69810:26;;;;:11;:26;;;;;;69782:55;;69792:15;:13;:15::i;:::-;:44;;;;:::i;:::-;69782:9;:55::i;:::-;69773:6;:64;69578:259;69574:319;;;69876:5;69860:21;;69574:319;69919:19;69929:1;:8;;;69919:9;:19::i;:::-;69909:6;:29;69905:479;;70111:17;;;;70098:31;;-1:-1:-1;;;;;70098:12:0;;;:31;;;;;;;;;70111:17;70098:12;:31;;;;;;;:39;;70133:4;70098:39;;;70090:69;;;;-1:-1:-1;;;70090:69:0;;;;;;;:::i;:::-;70199:15;70176:20;:38;70322:7;;:11;;70332:1;;70322:11;:::i;:::-;70313:6;:20;70309:63;;;70371:1;70352:16;:20;70309:63;70437:19;70447:1;:8;;;70437:9;:19::i;:::-;70427:6;:29;;:46;;;;;70468:1;:5;;;70460:1;:5;;;:13;70427:46;:63;;;;;70477:13;70427:63;70423:1043;;;70674:11;;;70699:8;;;70674:53;;70639:12;;;;-1:-1:-1;;;;;70674:11:0;;;;:53;;70710:16;;70674:53;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;70638:89:0;;-1:-1:-1;70638:89:0;-1:-1:-1;70761:4:0;70750:15;;;;:35;;;;-1:-1:-1;70769:11:0;;:16;;70750:35;70742:84;;;;-1:-1:-1;;;70742:84:0;;;;;;;:::i;:::-;70844:16;;;:23;;-1:-1:-1;;70844:23:0;;;;;71092:11;;70863:4;;-1:-1:-1;;;;;;71092:11:0;71115:4;71092:28;;;;:69;;-1:-1:-1;71147:13:0;;71124:11;;-1:-1:-1;;;;;71124:11:0;;;71147:13;;71124:37;;71092:69;:130;;;;-1:-1:-1;71205:16:0;;71182:11;;-1:-1:-1;;;;;71182:11:0;;;71205:16;;71182:40;;71092:130;:187;;;;-1:-1:-1;71266:12:0;;71243:11;;-1:-1:-1;;;;;71243:11:0;;;71266:12;;71243:36;;71092:187;:239;;;;-1:-1:-1;71323:7:0;;71300:11;;-1:-1:-1;;;;;71300:11:0;;;71323:7;;71300:31;;71092:239;71088:367;;;71384:8;;;;71374:4;71354:26;;;;:11;:26;;;;;:38;;:26;;;:38;;71384:8;;71354:38;:::i;:::-;;;;-1:-1:-1;;71431:8:0;;;;71411:16;:28;;:16;;:28;;71431:8;;71411:28;:::i;:::-;;;;-1:-1:-1;;71088:367:0;70423:1043;;;71478:26;71492:11;71478:13;:26::i;:::-;71565:11;71549:46;71578:8;71588:6;71549:46;;;;;;;:::i;:::-;;;;;;;;67960:3643;;;;;;;;;:::o;45056:300::-;45146:4;45163:36;45173:6;45181:9;45192:6;45163:9;:36::i;:::-;-1:-1:-1;;;;;45239:19:0;;;;;;:11;:19;;;;;;;;45227:10;45239:31;;;;;;;;;45210:70;;45219:6;;45239:40;;45273:6;;45239:40;:::i;:::-;45210:8;:70::i;:::-;-1:-1:-1;;;;;;45291:28:0;;;;;;:17;:28;;;;;:35;;-1:-1:-1;;45291:35:0;45322:4;45291:35;;;;;;45056:300;;;;;;:::o;81777:101::-;81825:4;81849:21;81859:10;81849:9;:21::i;:::-;81842:28;;81777:101;:::o;46480:250::-;46546:7;46585;;46574;:18;;46566:73;;;;-1:-1:-1;;;46566:73:0;;;;;;;:::i;:::-;46650:19;46673:10;:8;:10::i;:::-;46650:33;-1:-1:-1;46702:19:0;46650:33;46702:7;:19;:::i;15715:89::-;15785:11;;15715:89;:::o;43469:81::-;39218:2;43469:81;:::o;25197:28::-;;;;:::o;47253:539::-;47338:7;;-1:-1:-1;;;;;47338:7:0;47324:10;:21;47316:60;;;;-1:-1:-1;;;47316:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47395:20:0;;;;;;:11;:20;;;;;;;;47387:60;;;;-1:-1:-1;;;47387:60:0;;;;;;;:::i;:::-;47463:9;47458:327;47482:9;:16;47478:20;;47458:327;;;47540:7;-1:-1:-1;;;;;47524:23:0;:9;47534:1;47524:12;;;;;;-1:-1:-1;;;47524:12:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47524:12:0;:23;47520:254;;;47583:9;47593:16;;:20;;47612:1;;47593:20;:::i;:::-;47583:31;;;;;;-1:-1:-1;;;47583:31:0;;;;;;;;;;;;;;;;;;;47568:9;:12;;-1:-1:-1;;;;;47583:31:0;;;;47578:1;;47568:12;;;;-1:-1:-1;;;47568:12:0;;;;;;;;;;;;;;;;;;;;;:46;;-1:-1:-1;;;;;;47568:46:0;-1:-1:-1;;;;;47568:46:0;;;;;;47633:16;;;;;:7;:16;;;;;;:20;;;47672;;;;:28;;-1:-1:-1;;47672:28:0;;;47719:9;:15;;;;;-1:-1:-1;;;47719:15:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;47719:15:0;;;;;-1:-1:-1;;;;;;47719:15:0;;;;;;47753:5;;47520:254;47500:3;;;;:::i;:::-;;;;47458:327;;;;47253:539;:::o;79518:139::-;79565:19;79628:21;;79604;:45;;;;:::i;48516:174::-;48599:7;;-1:-1:-1;;;;;48599:7:0;48585:10;:21;48577:60;;;;-1:-1:-1;;;48577:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48648:27:0;;;;;:18;:27;;;;;:34;;-1:-1:-1;;48648:34:0;48678:4;48648:34;;;48516:174::o;10017:23::-;;;;:::o;24734:50::-;;;;;;;;;;;;;;;:::o;77311:198::-;77396:12;77426:13;:11;:13::i;:::-;77421:41;;77454:8;;;77421:41;77480:21;77489:3;77494:6;77480:8;:21::i;44324:191::-;44423:7;;-1:-1:-1;;;;;44423:7:0;44409:10;:21;44401:60;;;;-1:-1:-1;;;44401:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44472:27:0;;;;;;;;:22;:27;;;;;:35;;-1:-1:-1;;44472:35:0;;;;;;;;;;44324:191::o;46738:507::-;46823:7;;-1:-1:-1;;;;;46823:7:0;46809:10;:21;46801:60;;;;-1:-1:-1;;;46801:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46995:20:0;;;;;;:11;:20;;;;;;;;46994:21;46986:61;;;;-1:-1:-1;;;46986:61:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47061:16:0;;47080:1;47061:16;;;:7;:16;;;;;;:20;47058:108;;-1:-1:-1;;;;;47137:16:0;;;;;;:7;:16;;;;;;47117:37;;:19;:37::i;:::-;-1:-1:-1;;;;;47098:16:0;;;;;;:7;:16;;;;;:56;47058:108;-1:-1:-1;;;;;47176:20:0;;;;;:11;:20;;;;;:27;;-1:-1:-1;;47176:27:0;47199:4;47176:27;;;;;;47214:9;:23;;;;;;;;;;;;;;-1:-1:-1;;;;;;47214:23:0;;;;;;46738:507::o;56867:123::-;-1:-1:-1;;;;;56955:27:0;56931:4;56955:27;;;:18;:27;;;;;;;;;56867:123::o;50176:541::-;50333:7;;-1:-1:-1;;;;;50333:7:0;50319:10;:21;50311:60;;;;-1:-1:-1;;;50311:60:0;;;;;;;:::i;:::-;50448:13;;50465:2;;50430:15;50390:37;50409:18;50390:16;:37;:::i;:::-;:55;;;;:::i;:::-;:71;;;;:::i;:::-;:77;;50382:111;;;;-1:-1:-1;;;50382:111:0;;;;;;;:::i;:::-;50504:15;:34;;;50549:17;:38;;;50598:14;:32;;;50615:15;50657:35;50569:18;50522:16;50657:35;:::i;:::-;:52;;;;:::i;:::-;50641:13;:68;-1:-1:-1;;;50176:541:0:o;14195:835::-;14266:11;;14248:15;:29;:42;;;;-1:-1:-1;14282:8:0;;;;14281:9;14248:42;14244:779;;;14428:12;;;;;;;;;-1:-1:-1;;;;;14428:12:0;-1:-1:-1;;;;;14428:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14403:12;;-1:-1:-1;;;;;14403:12:0;14395:29;:67;14391:178;;14483:12;;14518:34;;;-1:-1:-1;;;14518:34:0;;;;-1:-1:-1;;;;;14483:12:0;;;;:19;;14511:4;;14483:12;;14518:32;;:34;;;;;;;;;;;;;;14483:12;14518:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14483:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14391:178;14712:10;14695:12;14737:20;;;:8;:20;;;;;;;14712:52;;14695:12;;14712:10;:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14694:70;;;14782:7;14779:233;;;14822:10;14834:20;;;;:8;:20;;;;;;;;14815:40;;;;;;;:::i;:::-;;;;;;;;14899:10;14890:20;;;;:8;:20;;;;;;14874:12;:36;;14890:20;;14874:12;;:36;;14890:20;;14874:36;:::i;:::-;;;;-1:-1:-1;;14938:10:0;14952:1;14929:20;;;:8;:20;;;;;;;;:24;;;14972:8;:20;;;;;:24;14244:779;;14195:835::o;39386:33::-;;;;:::o;64397:2052::-;64649:4;64674:21;64684:10;64674:9;:21::i;:::-;64666:79;;;;-1:-1:-1;;;64666:79:0;;;;;;;:::i;:::-;64770:11;:73;;;;;23588:7;64801:15;:41;64770:73;64766:127;;;64860:21;;-1:-1:-1;;;64860:21:0;;;;;;;:::i;64766:127::-;64909:30;64928:10;64909:18;:30::i;:::-;64908:31;:82;;;;23469:7;64944:15;:45;64908:82;64904:136;;;65007:21;;-1:-1:-1;;;65007:21:0;;;;;;;:::i;64904:136::-;65074:7;65056:15;:25;65052:78;;;65097:21;;-1:-1:-1;;;65097:21:0;;;;;;;:::i;65052:78::-;65159:15;;65146:9;:28;65142:82;;65191:21;;-1:-1:-1;;;65191:21:0;;;;;;;:::i;65142:82::-;65276:15;65240:33;65258:15;65276;65240:33;:::i;:::-;:51;65236:125;;;65328:21;;-1:-1:-1;;;65328:21:0;;;;;;;:::i;65236:125::-;65448:10;65470:4;65448:27;65444:81;;;65492:21;;-1:-1:-1;;;65492:21:0;;;;;;;:::i;65444:81::-;65537:16;65556:14;;:18;;65573:1;65556:18;:::i;:::-;65585;65606:22;;;:9;:22;;;;;;;;65639:24;;-1:-1:-1;;;;;;65639:24:0;-1:-1:-1;;;;;65639:24:0;;;;;-1:-1:-1;65674:8:0;;:18;;;65703:28;;65606:22;;-1:-1:-1;65606:22:0;65703:28;;:13;;;;:28;;;;;:::i;:::-;;65780:10;65792:7;65801:16;65769:49;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;65769:49:0;;;;;;;;;65759:60;;65769:49;65759:60;;;;65742:14;;;:77;65849:33;65867:15;65849;:33;:::i;:::-;65830:16;;;:52;65893:6;;;:13;;65902:4;-1:-1:-1;;65893:13:0;;;;;;;;65972:12;;;:26;;;;;;;;;;;66101:9;;;:22;;66113:10;-1:-1:-1;;;;;;66101:22:0;;;;;;66154:9;66134:17;;;:29;-1:-1:-1;66174:19:0;;-1:-1:-1;;66174:19:0;;65902:4;;66174:19;:::i;:::-;;;;;;;;66231:9;66206:21;;:34;;;;;;;:::i;:::-;;;;;;;;66290:11;66262:150;66316:10;66341:7;66363:11;66389:12;66262:150;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;66430:11:0;64397:2052;-1:-1:-1;;;;;;;64397:2052:0:o;40384:29::-;;;-1:-1:-1;;;;;40384:29:0;;:::o;25633:43::-;;;;;;;;;;;;;:::o;51223:263::-;51320:7;;-1:-1:-1;;;;;51320:7:0;51306:10;:21;51298:60;;;;-1:-1:-1;;;51298:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51377:23:0;;51369:71;;;;-1:-1:-1;;;51369:71:0;;;;;;;:::i;:::-;51451:15;:27;;-1:-1:-1;;;;;;51451:27:0;-1:-1:-1;;;;;51451:27:0;;;;;;;;;;51223:263::o;8809:23::-;;;-1:-1:-1;;;;;8809:23:0;;:::o;39698:34::-;;;;:::o;43653:198::-;-1:-1:-1;;;;;43743:20:0;;43719:7;43743:20;;;:11;:20;;;;;;;;43739:49;;;-1:-1:-1;;;;;;43772:16:0;;;;;;:7;:16;;;;;;43765:23;;43739:49;-1:-1:-1;;;;;43826:16:0;;;;;;:7;:16;;;;;;43806:37;;:19;:37::i;:::-;43799:44;43653:198;-1:-1:-1;;43653:198:0:o;78714:312::-;78854:7;;78810:13;;-1:-1:-1;;;;;78854:7:0;78840:10;:21;78836:48;;78876:8;;;78836:48;-1:-1:-1;;;;;78895:29:0;;;;;;:17;:29;;;;;;;:40;;-1:-1:-1;;78895:40:0;;;;;;;78951:45;;;;;78895:40;;78951:45;:::i;:::-;;;;;;;;-1:-1:-1;79014:4:0;78714:312;;;;:::o;64178:105::-;-1:-1:-1;;;;;64258:17:0;64232:7;64258:17;;;:10;:17;;;;;;;64178:105::o;46008:464::-;46113:7;46152;;46141;:18;;46133:62;;;;-1:-1:-1;;;46133:62:0;;;;;;;:::i;:::-;46211:17;46206:259;;46246:15;46270:26;46281:7;46290:5;46270:10;:26::i;:::-;-1:-1:-1;46245:51:0;;-1:-1:-1;46311:14:0;;-1:-1:-1;;;;;46311:14:0;46206:259;46360:23;46391:25;46402:7;46410:5;46391:10;:25::i;:::-;-1:-1:-1;46358:58:0;;-1:-1:-1;46431:22:0;;-1:-1:-1;;;;;46431:22:0;25758:40;;;;;;;;;;;;;:::o;71836:3282::-;71945:13;71979:21;71989:10;71979:9;:21::i;:::-;71971:72;;;;-1:-1:-1;;;71971:72:0;;;;;;;:::i;:::-;72063:4;;-1:-1:-1;;;72063:4:0;;;;72062:5;72054:14;;;;;;72079:4;:11;;-1:-1:-1;;;;72079:11:0;-1:-1:-1;;;72079:11:0;;;;72122:22;;;:9;:22;;;;;72206:16;;;;72188:15;:34;;:228;;;23714:7;72375:1;:16;;;:41;;;;:::i;:::-;72357:15;:59;72188:228;:323;;;-1:-1:-1;72485:11:0;;-1:-1:-1;;;;;72485:26:0;;;:11;;:26;;72188:323;:399;;;-1:-1:-1;72575:12:0;;;;;;72574:13;72188:399;:486;;;-1:-1:-1;72663:10:0;72652:22;;;;:10;;;:22;;;;;;;;72651:23;72188:486;:625;;;-1:-1:-1;72758:10:0;72750:19;;;;:7;:19;;;;;;:34;;;;;:62;;-1:-1:-1;72796:10:0;72788:19;;;;:7;:19;;;;;;:24;;72750:62;72184:695;;;72834:33;;-1:-1:-1;;;72834:33:0;;;;;;;:::i;72184:695::-;73047:1;-1:-1:-1;;;;;73005:44:0;73013:1;:11;;73025:1;73013:14;;;;;;-1:-1:-1;;;73013:14:0;;;;;;;;;;;;;;;;;:21;:14;;;;;:21;;-1:-1:-1;;;;;73013:21:0;73005:44;73001:610;;;73090:25;73103:11;73090:12;:25::i;:::-;73066:1;:11;;73078:1;73066:14;;;;;;-1:-1:-1;;;73066:14:0;;;;;;;;;;;;;;;;;;;;;;:21;;:49;;-1:-1:-1;;;;;;73066:49:0;-1:-1:-1;;;;;73066:49:0;;;;;;;;;;;73189:11;;;:14;;73066;;73189;;-1:-1:-1;;;73189:14:0;;;;;;;;;;;;;;;;;:21;:14;;;;;:21;;-1:-1:-1;;;;;73189:21:0;73181:44;73177:75;;;73244:8;;;73177:75;73331:21;;73307;:45;73303:76;;;73371:8;;;73303:76;73424:15;:13;:15::i;:::-;73394:1;:11;;73406:1;73394:14;;;;;;-1:-1:-1;;;73394:14:0;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;73503:4;73483:26;;:11;:26;;;;;;;73454:11;;;:14;;73483:26;;73454:11;;:14;;-1:-1:-1;;;73454:14:0;;;;;;;;;;;;;;;;;;;:26;;:55;;;;73554:7;;73524:1;:11;;73536:1;73524:14;;;;;;-1:-1:-1;;;73524:14:0;;;;;;;;;;;;;;;;;:27;:14;;;;;;;:27;:37;;;;73576:16;;:23;;-1:-1:-1;;73576:23:0;;;;;73001:610;73668:19;73771:1;:11;;73783:1;73771:14;;;;;;-1:-1:-1;;;73771:14:0;;;;;;;;;;;;;;;;;;;:27;;;73727:1;:11;;73739:1;73727:14;;;;;;-1:-1:-1;;;73727:14:0;;;;;;;;;;;;;;;;;;;;;;;;:27;73713:10;73704:20;;:8;:20;;;;;;;;:50;;73727:27;73704:50;:::i;:::-;73703:95;;;;:::i;:::-;73668:130;;73811:20;73834:1;:11;;73846:1;73834:14;;;;;;-1:-1:-1;;;73834:14:0;;;;;;;;;;;;;;;;;;;;;;:21;;;:74;;-1:-1:-1;;;73834:74:0;;-1:-1:-1;;;;;73834:21:0;;;;:38;;73881:14;;73834:74;;73897:10;;73834:74;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;73811:97;;73927:15;73919:59;;;;-1:-1:-1;;;73919:59:0;;;;;;;:::i;:::-;74033:25;74141:1;:11;;74153:1;74141:14;;;;;;-1:-1:-1;;;74141:14:0;;;;;;;;;;;;;;;;;;;:27;;;74098:1;:11;;74110:1;74098:14;;;;;;-1:-1:-1;;;74098:14:0;;;;;;;;;;;;;;;;;:26;:14;;;;;:26;;;;;74084:10;74075:20;;:8;:20;;;;;;;;:49;;74098:26;74075:49;:::i;:::-;74074:94;;;;:::i;:::-;74289:4;74181:21;74269:26;;;:11;:26;;;;;;;;;74205:10;:25;;;;;;74033:135;;-1:-1:-1;74181:21:0;;74205:48;;74033:135;;74205:48;:::i;:::-;:90;;;;:::i;:::-;74181:114;;74355:20;74308:11;:43;74328:1;:11;;74340:1;74328:14;;;;;;-1:-1:-1;;;74328:14:0;;;;;;;;;;;;;;;;;:21;:14;;;;;:21;;;;;-1:-1:-1;;;;;74328:21:0;74308:43;;;;;;;;;;;;:67;;:43;;74328:14;74308:67;;;;;:::i;:::-;;;;-1:-1:-1;;74410:4:0;74390:26;;;;:11;:26;;;;;;:49;-1:-1:-1;74386:76:0;;;74454:8;;;74386:76;74493:4;74473:26;;;;:11;:26;;;;;:50;;74503:20;;74473:26;:50;;74503:20;;74473:50;:::i;:::-;;;;;;;;74582:16;74536:10;:42;74555:1;:11;;74567:1;74555:14;;;;;;-1:-1:-1;;;74555:14:0;;;;;;;;;;;;;;;;;:21;:14;;;;;:21;;;;;-1:-1:-1;;;;;74555:21:0;74536:42;;;;;;;;;;;;:62;;:42;;74555:14;74536:62;;;;;:::i;:::-;;;;-1:-1:-1;;74632:4:0;74613:25;;;;:10;:25;;;;;;:44;-1:-1:-1;74609:71:0;;;74672:8;;;74609:71;74710:4;74691:25;;;;:10;:25;;;;;:45;;74720:16;;74691:25;:45;;74720:16;;74691:45;:::i;:::-;;;;-1:-1:-1;;74791:10:0;74811:1;74815:20;;;:8;:20;;;;;;;74782:54;;74811:1;;74791:10;-1:-1:-1;;;;;;;;;;;74782:54:0;;;;:::i;:::-;;;;;;;;74893:29;74911:10;74893:17;:29::i;:::-;-1:-1:-1;74985:10:0;74976:20;;;;:8;:20;;;;;;74965:7;:31;;74976:20;;74965:7;;:31;;74976:20;;74965:31;:::i;:::-;;;;-1:-1:-1;;75016:10:0;75030:1;75007:20;;;:8;:20;;;;;;;;:24;;;75042:7;:19;;;;;:23;-1:-1:-1;;75076:4:0;:12;;-1:-1:-1;;;;75076:12:0;;;-1:-1:-1;;;71836:3282:0;-1:-1:-1;;;;;71836:3282:0:o;25517:38::-;;;-1:-1:-1;;;;;25517:38:0;;:::o;24317:26::-;;;;:::o;45366:120::-;-1:-1:-1;;;;;45458:20:0;45434:4;45458:20;;;:11;:20;;;;;;;;;45366:120::o;26136:27::-;;;;:::o;80856:204::-;80915:23;81038:14;80856:204;:::o;48888:256::-;48973:7;;-1:-1:-1;;;;;48973:7:0;48959:10;:21;48951:60;;;;-1:-1:-1;;;48951:60:0;;;;;;;:::i;:::-;49076:2;49066:6;49047:16;;49030:14;;:33;;;;:::i;:::-;:42;;;;:::i;:::-;:48;;49022:82;;;;-1:-1:-1;;;49022:82:0;;;;;;;:::i;:::-;49115:12;:21;48888:256::o;43375:86::-;43447:6;;;;;;;;;;;;-1:-1:-1;;;43447:6:0;;;;43375:86;:::o;39975:36::-;;;;:::o;39290:31::-;;;;:::o;75814:796::-;75934:10;75885:13;76064:22;;;:10;:22;;;;;;;;;76045:16;;75990;;:38;;-1:-1:-1;;;75990:38:0;;;;75885:13;;75934:10;76064:22;;76045:16;;-1:-1:-1;;;;;75990:16:0;;;;:36;;:38;;;;;76064:22;;75990:38;;;;;;:16;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;75976:10;75964:23;;;;:11;:23;;;;;;:64;;;;:::i;:::-;75963:98;;;;:::i;:::-;:123;75959:150;;;76101:8;;;75959:150;76261:10;76122:11;76250:22;;;:10;:22;;;;;;;;;76231:16;;76176;;:38;;-1:-1:-1;;;76176:38:0;;;;76250:22;;76231:16;;-1:-1:-1;;;;;76176:16:0;;;;:36;;:38;;;;;76250:22;;76176:38;;;;;;:16;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;76162:10;76150:23;;;;:11;:23;;;;;;:64;;;;:::i;:::-;76149:98;;;;:::i;:::-;:123;;;;:::i;:::-;76122:150;;76286:10;76283:255;;;76318:16;;:58;;-1:-1:-1;;;76318:58:0;;-1:-1:-1;;;;;76318:16:0;;;;:23;;:58;;76342:17;;;76369:6;;76318:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;76313:90;;76395:8;;;76313:90;76283:255;;;76454:16;;:45;;-1:-1:-1;;;76454:45:0;;-1:-1:-1;;;;;76454:16:0;;;;:23;;:45;;76486:3;;76492:6;;76454:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;76449:77;;76518:8;;;76449:77;76559:10;76548:22;;;;:10;:22;;;;;:32;;76574:6;;76548:22;:32;;76574:6;;76548:32;:::i;:::-;;;;-1:-1:-1;76598:4:0;;75814:796;-1:-1:-1;;;;;75814:796:0:o;49152:280::-;49239:7;;-1:-1:-1;;;;;49239:7:0;49225:10;:21;49217:60;;;;-1:-1:-1;;;49217:60:0;;;;;;;:::i;:::-;49362:2;49351:7;49334:14;;49314:17;;49296:15;;:35;;;;:::i;:::-;:52;;;;:::i;:::-;:62;;;;:::i;:::-;:68;;49288:102;;;;-1:-1:-1;;;49288:102:0;;;;;;;:::i;:::-;49401:13;:23;49152:280::o;64291:96::-;64375:4;64291:96;:::o;44525:203::-;44595:4;44612:40;44622:10;44634:9;44645:6;44612:9;:40::i;:::-;-1:-1:-1;;;;;;;44663:28:0;;;;;:17;:28;;;;;:35;;-1:-1:-1;;44663:35:0;44694:4;44663:35;;;;;;44694:4;44525:203::o;39599:32::-;;;;:::o;40632:29::-;;;-1:-1:-1;;;;;40632:29:0;;:::o;10253:20::-;;;;;;:::o;39468:64::-;;;;:::o;81068:322::-;81142:15;81244:22;;;:9;:22;;;;;:32;;:35;;81142:15;;81244:35;;-1:-1:-1;;;81244:35:0;;;;;;;;;;;;;;;;;;;;;;:42;;;-1:-1:-1;;;;;81244:42:0;;81068:322;-1:-1:-1;;81068:322:0:o;49743:425::-;49872:7;;-1:-1:-1;;;;;49872:7:0;49858:10;:21;49850:60;;;;-1:-1:-1;;;49850:60:0;;;;;;;:::i;:::-;49967:12;;49983:2;;49929:35;49947:17;49929:15;:35;:::i;:::-;:50;;;;:::i;:::-;:56;;49921:90;;;;-1:-1:-1;;;49921:90:0;;;;;;;:::i;:::-;50022:14;:32;;;50065:16;:36;;;50127:33;50084:17;50039:15;50127:33;:::i;:::-;50112:12;:48;-1:-1:-1;;49743:425:0:o;40555:31::-;;;-1:-1:-1;;;;;40555:31:0;;:::o;66834:1116::-;66952:21;66962:10;66952:9;:21::i;:::-;66944:70;;;;-1:-1:-1;;;66944:70:0;;;;;;;:::i;:::-;67027:18;67048:22;;;:9;:22;;;;;;;;67096:10;67085:22;;:10;;;:22;;;;;;;;;;:60;;-1:-1:-1;67134:10:0;67124:21;;;;:9;;;:21;;;;;;;;67085:60;:112;;;;67181:1;:16;;;67162:15;:35;;67085:112;67081:164;;;67216:17;;-1:-1:-1;;;67216:17:0;;;;;;;:::i;67081:164::-;67259:17;67255:228;;;67311:10;67302:20;;;;:8;:20;;;;;;67293:5;;;:29;;67302:20;;67293:5;;:29;;67302:20;;67293:29;:::i;:::-;;;;-1:-1:-1;;67348:10:0;67337:22;;;;:10;;;:22;;;;;:29;;-1:-1:-1;;67337:29:0;67362:4;67337:29;;;67255:228;;;67417:10;67408:20;;;;:8;:20;;;;;;67399:5;;;:29;;67408:20;;67399:5;;:29;;67408:20;;67399:29;:::i;:::-;;;;-1:-1:-1;;67453:10:0;67443:21;;;;:9;;;:21;;;;;:28;;-1:-1:-1;;67443:28:0;67467:4;67443:28;;;67255:228;67507:10;67499:19;;;;:7;:19;;;;;;67495:381;;67548:10;67540:19;;;;:7;:19;;;;;:33;;;67495:381;;;67632:10;67614:30;67624:19;;;:7;:19;;;;;;;;;67614:30;;:9;:30;;;;;:45;;;;;67595:16;;;;:64;67591:285;;;67839:10;67831:19;;;;:7;:19;;;;;:33;;;67591:285;67931:10;-1:-1:-1;;;;;67893:49:0;67899:11;67893:49;67912:17;67893:49;;;;;;:::i;:::-;;;;;;;;66834:1116;;;:::o;39739:36::-;;;;:::o;25110:44::-;;;;;;;;;;;;;:::o;44195:123::-;-1:-1:-1;;;;;44283:27:0;44259:4;44283:27;;;:22;:27;;;;;;;;;44195:123::o;43992:195::-;44093:7;;-1:-1:-1;;;;;44093:7:0;44079:10;:21;44071:60;;;;-1:-1:-1;;;44071:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44142:29:0;;;;;;;;:24;:29;;;;;:37;;-1:-1:-1;;44142:37:0;;;;;;;;;;43992:195::o;39822:84::-;;;;:::o;52047:265::-;52137:7;;-1:-1:-1;;;;;52137:7:0;52123:10;:21;52115:60;;;;-1:-1:-1;;;52115:60:0;;;;;;;:::i;:::-;52209:1;52194:12;:16;:39;;;;;52230:3;52214:12;:19;;52194:39;52186:58;;;;-1:-1:-1;;;52186:58:0;;;;;;;:::i;:::-;52298:5;52282:12;52272:7;;:22;;;;:::i;:::-;52271:32;;;;:::i;:::-;52255:12;:49;-1:-1:-1;52047:265:0:o;50725:490::-;50869:7;;-1:-1:-1;;;;;50869:7:0;50855:10;:21;50847:60;;;;-1:-1:-1;;;50847:60:0;;;;;;;:::i;:::-;50974:17;;50995:2;;50926:45;50949:22;50926:20;:45;:::i;:::-;:65;;;;:::i;:::-;:71;;50918:105;;;;-1:-1:-1;;;50918:105:0;;;;;;;:::i;:::-;51034:19;:42;;;51087:21;:46;;;51164:43;51111:22;51056:20;51164:43;:::i;:::-;51144:17;:63;-1:-1:-1;;50725:490:0:o;77519:375::-;77692:4;;77658:12;;-1:-1:-1;;;77692:4:0;;;;77691:5;77683:14;;;;;;77708:4;:11;;-1:-1:-1;;;;77708:11:0;-1:-1:-1;;;77708:11:0;;;77735:24;77753:5;77735:17;:24::i;:::-;77730:52;;77774:8;;;77730:52;77793:11;77807:32;77820:5;77827:3;77832:6;77807:12;:32::i;:::-;77850:4;:12;;-1:-1:-1;;;;77850:12:0;;;77793:46;77519:375;-1:-1:-1;;;;;77519:375:0:o;44736:143::-;-1:-1:-1;;;;;44844:18:0;;;44817:7;44844:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;44736:143::o;40131:40::-;;;;:::o;40086:38::-;;;;:::o;78353:351::-;78442:10;78464:4;78442:27;;;:131;;-1:-1:-1;78531:4:0;78511:26;;;;:11;:26;;;;;;24198:3;;78493:15;:13;:15::i;:::-;:44;;;;:::i;:::-;78492:81;;;;:::i;:::-;78473:16;:100;78442:131;78438:214;;;78592:48;;-1:-1:-1;;;78592:48:0;;;;;;;:::i;78438:214::-;78662:15;:34;78353:351::o;25937:40::-;;;;;;;;;;;;;:::o;24628:22::-;;;-1:-1:-1;;;;;24628:22:0;;:::o;51494:275::-;51595:7;;-1:-1:-1;;;;;51595:7:0;51581:10;:21;51573:60;;;;-1:-1:-1;;;51573:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51652:25:0;;51644:75;;;;-1:-1:-1;;;51644:75:0;;;;;;;:::i;:::-;51730:17;:31;;-1:-1:-1;;;;;;51730:31:0;-1:-1:-1;;;;;51730:31:0;;;;;;;;;;51494:275::o;57343:162::-;57413:1;57407:3;:7;:21;;;;;57425:3;57418;:10;;57407:21;57399:40;;;;-1:-1:-1;;;57399:40:0;;;;;;;:::i;:::-;57492:5;57485:3;57469:13;:11;:13::i;:::-;:19;;;;:::i;:::-;57468:29;;;;:::i;:::-;57450:15;:47;-1:-1:-1;57343:162:0:o;48702:174::-;48784:7;;-1:-1:-1;;;;;48784:7:0;48770:10;:21;48762:60;;;;-1:-1:-1;;;48762:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48833:27:0;48863:5;48833:27;;;:18;:27;;;;;:35;;-1:-1:-1;;48833:35:0;;;48702:174::o;66459:365::-;66645:19;66698:22;;;:9;:22;;;;;;;;66766:49;;66698:22;;66766:49;;66777:10;;66789:7;;66798:16;;66766:49;;:::i;:::-;;;;;;;;;;;;;66756:60;;;;;;66738:1;:14;;;:78;66731:85;;;66459:365;;;;;;:::o;39426:35::-;;;;:::o;10463:30::-;;;;;;-1:-1:-1;;;;;10463:30:0;;:::o;15038:669::-;15090:13;15310:15;15300:7;15286:11;;:21;;;;:::i;:::-;:39;15282:418;;;-1:-1:-1;15349:2:0;15342:9;;15282:418;15470:15;15461:6;15447:11;;:20;;;;:::i;:::-;:38;15443:257;;;15562:6;15549:7;15535:11;;:21;;;;:::i;:::-;15516:41;;:15;:41;:::i;:::-;15515:54;;;;:::i;:::-;15510:59;;:2;:59;:::i;:::-;15502:68;;;;15443:257;-1:-1:-1;15686:2:0;15679:9;;12716:374;-1:-1:-1;;;;;12832:14:0;;12803:12;12832:14;;;:8;:14;;;;;;:25;-1:-1:-1;12832:25:0;;;:40;;;12871:1;12861:7;:11;12832:40;12828:255;;;-1:-1:-1;;;;;12889:14:0;;;;;;:8;:14;;;;;:25;;12907:7;;12889:14;:25;;12907:7;;12889:25;:::i;:::-;;;;-1:-1:-1;;;;;;;12929:13:0;;;;;;:8;:13;;;;;:24;;12946:7;;12929:13;:24;;12946:7;;12929:24;:::i;:::-;;;;;;;;12988:3;-1:-1:-1;;;;;12973:28:0;12982:4;-1:-1:-1;;;;;12973:28:0;-1:-1:-1;;;;;;;;;;;12993:7:0;12973:28;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;13023:4:0;13016:11;;12828:255;-1:-1:-1;13066:5:0;13059:12;;56998:337;-1:-1:-1;;;;;57091:19:0;;57083:68;;;;-1:-1:-1;;;57083:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;57170:21:0;;57162:68;;;;-1:-1:-1;;;57162:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;57243:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;57295:32;;;;;57273:6;;57295:32;:::i;60787:589::-;60948:16;;;60962:1;60948:16;;;;;;;;60924:21;;60948:16;;;;;;;;;;-1:-1:-1;60948:16:0;60924:40;;60993:4;60975;60980:1;60975:7;;;;;;-1:-1:-1;;;60975:7:0;;;;;;;;;-1:-1:-1;;;;;60975:23:0;;;:7;;;;;;;;;;:23;;;;61019:15;;:22;;;-1:-1:-1;;;61019:22:0;;;;:15;;;;;:20;;:22;;;;;60975:7;;61019:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61009:4;61014:1;61009:7;;;;;;-1:-1:-1;;;61009:7:0;;;;;;;;;-1:-1:-1;;;;;61009:32:0;;;:7;;;;;;;;;:32;61086:15;;61054:62;;61071:4;;61086:15;61104:11;61054:8;:62::i;:::-;61155:15;;:213;;-1:-1:-1;;;61155:213:0;;-1:-1:-1;;;;;61155:15:0;;;;:66;;:213;;61236:11;;61155:15;;61306:4;;61325:2;;61342:15;;61155:213;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60787:589;;;:::o;71613:215::-;71674:18;71695:22;;;:9;:22;;;;;71732:6;;;;;;71728:67;;;71778:1;:17;;;71753:21;;:42;;;;;;;:::i;:::-;;;;-1:-1:-1;;71728:67:0;71806:6;;:14;;-1:-1:-1;;71806:14:0;;;-1:-1:-1;71613:215:0:o;79036:474::-;-1:-1:-1;;;;;79139:29:0;;79107:15;79139:29;;;:17;:29;;;;;;;;;:296;;-1:-1:-1;79208:12:0;;-1:-1:-1;;;;;79186:35:0;;;79208:12;;79186:35;:248;;;;;79400:12;;;;;;;;;-1:-1:-1;;;;;79400:12:0;-1:-1:-1;;;;;79400:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;79381:16;;:53;79186:248;79135:367;;;-1:-1:-1;79457:4:0;79450:11;;79135:367;-1:-1:-1;79497:5:0;79490:12;;79667:262;79913:4;79722:15;79893:26;;;:11;:26;;;;;;79875:15;:13;:15::i;:::-;:44;;;;:::i;:::-;79870:50;;:1;:50;:::i;:::-;79858:7;;79849:16;;:6;:16;:::i;:::-;79848:73;;;;:::i;:::-;79816:16;;79806:7;;:26;;;;:::i;:::-;:115;;;;:::i;57512:1430::-;-1:-1:-1;;;;;57634:18:0;;57626:68;;;;-1:-1:-1;;;57626:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;57713:16:0;;57705:64;;;;-1:-1:-1;;;57705:64:0;;;;;;;:::i;:::-;57797:1;57788:6;:10;57780:64;;;;-1:-1:-1;;;57780:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;57859:30:0;;;;;;:24;:30;;;;;;;;57858:31;:64;;;;-1:-1:-1;;;;;;57894:28:0;;;;;;:24;:28;;;;;;;;57893:29;57858:64;57855:171;;;57957:12;;57947:6;:22;;57939:75;;;;-1:-1:-1;;;57939:75:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;58256:24:0;;58105:12;58256:24;;;:18;:24;;;;;;58120:4;;58105:12;58256:24;;;:50;;-1:-1:-1;;;;;;58284:22:0;;;;;;:18;:22;;;;;;;;58256:50;58253:96;;;58332:5;58322:15;;58253:96;58379:13;;-1:-1:-1;;;;;58363:30:0;;;58379:13;;58363:30;58362:49;;;;-1:-1:-1;58404:7:0;;-1:-1:-1;;;;;58398:13:0;;;58404:7;;58398:13;;58362:49;58359:365;;;-1:-1:-1;58442:1:0;58359:365;;;58488:13;;-1:-1:-1;;;;;58474:28:0;;;58488:13;;58474:28;58473:63;;;;-1:-1:-1;;;;;;58508:28:0;;;;;;:22;:28;;;;;;;;58507:29;58473:63;58470:254;;;58578:15;;58568:6;:25;;58560:64;;;;-1:-1:-1;;;58560:64:0;;;;;;;:::i;:::-;-1:-1:-1;58647:1:0;58470:254;;;-1:-1:-1;58711:1:0;58470:254;58739:7;58736:68;;;58762:30;58779:6;58786:5;58762:16;:30::i;:::-;58888:46;58903:4;58908:2;58911:6;58918:7;58928:5;58888:14;:46::i;:::-;57512:1430;;;;;:::o;81398:371::-;-1:-1:-1;;;;;81483:17:0;;81462:4;81483:17;;;:7;:17;;;;;;81479:53;;-1:-1:-1;81527:5:0;81520:12;;81479:53;-1:-1:-1;;;;;81574:17:0;;81543:18;81574:17;;;:7;:17;;;;;;;;;81564:28;;:9;:28;;;;;81625:16;;;;81607:15;:34;81603:159;;;-1:-1:-1;;;;;;;81658:17:0;;81678:1;81658:17;;;:7;:17;;;;;:21;;;81694:12;;81603:159;81746:4;81739:11;;;;;81603:159;81398:371;;;;:::o;53806:162::-;53847:7;53868:15;53885;53904:19;:17;:19::i;:::-;53867:56;;-1:-1:-1;53867:56:0;-1:-1:-1;53942:17:0;53867:56;;53942:17;:::i;:::-;53934:26;;;;53806:162;:::o;76618:120::-;76668:13;76701:29;76719:10;76701:17;:29::i;52469:436::-;52542:7;52551;52560;52569;52578;52587;52608:23;52633:12;52647:17;52668:26;52680:7;52688:5;52668:11;:26::i;:::-;52607:87;;;;;;52706:15;52723:23;52748:12;52764:49;52776:7;52785:4;52791:9;52802:10;:8;:10::i;:::-;52764:11;:49::i;:::-;52705:108;;-1:-1:-1;52705:108:0;-1:-1:-1;52705:108:0;-1:-1:-1;52864:15:0;;-1:-1:-1;52881:4:0;;-1:-1:-1;52887:9:0;;-1:-1:-1;;;;52469:436:0;;;;;;;;:::o;80577:271::-;80667:23;;80638:11;;-1:-1:-1;;;;;80667:23:0;;;;;80638:11;;80667:23;80708:10;;-1:-1:-1;;;;;80708:10:0;:20;80729:11;80708:10;;80749:40;23714:7;80749:15;:40;:::i;:::-;80800:1;80812;80824;80836;80708:132;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;76748:553::-;76856:4;;76821:13;;-1:-1:-1;;;76856:4:0;;;;76855:5;76847:14;;;;;;76872:4;:11;;-1:-1:-1;;;;76872:11:0;-1:-1:-1;;;76872:11:0;;;-1:-1:-1;;;;;76967:17:0;;;76872:11;76967:17;;;:7;:17;;;;;;;;;;76957:7;;76921:13;;:32;;-1:-1:-1;;;76921:32:0;;;;76967:17;;76957:7;;76921:13;;;:30;;:32;;;;;;;;;;:13;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;76899:19;76909:8;76899:9;:19::i;:::-;:54;;;;:::i;:::-;76898:66;;;;:::i;:::-;:86;76894:113;;;76999:8;;;76894:113;-1:-1:-1;;;;;77116:17:0;;;77020:11;77116:17;;;:7;:17;;;;;;;;;77106:7;;77070:13;;:32;;-1:-1:-1;;;77070:32:0;;;;77020:11;;77116:17;;77106:7;;77070:13;;;:30;;:32;;;;;77116:17;;77070:32;;;;;:13;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;77048:19;77058:8;77048:9;:19::i;:::-;:54;;;;:::i;:::-;77047:66;;;;:::i;:::-;:86;;;;:::i;:::-;77149:13;;:38;;-1:-1:-1;;;77149:38:0;;77020:113;;-1:-1:-1;;;;;;77149:13:0;;:20;;:38;;77170:8;;77020:113;;77149:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;77144:66;;77202:8;;;77144:66;-1:-1:-1;;;;;77221:17:0;;;;;;:7;:17;;;;;:27;;77242:6;;77221:17;:27;;77242:6;;77221:27;:::i;:::-;;;;-1:-1:-1;;77259:4:0;:12;;-1:-1:-1;;;;77259:12:0;;;-1:-1:-1;;;76748:553:0;-1:-1:-1;;76748:553:0:o;58950:1402::-;59027:20;59058:22;59091:16;59121:5;59130:1;59121:10;59118:791;;;59197:3;59180:14;;59170:7;:24;;;;:::i;:::-;:30;;;;:::i;:::-;59149:51;;59264:3;59245:16;;59235:7;:26;;;;:::i;:::-;:32;;;;:::i;:::-;59215:52;;59118:791;;;59298:5;59307:1;59298:10;59294:615;;;59374:3;59356:15;;59346:7;:25;;;;:::i;:::-;:31;;;;:::i;:::-;59325:52;;59442:3;59422:17;;59412:7;:27;;;;:::i;:::-;:33;;;;:::i;:::-;59392:53;;59505:3;59488:14;;59478:7;:24;;;;:::i;:::-;:30;;;;:::i;:::-;59577:14;;-1:-1:-1;;;;;59577:14:0;59566:26;;;;:10;:26;;;;;;59460:48;;-1:-1:-1;59566:40:0;;59460:48;;59566:40;:::i;:::-;59548:14;;;-1:-1:-1;;;;;59548:14:0;;;59537:26;;;;:10;:26;;;;;;;;:69;;;;59629:14;;;;;59621:23;;:7;:23;;;;;;:38;;59648:11;;59537:26;59621:38;;59648:11;;59621:38;:::i;:::-;;;;-1:-1:-1;;59700:14:0;;59679:49;;-1:-1:-1;;;;;59700:14:0;;;;;;-1:-1:-1;;;;;;;;;;;59679:49:0;;;59716:11;;59679:49;:::i;:::-;;;;;;;;59294:615;;;59822:3;59800:19;;59790:7;:29;;;;:::i;:::-;:35;;;;:::i;:::-;59769:56;;59894:3;59870:21;;59860:7;:31;;;;:::i;:::-;:37;;;;:::i;:::-;59840:57;;59294:615;59959:15;;-1:-1:-1;;;;;59959:15:0;59948:27;;;;:10;:27;;;;;;:42;;59978:12;;59948:42;:::i;:::-;59930:15;;;-1:-1:-1;;;;;59930:15:0;;;59919:27;;;;:10;:27;;;;;;;;:71;;;;60009:15;;;;;60001:24;;:7;:24;;;;;;:40;;60029:12;;59919:27;60001:40;;60029:12;;60001:40;:::i;:::-;;;;-1:-1:-1;;60105:17:0;;-1:-1:-1;;;;;60105:17:0;60094:29;;;;:10;:29;;;;;;:46;;60126:14;;60094:46;:::i;:::-;60073:17;;;-1:-1:-1;;;;;60073:17:0;;;60062:29;;;;:10;:29;;;;;;;;:78;;;;60159:17;;;;;60151:26;;:7;:26;;;;;;:44;;60181:14;;60062:29;60151:44;;60181:14;;60151:44;:::i;:::-;;;;-1:-1:-1;;60232:17:0;;60211:55;;-1:-1:-1;;;;;60232:17:0;;;;;;-1:-1:-1;;;;;;;;;;;60211:55:0;;;60251:14;;60211:55;:::i;:::-;;;;;;;;60303:15;;60282:51;;-1:-1:-1;;;;;60303:15:0;;;;;;-1:-1:-1;;;;;;;;;;;60282:51:0;;;60320:12;;60282:51;:::i;:::-;;;;;;;;58950:1402;;;;;:::o;61386:895::-;61512:7;61508:45;;61534:19;61547:5;61534:12;:19::i;:::-;-1:-1:-1;;;;;61578:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;61602:22:0;;;;;;:11;:22;;;;;;;;61601:23;61578:46;61574:633;;;61641:55;61663:6;61671:9;61682:6;61690:5;61641:21;:55::i;:::-;61574:633;;;-1:-1:-1;;;;;61719:19:0;;;;;;:11;:19;;;;;;;;61718:20;:46;;;;-1:-1:-1;;;;;;61742:22:0;;;;;;:11;:22;;;;;;;;61718:46;61714:493;;;61781:53;61801:6;61809:9;61820:6;61828:5;61781:19;:53::i;61714:493::-;-1:-1:-1;;;;;61857:19:0;;;;;;:11;:19;;;;;;;;61856:20;:47;;;;-1:-1:-1;;;;;;61881:22:0;;;;;;:11;:22;;;;;;;;61880:23;61856:47;61852:355;;;61920:51;61938:6;61946:9;61957:6;61965:5;61920:17;:51::i;61852:355::-;-1:-1:-1;;;;;61993:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;62016:22:0;;;;;;:11;:22;;;;;;;;61993:45;61989:218;;;62055:55;62077:6;62085:9;62096:6;62104:5;62055:21;:55::i;61989:218::-;62143:52;62161:6;62169:9;62180:6;62189:5;62143:17;:52::i;:::-;62231:7;62227:46;;62253:20;62267:5;62253:13;:20::i;53976:553::-;54073:7;;54109;;54026;;;;;54133:283;54157:9;:16;54153:20;;54133:283;;;54223:7;54199;:21;54207:9;54217:1;54207:12;;;;;;-1:-1:-1;;;54207:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54207:12:0;54199:21;;;;;;;;;;;;;:31;;:66;;;54258:7;54234;:21;54242:9;54252:1;54242:12;;;;;;-1:-1:-1;;;54242:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54242:12:0;54234:21;;;;;;;;;;;;;:31;54199:66;54195:97;;;54275:7;;54284;;54267:25;;;;;;;;;54195:97;54327:7;:21;54335:9;54345:1;54335:12;;;;;;-1:-1:-1;;;54335:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54335:12:0;54327:21;;;;;;;;;;;;;54317:31;;:7;:31;:::i;:::-;54307:41;;54383:7;:21;54391:9;54401:1;54391:12;;;;;;-1:-1:-1;;;54391:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54391:12:0;54383:21;;;;;;;;;;;;;54373:31;;:7;:31;:::i;:::-;54363:41;-1:-1:-1;54175:3:0;;;;:::i;:::-;;;;54133:283;;;;54450:7;;54441;;:16;;;;:::i;:::-;54430:7;:28;54426:59;;;54468:7;;54477;;54460:25;;;;;;;;54426:59;54504:7;;-1:-1:-1;54513:7:0;-1:-1:-1;53976:553:0;;:::o;53033:347::-;53108:7;53117;53126;53146:12;53161:30;53177:7;53185:5;53161:15;:30::i;:::-;53146:45;;53202:17;53222:35;53243:7;53251:5;53222:20;:35::i;:::-;53202:55;-1:-1:-1;53268:23:0;53202:55;53294:14;53304:4;53294:7;:14;:::i;:::-;:26;;;;:::i;:::-;53268:52;-1:-1:-1;53356:4:0;;-1:-1:-1;53362:9:0;-1:-1:-1;;53033:347:0;;;;;:::o;53388:410::-;53502:7;;;;53558:21;53568:11;53558:7;:21;:::i;:::-;53540:39;-1:-1:-1;53590:12:0;53605:18;53612:11;53605:4;:18;:::i;:::-;53590:33;-1:-1:-1;53634:17:0;53654:23;53666:11;53654:9;:23;:::i;:::-;53634:43;-1:-1:-1;53688:23:0;53634:43;53714:14;53724:4;53714:7;:14;:::i;:::-;:26;;;;:::i;:::-;53759:7;;;;-1:-1:-1;53785:4:0;;-1:-1:-1;53388:410:0;;-1:-1:-1;;;;;;;53388:410:0:o;55677:687::-;55736:5;55745:1;55736:10;55733:615;;;55785:12;;;55762:20;:35;-1:-1:-1;55812:16:0;;;;55866:12;;;55843:20;:35;55893:16;55733:615;;;55939:5;55948:1;55939:10;55936:412;;;55990:13;;;55965:21;:38;-1:-1:-1;56018:17:0;;;;56074:13;;;56050:21;:37;56102:17;55936:412;;;56188:17;;;56160:25;:45;-1:-1:-1;56220:21:0;;;;56283:17;;;56256:24;:44;56315:21;55677:687;:::o;63543:625::-;63660:15;63677:23;63702:12;63716:23;63741:12;63755:17;63776:25;63787:7;63795:5;63776:10;:25::i;:::-;63659:142;;;;;;;;;;;;63822:4;63812:7;:14;;;;63848:4;63837:8;:15;;;;63899:7;63881;:15;63889:6;-1:-1:-1;;;;;63881:15:0;-1:-1:-1;;;;;63881:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;63863:15:0;;;;;;:7;:15;;;;;;;;:43;;;;63935:7;:15;;;;:25;;63953:7;;63935:25;:::i;:::-;-1:-1:-1;;;;;63917:15:0;;;;;;;:7;:15;;;;;;:43;;;;63992:18;;;;;;;:36;;64013:15;;63992:36;:::i;:::-;-1:-1:-1;;;;;63971:18:0;;;;;;:7;:18;;;;;:57;64042:24;64056:9;64042:13;:24::i;:::-;64077:23;64089:4;64095;64077:11;:23::i;:::-;64133:9;-1:-1:-1;;;;;64116:44:0;64125:6;-1:-1:-1;;;;;64116:44:0;-1:-1:-1;;;;;;;;;;;64144:15:0;64116:44;;;;;;:::i;:::-;;;;;;;;63543:625;;;;;;;;;;:::o;62890:645::-;63005:15;63022:23;63047:12;63061:23;63086:12;63100:17;63121:25;63132:7;63140:5;63121:10;:25::i;:::-;63004:142;;;;;;;;;;;;63167:4;63157:7;:14;;;;63193:4;63182:8;:15;;;;63244:7;63226;:15;63234:6;-1:-1:-1;;;;;63226:15:0;-1:-1:-1;;;;;63226:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;63208:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;63283:18;;;;;:7;:18;;;;;:36;;63304:15;;63283:36;:::i;:::-;-1:-1:-1;;;;;63262:18:0;;;;;;:7;:18;;;;;;;;:57;;;;63351:7;:18;;;;:36;;63372:15;;63351:36;:::i;62289:593::-;62402:15;62419:23;62444:12;62458:23;62483:12;62497:17;62518:25;62529:7;62537:5;62518:10;:25::i;:::-;62401:142;;;;;;;;;;;;62564:4;62554:7;:14;;;;62590:4;62579:8;:15;;;;62641:7;62623;:15;62631:6;-1:-1:-1;;;;;62623:15:0;-1:-1:-1;;;;;62623:15:0;;;;;;;;;;;;;:25;;;;:::i;47804:700::-;47922:15;47939:23;47964:12;47978:23;48003:12;48017:17;48038:26;48049:7;48058:5;48038:10;:26::i;:::-;47921:143;;;;;;;;;;;;48085:4;48075:7;:14;;;;48111:4;48100:8;:15;;;;48162:7;48144;:15;48152:6;-1:-1:-1;;;;;48144:15:0;-1:-1:-1;;;;;48144:15:0;;;;;;;;;;;;;:25;;;;:::i;:::-;-1:-1:-1;;;;;48126:15:0;;;;;;:7;:15;;;;;;;;:43;;;;48198:7;:15;;;;:25;;48216:7;;48198:25;:::i;56375:480::-;56435:5;56444:1;56435:10;56432:416;;;56476:20;;56461:12;:35;56526:20;;56511:12;:35;56432:416;;;56576:5;56585:1;56576:10;56573:275;;;56618:21;;56602:13;:37;56670:21;;56654:13;:37;56573:275;;;56752:25;;56732:17;:45;56812:24;;56792:17;:44;56375:480;:::o;54893:380::-;54972:7;54992:12;55018:5;55027:1;55018:10;55015:205;;;-1:-1:-1;55052:12:0;;55015:205;;;55094:5;55103:1;55094:10;55091:129;;;-1:-1:-1;55129:13:0;;55091:129;;;-1:-1:-1;55191:17:0;;55091:129;55258:5;55239:14;55249:4;55239:7;:14;:::i;:::-;55238:26;;;;:::i;:::-;55230:35;54893:380;-1:-1:-1;;;;54893:380:0:o;55281:384::-;55365:7;55384:12;55410:5;55419:1;55410:10;55407:205;;;-1:-1:-1;55444:12:0;;55407:205;;;55486:5;55495:1;55486:10;55483:129;;;-1:-1:-1;55521:13:0;;55483:129;;;-1:-1:-1;55583:17:0;;55650:5;55631:14;55641:4;55631:7;:14;:::i;54541:340::-;54602:19;54625:10;:8;:10::i;:::-;54602:33;-1:-1:-1;54646:17:0;54666:23;54602:33;54666:9;:23;:::i;:::-;54741:4;54725:22;;;;:7;:22;;;;;;54646:43;;-1:-1:-1;54725:34:0;;54646:43;;54725:34;:::i;:::-;54716:4;54700:22;;;;:7;:22;;;;;;;;:59;;;;54773:26;;;;;;54770:103;;;54855:4;54839:22;;;;:7;:22;;;;;;:34;;54864:9;;54839:34;:::i;:::-;54830:4;54814:22;;;;:7;:22;;;;;:59;54770:103;54541:340;;;:::o;52320:141::-;52408:4;52398:7;;:14;;;;:::i;:::-;52388:7;:24;52436:10;;:17;;52449:4;;52436:17;:::i;:::-;52423:10;:30;-1:-1:-1;;52320:141:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:607:1;;110:18;151:2;143:6;140:14;137:2;;;157:18;;:::i;:::-;206:2;200:9;279:2;256:17;;-1:-1:-1;;252:31:1;240:44;;286:4;236:55;306:18;;;326:22;;;303:46;300:2;;;352:18;;:::i;:::-;388:2;381:22;436;;;421:6;-1:-1:-1;421:6:1;473:16;;;470:25;-1:-1:-1;467:2:1;;;508:1;505;498:12;467:2;558:6;553:3;546:4;538:6;534:17;521:44;613:1;606:4;597:6;589;585:19;581:30;574:41;;;90:531;;;;;:::o;626:232::-;;723:3;716:4;708:6;704:17;700:27;690:2;;745:5;738;731:20;690:2;771:81;848:3;839:6;826:20;819:4;811:6;807:17;771:81;:::i;863:259::-;;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1040:9;1027:23;1059:33;1086:5;1059:33;:::i;1127:263::-;;1250:2;1238:9;1229:7;1225:23;1221:32;1218:2;;;1271:6;1263;1256:22;1218:2;1308:9;1302:16;1327:33;1354:5;1327:33;:::i;1667:402::-;;;1796:2;1784:9;1775:7;1771:23;1767:32;1764:2;;;1817:6;1809;1802:22;1764:2;1861:9;1848:23;1880:33;1907:5;1880:33;:::i;:::-;1932:5;-1:-1:-1;1989:2:1;1974:18;;1961:32;2002:35;1961:32;2002:35;:::i;:::-;2056:7;2046:17;;;1754:315;;;;;:::o;2074:470::-;;;;2220:2;2208:9;2199:7;2195:23;2191:32;2188:2;;;2241:6;2233;2226:22;2188:2;2285:9;2272:23;2304:33;2331:5;2304:33;:::i;:::-;2356:5;-1:-1:-1;2413:2:1;2398:18;;2385:32;2426:35;2385:32;2426:35;:::i;:::-;2178:366;;2480:7;;-1:-1:-1;;;2534:2:1;2519:18;;;;2506:32;;2178:366::o;2549:396::-;;;2675:2;2663:9;2654:7;2650:23;2646:32;2643:2;;;2696:6;2688;2681:22;2643:2;2740:9;2727:23;2759:33;2786:5;2759:33;:::i;:::-;2811:5;-1:-1:-1;2868:2:1;2853:18;;2840:32;2881;2840;2881;:::i;2950:327::-;;;3079:2;3067:9;3058:7;3054:23;3050:32;3047:2;;;3100:6;3092;3085:22;3047:2;3144:9;3131:23;3163:33;3190:5;3163:33;:::i;:::-;3215:5;3267:2;3252:18;;;;3239:32;;-1:-1:-1;;;3037:240:1:o;3282:1126::-;;;;;;;3495:3;3483:9;3474:7;3470:23;3466:33;3463:2;;;3517:6;3509;3502:22;3463:2;3561:9;3548:23;3580:33;3607:5;3580:33;:::i;:::-;3632:5;-1:-1:-1;3684:2:1;3669:18;;3656:32;;-1:-1:-1;3739:2:1;3724:18;;3711:32;3762:18;3792:14;;;3789:2;;;3824:6;3816;3809:22;3789:2;3867:6;3856:9;3852:22;3842:32;;3912:7;3905:4;3901:2;3897:13;3893:27;3883:2;;3939:6;3931;3924:22;3883:2;3967:75;4034:7;4029:2;4016:16;4011:2;4007;4003:11;3967:75;:::i;:::-;3957:85;;4095:2;4084:9;4080:18;4067:32;4051:48;;4124:2;4114:8;4111:16;4108:2;;;4145:6;4137;4130:22;4108:2;;4173:53;4218:7;4207:8;4196:9;4192:24;4173:53;:::i;:::-;4163:63;;;4273:3;4262:9;4258:19;4245:33;4235:43;;4330:3;4319:9;4315:19;4302:33;4344:32;4368:7;4344:32;:::i;:::-;4395:7;4385:17;;;3453:955;;;;;;;;:::o;4413:253::-;;4522:2;4510:9;4501:7;4497:23;4493:32;4490:2;;;4543:6;4535;4528:22;4490:2;4587:9;4574:23;4606:30;4630:5;4606:30;:::i;4671:257::-;;4791:2;4779:9;4770:7;4766:23;4762:32;4759:2;;;4812:6;4804;4797:22;4759:2;4849:9;4843:16;4868:30;4892:5;4868:30;:::i;5213:190::-;;5325:2;5313:9;5304:7;5300:23;5296:32;5293:2;;;5346:6;5338;5331:22;5293:2;-1:-1:-1;5374:23:1;;5283:120;-1:-1:-1;5283:120:1:o;5408:194::-;;5531:2;5519:9;5510:7;5506:23;5502:32;5499:2;;;5552:6;5544;5537:22;5499:2;-1:-1:-1;5580:16:1;;5489:113;-1:-1:-1;5489:113:1:o;5607:327::-;;;5736:2;5724:9;5715:7;5711:23;5707:32;5704:2;;;5757:6;5749;5742:22;5704:2;5798:9;5785:23;5775:33;;5858:2;5847:9;5843:18;5830:32;5871:33;5898:5;5871:33;:::i;5939:616::-;;;;;6111:3;6099:9;6090:7;6086:23;6082:33;6079:2;;;6133:6;6125;6118:22;6079:2;6174:9;6161:23;6151:33;;6234:2;6223:9;6219:18;6206:32;6247:33;6274:5;6247:33;:::i;:::-;6299:5;-1:-1:-1;6351:2:1;6336:18;;6323:32;;-1:-1:-1;6406:2:1;6391:18;;6378:32;6433:18;6422:30;;6419:2;;;6470:6;6462;6455:22;6419:2;6498:51;6541:7;6532:6;6521:9;6517:22;6498:51;:::i;:::-;6488:61;;;6069:486;;;;;;;:::o;6560:321::-;;;6686:2;6674:9;6665:7;6661:23;6657:32;6654:2;;;6707:6;6699;6692:22;6654:2;6748:9;6735:23;6725:33;;6808:2;6797:9;6793:18;6780:32;6821:30;6845:5;6821:30;:::i;6886:389::-;;;;7029:2;7017:9;7008:7;7004:23;7000:32;6997:2;;;7050:6;7042;7035:22;6997:2;7091:9;7078:23;7068:33;;7151:2;7140:9;7136:18;7123:32;7164:30;7188:5;7164:30;:::i;7280:410::-;;;7418:2;7406:9;7397:7;7393:23;7389:32;7386:2;;;7439:6;7431;7424:22;7386:2;7480:9;7467:23;7457:33;;7541:2;7530:9;7526:18;7513:32;7568:18;7560:6;7557:30;7554:2;;;7605:6;7597;7590:22;7554:2;7633:51;7676:7;7667:6;7656:9;7652:22;7633:51;:::i;:::-;7623:61;;;7376:314;;;;;:::o;7695:258::-;;;7824:2;7812:9;7803:7;7799:23;7795:32;7792:2;;;7845:6;7837;7830:22;7792:2;-1:-1:-1;;7873:23:1;;;7943:2;7928:18;;;7915:32;;-1:-1:-1;7782:171:1:o;7958:326::-;;;;8104:2;8092:9;8083:7;8079:23;8075:32;8072:2;;;8125:6;8117;8110:22;8072:2;-1:-1:-1;;8153:23:1;;;8223:2;8208:18;;8195:32;;-1:-1:-1;8274:2:1;8259:18;;;8246:32;;8062:222;-1:-1:-1;8062:222:1:o;8289:259::-;;8370:5;8364:12;8397:6;8392:3;8385:19;8413:63;8469:6;8462:4;8457:3;8453:14;8446:4;8439:5;8435:16;8413:63;:::i;:::-;8530:2;8509:15;-1:-1:-1;;8505:29:1;8496:39;;;;8537:4;8492:50;;8340:208;-1:-1:-1;;8340:208:1:o;8553:274::-;;8720:6;8714:13;8736:53;8782:6;8777:3;8770:4;8762:6;8758:17;8736:53;:::i;:::-;8805:16;;;;;8690:137;-1:-1:-1;;8690:137:1:o;9042:203::-;-1:-1:-1;;;;;9206:32:1;;;;9188:51;;9176:2;9161:18;;9143:102::o;9250:778::-;-1:-1:-1;;;;;9665:15:1;;;9647:34;;9712:2;9697:18;;9690:34;;;;9755:2;9740:18;;9733:34;;;;9798:2;9783:18;;9776:34;;;;9847:15;;;9841:3;9826:19;;9819:44;9900:15;;9627:3;9879:19;;9872:44;9953:15;;9947:3;9932:19;;9925:44;10006:15;;;10000:3;9985:19;;9978:44;9596:3;9581:19;;9563:465::o;10033:274::-;-1:-1:-1;;;;;10225:32:1;;;;10207:51;;10289:2;10274:18;;10267:34;10195:2;10180:18;;10162:145::o;10312:472::-;;10568:1;10564;10559:3;10555:11;10551:19;10543:6;10539:32;10528:9;10521:51;10608:6;10603:2;10592:9;10588:18;10581:34;10665:6;10658:14;10651:22;10646:2;10635:9;10631:18;10624:50;10710:3;10705:2;10694:9;10690:18;10683:31;10731:47;10773:3;10762:9;10758:19;10750:6;10731:47;:::i;:::-;10723:55;10511:273;-1:-1:-1;;;;;;10511:273:1:o;10789:387::-;;11021:1;11017;11012:3;11008:11;11004:19;10996:6;10992:32;10981:9;10974:51;11061:6;11056:2;11045:9;11041:18;11034:34;11104:2;11099;11088:9;11084:18;11077:30;11124:46;11166:2;11155:9;11151:18;11143:6;11124:46;:::i;:::-;11116:54;10964:212;-1:-1:-1;;;;;10964:212:1:o;11181:1102::-;;11631:1;11627;11622:3;11618:11;11614:19;11672:2;11664:6;11660:15;11649:9;11642:34;11712:6;11707:2;11696:9;11692:18;11685:34;11755:3;11750:2;11739:9;11735:18;11728:31;11776:47;11818:3;11807:9;11803:19;11795:6;11776:47;:::i;:::-;11854:2;11839:18;;11832:34;;;;11910:14;;11903:22;11897:3;11882:19;;11875:51;-1:-1:-1;11970:14:1;;11963:22;11957:3;11942:19;;11935:51;12017:3;12002:19;;11995:35;;;;12061:3;12046:19;;12039:35;;;;12118:14;;12111:22;12105:3;12090:19;;12083:51;12165:3;12150:19;;12143:35;12209:3;12194:19;;12187:36;12260:16;;;12254:3;12239:19;;;12232:45;11768:55;11594:689;-1:-1:-1;;;11594:689:1:o;12288:187::-;12453:14;;12446:22;12428:41;;12416:2;12401:18;;12383:92::o;12480:258::-;12673:14;;12666:22;12648:41;;12720:2;12705:18;;12698:34;12636:2;12621:18;;12603:135::o;13444:221::-;;13593:2;13582:9;13575:21;13613:46;13655:2;13644:9;13640:18;13632:6;13613:46;:::i;13670:398::-;13872:2;13854:21;;;13911:2;13891:18;;;13884:30;13950:34;13945:2;13930:18;;13923:62;-1:-1:-1;;;14016:2:1;14001:18;;13994:32;14058:3;14043:19;;13844:224::o;14073:335::-;14275:2;14257:21;;;14314:2;14294:18;;;14287:30;-1:-1:-1;;;14348:2:1;14333:18;;14326:41;14399:2;14384:18;;14247:161::o;14413:401::-;14615:2;14597:21;;;14654:2;14634:18;;;14627:30;14693:34;14688:2;14673:18;;14666:62;-1:-1:-1;;;14759:2:1;14744:18;;14737:35;14804:3;14789:19;;14587:227::o;14819:400::-;15021:2;15003:21;;;15060:2;15040:18;;;15033:30;15099:34;15094:2;15079:18;;15072:62;-1:-1:-1;;;15165:2:1;15150:18;;15143:34;15209:3;15194:19;;14993:226::o;15224:335::-;15426:2;15408:21;;;15465:2;15445:18;;;15438:30;-1:-1:-1;;;15499:2:1;15484:18;;15477:41;15550:2;15535:18;;15398:161::o;15564:406::-;15766:2;15748:21;;;15805:2;15785:18;;;15778:30;15844:34;15839:2;15824:18;;15817:62;-1:-1:-1;;;15910:2:1;15895:18;;15888:40;15960:3;15945:19;;15738:232::o;15975:345::-;16177:2;16159:21;;;16216:2;16196:18;;;16189:30;-1:-1:-1;;;16250:2:1;16235:18;;16228:51;16311:2;16296:18;;16149:171::o;16325:351::-;16527:2;16509:21;;;16566:2;16546:18;;;16539:30;16605:29;16600:2;16585:18;;16578:57;16667:2;16652:18;;16499:177::o;16681:355::-;16883:2;16865:21;;;16922:2;16902:18;;;16895:30;16961:33;16956:2;16941:18;;16934:61;17027:2;17012:18;;16855:181::o;17041:335::-;17243:2;17225:21;;;17282:2;17262:18;;;17255:30;-1:-1:-1;;;17316:2:1;17301:18;;17294:41;17367:2;17352:18;;17215:161::o;17381:329::-;17583:2;17565:21;;;17622:1;17602:18;;;17595:29;-1:-1:-1;;;17655:2:1;17640:18;;17633:36;17701:2;17686:18;;17555:155::o;17715:350::-;17917:2;17899:21;;;17956:2;17936:18;;;17929:30;17995:28;17990:2;17975:18;;17968:56;18056:2;18041:18;;17889:176::o;18070:346::-;18272:2;18254:21;;;18311:2;18291:18;;;18284:30;-1:-1:-1;;;18345:2:1;18330:18;;18323:52;18407:2;18392:18;;18244:172::o;18421:400::-;18623:2;18605:21;;;18662:2;18642:18;;;18635:30;18701:34;18696:2;18681:18;;18674:62;-1:-1:-1;;;18767:2:1;18752:18;;18745:34;18811:3;18796:19;;18595:226::o;18826:341::-;19028:2;19010:21;;;19067:2;19047:18;;;19040:30;-1:-1:-1;;;19101:2:1;19086:18;;19079:47;19158:2;19143:18;;19000:167::o;19172:355::-;19374:2;19356:21;;;19413:2;19393:18;;;19386:30;19452:33;19447:2;19432:18;;19425:61;19518:2;19503:18;;19346:181::o;19532:347::-;19734:2;19716:21;;;19773:2;19753:18;;;19746:30;19812:25;19807:2;19792:18;;19785:53;19870:2;19855:18;;19706:173::o;19884:404::-;20086:2;20068:21;;;20125:2;20105:18;;;20098:30;20164:34;20159:2;20144:18;;20137:62;-1:-1:-1;;;20230:2:1;20215:18;;20208:38;20278:3;20263:19;;20058:230::o;20293:398::-;20495:2;20477:21;;;20534:2;20514:18;;;20507:30;20573:34;20568:2;20553:18;;20546:62;-1:-1:-1;;;20639:2:1;20624:18;;20617:32;20681:3;20666:19;;20467:224::o;20696:401::-;20898:2;20880:21;;;20937:2;20917:18;;;20910:30;20976:34;20971:2;20956:18;;20949:62;-1:-1:-1;;;21042:2:1;21027:18;;21020:35;21087:3;21072:19;;20870:227::o;21102:402::-;21304:2;21286:21;;;21343:2;21323:18;;;21316:30;21382:34;21377:2;21362:18;;21355:62;-1:-1:-1;;;21448:2:1;21433:18;;21426:36;21494:3;21479:19;;21276:228::o;21509:335::-;21711:2;21693:21;;;21750:2;21730:18;;;21723:30;-1:-1:-1;;;21784:2:1;21769:18;;21762:41;21835:2;21820:18;;21683:161::o;21849:404::-;22051:2;22033:21;;;22090:2;22070:18;;;22063:30;22129:34;22124:2;22109:18;;22102:62;-1:-1:-1;;;22195:2:1;22180:18;;22173:38;22243:3;22228:19;;22023:230::o;22258:405::-;22460:2;22442:21;;;22499:2;22479:18;;;22472:30;22538:34;22533:2;22518:18;;22511:62;-1:-1:-1;;;22604:2:1;22589:18;;22582:39;22653:3;22638:19;;22432:231::o;22668:399::-;22870:2;22852:21;;;22909:2;22889:18;;;22882:30;22948:34;22943:2;22928:18;;22921:62;-1:-1:-1;;;23014:2:1;22999:18;;22992:33;23057:3;23042:19;;22842:225::o;23072:409::-;23274:2;23256:21;;;23313:2;23293:18;;;23286:30;23352:34;23347:2;23332:18;;23325:62;-1:-1:-1;;;23418:2:1;23403:18;;23396:43;23471:3;23456:19;;23246:235::o;23486:349::-;23688:2;23670:21;;;23727:2;23707:18;;;23700:30;23766:27;23761:2;23746:18;;23739:55;23826:2;23811:18;;23660:175::o;23840:354::-;24042:2;24024:21;;;24081:2;24061:18;;;24054:30;24120:32;24115:2;24100:18;;24093:60;24185:2;24170:18;;24014:180::o;24199:350::-;24401:2;24383:21;;;24440:2;24420:18;;;24413:30;24479:28;24474:2;24459:18;;24452:56;24540:2;24525:18;;24373:176::o;24554:335::-;24756:2;24738:21;;;24795:2;24775:18;;;24768:30;-1:-1:-1;;;24829:2:1;24814:18;;24807:41;24880:2;24865:18;;24728:161::o;24894:399::-;25096:2;25078:21;;;25135:2;25115:18;;;25108:30;25174:34;25169:2;25154:18;;25147:62;-1:-1:-1;;;25240:2:1;25225:18;;25218:33;25283:3;25268:19;;25068:225::o;25298:330::-;25500:2;25482:21;;;25539:1;25519:18;;;25512:29;-1:-1:-1;;;25572:2:1;25557:18;;25550:37;25619:2;25604:18;;25472:156::o;25633:398::-;25835:2;25817:21;;;25874:2;25854:18;;;25847:30;25913:34;25908:2;25893:18;;25886:62;-1:-1:-1;;;25979:2:1;25964:18;;25957:32;26021:3;26006:19;;25807:224::o;26036:335::-;26238:2;26220:21;;;26277:2;26257:18;;;26250:30;-1:-1:-1;;;26311:2:1;26296:18;;26289:41;26362:2;26347:18;;26210:161::o;26376:397::-;26578:2;26560:21;;;26617:2;26597:18;;;26590:30;26656:34;26651:2;26636:18;;26629:62;-1:-1:-1;;;26722:2:1;26707:18;;26700:31;26763:3;26748:19;;26550:223::o;26778:177::-;26924:25;;;26912:2;26897:18;;26879:76::o;26960:983::-;;27270:3;27259:9;27255:19;27301:6;27290:9;27283:25;27327:2;27365:6;27360:2;27349:9;27345:18;27338:34;27408:3;27403:2;27392:9;27388:18;27381:31;27432:6;27467;27461:13;27498:6;27490;27483:22;27536:3;27525:9;27521:19;27514:26;;27575:2;27567:6;27563:15;27549:29;;27596:4;27609:195;27623:6;27620:1;27617:13;27609:195;;;27688:13;;-1:-1:-1;;;;;27684:39:1;27672:52;;27779:15;;;;27744:12;;;;27720:1;27638:9;27609:195;;;-1:-1:-1;;;;;;;27860:32:1;;;;27855:2;27840:18;;27833:60;-1:-1:-1;;;27924:3:1;27909:19;27902:35;27821:3;27231:712;-1:-1:-1;;;27231:712:1:o;27948:248::-;28122:25;;;28178:2;28163:18;;28156:34;28110:2;28095:18;;28077:119::o;28201:128::-;;28272:1;28268:6;28265:1;28262:13;28259:2;;;28278:18;;:::i;:::-;-1:-1:-1;28314:9:1;;28249:80::o;28334:217::-;;28400:1;28390:2;;-1:-1:-1;;;28425:31:1;;28479:4;28476:1;28469:15;28507:4;28432:1;28497:15;28390:2;-1:-1:-1;28536:9:1;;28380:171::o;28556:168::-;;28662:1;28658;28654:6;28650:14;28647:1;28644:21;28639:1;28632:9;28625:17;28621:45;28618:2;;;28669:18;;:::i;:::-;-1:-1:-1;28709:9:1;;28608:116::o;28729:125::-;;28797:1;28794;28791:8;28788:2;;;28802:18;;:::i;:::-;-1:-1:-1;28839:9:1;;28778:76::o;28859:258::-;28931:1;28941:113;28955:6;28952:1;28949:13;28941:113;;;29031:11;;;29025:18;29012:11;;;29005:39;28977:2;28970:10;28941:113;;;29072:6;29069:1;29066:13;29063:2;;;29107:1;29098:6;29093:3;29089:16;29082:27;29063:2;;28912:205;;;:::o;29122:380::-;29207:1;29197:12;;29254:1;29244:12;;;29265:2;;29319:4;29311:6;29307:17;29297:27;;29265:2;29372;29364:6;29361:14;29341:18;29338:38;29335:2;;;29418:10;29413:3;29409:20;29406:1;29399:31;29453:4;29450:1;29443:15;29481:4;29478:1;29471:15;29507:135;;-1:-1:-1;;29567:17:1;;29564:2;;;29587:18;;:::i;:::-;-1:-1:-1;29634:1:1;29623:13;;29554:88::o;29647:127::-;29708:10;29703:3;29699:20;29696:1;29689:31;29739:4;29736:1;29729:15;29763:4;29760:1;29753:15;29779:127;29840:10;29835:3;29831:20;29828:1;29821:31;29871:4;29868:1;29861:15;29895:4;29892:1;29885:15;29911:133;-1:-1:-1;;;;;29988:31:1;;29978:42;;29968:2;;30034:1;30031;30024:12;30049:120;30137:5;30130:13;30123:21;30116:5;30113:32;30103:2;;30159:1;30156;30149:12
Swarm Source
ipfs://bbf8ad78ed1302024de6d4855b1c2c8fea88d6ca183254bd851205fc18749b39
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)