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.