ERC-20
DeFi
Overview
Max Total Supply
1.09414384 ccBTC
Holders
35 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 8 Decimals)
Balance
0.0016 ccBTCValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ccBTC
Compiler Version
v0.7.3+commit.9bfce1f6
Contract Source Code (Solidity Multiple files format)
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; import "ccToken.sol"; /// @title ccBTC contract ccBTC is ccToken { constructor() ccToken("Cross-Chain BTC", "ccBTC", 8, (ERC20ControllerViewIf)(0)){} }
pragma solidity ^0.7.0; pragma experimental SMTChecker; //SPDX-License-Identifier: MIT import "ERC20Basic.sol"; /// @title BurnableToken contract BurnableToken is ERC20Basic { using SafeMath for uint256; event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public returns (bool){ address _who = msg.sender; require(_value <= balances[_who]); balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); return true; } }
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; import "ERC20If.sol"; import "OwnableIf.sol"; /// @title CanReclaimToken abstract contract CanReclaimToken is OwnableIf { function reclaimToken(ERC20If _token) external onlyOwner { uint256 balance = _token.balanceOf((address)(this)); require(_token.transfer(_owner(), balance)); } }
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; import "ccTokenControllerIf.sol"; import "NamedERC20.sol"; import "MintableERC20.sol"; import "BurnableToken.sol"; import "Claimable.sol"; import "CanReclaimToken.sol"; /// @title ccToken contract ccToken is NamedERC20, Claimable, MintableERC20, BurnableToken, CanReclaimToken { using SafeMath for uint256; ERC20ControllerViewIf public erc20Controller; constructor(string memory _name, string memory _symbol, uint8 _decimals, ERC20ControllerViewIf _erc20Controller ) NamedERC20(_name, _symbol, _decimals){ erc20Controller = _erc20Controller; } function hasController() view public returns (bool){ return (address)(erc20Controller) != (address)(0); } function _notPaused() override internal view returns (bool){ if (hasController()) { return !erc20Controller.paused(); } return true; } function _notBlocked(address _who) override internal view returns (bool){ if (hasController()) { return !erc20Controller.blocked(_who); } return true; } function setController(ERC20ControllerViewIf newController) public onlyOwner { erc20Controller = newController; } event BurnBlocked(address indexed burner, uint256 value); function burnBlocked(address addrBlocked, uint256 amount) public onlyOwner returns (bool){ address _who = addrBlocked; require(!_notBlocked(_who), "addr not blocked"); uint256 _value = amount; if (_value > balances[_who]) { _value = balances[_who]; } balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit BurnBlocked(_who, _value); emit Transfer(_who, address(0), _value); return true; } }
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; import "MemberMgrIf.sol"; import "ERC20If.sol"; /// @title ERC20ControllerViewIf abstract contract ERC20ControllerViewIf { function blocked(address _who) virtual public view returns (bool); function paused() virtual public view returns (bool); } /// @title ccTokenControllerIf abstract contract ccTokenControllerIf is MemberMgrIf, ERC20ControllerViewIf { function mint(address to, uint amount) virtual external returns (bool); function burn(uint value) virtual external returns (bool); function getToken() virtual external returns (ERC20If); }
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; import "Ownable.sol"; // File: openzeppelin-solidity/contracts/ownership/Claimable.sol /** * @title Claimable * @dev Extension for the Ownable contract, where the ownership needs to be claimed. * This allows the new owner to accept the transfer. */ contract Claimable is Ownable { address public pendingOwner; /** * @dev Modifier throws if called by any account other than the pendingOwner. */ modifier onlyPendingOwner() { require(msg.sender == pendingOwner, "no permission"); _; } /** * @dev Allows the current owner to set the pendingOwner address. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) override public onlyOwner { pendingOwner = newOwner; } /** * @dev Allows the pendingOwner address to finalize the transfer. */ function claimOwnership() public onlyPendingOwner { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } }
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; import "ERC20If.sol"; import "SafeMathLib.sol"; /// @title ERC20Basic contract ERC20Basic is ERC20If { using SafeMath for uint256; mapping(address => uint256) internal balances; mapping(address => mapping(address => uint256)) internal allowed; uint256 internal totalSupply_; function _notPaused() virtual internal view returns (bool){return false;} function _notBlocked(address) virtual internal view returns (bool){return false;} modifier notPaused() { require(_notPaused(), "contract has been paused"); _; } modifier notBlocked() { require(_notBlocked(msg.sender), "sender has been blocked"); _; } function totalSupply() override public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) override public notPaused notBlocked returns (bool) { require(_notBlocked(_to), "to-address has been blocked"); require(_value <= balances[msg.sender], "insufficient balance"); require(_to != address(0), "invalid to-address"); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) override public view returns (uint256) { return balances[_owner]; } function transferFrom( address _from, address _to, uint256 _value ) override public notPaused notBlocked returns (bool) { require(_notBlocked(_from), "from-address has been blocked"); require(_notBlocked(_to), "to-address has been blocked"); require(_value <= balances[_from], "insufficient balance"); require(_to != address(0), "invalid to-address"); if (_from == msg.sender){ balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); return true; } require(_value <= allowed[_from][msg.sender], "value > allowed"); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) override public notPaused notBlocked returns (bool) { require(_notBlocked(_spender), "spender-address has been blocked"); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function increaseApproval( address _spender, uint256 _addedValue ) public notPaused notBlocked returns (bool) { require(_notBlocked(_spender), "spender-address has been blocked"); allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint _subtractedValue ) public notPaused notBlocked returns (bool success) { require(_notBlocked(_spender), "spender-address has been blocked"); uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue >= oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function allowance( address _owner, address _spender ) override public view returns (uint256) { return allowed[_owner][_spender]; } }
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; /// @title ERC20If abstract contract ERC20If { function totalSupply() virtual public view returns (uint256); function balanceOf(address _who) virtual public view returns (uint256); function transfer(address _to, uint256 _value) virtual public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); function allowance(address _owner, address _spender) virtual public view returns (uint256); function transferFrom(address _from, address _to, uint256 _value) virtual public returns (bool); function approve(address _spender, uint256 _value) virtual public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); }
pragma solidity ^0.7.0; pragma experimental SMTChecker; //SPDX-License-Identifier: MIT /// @title MemberMgrIf abstract contract MemberMgrIf { function requireMerchant(address _who) virtual public view; function requireCustodian(address _who) virtual public view; }
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; import "ERC20Basic.sol"; import "OwnableIf.sol"; /// @title MintableERC20 abstract contract MintableERC20 is ERC20Basic, OwnableIf { using SafeMath for uint256; event Mint(address indexed to, uint256 amount); event MintFinished(bool indexed finished); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished, "can't mint"); _; } modifier hasMintPermission() { require(msg.sender == _owner(), "no permission..."); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint( address _to, uint256 _amount ) public hasMintPermission canMint notPaused returns (bool) { require(_notBlocked(_to), "to-address has been blocked"); totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting(bool finished) public onlyOwner returns (bool) { mintingFinished = finished; emit MintFinished(mintingFinished); return true; } }
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; /// @title NamedERC20 contract NamedERC20 { string public name; string public symbol; uint8 public decimals; constructor(string memory _name, string memory _symbol, uint8 _decimals) { name = _name; symbol = _symbol; decimals = _decimals; } }
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; import "OwnableIf.sol"; // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable is OwnableIf { address public owner; function _owner() view override public returns (address){ return owner; } // event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() { owner = msg.sender; } // /** // * @dev Throws if called by any account other than the owner. // */ // modifier onlyOwner() { // require(msg.sender == owner); // _; // } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ // function renounceOwnership() public onlyOwner { // emit OwnershipRenounced(owner); // owner = address(0); // } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) virtual public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0), "invalid _newOwner"); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } }
//SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ abstract contract OwnableIf { /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == _owner(), "not owner......"); _; } function _owner() view virtual public returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.7.0; pragma experimental SMTChecker; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BurnBlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"finished","type":"bool"}],"name":"MintFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addrBlocked","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"erc20Controller","outputs":[{"internalType":"contract ERC20ControllerViewIf","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"finished","type":"bool"}],"name":"finishMinting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hasController","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ERC20If","name":"_token","type":"address"}],"name":"reclaimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ERC20ControllerViewIf","name":"newController","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","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":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600760146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600f81526020017f43726f73732d436861696e2042544300000000000000000000000000000000008152506040518060400160405280600581526020017f6363425443000000000000000000000000000000000000000000000000000000815250600860008383838260009080519060200190620000b89291906200017c565b508160019080519060200190620000d19291906200017c565b5080600260006101000a81548160ff021916908360ff16021790555050505033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000222565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001bf57805160ff1916838001178555620001f0565b82800160010185558215620001f0579182015b82811115620001ef578251825591602001919060010190620001d2565b5b509050620001ff919062000203565b5090565b5b808211156200021e57600081600090555060010162000204565b5090565b61356680620002326000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063b2bdfa7b11610097578063dd62ed3e11610071578063dd62ed3e14610785578063e30c3978146107fd578063ec0cf3dc14610831578063f2fde38b1461089557610173565b8063b2bdfa7b146106cd578063d73dd62314610701578063db084bd71461076557610173565b806370a08231146104d05780638da5cb5b1461052857806392eefe9b1461055c57806395d89b41146105a05780639af26b7814610623578063a9059cbb1461066957610173565b8063313ce56711610130578063313ce56714610365578063378574e51461038657806340c10f19146103ba57806342966c681461041e5780634e71e0c814610462578063661884631461046c57610173565b806305d2035b1461017857806306fdde0314610198578063095ea7b31461021b57806317ffc3201461027f57806318160ddd146102c357806323b872dd146102e1575b600080fd5b6101806108d9565b60405180821515815260200191505060405180910390f35b6101a06108ec565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e05780820151818401526020810190506101c5565b50505050905090810190601f16801561020d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102676004803603604081101561023157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061098a565b60405180821515815260200191505060405180910390f35b6102c16004803603602081101561029557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bec565b005b6102cb610dfa565b6040518082815260200191505060405180910390f35b61034d600480360360608110156102f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e04565b60405180821515815260200191505060405180910390f35b61036d61164c565b604051808260ff16815260200191505060405180910390f35b61038e61165f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610406600480360360408110156103d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611685565b60405180821515815260200191505060405180910390f35b61044a6004803603602081101561043457600080fd5b8101908080359060200190929190505050611a15565b60405180821515815260200191505060405180910390f35b61046a611bd5565b005b6104b86004803603604081101561048257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ddd565b60405180821515815260200191505060405180910390f35b610512600480360360208110156104e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121de565b6040518082815260200191505060405180910390f35b610530612227565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61059e6004803603602081101561057257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061224d565b005b6105a8612339565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105e85780820151818401526020810190506105cd565b50505050905090810190601f1680156106155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106516004803603602081101561063957600080fd5b810190808035151590602001909291905050506123d7565b60405180821515815260200191505060405180910390f35b6106b56004803603604081101561067f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124e2565b60405180821515815260200191505060405180910390f35b6106d5612945565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61074d6004803603604081101561071757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061296f565b60405180821515815260200191505060405180910390f35b61076d612cdb565b60405180821515815260200191505060405180910390f35b6107e76004803603604081101561079b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d34565b6040518082815260200191505060405180910390f35b610805612dbb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61087d6004803603604081101561084757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612de1565b60405180821515815260200191505060405180910390f35b6108d7600480360360208110156108ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061310b565b005b600760149054906101000a900460ff1681565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109825780601f1061095757610100808354040283529160200191610982565b820191906000526020600020905b81548152906001019060200180831161096557829003601f168201915b505050505081565b60006109946131f7565b610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b610a0f336132b9565b610a81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f73656e64657220686173206265656e20626c6f636b656400000000000000000081525060200191505060405180910390fd5b610a8a836132b9565b610afc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f7370656e6465722d6164647265737320686173206265656e20626c6f636b656481525060200191505060405180910390fd5b81600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b610bf4612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610cfd57600080fd5b505afa158015610d11573d6000803e3d6000fd5b505050506040513d6020811015610d2757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610d5e612945565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610db257600080fd5b505af1158015610dc6573d6000803e3d6000fd5b505050506040513d6020811015610ddc57600080fd5b8101908080519060200190929190505050610df657600080fd5b5050565b6000600554905090565b6000610e0e6131f7565b610e80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b610e89336132b9565b610efb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f73656e64657220686173206265656e20626c6f636b656400000000000000000081525060200191505060405180910390fd5b610f04846132b9565b610f76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f66726f6d2d6164647265737320686173206265656e20626c6f636b656400000081525060200191505060405180910390fd5b610f7f836132b9565b610ff1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f2d6164647265737320686173206265656e20626c6f636b6564000000000081525060200191505060405180910390fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156110a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e73756666696369656e742062616c616e636500000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420746f2d61646472657373000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156112b0576111cf82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061126482600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019050611645565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f76616c7565203e20616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b6113f482600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061148982600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061155b82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190505b9392505050565b600260009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061168f612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6e6f207065726d697373696f6e2e2e2e0000000000000000000000000000000081525060200191505060405180910390fd5b600760149054906101000a900460ff16156117b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f63616e2774206d696e740000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6117ba6131f7565b61182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b611835836132b9565b6118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f2d6164647265737320686173206265656e20626c6f636b6564000000000081525060200191505060405180910390fd5b6118bc826005546133e890919063ffffffff16565b60058190555061191482600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600080339050600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054831115611a6757600080fd5b611ab983600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b118360055461339e90919063ffffffff16565b6005819055508073ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5846040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a36001915050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6e6f207065726d697373696f6e0000000000000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611de76131f7565b611e59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b611e62336132b9565b611ed4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f73656e64657220686173206265656e20626c6f636b656400000000000000000081525060200191505060405180910390fd5b611edd836132b9565b611f4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f7370656e6465722d6164647265737320686173206265656e20626c6f636b656481525060200191505060405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831061205e576000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120f2565b612071838261339e90919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612255612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123cf5780601f106123a4576101008083540402835291602001916123cf565b820191906000526020600020905b8154815290600101906020018083116123b257829003601f168201915b505050505081565b60006123e1612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b81600760146101000a81548160ff021916908315150217905550600760149054906101000a900460ff1615157ffc061c4ab31aa523af95591b59ea9fdc28779e0f9bba6b997320fdd0f7653c2760405160405180910390a260019050919050565b60006124ec6131f7565b61255e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b612567336132b9565b6125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f73656e64657220686173206265656e20626c6f636b656400000000000000000081525060200191505060405180910390fd5b6125e2836132b9565b612654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f2d6164647265737320686173206265656e20626c6f636b6564000000000081525060200191505060405180910390fd5b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115612709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e73756666696369656e742062616c616e636500000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420746f2d61646472657373000000000000000000000000000081525060200191505060405180910390fd5b6127fe82600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061289382600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006129796131f7565b6129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b6129f4336132b9565b612a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f73656e64657220686173206265656e20626c6f636b656400000000000000000081525060200191505060405180910390fd5b612a6f836132b9565b612ae1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f7370656e6465722d6164647265737320686173206265656e20626c6f636b656481525060200191505060405180910390fd5b612b7082600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e890919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612deb612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b6000839050612e99816132b9565b15612f0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f61646472206e6f7420626c6f636b65640000000000000000000000000000000081525060200191505060405180910390fd5b6000839050600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115612f9b57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b612fed81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130458160055461339e90919063ffffffff16565b6005819055508173ffffffffffffffffffffffffffffffffffffffff167feff07194896bfa6254e521809f217f70dbdd9cefa6b894f5326af3ce8402c320826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019250505092915050565b613113612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146131b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000613201612cdb565b156132b157600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561326e57600080fd5b505afa158015613282573d6000803e3d6000fd5b505050506040513d602081101561329857600080fd5b81019080805190602001909291905050501590506132b6565b600190505b90565b60006132c3612cdb565b1561339457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e5962195836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561335157600080fd5b505afa158015613365573d6000803e3d6000fd5b505050506040513d602081101561337b57600080fd5b8101908080519060200190929190505050159050613399565b600190505b919050565b60006133e083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613470565b905092915050565b600080828401905083811015613466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600083831115829061351d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134e25780820151818401526020810190506134c7565b50505050905090810190601f16801561350f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fea264697066735822122022f86cc7a20c1c1e0456c10b0b02ca83c6e3b4e26886f4b9bd7b8a4f4a97407664736f6c63430007030033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c806370a08231116100de578063b2bdfa7b11610097578063dd62ed3e11610071578063dd62ed3e14610785578063e30c3978146107fd578063ec0cf3dc14610831578063f2fde38b1461089557610173565b8063b2bdfa7b146106cd578063d73dd62314610701578063db084bd71461076557610173565b806370a08231146104d05780638da5cb5b1461052857806392eefe9b1461055c57806395d89b41146105a05780639af26b7814610623578063a9059cbb1461066957610173565b8063313ce56711610130578063313ce56714610365578063378574e51461038657806340c10f19146103ba57806342966c681461041e5780634e71e0c814610462578063661884631461046c57610173565b806305d2035b1461017857806306fdde0314610198578063095ea7b31461021b57806317ffc3201461027f57806318160ddd146102c357806323b872dd146102e1575b600080fd5b6101806108d9565b60405180821515815260200191505060405180910390f35b6101a06108ec565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101e05780820151818401526020810190506101c5565b50505050905090810190601f16801561020d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102676004803603604081101561023157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061098a565b60405180821515815260200191505060405180910390f35b6102c16004803603602081101561029557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bec565b005b6102cb610dfa565b6040518082815260200191505060405180910390f35b61034d600480360360608110156102f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e04565b60405180821515815260200191505060405180910390f35b61036d61164c565b604051808260ff16815260200191505060405180910390f35b61038e61165f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610406600480360360408110156103d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611685565b60405180821515815260200191505060405180910390f35b61044a6004803603602081101561043457600080fd5b8101908080359060200190929190505050611a15565b60405180821515815260200191505060405180910390f35b61046a611bd5565b005b6104b86004803603604081101561048257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ddd565b60405180821515815260200191505060405180910390f35b610512600480360360208110156104e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121de565b6040518082815260200191505060405180910390f35b610530612227565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61059e6004803603602081101561057257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061224d565b005b6105a8612339565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105e85780820151818401526020810190506105cd565b50505050905090810190601f1680156106155780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106516004803603602081101561063957600080fd5b810190808035151590602001909291905050506123d7565b60405180821515815260200191505060405180910390f35b6106b56004803603604081101561067f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124e2565b60405180821515815260200191505060405180910390f35b6106d5612945565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61074d6004803603604081101561071757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061296f565b60405180821515815260200191505060405180910390f35b61076d612cdb565b60405180821515815260200191505060405180910390f35b6107e76004803603604081101561079b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d34565b6040518082815260200191505060405180910390f35b610805612dbb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61087d6004803603604081101561084757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612de1565b60405180821515815260200191505060405180910390f35b6108d7600480360360208110156108ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061310b565b005b600760149054906101000a900460ff1681565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109825780601f1061095757610100808354040283529160200191610982565b820191906000526020600020905b81548152906001019060200180831161096557829003601f168201915b505050505081565b60006109946131f7565b610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b610a0f336132b9565b610a81576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f73656e64657220686173206265656e20626c6f636b656400000000000000000081525060200191505060405180910390fd5b610a8a836132b9565b610afc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f7370656e6465722d6164647265737320686173206265656e20626c6f636b656481525060200191505060405180910390fd5b81600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b610bf4612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610cfd57600080fd5b505afa158015610d11573d6000803e3d6000fd5b505050506040513d6020811015610d2757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610d5e612945565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610db257600080fd5b505af1158015610dc6573d6000803e3d6000fd5b505050506040513d6020811015610ddc57600080fd5b8101908080519060200190929190505050610df657600080fd5b5050565b6000600554905090565b6000610e0e6131f7565b610e80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b610e89336132b9565b610efb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f73656e64657220686173206265656e20626c6f636b656400000000000000000081525060200191505060405180910390fd5b610f04846132b9565b610f76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f66726f6d2d6164647265737320686173206265656e20626c6f636b656400000081525060200191505060405180910390fd5b610f7f836132b9565b610ff1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f2d6164647265737320686173206265656e20626c6f636b6564000000000081525060200191505060405180910390fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156110a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e73756666696369656e742062616c616e636500000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420746f2d61646472657373000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156112b0576111cf82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061126482600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019050611645565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f76616c7565203e20616c6c6f776564000000000000000000000000000000000081525060200191505060405180910390fd5b6113f482600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061148982600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061155b82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190505b9392505050565b600260009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061168f612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461172f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f6e6f207065726d697373696f6e2e2e2e0000000000000000000000000000000081525060200191505060405180910390fd5b600760149054906101000a900460ff16156117b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f63616e2774206d696e740000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6117ba6131f7565b61182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b611835836132b9565b6118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f2d6164647265737320686173206265656e20626c6f636b6564000000000081525060200191505060405180910390fd5b6118bc826005546133e890919063ffffffff16565b60058190555061191482600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600080339050600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054831115611a6757600080fd5b611ab983600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611b118360055461339e90919063ffffffff16565b6005819055508073ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5846040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a36001915050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6e6f207065726d697373696f6e0000000000000000000000000000000000000081525060200191505060405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611de76131f7565b611e59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b611e62336132b9565b611ed4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f73656e64657220686173206265656e20626c6f636b656400000000000000000081525060200191505060405180910390fd5b611edd836132b9565b611f4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f7370656e6465722d6164647265737320686173206265656e20626c6f636b656481525060200191505060405180910390fd5b6000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831061205e576000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120f2565b612071838261339e90919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612255612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123cf5780601f106123a4576101008083540402835291602001916123cf565b820191906000526020600020905b8154815290600101906020018083116123b257829003601f168201915b505050505081565b60006123e1612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b81600760146101000a81548160ff021916908315150217905550600760149054906101000a900460ff1615157ffc061c4ab31aa523af95591b59ea9fdc28779e0f9bba6b997320fdd0f7653c2760405160405180910390a260019050919050565b60006124ec6131f7565b61255e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b612567336132b9565b6125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f73656e64657220686173206265656e20626c6f636b656400000000000000000081525060200191505060405180910390fd5b6125e2836132b9565b612654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f2d6164647265737320686173206265656e20626c6f636b6564000000000081525060200191505060405180910390fd5b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115612709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f696e73756666696369656e742062616c616e636500000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420746f2d61646472657373000000000000000000000000000081525060200191505060405180910390fd5b6127fe82600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061289382600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006129796131f7565b6129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f636f6e747261637420686173206265656e20706175736564000000000000000081525060200191505060405180910390fd5b6129f4336132b9565b612a66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f73656e64657220686173206265656e20626c6f636b656400000000000000000081525060200191505060405180910390fd5b612a6f836132b9565b612ae1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f7370656e6465722d6164647265737320686173206265656e20626c6f636b656481525060200191505060405180910390fd5b612b7082600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133e890919063ffffffff16565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415905090565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612deb612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612e8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b6000839050612e99816132b9565b15612f0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f61646472206e6f7420626c6f636b65640000000000000000000000000000000081525060200191505060405180910390fd5b6000839050600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115612f9b57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b612fed81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130458160055461339e90919063ffffffff16565b6005819055508173ffffffffffffffffffffffffffffffffffffffff167feff07194896bfa6254e521809f217f70dbdd9cefa6b894f5326af3ce8402c320826040518082815260200191505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a360019250505092915050565b613113612945565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146131b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f74206f776e65722e2e2e2e2e2e000000000000000000000000000000000081525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000613201612cdb565b156132b157600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561326e57600080fd5b505afa158015613282573d6000803e3d6000fd5b505050506040513d602081101561329857600080fd5b81019080805190602001909291905050501590506132b6565b600190505b90565b60006132c3612cdb565b1561339457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e5962195836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561335157600080fd5b505afa158015613365573d6000803e3d6000fd5b505050506040513d602081101561337b57600080fd5b8101908080519060200190929190505050159050613399565b600190505b919050565b60006133e083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613470565b905092915050565b600080828401905083811015613466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600083831115829061351d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156134e25780820151818401526020810190506134c7565b50505050905090810190601f16801561350f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838503905080915050939250505056fea264697066735822122022f86cc7a20c1c1e0456c10b0b02ca83c6e3b4e26886f4b9bd7b8a4f4a97407664736f6c63430007030033
Deployed Bytecode Sourcemap
128:116:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;360:35:6;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;136:18:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2435:316:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;217:178:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;774:98:3;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1493:936;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;186:21:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;406:44:12;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;852:426:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;272:343:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;977:178:2;;;:::i;:::-;;3184:589:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1373:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;405:20:8;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1193:125:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;160:20:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1402:190:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;878:489:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;432:85:8;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2757:421:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;692:117:12;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3779:183:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;381:27:2;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1387:523:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;774:111:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;360:35:6;;;;;;;;;;;;;:::o;136:18:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2435:316:3:-;2540:4;594:12;:10;:12::i;:::-;586:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;699:23:::1;711:10;699:11;:23::i;:::-;691:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2564:21:::2;2576:8;2564:11;:21::i;:::-;2556:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;2664:6;2632:7;:19;2640:10;2632:19;;;;;;;;;;;;;;;:29;2652:8;2632:29;;;;;;;;;;;;;;;:38;;;;2706:8;2685:38;;2694:10;2685:38;;;2716:6;2685:38;;;;;;;;;;;;;;;;;;2740:4;2733:11;;2435:316:::0;;;;:::o;217:178:1:-;513:8:9;:6;:8::i;:::-;499:22;;:10;:22;;;491:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;284:15:1::1;302:6;:16;;;329:4;302:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;284:51;;353:6;:15;;;369:8;:6;:8::i;:::-;379:7;353:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;345:43;;;::::0;::::1;;551:1:9;217:178:1::0;:::o;774:98:3:-;827:7;853:12;;846:19;;774:98;:::o;1493:936::-;1643:4;594:12;:10;:12::i;:::-;586:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;699:23:::1;711:10;699:11;:23::i;:::-;691:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1671:18:::2;1683:5;1671:11;:18::i;:::-;1663:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;1741:16;1753:3;1741:11;:16::i;:::-;1733:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;1817:8;:15;1826:5;1817:15;;;;;;;;;;;;;;;;1807:6;:25;;1799:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;1890:1;1875:17;;:3;:17;;;;1867:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;1938:10;1929:19;;:5;:19;;;1925:174;;;1981:27;2001:6;1981:8;:15;1990:5;1981:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;1963:8;:15;1972:5;1963:15;;;;;;;;;;;;;;;:45;;;;2038:25;2056:6;2038:8;:13;2047:3;2038:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;2022:8;:13;2031:3;2022:13;;;;;;;;;;;;;;;:41;;;;2084:4;2077:11;;;;1925:174;2127:7;:14;2135:5;2127:14;;;;;;;;;;;;;;;:26;2142:10;2127:26;;;;;;;;;;;;;;;;2117:6;:36;;2109:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;2203:27;2223:6;2203:8;:15;2212:5;2203:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;2185:8;:15;2194:5;2185:15;;;;;;;;;;;;;;;:45;;;;2256:25;2274:6;2256:8;:13;2265:3;2256:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;2240:8;:13;2249:3;2240:13;;;;;;;;;;;;;;;:41;;;;2320:38;2351:6;2320:7;:14;2328:5;2320:14;;;;;;;;;;;;;;;:26;2335:10;2320:26;;;;;;;;;;;;;;;;:30;;:38;;;;:::i;:::-;2291:7;:14;2299:5;2291:14;;;;;;;;;;;;;;;:26;2306:10;2291:26;;;;;;;;;;;;;;;:67;;;;2389:3;2373:28;;2382:5;2373:28;;;2394:6;2373:28;;;;;;;;;;;;;;;;;;2418:4;2411:11;;760:1;1493:936:::0;;;;;:::o;186:21:7:-;;;;;;;;;;;;;:::o;406:44:12:-;;;;;;;;;;;;;:::o;852:426:6:-;990:4;555:8;:6;:8::i;:::-;541:22;;:10;:22;;;533:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;440:15:::1;;;;;;;;;;;439:16;431:39;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;594:12:3::2;:10;:12::i;:::-;586:49;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;1018:16:6::3;1030:3;1018:11;:16::i;:::-;1010:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;1091:25;1108:7;1091:12;;:16;;:25;;;;:::i;:::-;1076:12;:40;;;;1142:26;1160:7;1142:8;:13;1151:3;1142:13;;;;;;;;;;;;;;;;:17;;:26;;;;:::i;:::-;1126:8;:13;1135:3;1126:13;;;;;;;;;;;;;;;:42;;;;1188:3;1183:18;;;1193:7;1183:18;;;;;;;;;;;;;;;;;;1237:3;1216:34;;1233:1;1216:34;;;1242:7;1216:34;;;;;;;;;;;;;;;;;;1267:4;1260:11;;852:426:::0;;;;:::o;272:343:0:-;318:4;333:12;348:10;333:25;;386:8;:14;395:4;386:14;;;;;;;;;;;;;;;;376:6;:24;;368:33;;;;;;429:26;448:6;429:8;:14;438:4;429:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;412:8;:14;421:4;412:14;;;;;;;;;;;;;;;:43;;;;480:24;497:6;480:12;;:16;;:24;;;;:::i;:::-;465:12;:39;;;;524:4;519:18;;;530:6;519:18;;;;;;;;;;;;;;;;;;575:1;552:34;;561:4;552:34;;;579:6;552:34;;;;;;;;;;;;;;;;;;604:4;597:11;;;272:343;;;:::o;977:178:2:-;573:12;;;;;;;;;;;559:26;;:10;:26;;;551:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1070:12:::1;;;;;;;;;;;1042:41;;1063:5;;;;;;;;;;;1042:41;;;;;;;;;;;;1101:12;;;;;;;;;;;1093:5;;:20;;;;;;;;;;;;;;;;;;1146:1;1123:12;;:25;;;;;;;;;;;;;;;;;;977:178::o:0;3184:589:3:-;3322:12;594;:10;:12::i;:::-;586:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;699:23:::1;711:10;699:11;:23::i;:::-;691:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3358:21:::2;3370:8;3358:11;:21::i;:::-;3350:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;3427:16;3446:7;:19;3454:10;3446:19;;;;;;;;;;;;;;;:29;3466:8;3446:29;;;;;;;;;;;;;;;;3427:48;;3509:8;3489:16;:28;3485:185;;3565:1;3533:7;:19;3541:10;3533:19;;;;;;;;;;;;;;;:29;3553:8;3533:29;;;;;;;;;;;;;;;:33;;;;3485:185;;;3629:30;3642:16;3629:8;:12;;:30;;;;:::i;:::-;3597:7;:19;3605:10;3597:19;;;;;;;;;;;;;;;:29;3617:8;3597:29;;;;;;;;;;;;;;;:62;;;;3485:185;3705:8;3684:61;;3693:10;3684:61;;;3715:7;:19;3723:10;3715:19;;;;;;;;;;;;;;;:29;3735:8;3715:29;;;;;;;;;;;;;;;;3684:61;;;;;;;;;;;;;;;;;;3762:4;3755:11;;;3184:589:::0;;;;:::o;1373:114::-;1438:7;1464:8;:16;1473:6;1464:16;;;;;;;;;;;;;;;;1457:23;;1373:114;;;:::o;405:20:8:-;;;;;;;;;;;;;:::o;1193:125:12:-;513:8:9;:6;:8::i;:::-;499:22;;:10;:22;;;491:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1298:13:12::1;1280:15;;:31;;;;;;;;;;;;;;;;;;1193:125:::0;:::o;160:20:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1402:190:6:-;1478:4;513:8:9;:6;:8::i;:::-;499:22;;:10;:22;;;491:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1512:8:6::1;1494:15;;:26;;;;;;;;;;;;;;;;;;1548:15;;;;;;;;;;;1535:29;;;;;;;;;;;;1581:4;1574:11;;1402:190:::0;;;:::o;878:489:3:-;971:4;594:12;:10;:12::i;:::-;586:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;699:23:::1;711:10;699:11;:23::i;:::-;691:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;995:16:::2;1007:3;995:11;:16::i;:::-;987:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;1071:8;:20;1080:10;1071:20;;;;;;;;;;;;;;;;1061:6;:30;;1053:63;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;1149:1;1134:17;;:3;:17;;;;1126:48;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;1208:32;1233:6;1208:8;:20;1217:10;1208:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;1185:8;:20;1194:10;1185:20;;;;;;;;;;;;;;;:55;;;;1266:25;1284:6;1266:8;:13;1275:3;1266:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;1250:8;:13;1259:3;1250:13;;;;;;;;;;;;;;;:41;;;;1327:3;1306:33;;1315:10;1306:33;;;1332:6;1306:33;;;;;;;;;;;;;;;;;;1356:4;1349:11;;878:489:::0;;;;:::o;432:85:8:-;480:7;505:5;;;;;;;;;;;498:12;;432:85;:::o;2757:421:3:-;2889:4;594:12;:10;:12::i;:::-;586:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;699:23:::1;711:10;699:11;:23::i;:::-;691:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;2917:21:::2;2929:8;2917:11;:21::i;:::-;2909:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;3027:46;3061:11;3027:7;:19;3035:10;3027:19;;;;;;;;;;;;;;;:29;3047:8;3027:29;;;;;;;;;;;;;;;;:33;;:46;;;;:::i;:::-;2985:7;:19;2993:10;2985:19;;;;;;;;;;;;;;;:29;3005:8;2985:29;;;;;;;;;;;;;;;:89;;;;3110:8;3089:61;;3098:10;3089:61;;;3120:7;:19;3128:10;3120:19;;;;;;;;;;;;;;;:29;3140:8;3120:29;;;;;;;;;;;;;;;;3089:61;;;;;;;;;;;;;;;;;;3167:4;3160:11;;2757:421:::0;;;;:::o;692:117:12:-;738:4;800:1;760:42;;770:15;;;;;;;;;;;760:42;;;;753:49;;692:117;:::o;3779:183:3:-;3900:7;3930;:15;3938:6;3930:15;;;;;;;;;;;;;;;:25;3946:8;3930:25;;;;;;;;;;;;;;;;3923:32;;3779:183;;;;:::o;381:27:2:-;;;;;;;;;;;;;:::o;1387:523:12:-;1471:4;513:8:9;:6;:8::i;:::-;499:22;;:10;:22;;;491:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1486:12:12::1;1501:11;1486:26;;1531:17;1543:4;1531:11;:17::i;:::-;1530:18;1522:47;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;1580:14;1597:6;1580:23;;1626:8;:14;1635:4;1626:14;;;;;;;;;;;;;;;;1617:6;:23;1613:77;;;1665:8;:14;1674:4;1665:14;;;;;;;;;;;;;;;;1656:23;;1613:77;1717:26;1736:6;1717:8;:14;1726:4;1717:14;;;;;;;;;;;;;;;;:18;;:26;;;;:::i;:::-;1700:8;:14;1709:4;1700:14;;;;;;;;;;;;;;;:43;;;;1768:24;1785:6;1768:12;;:16;;:24;;;;:::i;:::-;1753:12;:39;;;;1819:4;1807:25;;;1825:6;1807:25;;;;;;;;;;;;;;;;;;1870:1;1847:34;;1856:4;1847:34;;;1874:6;1847:34;;;;;;;;;;;;;;;;;;1899:4;1892:11;;;;1387:523:::0;;;;:::o;774:111:2:-;513:8:9;:6;:8::i;:::-;499:22;;:10;:22;;;491:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;870:8:2::1;855:12;;:23;;;;;;;;;;;;;;;;;;774:111:::0;:::o;815:174:12:-;869:4;888:15;:13;:15::i;:::-;884:78;;;927:15;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;926:25;919:32;;;;884:78;978:4;971:11;;815:174;;:::o;995:192::-;1062:4;1081:15;:13;:15::i;:::-;1077:83;;;1120:15;;;;;;;;;;;:23;;;1144:4;1120:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1119:30;1112:37;;;;1077:83;1176:4;1169:11;;995:192;;;;:::o;1354:134:10:-;1412:7;1438:43;1442:1;1445;1438:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1431:50;;1354:134;;;;:::o;907:176::-;965:7;984:9;1000:1;996;:5;984:17;;1024:1;1019;:6;;1011:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1075:1;1068:8;;;907:176;;;;:::o;1779:187::-;1865:7;1897:1;1892;:6;;1900:12;1884:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1923:9;1939:1;1935;:5;1923:17;;1958:1;1951:8;;;1779:187;;;;;:::o
Swarm Source
ipfs://22f86cc7a20c1c1e0456c10b0b02ca83c6e3b4e26886f4b9bd7b8a4f4a974076
Loading...
Loading
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.