Contract
0xBb6586e3d819455873B851B0bCAA48f6b7cd2303
1
Contract Overview
Balance:
0 CRO
CRO Value:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
AutoSwap_02
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-03-08 */ // Sources flattened with hardhat v2.2.1 https://hardhat.org // File contracts/libraries/SafeMath.sol pragma solidity ^0.6.12; // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol 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; } } // File contracts/libraries/Address.sol pragma solidity 0.6.12; // import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/SafeERC20.sol"; library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.3._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts/interfaces/IERC20.sol pragma solidity ^0.6.12; // import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol"; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // File contracts/libraries/SafeERC20.sol pragma solidity 0.6.12; // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/SafeERC20.sol library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeERC20: decreased allowance below zero" ); _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } // File contracts/libraries/Math.sol pragma solidity >=0.6.0 <0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } // File contracts/helpers/Context.sol pragma solidity 0.6.12; // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File contracts/helpers/Ownable.sol pragma solidity 0.6.12; // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File contracts/helpers/Pausable.sol pragma solidity 0.6.12; // "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Pausable.sol"; contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File contracts/libraries/UniversalERC20.sol pragma solidity ^0.6.12; library UniversalERC20 { using SafeMath for uint256; using SafeERC20 for IERC20; IERC20 private constant ZERO_ADDRESS = IERC20(0x0000000000000000000000000000000000000000); IERC20 private constant ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); function universalTransfer( IERC20 token, address to, uint256 amount ) internal returns (bool) { if (amount == 0) { return false; } if (isETH(token)) { address(uint160(to)).transfer(amount); } else { token.safeTransfer(to, amount); } return true; } function universalTransferFrom( IERC20 token, address from, address to, uint256 amount ) internal { if (amount == 0) { return; } if (isETH(token)) { require( from == msg.sender && msg.value >= amount, "Wrong useage of ETH.universalTransferFrom()" ); if (to != address(this)) { address(uint160(to)).transfer(amount); } if (msg.value > amount) { msg.sender.transfer(msg.value.sub(amount)); } } else { token.safeTransferFrom(from, to, amount); } } function universalTransferFromSenderToThis(IERC20 token, uint256 amount) internal { if (amount == 0) { return; } if (isETH(token)) { if (msg.value > amount) { // Return remainder if exist msg.sender.transfer(msg.value.sub(amount)); } } else { token.safeTransferFrom(msg.sender, address(this), amount); } } function universalApprove( IERC20 token, address to, uint256 amount ) internal { if (!isETH(token)) { if (amount == 0) { token.safeApprove(to, 0); return; } uint256 allowance = token.allowance(address(this), to); if (allowance < amount) { if (allowance > 0) { token.safeApprove(to, 0); } token.safeApprove(to, amount); } } } function universalBalanceOf(IERC20 token, address who) internal view returns (uint256) { if (isETH(token)) { return who.balance; } else { return token.balanceOf(who); } } function universalDecimals(IERC20 token) internal view returns (uint256) { if (isETH(token)) { return 18; } (bool success, bytes memory data) = address(token).staticcall.gas(10000)( abi.encodeWithSignature("decimals()") ); if (!success || data.length == 0) { (success, data) = address(token).staticcall.gas(10000)( abi.encodeWithSignature("DECIMALS()") ); } return (success && data.length > 0) ? abi.decode(data, (uint256)) : 18; } function isETH(IERC20 token) internal pure returns (bool) { return (address(token) == address(ZERO_ADDRESS) || address(token) == address(ETH_ADDRESS)); } function eq(IERC20 a, IERC20 b) internal pure returns (bool) { return a == b || (isETH(a) && isETH(b)); } function notExist(IERC20 token) internal pure returns (bool) { return (address(token) == address(-1)); } } // File contracts/helpers/ReentrancyGuard.sol pragma solidity 0.6.12; // "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol"; abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/helpers/Whitelist.sol pragma solidity 0.6.12; /** * @title Whitelist * @author Alberto Cuesta Canada * @dev Implements a simple whitelist of addresses. */ // "https://github.com/HQ20/contracts/blob/6a4f166ca8ae0789955a33a0175edfa2dcb4b69f/contracts/access/Whitelist.sol" contract Whitelist is Ownable { event MemberAdded(address member); event MemberRemoved(address member); mapping(address => bool) members; /** * @dev The contract constructor. */ constructor() public Ownable() {} /** * @dev A method to verify whether an address is a member of the whitelist * @param _member The address to verify. * @return Whether the address is a member of the whitelist. */ function isMember(address _member) public view returns (bool) { return members[_member]; } /** * @dev A method to add a member to the whitelist * @param _member The member to add as a member. */ function addMember(address _member) public onlyOwner { require(!isMember(_member), "Address is member already."); members[_member] = true; emit MemberAdded(_member); } /** * @dev A method to remove a member from the whitelist * @param _member The member to remove as a member. */ function removeMember(address _member) public onlyOwner { require(isMember(_member), "Not member of whitelist."); delete members[_member]; emit MemberRemoved(_member); } } // File contracts/interfaces/IPancakeRouter01.sol pragma solidity 0.6.12; interface IPancakeRouter01 { function WAVAX() external pure returns (address payable); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountA, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); } // File contracts/interfaces/IPancakeRouter02.sol pragma solidity 0.6.12; interface IPancakeRouter02 is IPancakeRouter01 { function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File contracts/interfaces/IPancakePair.sol pragma solidity >=0.5.0; interface IPancakePair { 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_LIQUIDITY() 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 liquidity); 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; } // File contracts/interfaces/IWETH.sol pragma solidity >=0.4.0; interface IWETH9 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function balanceOf(address) external view returns (uint); function allowance(address, address) external view returns (uint); receive() external payable; function deposit() external payable; function withdraw(uint wad) external; function totalSupply() external view returns (uint); function approve(address guy, uint wad) external returns (bool); function transfer(address dst, uint wad) external returns (bool); function transferFrom(address src, address dst, uint wad) external returns (bool); } // File contracts/interfaces/ICurvePool.sol pragma solidity >= 0.5.0; interface ICurvePool { function get_dy(int128 i, int128 j, uint256 _dx) external view returns (uint256); function calculateSwap(uint8 tokenIndexFrom, uint8 tokenIndexTo, uint256 dx) external view returns (uint256); } // File contracts/AutoSwap_02.sol // SPDX-License-Identifier: MIT pragma solidity 0.6.12; pragma experimental ABIEncoderV2; contract AutoSwap_02 is Ownable, ReentrancyGuard, Pausable, Whitelist { using SafeMath for uint256; using SafeERC20 for IERC20; using UniversalERC20 for IERC20; using UniversalERC20 for IPancakePair; uint256 public feeRate; uint256 public referrerFeeRate; address payable public constant WETH = 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7; address public constant treasury = 0x0Ba440288a9d2DE45a705CAF1c6877699954dDb2; event FeeRateChanged( uint256 indexed oldFeeRate, uint256 indexed newFeeRate ); event ReferrerFeeRateChanged( uint256 indexed oldReferrerFeeRate, uint256 indexed newReferrerFeeRate ); event Order( address indexed sender, IERC20 indexed inToken, IERC20 indexed outToken, uint256 inAmount, uint256 outAmount ); event Swapped( IERC20 indexed inToken, IERC20 indexed outToken, address indexed referrer, uint256 inAmount, uint256 outAmount, uint256 fee, uint256 referrerFee, bool isLPSwap ); struct CallStruct { address target; IERC20 inToken; uint256 amount; bytes4 selector; bytes data; bytes prefix; } struct AddLiquidityCallStruct { IPancakeRouter02 router; uint amount0Min; uint amount1Min; uint deadline; } enum RouterTypes { Uniswap, Curve, Saddle } struct QuoteCallStruct { address router; RouterTypes routerType; uint amount; address[] path; uint inputTokenIndex; uint outputTokenIndex; uint8 i; uint8 j; } constructor( address _owner, uint256 _feeRate, uint256 _referrerFeeRate ) public { transferOwnership(_owner); feeRate = _feeRate; referrerFeeRate = _referrerFeeRate; } function _getAmountsOut( uint tokensLookupSize, uint inputAmount, QuoteCallStruct[] calldata calls ) internal view returns (uint[] memory amountsOut) { uint[] memory balance = new uint[](tokensLookupSize); balance[0] = inputAmount; for (uint256 i = 0; i < calls.length; i++) { require(isMember(calls[i].router), "!whitelisted"); uint subswapInAmount = Math.min( calls[i].amount, balance[calls[i].inputTokenIndex] ); balance[calls[i].inputTokenIndex] -= subswapInAmount; if (calls[i].routerType == RouterTypes.Uniswap) { uint[] memory amountsOut = IPancakeRouter02(calls[i].router).getAmountsOut( subswapInAmount, calls[i].path ); balance[calls[i].outputTokenIndex] += amountsOut[amountsOut.length - 1]; } else if (calls[i].routerType == RouterTypes.Curve) { uint amountOut = ICurvePool(calls[i].router).get_dy( calls[i].i, calls[i].j, subswapInAmount ); balance[calls[i].outputTokenIndex] += amountOut; } else { uint amountOut = ICurvePool(calls[i].router).calculateSwap( calls[i].i, calls[i].j, subswapInAmount ); balance[calls[i].outputTokenIndex] += amountOut; } } return balance; } function getAmountsOut( uint tokensLookupSize, uint inputAmount, QuoteCallStruct[] calldata calls ) public view returns (uint[] memory amountsOut) { return _getAmountsOut(tokensLookupSize, inputAmount, calls); } function getAmountsOutLP( uint tokensLookupSize, uint inputAmount, QuoteCallStruct[] calldata calls, IPancakePair outputToken, uint token0BalanceIndex, uint token1BalanceIndex ) public view returns (uint token0Amount, uint token1Amount, uint lpTokenAmount) { uint[] memory amountsOut = _getAmountsOut(tokensLookupSize, inputAmount, calls); uint token0Balance = amountsOut[token0BalanceIndex]; uint token1Balance = amountsOut[token1BalanceIndex]; (uint token0Reserve, uint token1Reserve,) = outputToken.getReserves(); uint totalSupply = outputToken.totalSupply(); uint lpAmountOut = Math.min( token0Balance.mul(totalSupply).div(token0Reserve), token1Balance.mul(totalSupply).div(token1Reserve) ); return (token0Balance, token1Balance, lpAmountOut); } function _doCalls( IERC20 inToken, uint256 inAmount, CallStruct[] calldata calls ) internal whenNotPaused { // Initial checks require(calls.length > 0, "!(calls.length > 0)"); require( (msg.value != 0) == inToken.isETH(), "msg.value should be used only for ETH swap" ); // Transfer inToken to address(this) if (!inToken.isETH()) { inToken.safeTransferFrom(msg.sender, address(this), inAmount); } // Execute swaps for (uint256 i = 0; i < calls.length; i++) { // If call is a swap require(isMember(calls[i].target), "!whitelisted"); if (calls[i].inToken.isETH()) { (bool succeeded,) = calls[i].target.call{value: calls[i].amount}( abi.encodePacked( calls[i].selector, calls[i].data ) ); require(succeeded, "ETH Subswap failed"); } else { _resetAllowances(calls[i].inToken, calls[i].amount, calls[i].target); uint subswapInAmount = Math.min( calls[i].amount, calls[i].inToken.universalBalanceOf(address(this)) ); uint256 minOutAmount = 1; (bool succeeded,) = calls[i].target.call( abi.encodePacked( calls[i].selector, calls[i].prefix, subswapInAmount, minOutAmount, calls[i].data ) ); require(succeeded, "Subswap failed"); } } } function swapToLP( IERC20 inToken, IERC20 outToken, uint256 inAmount, uint256 minOutAmount, uint256 guaranteedAmount, address payable referrer, CallStruct[] calldata calls, AddLiquidityCallStruct calldata addLiquidityCall ) public payable nonReentrant whenNotPaused returns (uint256 outAmount) { require(minOutAmount > 0, "!(minOutAmount > 0)"); require(isMember(address(addLiquidityCall.router)), "!whitelisted"); _doCalls(inToken, inAmount, calls); IERC20 token0 = IERC20(IPancakePair(address(outToken)).token0()); IERC20 token1 = IERC20(IPancakePair(address(outToken)).token1()); if (inToken.isETH()) { // IWETH9(addLiquidityCall.router.WETH()) IWETH9(WETH).deposit{ value: inToken.universalBalanceOf(address(this)) }(); } _resetAllowances(token0, token0.universalBalanceOf(address(this)), address(addLiquidityCall.router)); _resetAllowances(token1, token1.universalBalanceOf(address(this)), address(addLiquidityCall.router)); addLiquidityCall.router.addLiquidity( address(token0), address(token1), token0.universalBalanceOf(address(this)), token1.universalBalanceOf(address(this)), addLiquidityCall.amount0Min, addLiquidityCall.amount1Min, address(this), addLiquidityCall.deadline ); // Transfer subtokens dust (if any) to user token0.universalTransfer( msg.sender, token0.universalBalanceOf(address(this)) ); token1.universalTransfer( msg.sender, token1.universalBalanceOf(address(this)) ); // Handle fees outAmount = outToken.universalBalanceOf(address(this)); uint256 fee; uint256 referrerFee; (outAmount, fee, referrerFee) = _handleFees( outToken, outAmount, guaranteedAmount, referrer ); // Closing checks require( outAmount >= minOutAmount, "Return amount less than the minimum required amount" ); // Transfer outToken to user outToken.universalTransfer(msg.sender, outAmount); emit Order(msg.sender, inToken, outToken, inAmount, outAmount); emit Swapped( inToken, outToken, referrer, inAmount, outAmount, fee, referrerFee, true ); } function swap( IERC20 inToken, IERC20 outToken, uint256 inAmount, uint256 minOutAmount, uint256 guaranteedAmount, address payable referrer, CallStruct[] calldata calls ) public payable nonReentrant whenNotPaused returns (uint256 outAmount) { require(minOutAmount > 0, "!(minOutAmount > 0)"); _doCalls(inToken, inAmount, calls); // Handle fees outAmount = outToken.universalBalanceOf(address(this)); uint256 fee; uint256 referrerFee; (outAmount, fee, referrerFee) = _handleFees( outToken, outAmount, guaranteedAmount, referrer ); // Closing checks require( outAmount >= minOutAmount, "Return amount less than the minimum required amount" ); // Transfer outToken to user outToken.universalTransfer(msg.sender, outAmount); emit Order(msg.sender, inToken, outToken, inAmount, outAmount); emit Swapped( inToken, outToken, referrer, inAmount, outAmount, fee, referrerFee, false ); } function _handleFees( IERC20 toToken, uint256 outAmount, uint256 guaranteedAmount, address referrer ) internal returns ( uint256 realOutAmount, uint256 fee, uint256 referrerFee ) { if (outAmount <= guaranteedAmount || feeRate == 0) { return (outAmount, 0, 0); } fee = outAmount.sub(guaranteedAmount).mul(feeRate).div(10000); if ( referrer != address(0) && referrer != msg.sender && referrer != tx.origin ) { referrerFee = fee.mul(referrerFeeRate).div(10000); if (toToken.universalTransfer(referrer, referrerFee)) { outAmount = outAmount.sub(referrerFee); fee = fee.sub(referrerFee); } else { referrerFee = 0; } } if (toToken.universalTransfer(treasury, fee)) { outAmount = outAmount.sub(fee); } return (outAmount, fee, referrerFee); } function _resetAllowances(IERC20 token, uint256 amt, address spenderAddress) internal { token.safeApprove(spenderAddress, uint256(0)); token.safeIncreaseAllowance(spenderAddress, amt); } function changeFeeRate(uint256 _feeRate) public onlyOwner { require(_feeRate <= 10000, "!safe - too high"); uint256 oldFeeRate = feeRate; feeRate = _feeRate; emit FeeRateChanged(oldFeeRate, _feeRate); } function changeReferrerFeeRate(uint256 _referrerFeeRate) public onlyOwner { require(_referrerFeeRate <= 10000, "!safe - too high"); uint256 oldReferrerFeeRate = referrerFeeRate; referrerFeeRate = _referrerFeeRate; emit ReferrerFeeRateChanged(oldReferrerFeeRate, _referrerFeeRate); } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } receive() external payable {} }
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_feeRate","type":"uint256"},{"internalType":"uint256","name":"_referrerFeeRate","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"oldFeeRate","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newFeeRate","type":"uint256"}],"name":"FeeRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"member","type":"address"}],"name":"MemberAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"member","type":"address"}],"name":"MemberRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"inToken","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"outToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"inAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outAmount","type":"uint256"}],"name":"Order","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"oldReferrerFeeRate","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newReferrerFeeRate","type":"uint256"}],"name":"ReferrerFeeRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC20","name":"inToken","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"outToken","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"inAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"outAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referrerFee","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isLPSwap","type":"bool"}],"name":"Swapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"addMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeRate","type":"uint256"}],"name":"changeFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_referrerFeeRate","type":"uint256"}],"name":"changeReferrerFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokensLookupSize","type":"uint256"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"components":[{"internalType":"address","name":"router","type":"address"},{"internalType":"enum AutoSwap_02.RouterTypes","name":"routerType","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"inputTokenIndex","type":"uint256"},{"internalType":"uint256","name":"outputTokenIndex","type":"uint256"},{"internalType":"uint8","name":"i","type":"uint8"},{"internalType":"uint8","name":"j","type":"uint8"}],"internalType":"struct AutoSwap_02.QuoteCallStruct[]","name":"calls","type":"tuple[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokensLookupSize","type":"uint256"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"components":[{"internalType":"address","name":"router","type":"address"},{"internalType":"enum AutoSwap_02.RouterTypes","name":"routerType","type":"uint8"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"inputTokenIndex","type":"uint256"},{"internalType":"uint256","name":"outputTokenIndex","type":"uint256"},{"internalType":"uint8","name":"i","type":"uint8"},{"internalType":"uint8","name":"j","type":"uint8"}],"internalType":"struct AutoSwap_02.QuoteCallStruct[]","name":"calls","type":"tuple[]"},{"internalType":"contract IPancakePair","name":"outputToken","type":"address"},{"internalType":"uint256","name":"token0BalanceIndex","type":"uint256"},{"internalType":"uint256","name":"token1BalanceIndex","type":"uint256"}],"name":"getAmountsOutLP","outputs":[{"internalType":"uint256","name":"token0Amount","type":"uint256"},{"internalType":"uint256","name":"token1Amount","type":"uint256"},{"internalType":"uint256","name":"lpTokenAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"isMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referrerFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_member","type":"address"}],"name":"removeMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"inToken","type":"address"},{"internalType":"contract IERC20","name":"outToken","type":"address"},{"internalType":"uint256","name":"inAmount","type":"uint256"},{"internalType":"uint256","name":"minOutAmount","type":"uint256"},{"internalType":"uint256","name":"guaranteedAmount","type":"uint256"},{"internalType":"address payable","name":"referrer","type":"address"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"contract IERC20","name":"inToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"prefix","type":"bytes"}],"internalType":"struct AutoSwap_02.CallStruct[]","name":"calls","type":"tuple[]"}],"name":"swap","outputs":[{"internalType":"uint256","name":"outAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"inToken","type":"address"},{"internalType":"contract IERC20","name":"outToken","type":"address"},{"internalType":"uint256","name":"inAmount","type":"uint256"},{"internalType":"uint256","name":"minOutAmount","type":"uint256"},{"internalType":"uint256","name":"guaranteedAmount","type":"uint256"},{"internalType":"address payable","name":"referrer","type":"address"},{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"contract IERC20","name":"inToken","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"prefix","type":"bytes"}],"internalType":"struct AutoSwap_02.CallStruct[]","name":"calls","type":"tuple[]"},{"components":[{"internalType":"contract IPancakeRouter02","name":"router","type":"address"},{"internalType":"uint256","name":"amount0Min","type":"uint256"},{"internalType":"uint256","name":"amount1Min","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct AutoSwap_02.AddLiquidityCallStruct","name":"addLiquidityCall","type":"tuple"}],"name":"swapToLP","outputs":[{"internalType":"uint256","name":"outAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200550e3803806200550e833981810160405281019062000037919062000337565b6000620000496200013160201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600180819055506000600260006101000a81548160ff0219169083151502179055506200011a836200013960201b60201c565b8160048190555080600581905550505050620004fe565b600033905090565b620001496200013160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620001d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d09062000459565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200024c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002439062000437565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000815190506200031a81620004ca565b92915050565b6000815190506200033181620004e4565b92915050565b6000806000606084860312156200034d57600080fd5b60006200035d8682870162000309565b9350506020620003708682870162000320565b9250506040620003838682870162000320565b9150509250925092565b60006200039c6026836200047b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000620004046020836200047b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000602082019050818103600083015262000452816200038d565b9050919050565b600060208201905081810360008301526200047481620003f5565b9050919050565b600082825260208201905092915050565b60006200049982620004a0565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b620004d5816200048c565b8114620004e157600080fd5b50565b620004ef81620004c0565b8114620004fb57600080fd5b50565b615000806200050e6000396000f3fe6080604052600436106101185760003560e01c8063715018a6116100a0578063a230c52411610064578063a230c5241461036e578063ad5c4648146103ab578063affca932146103d6578063ca6d56dc146103ff578063f2fde38b146104285761011f565b8063715018a6146102bf5780637e5bf1a9146102d65780638456cb59146103015780638da5cb5b14610318578063978bbdb9146103435761011f565b80633f4ba83a116100e75780633f4ba83a146101f95780633fd634af14610210578063422596c0146102405780635c975abb1461026957806361d027b3146102945761011f565b80630b1ca49a146101245780630ef7da6a1461014d5780631b0a5a7a1461018c5780633d5628fc146101c95761011f565b3661011f57005b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190613737565b610451565b005b34801561015957600080fd5b50610174600480360381019061016f9190613b2c565b6105b7565b60405161018393929190614a2d565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae9190613ac0565b610797565b6040516101c091906146b8565b60405180910390f35b6101e360048036038101906101de91906138ff565b6107af565b6040516101f091906149b7565b60405180910390f35b34801561020557600080fd5b5061020e610eca565b005b61022a60048036038101906102259190613845565b610f69565b60405161023791906149b7565b60405180910390f35b34801561024c57600080fd5b5061026760048036038101906102629190613a6e565b611225565b005b34801561027557600080fd5b5061027e61133f565b60405161028b91906146da565b60405180910390f35b3480156102a057600080fd5b506102a9611356565b6040516102b69190614560565b60405180910390f35b3480156102cb57600080fd5b506102d461136e565b005b3480156102e257600080fd5b506102eb6114c1565b6040516102f891906149b7565b60405180910390f35b34801561030d57600080fd5b506103166114c7565b005b34801561032457600080fd5b5061032d611566565b60405161033a9190614560565b60405180910390f35b34801561034f57600080fd5b5061035861158f565b60405161036591906149b7565b60405180910390f35b34801561037a57600080fd5b5061039560048036038101906103909190613737565b611595565b6040516103a291906146da565b60405180910390f35b3480156103b757600080fd5b506103c06115eb565b6040516103cd9190614596565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613a6e565b611603565b005b34801561040b57600080fd5b5061042660048036038101906104219190613737565b61171d565b005b34801561043457600080fd5b5061044f600480360381019061044a9190613737565b61188d565b005b610459611a4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104dd90614857565b60405180910390fd5b6104ef81611595565b61052e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610525906147f7565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690557f6e76fb4c77256006d9c38ec7d82b45a8c8f3c27b1d6766fffc42dfb8de684492816040516105ac9190614560565b60405180910390a150565b600080600060606105ca8b8b8b8b611a57565b905060008187815181106105da57fe5b6020026020010151905060008287815181106105f257fe5b602002602001015190506000808a73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561064557600080fd5b505afa158015610659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067d9190613a1f565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915060008b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ea57600080fd5b505afa1580156106fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107229190613a97565b9050600061077861074e85610740858a6120ae90919063ffffffff16565b61211e90919063ffffffff16565b61077385610765868a6120ae90919063ffffffff16565b61211e90919063ffffffff16565b612168565b9050858582995099509950505050505050509750975097945050505050565b60606107a585858585611a57565b9050949350505050565b6000600260015414156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee90614957565b60405180910390fd5b6002600181905550600260009054906101000a900460ff161561084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610846906147d7565b60405180910390fd5b60008711610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088990614977565b60405180910390fd5b6108ad8260000160208101906108a891906139cd565b611595565b6108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e390614897565b60405180910390fd5b6108f88a898686612181565b60008973ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561094057600080fd5b505afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109789190613760565b905060008a73ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156109c257600080fd5b505afa1580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa9190613760565b9050610a1b8c73ffffffffffffffffffffffffffffffffffffffff166127e3565b15610abe5773b31f66aa3c1e785363f0875a1b74e27b85fd66c773ffffffffffffffffffffffffffffffffffffffff1663d0e30db0610a79308f73ffffffffffffffffffffffffffffffffffffffff1661286590919063ffffffff16565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b50505050505b610b0382610aeb308573ffffffffffffffffffffffffffffffffffffffff1661286590919063ffffffff16565b866000016020810190610afe91906139cd565b612926565b610b4881610b30308473ffffffffffffffffffffffffffffffffffffffff1661286590919063ffffffff16565b866000016020810190610b4391906139cd565b612926565b836000016020810190610b5b91906139cd565b73ffffffffffffffffffffffffffffffffffffffff1663e8e337008383610ba1308773ffffffffffffffffffffffffffffffffffffffff1661286590919063ffffffff16565b610bca308773ffffffffffffffffffffffffffffffffffffffff1661286590919063ffffffff16565b89602001358a60400135308c606001356040518963ffffffff1660e01b8152600401610bfd989796959493929190614611565b606060405180830381600087803b158015610c1757600080fd5b505af1158015610c2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4f9190613bd3565b505050610ca533610c7f308573ffffffffffffffffffffffffffffffffffffffff1661286590919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff166129829092919063ffffffff16565b50610cf933610cd3308473ffffffffffffffffffffffffffffffffffffffff1661286590919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff166129829092919063ffffffff16565b50610d23308c73ffffffffffffffffffffffffffffffffffffffff1661286590919063ffffffff16565b9250600080610d348d868c8c612a27565b8093508194508297505050508a851015610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a90614817565b60405180910390fd5b610dae33868f73ffffffffffffffffffffffffffffffffffffffff166129829092919063ffffffff16565b508c73ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4ec237690cd79c8ab7ec9b0747f20cb9e9a58b89bd4e09312f5773ab546bee4c8f89604051610e25929190614a04565b60405180910390a48873ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff167f44ccebb1f8242fcdaee7626f1c0ba52d3d797ca0170adf18f5c3faa5e6c70f128f8987876001604051610eaa959493929190614a64565b60405180910390a450505050600180819055509998505050505050505050565b610ed2611a4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5690614857565b60405180910390fd5b610f67612c2c565b565b600060026001541415610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa890614957565b60405180910390fd5b6002600181905550600260009054906101000a900460ff1615611009576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611000906147d7565b60405180910390fd5b6000861161104c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104390614977565b60405180910390fd5b61105889888585612181565b611081308973ffffffffffffffffffffffffffffffffffffffff1661286590919063ffffffff16565b90506000806110928a848989612a27565b809350819450829550505050878310156110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890614817565b60405180910390fd5b61110c33848c73ffffffffffffffffffffffffffffffffffffffff166129829092919063ffffffff16565b508973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4ec237690cd79c8ab7ec9b0747f20cb9e9a58b89bd4e09312f5773ab546bee4c8c87604051611183929190614a04565b60405180910390a48573ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f44ccebb1f8242fcdaee7626f1c0ba52d3d797ca0170adf18f5c3faa5e6c70f128c8787876000604051611208959493929190614a64565b60405180910390a450506001808190555098975050505050505050565b61122d611a4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190614857565b60405180910390fd5b6127108111156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f6906148d7565b60405180910390fd5b600060055490508160058190555081817f1cd30194bbb4e8743cc21dd26f5d4d8e748e8e121a7ea98fddaf3f03dd1350fe60405160405180910390a35050565b6000600260009054906101000a900460ff16905090565b730ba440288a9d2de45a705caf1c6877699954ddb281565b611376611a4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90614857565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60055481565b6114cf611a4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155390614857565b60405180910390fd5b611564612cd6565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60045481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b73b31f66aa3c1e785363f0875a1b74e27b85fd66c781565b61160b611a4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614857565b60405180910390fd5b6127108111156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d4906148d7565b60405180910390fd5b600060045490508160048190555081817fb9ffe02e89fee6f5544ee152a08c2cafbc3a4a89a66737ef42115dcd508aea1060405160405180910390a35050565b611725611a4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990614857565b60405180910390fd5b6117bb81611595565b156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290614917565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fb251eb052afc73ffd02ffe85ad79990a8b3fed60d76dbc2fa2fdd7123dffd914816040516118829190614560565b60405180910390a150565b611895611a4f565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990614857565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990614737565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b6060808567ffffffffffffffff81118015611a7157600080fd5b50604051908082528060200260200182016040528015611aa05781602001602082028036833780820191505090505b5090508481600081518110611ab157fe5b60200260200101818152505060005b848490508110156120a157611b03858583818110611ada57fe5b9050602002810190611aec9190614bf7565b6000016020810190611afe9190613737565b611595565b611b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3990614897565b60405180910390fd5b6000611ba3868684818110611b5357fe5b9050602002810190611b659190614bf7565b6040013584888886818110611b7657fe5b9050602002810190611b889190614bf7565b6080013581518110611b9657fe5b6020026020010151612168565b90508083878785818110611bb357fe5b9050602002810190611bc59190614bf7565b6080013581518110611bd357fe5b60200260200101818151039150818152505060006002811115611bf257fe5b868684818110611bfe57fe5b9050602002810190611c109190614bf7565b6020016020810190611c2291906139f6565b6002811115611c2d57fe5b1415611d80576060868684818110611c4157fe5b9050602002810190611c539190614bf7565b6000016020810190611c659190613737565b73ffffffffffffffffffffffffffffffffffffffff1663d06ca61f83898987818110611c8d57fe5b9050602002810190611c9f9190614bf7565b8060600190611cae9190614b25565b6040518463ffffffff1660e01b8152600401611ccc939291906149d2565b60006040518083038186803b158015611ce457600080fd5b505afa158015611cf8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611d219190613789565b905080600182510381518110611d3357fe5b602002602001015184888886818110611d4857fe5b9050602002810190611d5a9190614bf7565b60a0013581518110611d6857fe5b60200260200101818151019150818152505050612093565b60016002811115611d8d57fe5b868684818110611d9957fe5b9050602002810190611dab9190614bf7565b6020016020810190611dbd91906139f6565b6002811115611dc857fe5b1415611f32576000868684818110611ddc57fe5b9050602002810190611dee9190614bf7565b6000016020810190611e009190613737565b73ffffffffffffffffffffffffffffffffffffffff16635e0d443f888886818110611e2757fe5b9050602002810190611e399190614bf7565b60c0016020810190611e4b9190613c22565b898987818110611e5757fe5b9050602002810190611e699190614bf7565b60e0016020810190611e7b9190613c22565b856040518463ffffffff1660e01b8152600401611e9a93929190614ab7565b60206040518083038186803b158015611eb257600080fd5b505afa158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190613a97565b90508084888886818110611efa57fe5b9050602002810190611f0c9190614bf7565b60a0013581518110611f1a57fe5b60200260200101818151019150818152505050612092565b6000868684818110611f4057fe5b9050602002810190611f529190614bf7565b6000016020810190611f649190613737565b73ffffffffffffffffffffffffffffffffffffffff1663a95b089f888886818110611f8b57fe5b9050602002810190611f9d9190614bf7565b60c0016020810190611faf9190613c22565b898987818110611fbb57fe5b9050602002810190611fcd9190614bf7565b60e0016020810190611fdf9190613c22565b856040518463ffffffff1660e01b8152600401611ffe93929190614aee565b60206040518083038186803b15801561201657600080fd5b505afa15801561202a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204e9190613a97565b9050808488888681811061205e57fe5b90506020028101906120709190614bf7565b60a001358151811061207e57fe5b602002602001018181510191508181525050505b5b508080600101915050611ac0565b5080915050949350505050565b6000808314156120c15760009050612118565b60008284029050828482816120d257fe5b0414612113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210a90614837565b60405180910390fd5b809150505b92915050565b600061216083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d81565b905092915050565b60008183106121775781612179565b825b905092915050565b600260009054906101000a900460ff16156121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c8906147d7565b60405180910390fd5b60008282905011612217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220e90614877565b60405180910390fd5b6122368473ffffffffffffffffffffffffffffffffffffffff166127e3565b1515600034141515151461227f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227690614797565b60405180910390fd5b61229e8473ffffffffffffffffffffffffffffffffffffffff166127e3565b6122d0576122cf3330858773ffffffffffffffffffffffffffffffffffffffff16612de2909392919063ffffffff16565b5b60005b828290508110156127dc576123168383838181106122ed57fe5b90506020028101906122ff9190614bd3565b60000160208101906123119190613737565b611595565b612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90614897565b60405180910390fd5b6123a383838381811061236457fe5b90506020028101906123769190614bd3565b6020016020810190612388919061381c565b73ffffffffffffffffffffffffffffffffffffffff166127e3565b156125295760008383838181106123b657fe5b90506020028101906123c89190614bd3565b60000160208101906123da9190613737565b73ffffffffffffffffffffffffffffffffffffffff168484848181106123fc57fe5b905060200281019061240e9190614bd3565b6040013585858581811061241e57fe5b90506020028101906124309190614bd3565b606001602081019061244291906137f3565b86868681811061244e57fe5b90506020028101906124609190614bd3565b806080019061246f9190614b7c565b604051602001612481939291906144c4565b60405160208183030381529060405260405161249d9190614549565b60006040518083038185875af1925050503d80600081146124da576040519150601f19603f3d011682016040523d82523d6000602084013e6124df565b606091505b5050905080612523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251a906148b7565b60405180910390fd5b506127cf565b6125b383838381811061253857fe5b905060200281019061254a9190614bd3565b602001602081019061255c919061381c565b84848481811061256857fe5b905060200281019061257a9190614bd3565b6040013585858581811061258a57fe5b905060200281019061259c9190614bd3565b60000160208101906125ae9190613737565b612926565b60006126378484848181106125c457fe5b90506020028101906125d69190614bd3565b60400135612632308787878181106125ea57fe5b90506020028101906125fc9190614bd3565b602001602081019061260e919061381c565b73ffffffffffffffffffffffffffffffffffffffff1661286590919063ffffffff16565b612168565b9050600060019050600085858581811061264d57fe5b905060200281019061265f9190614bd3565b60000160208101906126719190613737565b73ffffffffffffffffffffffffffffffffffffffff1686868681811061269357fe5b90506020028101906126a59190614bd3565b60600160208101906126b791906137f3565b8787878181106126c357fe5b90506020028101906126d59190614bd3565b8060a001906126e49190614b7c565b86868b8b8b8181106126f257fe5b90506020028101906127049190614bd3565b80608001906127139190614b7c565b60405160200161272997969594939291906144ee565b6040516020818303038152906040526040516127459190614549565b6000604051808303816000865af19150503d8060008114612782576040519150601f19603f3d011682016040523d82523d6000602084013e612787565b606091505b50509050806127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c290614757565b60405180910390fd5b5050505b80806001019150506122d3565b5050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061285e575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000612870836127e3565b15612894578173ffffffffffffffffffffffffffffffffffffffff16319050612920565b8273ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016128cd9190614560565b60206040518083038186803b1580156128e557600080fd5b505afa1580156128f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291d9190613a97565b90505b92915050565b6129528160008573ffffffffffffffffffffffffffffffffffffffff16612e6b9092919063ffffffff16565b61297d81838573ffffffffffffffffffffffffffffffffffffffff16612fc99092919063ffffffff16565b505050565b6000808214156129955760009050612a20565b61299e846127e3565b156129ef578273ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156129e9573d6000803e3d6000fd5b50612a1b565b612a1a83838673ffffffffffffffffffffffffffffffffffffffff166130f19092919063ffffffff16565b5b600190505b9392505050565b60008060008486111580612a3d57506000600454145b15612a515785600080925092509250612c22565b612a8c612710612a7e600454612a70898b61317790919063ffffffff16565b6120ae90919063ffffffff16565b61211e90919063ffffffff16565b9150600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612af757503373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612b2f57503273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612bc457612b5d612710612b4f600554856120ae90919063ffffffff16565b61211e90919063ffffffff16565b9050612b8a84828973ffffffffffffffffffffffffffffffffffffffff166129829092919063ffffffff16565b15612bbe57612ba2818761317790919063ffffffff16565b9550612bb7818361317790919063ffffffff16565b9150612bc3565b600090505b5b612c03730ba440288a9d2de45a705caf1c6877699954ddb2838973ffffffffffffffffffffffffffffffffffffffff166129829092919063ffffffff16565b15612c1e57612c1b828761317790919063ffffffff16565b95505b8592505b9450945094915050565b600260009054906101000a900460ff16612c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7290614717565b60405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612cbf611a4f565b604051612ccc919061457b565b60405180910390a1565b600260009054906101000a900460ff1615612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d906147d7565b60405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d6a611a4f565b604051612d77919061457b565b60405180910390a1565b60008083118290612dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbf91906146f5565b60405180910390fd5b506000838581612dd457fe5b049050809150509392505050565b612e65846323b872dd60e01b858585604051602401612e03939291906145da565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506131c1565b50505050565b6000811480612f04575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401612eb29291906145b1565b60206040518083038186803b158015612eca57600080fd5b505afa158015612ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f029190613a97565b145b612f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3a90614997565b60405180910390fd5b612fc48363095ea7b360e01b8484604051602401612f6292919061468f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506131c1565b505050565b6000613068828573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30876040518363ffffffff1660e01b815260040161300a9291906145b1565b60206040518083038186803b15801561302257600080fd5b505afa158015613036573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305a9190613a97565b61328890919063ffffffff16565b90506130eb8463095ea7b360e01b858460405160240161308992919061468f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506131c1565b50505050565b6131728363a9059cbb60e01b848460405160240161311092919061468f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506131c1565b505050565b60006131b983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506132dd565b905092915050565b6060613223826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166133389092919063ffffffff16565b9050600081511115613283578080602001905181019061324391906137ca565b613282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327990614937565b60405180910390fd5b5b505050565b6000808284019050838110156132d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ca90614777565b60405180910390fd5b8091505092915050565b6000838311158290613325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331c91906146f5565b60405180910390fd5b5060008385039050809150509392505050565b60606133478484600085613350565b90509392505050565b606082471015613395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338c906147b7565b60405180910390fd5b61339e85613465565b6133dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d4906148f7565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040516134079190614549565b60006040518083038185875af1925050503d8060008114613444576040519150601f19603f3d011682016040523d82523d6000602084013e613449565b606091505b5091509150613459828286613478565b92505050949350505050565b600080823b905060008111915050919050565b60608315613488578290506134d8565b60008351111561349b5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cf91906146f5565b60405180910390fd5b9392505050565b6000813590506134ee81614ebd565b92915050565b60008151905061350381614ebd565b92915050565b60008135905061351881614ed4565b92915050565b60008083601f84011261353057600080fd5b8235905067ffffffffffffffff81111561354957600080fd5b60208301915083602082028301111561356157600080fd5b9250929050565b60008083601f84011261357a57600080fd5b8235905067ffffffffffffffff81111561359357600080fd5b6020830191508360208202830111156135ab57600080fd5b9250929050565b600082601f8301126135c357600080fd5b81516135d66135d182614c49565b614c1c565b915081818352602084019350602081019050838560208402820111156135fb57600080fd5b60005b8381101561362b578161361188826136f8565b8452602084019350602083019250506001810190506135fe565b5050505092915050565b60008151905061364481614eeb565b92915050565b60008135905061365981614f02565b92915050565b60008135905061366e81614f19565b92915050565b60008135905061368381614f30565b92915050565b60008135905061369881614f47565b92915050565b6000813590506136ad81614f5e565b92915050565b6000608082840312156136c557600080fd5b81905092915050565b6000815190506136dd81614f6e565b92915050565b6000813590506136f281614f85565b92915050565b60008151905061370781614f85565b92915050565b60008151905061371c81614f9c565b92915050565b60008135905061373181614fb3565b92915050565b60006020828403121561374957600080fd5b6000613757848285016134df565b91505092915050565b60006020828403121561377257600080fd5b6000613780848285016134f4565b91505092915050565b60006020828403121561379b57600080fd5b600082015167ffffffffffffffff8111156137b557600080fd5b6137c1848285016135b2565b91505092915050565b6000602082840312156137dc57600080fd5b60006137ea84828501613635565b91505092915050565b60006020828403121561380557600080fd5b60006138138482850161364a565b91505092915050565b60006020828403121561382e57600080fd5b600061383c8482850161365f565b91505092915050565b60008060008060008060008060e0898b03121561386157600080fd5b600061386f8b828c0161365f565b98505060206138808b828c0161365f565b97505060406138918b828c016136e3565b96505060606138a28b828c016136e3565b95505060806138b38b828c016136e3565b94505060a06138c48b828c01613509565b93505060c089013567ffffffffffffffff8111156138e157600080fd5b6138ed8b828c0161351e565b92509250509295985092959890939650565b60008060008060008060008060006101608a8c03121561391e57600080fd5b600061392c8c828d0161365f565b995050602061393d8c828d0161365f565b985050604061394e8c828d016136e3565b975050606061395f8c828d016136e3565b96505060806139708c828d016136e3565b95505060a06139818c828d01613509565b94505060c08a013567ffffffffffffffff81111561399e57600080fd5b6139aa8c828d0161351e565b935093505060e06139bd8c828d016136b3565b9150509295985092959850929598565b6000602082840312156139df57600080fd5b60006139ed84828501613689565b91505092915050565b600060208284031215613a0857600080fd5b6000613a168482850161369e565b91505092915050565b600080600060608486031215613a3457600080fd5b6000613a42868287016136ce565b9350506020613a53868287016136ce565b9250506040613a648682870161370d565b9150509250925092565b600060208284031215613a8057600080fd5b6000613a8e848285016136e3565b91505092915050565b600060208284031215613aa957600080fd5b6000613ab7848285016136f8565b91505092915050565b60008060008060608587031215613ad657600080fd5b6000613ae4878288016136e3565b9450506020613af5878288016136e3565b935050604085013567ffffffffffffffff811115613b1257600080fd5b613b1e87828801613568565b925092505092959194509250565b600080600080600080600060c0888a031215613b4757600080fd5b6000613b558a828b016136e3565b9750506020613b668a828b016136e3565b965050604088013567ffffffffffffffff811115613b8357600080fd5b613b8f8a828b01613568565b95509550506060613ba28a828b01613674565b9350506080613bb38a828b016136e3565b92505060a0613bc48a828b016136e3565b91505092959891949750929550565b600080600060608486031215613be857600080fd5b6000613bf6868287016136f8565b9350506020613c07868287016136f8565b9250506040613c18868287016136f8565b9150509250925092565b600060208284031215613c3457600080fd5b6000613c4284828501613722565b91505092915050565b6000613c578383613c99565b60208301905092915050565b6000613c6f8383614471565b60208301905092915050565b613c8481614e0e565b82525050565b613c9381614d2d565b82525050565b613ca281614d1b565b82525050565b613cb181614d1b565b82525050565b6000613cc38385614cc6565b9350613cce82614c71565b8060005b85811015613d0757613ce48284614d04565b613cee8882613c4b565b9750613cf983614cac565b925050600181019050613cd2565b5085925050509392505050565b6000613d1f82614c8b565b613d298185614cd7565b9350613d3483614c7b565b8060005b83811015613d65578151613d4c8882613c63565b9750613d5783614cb9565b925050600181019050613d38565b5085935050505092915050565b613d7b81614d3f565b82525050565b613d92613d8d82614d4b565b614e98565b82525050565b6000613da48385614ce8565b9350613db1838584614e56565b82840190509392505050565b6000613dc882614c96565b613dd28185614ce8565b9350613de2818560208601614e65565b80840191505092915050565b6000613df982614ca1565b613e038185614cf3565b9350613e13818560208601614e65565b613e1c81614eac565b840191505092915050565b6000613e34601483614cf3565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000613e74602683614cf3565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613eda600e83614cf3565b91507f53756273776170206661696c65640000000000000000000000000000000000006000830152602082019050919050565b6000613f1a601b83614cf3565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000613f5a602a83614cf3565b91507f6d73672e76616c75652073686f756c642062652075736564206f6e6c7920666f60008301527f72204554482073776170000000000000000000000000000000000000000000006020830152604082019050919050565b6000613fc0602683614cf3565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614026601083614cf3565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000614066601883614cf3565b91507f4e6f74206d656d626572206f662077686974656c6973742e00000000000000006000830152602082019050919050565b60006140a6603383614cf3565b91507f52657475726e20616d6f756e74206c657373207468616e20746865206d696e6960008301527f6d756d20726571756972656420616d6f756e74000000000000000000000000006020830152604082019050919050565b600061410c602183614cf3565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614172602083614cf3565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006141b2601383614cf3565b91507f212863616c6c732e6c656e677468203e203029000000000000000000000000006000830152602082019050919050565b60006141f2600c83614cf3565b91507f2177686974656c697374656400000000000000000000000000000000000000006000830152602082019050919050565b6000614232601283614cf3565b91507f4554482053756273776170206661696c656400000000000000000000000000006000830152602082019050919050565b6000614272601083614cf3565b91507f2173616665202d20746f6f2068696768000000000000000000000000000000006000830152602082019050919050565b60006142b2601d83614cf3565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006142f2601a83614cf3565b91507f41646472657373206973206d656d62657220616c72656164792e0000000000006000830152602082019050919050565b6000614332602a83614cf3565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000614398601f83614cf3565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b60006143d8601383614cf3565b91507f21286d696e4f7574416d6f756e74203e203029000000000000000000000000006000830152602082019050919050565b6000614418603683614cf3565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b61447a81614de7565b82525050565b61448981614de7565b82525050565b6144a061449b82614de7565b614ea2565b82525050565b6144af81614e44565b82525050565b6144be81614e01565b82525050565b60006144d08286613d81565b6004820191506144e1828486613d98565b9150819050949350505050565b60006144fa828a613d81565b60048201915061450b82888a613d98565b9150614517828761448f565b602082019150614527828661448f565b602082019150614538828486613d98565b915081905098975050505050505050565b60006145558284613dbd565b915081905092915050565b60006020820190506145756000830184613ca8565b92915050565b60006020820190506145906000830184613c7b565b92915050565b60006020820190506145ab6000830184613c8a565b92915050565b60006040820190506145c66000830185613ca8565b6145d36020830184613ca8565b9392505050565b60006060820190506145ef6000830186613ca8565b6145fc6020830185613ca8565b6146096040830184614480565b949350505050565b600061010082019050614627600083018b613ca8565b614634602083018a613ca8565b6146416040830189614480565b61464e6060830188614480565b61465b6080830187614480565b61466860a0830186614480565b61467560c0830185613c7b565b61468260e0830184614480565b9998505050505050505050565b60006040820190506146a46000830185613ca8565b6146b16020830184614480565b9392505050565b600060208201905081810360008301526146d28184613d14565b905092915050565b60006020820190506146ef6000830184613d72565b92915050565b6000602082019050818103600083015261470f8184613dee565b905092915050565b6000602082019050818103600083015261473081613e27565b9050919050565b6000602082019050818103600083015261475081613e67565b9050919050565b6000602082019050818103600083015261477081613ecd565b9050919050565b6000602082019050818103600083015261479081613f0d565b9050919050565b600060208201905081810360008301526147b081613f4d565b9050919050565b600060208201905081810360008301526147d081613fb3565b9050919050565b600060208201905081810360008301526147f081614019565b9050919050565b6000602082019050818103600083015261481081614059565b9050919050565b6000602082019050818103600083015261483081614099565b9050919050565b60006020820190508181036000830152614850816140ff565b9050919050565b6000602082019050818103600083015261487081614165565b9050919050565b60006020820190508181036000830152614890816141a5565b9050919050565b600060208201905081810360008301526148b0816141e5565b9050919050565b600060208201905081810360008301526148d081614225565b9050919050565b600060208201905081810360008301526148f081614265565b9050919050565b60006020820190508181036000830152614910816142a5565b9050919050565b60006020820190508181036000830152614930816142e5565b9050919050565b6000602082019050818103600083015261495081614325565b9050919050565b600060208201905081810360008301526149708161438b565b9050919050565b60006020820190508181036000830152614990816143cb565b9050919050565b600060208201905081810360008301526149b08161440b565b9050919050565b60006020820190506149cc6000830184614480565b92915050565b60006040820190506149e76000830186614480565b81810360208301526149fa818486613cb7565b9050949350505050565b6000604082019050614a196000830185614480565b614a266020830184614480565b9392505050565b6000606082019050614a426000830186614480565b614a4f6020830185614480565b614a5c6040830184614480565b949350505050565b600060a082019050614a796000830188614480565b614a866020830187614480565b614a936040830186614480565b614aa06060830185614480565b614aad6080830184613d72565b9695505050505050565b6000606082019050614acc60008301866144a6565b614ad960208301856144a6565b614ae66040830184614480565b949350505050565b6000606082019050614b0360008301866144b5565b614b1060208301856144b5565b614b1d6040830184614480565b949350505050565b60008083356001602003843603038112614b3e57600080fd5b80840192508235915067ffffffffffffffff821115614b5c57600080fd5b602083019250602082023603831315614b7457600080fd5b509250929050565b60008083356001602003843603038112614b9557600080fd5b80840192508235915067ffffffffffffffff821115614bb357600080fd5b602083019250600182023603831315614bcb57600080fd5b509250929050565b60008235600160c003833603038112614beb57600080fd5b80830191505092915050565b60008235600161010003833603038112614c1057600080fd5b80830191505092915050565b6000604051905081810181811067ffffffffffffffff82111715614c3f57600080fd5b8060405250919050565b600067ffffffffffffffff821115614c6057600080fd5b602082029050602081019050919050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614d1360208401846134df565b905092915050565b6000614d2682614dc7565b9050919050565b6000614d3882614dc7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614d8282614d1b565b9050919050565b6000614d9482614d1b565b9050919050565b6000614da682614d1b565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b6000614e1982614e20565b9050919050565b6000614e2b82614e32565b9050919050565b6000614e3d82614dc7565b9050919050565b6000614e4f82614e01565b9050919050565b82818337600083830152505050565b60005b83811015614e83578082015181840152602081019050614e68565b83811115614e92576000848401525b50505050565b6000819050919050565b6000819050919050565b6000601f19601f8301169050919050565b614ec681614d1b565b8114614ed157600080fd5b50565b614edd81614d2d565b8114614ee857600080fd5b50565b614ef481614d3f565b8114614eff57600080fd5b50565b614f0b81614d4b565b8114614f1657600080fd5b50565b614f2281614d77565b8114614f2d57600080fd5b50565b614f3981614d89565b8114614f4457600080fd5b50565b614f5081614d9b565b8114614f5b57600080fd5b50565b60038110614f6b57600080fd5b50565b614f7781614dad565b8114614f8257600080fd5b50565b614f8e81614de7565b8114614f9957600080fd5b50565b614fa581614df1565b8114614fb057600080fd5b50565b614fbc81614e01565b8114614fc757600080fd5b5056fea264697066735822122047b5d282b0d320eec69d21a35a11b3716965e09e53fbbb9927fd0f59f93539d164736f6c634300060c00330000000000000000000000009fffe8d0336b87b60ac847465be7459c1289df7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009fffe8d0336b87b60ac847465be7459c1289df7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _owner (address): 0x9fffe8d0336b87b60ac847465be7459c1289df73
Arg [1] : _feeRate (uint256): 0
Arg [2] : _referrerFeeRate (uint256): 0
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000009fffe8d0336b87b60ac847465be7459c1289df73
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
39265:12689:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33252:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43165:889;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;42902:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45891:2659;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51849:65;;;;;;;;;;;;;:::i;:::-;;48558:1285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51449:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24858:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39646:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23559:148;;;;;;;;;;;;;:::i;:::-;;39521:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51780:61;;;;;;;;;;;;;:::i;:::-;;22917:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39492:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32669:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39558:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51198:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32908:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23862:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33252:203;23139:12;:10;:12::i;:::-;23129:22;;:6;;;;;;;;;;:22;;;23121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33327:17:::1;33336:7;33327:8;:17::i;:::-;33319:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;33393:7;:16;33401:7;33393:16;;;;;;;;;;;;;;;;33386:23;;;;;;;;;;;33425:22;33439:7;33425:22;;;;;;:::i;:::-;;;;;;;;33252:203:::0;:::o;43165:889::-;43423:17;43442;43461:18;43490:24;43517:52;43532:16;43550:11;43563:5;;43517:14;:52::i;:::-;43490:79;;43578:18;43599:10;43610:18;43599:30;;;;;;;;;;;;;;43578:51;;43638:18;43659:10;43670:18;43659:30;;;;;;;;;;;;;;43638:51;;43699:18;43719;43742:11;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43698:69;;;;;;;;;43776:16;43795:11;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43776:44;;43831:16;43850:137;43869:49;43904:13;43869:30;43887:11;43869:13;:17;;:30;;;;:::i;:::-;:34;;:49;;;;:::i;:::-;43929;43964:13;43929:30;43947:11;43929:13;:17;;:30;;;;:::i;:::-;:34;;:49;;;;:::i;:::-;43850:8;:137::i;:::-;43831:156;;44004:13;44019;44034:11;43996:50;;;;;;;;;;;;;43165:889;;;;;;;;;;;:::o;42902:255::-;43055:24;43097:52;43112:16;43130:11;43143:5;;43097:14;:52::i;:::-;43090:59;;42902:255;;;;;;:::o;45891:2659::-;46243:17;30938:1;31543:7;;:19;;31535:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30938:1;31676:7;:18;;;;25176:7:::1;;;;;;;;;;;25175:8;25167:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;46296:1:::2;46281:12;:16;46273:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;46340:42;46357:16;:23;;;;;;;;;;:::i;:::-;46340:8;:42::i;:::-;46332:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46412:34;46421:7;46430:8;46440:5;;46412:8;:34::i;:::-;46459:13;46503:8;46482:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46459:64;;46534:13;46578:8;46557:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46534:64;;46615:15;:7;:13;;;:15::i;:::-;46611:173;;;39597:42;46698:20;;;46727:41;46762:4;46727:7;:26;;;;:41;;;;:::i;:::-;46698:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;46611:173;46796:100;46813:6;46821:40;46855:4;46821:6;:25;;;;:40;;;;:::i;:::-;46871:16;:23;;;;;;;;;;:::i;:::-;46796:16;:100::i;:::-;46907;46924:6;46932:40;46966:4;46932:6;:25;;;;:40;;;;:::i;:::-;46982:16;:23;;;;;;;;;;:::i;:::-;46907:16;:100::i;:::-;47020:16;:23;;;;;;;;;;:::i;:::-;:36;;;47077:6;47105;47125:40;47159:4;47125:6;:25;;;;:40;;;;:::i;:::-;47178;47212:4;47178:6;:25;;;;:40;;;;:::i;:::-;47231:16;:27;;;47271:16;:27;;;47319:4;47337:16;:25;;;47020:353;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47439:115;47478:10;47503:40;47537:4;47503:6;:25;;;;:40;;;;:::i;:::-;47439:6;:24;;;;:115;;;;;:::i;:::-;;47565;47604:10;47629:40;47663:4;47629:6;:25;;;;:40;;;;:::i;:::-;47565:6;:24;;;;:115;;;;;:::i;:::-;;47729:42;47765:4;47729:8;:27;;;;:42;;;;:::i;:::-;47717:54;;47782:11;47804:19:::0;47866:123:::2;47892:8;47915:9;47939:16;47970:8;47866:11;:123::i;:::-;47834:155;;;;;;;;;;;;48064:12;48051:9;:25;;48029:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;48206:49;48233:10;48245:9;48206:8;:26;;;;:49;;;;;:::i;:::-;;48300:8;48273:57;;48291:7;48273:57;;48279:10;48273:57;;;48310:8;48320:9;48273:57;;;;;;;:::i;:::-;;;;;;;;48413:8;48346:196;;48390:8;48346:196;;48368:7;48346:196;;;48436:8;48459:9;48483:3;48501:11;48527:4;48346:196;;;;;;;;;;:::i;:::-;;;;;;;;25215:1;;;;30894::::0;31855:7;:22;;;;45891:2659;;;;;;;;;;;:::o;51849:65::-;23139:12;:10;:12::i;:::-;23129:22;;:6;;;;;;;;;;:22;;;23121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51896:10:::1;:8;:10::i;:::-;51849:65::o:0;48558:1285::-;48847:17;30938:1;31543:7;;:19;;31535:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30938:1;31676:7;:18;;;;25176:7:::1;;;;;;;;;;;25175:8;25167:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;48900:1:::2;48885:12;:16;48877:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;48938:34;48947:7;48956:8;48966:5;;48938:8;:34::i;:::-;49021:42;49057:4;49021:8;:27;;;;:42;;;;:::i;:::-;49009:54;;49074:11;49096:19:::0;49158:123:::2;49184:8;49207:9;49231:16;49262:8;49158:11;:123::i;:::-;49126:155;;;;;;;;;;;;49356:12;49343:9;:25;;49321:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;49498:49;49525:10;49537:9;49498:8;:26;;;;:49;;;;;:::i;:::-;;49592:8;49565:57;;49583:7;49565:57;;49571:10;49565:57;;;49602:8;49612:9;49565:57;;;;;;;:::i;:::-;;;;;;;;49705:8;49638:197;;49682:8;49638:197;;49660:7;49638:197;;;49728:8;49751:9;49775:3;49793:11;49819:5;49638:197;;;;;;;;;;:::i;:::-;;;;;;;;25215:1;;30894::::0;31855:7;:22;;;;48558:1285;;;;;;;;;;:::o;51449:323::-;23139:12;:10;:12::i;:::-;23129:22;;:6;;;;;;;;;;:22;;;23121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51562:5:::1;51542:16;:25;;51534:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;51599:26;51628:15;;51599:44;;51672:16;51654:15;:34;;;;51747:16;51727:18;51704:60;;;;;;;;;;23199:1;51449:323:::0;:::o;24858:78::-;24897:4;24921:7;;;;;;;;;;;24914:14;;24858:78;:::o;39646:77::-;39681:42;39646:77;:::o;23559:148::-;23139:12;:10;:12::i;:::-;23129:22;;:6;;;;;;;;;;:22;;;23121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23666:1:::1;23629:40;;23650:6;::::0;::::1;;;;;;;;23629:40;;;;;;;;;;;;23697:1;23680:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;23559:148::o:0;39521:30::-;;;;:::o;51780:61::-;23139:12;:10;:12::i;:::-;23129:22;;:6;;;;;;;;;;:22;;;23121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51825:8:::1;:6;:8::i;:::-;51780:61::o:0;22917:79::-;22955:7;22982:6;;;;;;;;;;;22975:13;;22917:79;:::o;39492:22::-;;;;:::o;32669:104::-;32725:4;32749:7;:16;32757:7;32749:16;;;;;;;;;;;;;;;;;;;;;;;;;32742:23;;32669:104;;;:::o;39558:81::-;39597:42;39558:81;:::o;51198:243::-;23139:12;:10;:12::i;:::-;23129:22;;:6;;;;;;;;;;:22;;;23121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;51287:5:::1;51275:8;:17;;51267:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;51324:18;51345:7;;51324:28;;51373:8;51363:7;:18;;;;51424:8;51412:10;51397:36;;;;;;;;;;23199:1;51198:243:::0;:::o;32908:201::-;23139:12;:10;:12::i;:::-;23129:22;;:6;;;;;;;;;;:22;;;23121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32981:17:::1;32990:7;32981:8;:17::i;:::-;32980:18;32972:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33061:4;33042:7;:16;33050:7;33042:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;33081:20;33093:7;33081:20;;;;;;:::i;:::-;;;;;;;;32908:201:::0;:::o;23862:281::-;23139:12;:10;:12::i;:::-;23129:22;;:6;;;;;;;;;;:22;;;23121:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23985:1:::1;23965:22;;:8;:22;;;;23943:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;24098:8;24069:38;;24090:6;::::0;::::1;;;;;;;;24069:38;;;;;;;;;;;;24127:8;24118:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;23862:281:::0;:::o;21859:106::-;21912:15;21947:10;21940:17;;21859:106;:::o;41268:1628::-;41424:24;41461:21;41496:16;41485:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41461:52;;41537:11;41524:7;41532:1;41524:10;;;;;;;;;;;;;:24;;;;;41566:9;41561:1303;41585:5;;:12;;41581:1;:16;41561:1303;;;41627:25;41636:5;;41642:1;41636:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;;;;;;;;:::i;:::-;41627:8;:25::i;:::-;41619:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;41684:20;41707:109;41734:5;;41740:1;41734:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;41768:7;41776:5;;41782:1;41776:8;;;;;;;;;;;;;;;;;;:::i;:::-;:24;;;41768:33;;;;;;;;;;;;;;41707:8;:109::i;:::-;41684:132;;41868:15;41831:7;41839:5;;41845:1;41839:8;;;;;;;;;;;;;;;;;;:::i;:::-;:24;;;41831:33;;;;;;;;;;;;;:52;;;;;;;;;;;41925:19;41902:42;;;;;;;;:5;;41908:1;41902:8;;;;;;;;;;;;;;;;;;:::i;:::-;:19;;;;;;;;;;:::i;:::-;:42;;;;;;;;;41898:955;;;41965:24;42009:5;;42015:1;42009:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;;;;;;;;:::i;:::-;41992:47;;;42062:15;42100:5;;42106:1;42100:8;;;;;;;;;;;;;;;;;;:::i;:::-;:13;;;;;;;;:::i;:::-;41992:140;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41965:167;;42189:10;42220:1;42200:10;:17;:21;42189:33;;;;;;;;;;;;;;42151:7;42159:5;;42165:1;42159:8;;;;;;;;;;;;;;;;;;:::i;:::-;:25;;;42151:34;;;;;;;;;;;;;:71;;;;;;;;;;;41898:955;;;;42271:17;42248:40;;;;;;;;:5;;42254:1;42248:8;;;;;;;;;;;;;;;;;;:::i;:::-;:19;;;;;;;;;;:::i;:::-;:40;;;;;;;;;42244:609;;;42309:14;42337:5;;42343:1;42337:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;;;;;;;;:::i;:::-;42326:34;;;42383:5;;42389:1;42383:8;;;;;;;;;;;;;;;;;;:::i;:::-;:10;;;;;;;;;;:::i;:::-;42416:5;;42422:1;42416:8;;;;;;;;;;;;;;;;;;:::i;:::-;:10;;;;;;;;;;:::i;:::-;42449:15;42326:157;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42309:174;;42540:9;42502:7;42510:5;;42516:1;42510:8;;;;;;;;;;;;;;;;;;:::i;:::-;:25;;;42502:34;;;;;;;;;;;;;:47;;;;;;;;;;;42244:609;;;;42590:14;42618:5;;42624:1;42618:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;;;;;;;;:::i;:::-;42607:41;;;42671:5;;42677:1;42671:8;;;;;;;;;;;;;;;;;;:::i;:::-;:10;;;;;;;;;;:::i;:::-;42704:5;;42710:1;42704:8;;;;;;;;;;;;;;;;;;:::i;:::-;:10;;;;;;;;;;:::i;:::-;42737:15;42607:164;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42590:181;;42828:9;42790:7;42798:5;;42804:1;42798:8;;;;;;;;;;;;;;;;;;:::i;:::-;:25;;;42790:34;;;;;;;;;;;;;:47;;;;;;;;;;;42244:609;;41898:955;41561:1303;41599:3;;;;;;;41561:1303;;;;42881:7;42874:14;;;41268:1628;;;;;;:::o;1886:471::-;1944:7;2194:1;2189;:6;2185:47;;;2219:1;2212:8;;;;2185:47;2244:9;2260:1;2256;:5;2244:17;;2289:1;2284;2280;:5;;;;;;:10;2272:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2348:1;2341:8;;;1886:471;;;;;:::o;2833:132::-;2891:7;2918:39;2922:1;2925;2918:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2911:46;;2833:132;;;;:::o;21232:106::-;21290:7;21321:1;21317;:5;:13;;21329:1;21317:13;;;21325:1;21317:13;21310:20;;21232:106;;;;:::o;44062:1821::-;25176:7;;;;;;;;;;;25175:8;25167:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;44261:1:::1;44246:5;;:12;;:16;44238:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44339:15;:7;:13;;;:15::i;:::-;44319:35;;44333:1;44320:9;:14;;44319:35;;;44297:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;44488:15;:7;:13;;;:15::i;:::-;44483:110;;44520:61;44545:10;44565:4;44572:8;44520:7;:24;;;;:61;;;;;;:::i;:::-;44483:110;44636:9;44631:1245;44655:5;;:12;;44651:1;:16;44631:1245;;;44731:25;44740:5;;44746:1;44740:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;;;;;;;;:::i;:::-;44731:8;:25::i;:::-;44723:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;44792:24;:5;;44798:1;44792:8;;;;;;;;;;;;;;;;;;:::i;:::-;:16;;;;;;;;;;:::i;:::-;:22;;;:24::i;:::-;44788:1077;;;44838:14;44857:5;;44863:1;44857:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;;;;;;;;:::i;:::-;:20;;44885:5;;44891:1;44885:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;44967:5;;44973:1;44967:8;;;;;;;;;;;;;;;;;;:::i;:::-;:17;;;;;;;;;;:::i;:::-;45011:5;;45017:1;45011:8;;;;;;;;;;;;;;;;;;:::i;:::-;:13;;;;;;;;:::i;:::-;44924:123;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44857:209;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44837:229;;;45093:9;45085:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;44788:1077;;;;45166:68;45183:5;;45189:1;45183:8;;;;;;;;;;;;;;;;;;:::i;:::-;:16;;;;;;;;;;:::i;:::-;45201:5;;45207:1;45201:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;45218:5;;45224:1;45218:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;;;;;;;;:::i;:::-;45166:16;:68::i;:::-;45253:20;45276:138;45307:5;;45313:1;45307:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;45345:50;45389:4;45345:5;;45351:1;45345:8;;;;;;;;;;;;;;;;;;:::i;:::-;:16;;;;;;;;;;:::i;:::-;:35;;;;:50;;;;:::i;:::-;45276:8;:138::i;:::-;45253:161;;45433:20;45456:1;45433:24;;45477:14;45496:5;;45502:1;45496:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;;;;;;;;:::i;:::-;:20;;45580:5;;45586:1;45580:8;;;;;;;;;;;;;;;;;;:::i;:::-;:17;;;;;;;;;;:::i;:::-;45622:5;;45628:1;45622:8;;;;;;;;;;;;;;;;;;:::i;:::-;:15;;;;;;;;:::i;:::-;45662;45702:12;45739:5;;45745:1;45739:8;;;;;;;;;;;;;;;;;;:::i;:::-;:13;;;;;;;;:::i;:::-;45539:236;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45496:298;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45476:318;;;45821:9;45813:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;44788:1077;;;;44669:3;;;;;;;44631:1245;;;;44062:1821:::0;;;;:::o;29426:180::-;29478:4;26271:42;29503:39;;29511:5;29503:39;;;:94;;;;26375:42;29559:38;;29567:5;29559:38;;;29503:94;29495:103;;29426:180;;;:::o;28557:260::-;28662:7;28691:12;28697:5;28691;:12::i;:::-;28687:123;;;28727:3;:11;;;28720:18;;;;28687:123;28778:5;:15;;;28794:3;28778:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28771:27;;28557:260;;;;;:::o;50967:223::-;51078:45;51096:14;51120:1;51078:5;:17;;;;:45;;;;;:::i;:::-;51134:48;51162:14;51178:3;51134:5;:27;;;;:48;;;;;:::i;:::-;50967:223;;;:::o;26427:380::-;26548:4;26579:1;26569:6;:11;26565:56;;;26604:5;26597:12;;;;26565:56;26637:12;26643:5;26637;:12::i;:::-;26633:145;;;26682:2;26666:29;;:37;26696:6;26666:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26633:145;;;26736:30;26755:2;26759:6;26736:5;:18;;;;:30;;;;;:::i;:::-;26633:145;26795:4;26788:11;;26427:380;;;;;;:::o;49851:1108::-;50044:21;50080:11;50106:19;50170:16;50157:9;:29;;:45;;;;50201:1;50190:7;;:12;50157:45;50153:102;;;50227:9;50238:1;50241;50219:24;;;;;;;;50153:102;50273:55;50322:5;50273:44;50309:7;;50273:31;50287:16;50273:9;:13;;:31;;;;:::i;:::-;:35;;:44;;;;:::i;:::-;:48;;:55;;;;:::i;:::-;50267:61;;50379:1;50359:22;;:8;:22;;;;:61;;;;;50410:10;50398:22;;:8;:22;;;;50359:61;:99;;;;;50449:9;50437:21;;:8;:21;;;;50359:99;50341:447;;;50499:35;50528:5;50499:24;50507:15;;50499:3;:7;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;50485:49;;50553:48;50579:8;50589:11;50553:7;:25;;;;:48;;;;;:::i;:::-;50549:228;;;50634:26;50648:11;50634:9;:13;;:26;;;;:::i;:::-;50622:38;;50685:20;50693:11;50685:3;:7;;:20;;;;:::i;:::-;50679:26;;50549:228;;;50760:1;50746:15;;50549:228;50341:447;50804:40;39681:42;50840:3;50804:7;:25;;;;:40;;;;;:::i;:::-;50800:103;;;50873:18;50887:3;50873:9;:13;;:18;;;;:::i;:::-;50861:30;;50800:103;50923:9;50915:36;;49851:1108;;;;;;;;;:::o;25907:120::-;25452:7;;;;;;;;;;;25444:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;25976:5:::1;25966:7;;:15;;;;;;;;;;;;;;;;;;25997:22;26006:12;:10;:12::i;:::-;25997:22;;;;;;:::i;:::-;;;;;;;;25907:120::o:0;25648:118::-;25176:7;;;;;;;;;;;25175:8;25167:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;25718:4:::1;25708:7;;:14;;;;;;;;;;;;;;;;;;25738:20;25745:12;:10;:12::i;:::-;25738:20;;;;;;:::i;:::-;;;;;;;;25648:118::o:0;3461:312::-;3581:7;3613:1;3609;:5;3616:12;3601:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3640:9;3656:1;3652;:5;;;;;;3640:17;;3764:1;3757:8;;;3461:312;;;;;:::o;17280:285::-;17424:133;17458:5;17501:27;;;17530:4;17536:2;17540:5;17478:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17424:19;:133::i;:::-;17280:285;;;;:::o;17834:707::-;18261:1;18252:5;:10;18251:62;;;;18311:1;18268:5;:15;;;18292:4;18299:7;18268:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;18251:62;18229:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;18406:127;18440:5;18483:22;;;18507:7;18516:5;18460:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18406:19;:127::i;:::-;17834:707;;;:::o;18549:436::-;18680:20;18716:50;18760:5;18716;:15;;;18740:4;18747:7;18716:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;:50;;;;:::i;:::-;18680:86;;18777:200;18811:5;18872:22;;;18913:7;18939:12;18831:135;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18777:19;:200::i;:::-;18549:436;;;;:::o;17024:248::-;17141:123;17175:5;17218:23;;;17243:2;17247:5;17195:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17141:19;:123::i;:::-;17024:248;;;:::o;962:136::-;1020:7;1047:43;1051:1;1054;1047:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1040:50;;962:136;;;;:::o;19914:885::-;20338:23;20377:118;20423:4;20377:118;;;;;;;;;;;;;;;;;20385:5;20377:27;;;;:118;;;;;:::i;:::-;20338:157;;20530:1;20510:10;:17;:21;20506:286;;;20683:10;20672:30;;;;;;;;;;;;:::i;:::-;20646:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;20506:286;19914:885;;;:::o;498:181::-;556:7;576:9;592:1;588;:5;576:17;;617:1;612;:6;;604:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;670:1;663:8;;;498:181;;;;:::o;1401:226::-;1521:7;1554:1;1549;:6;;1557:12;1541:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1581:9;1597:1;1593;:5;1581:17;;1618:1;1611:8;;;1401:226;;;;;:::o;8896:229::-;9033:12;9065:52;9087:6;9095:4;9101:1;9104:12;9065:21;:52::i;:::-;9058:59;;8896:229;;;;;:::o;10112:621::-;10282:12;10354:5;10329:21;:30;;10307:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;10444:18;10455:6;10444:10;:18::i;:::-;10436:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10570:12;10584:23;10624:6;:11;;10643:5;10650:4;10624:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10569:86;;;;10673:52;10691:7;10700:10;10712:12;10673:17;:52::i;:::-;10666:59;;;;10112:621;;;;;;:::o;5859:444::-;5919:4;6127:12;6251:7;6239:20;6231:28;;6294:1;6287:4;:8;6280:15;;;5859:444;;;:::o;13024:777::-;13174:12;13203:7;13199:595;;;13234:10;13227:17;;;;13199:595;13368:1;13348:10;:17;:21;13344:439;;;13611:10;13605:17;13672:15;13659:10;13655:2;13651:19;13644:44;13559:148;13754:12;13747:20;;;;;;;;;;;:::i;:::-;;;;;;;;13024:777;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;142:134::-;;226:6;220:13;211:22;;238:33;265:5;238:33;:::i;:::-;205:71;;;;:::o;283:146::-;;371:6;358:20;349:29;;383:41;418:5;383:41;:::i;:::-;343:86;;;;:::o;476:382::-;;;636:3;629:4;621:6;617:17;613:27;603:2;;654:1;651;644:12;603:2;687:6;674:20;664:30;;714:18;706:6;703:30;700:2;;;746:1;743;736:12;700:2;780:4;772:6;768:17;756:29;;831:3;823:4;815:6;811:17;801:8;797:32;794:41;791:2;;;848:1;845;838:12;791:2;596:262;;;;;:::o;911:387::-;;;1076:3;1069:4;1061:6;1057:17;1053:27;1043:2;;1094:1;1091;1084:12;1043:2;1127:6;1114:20;1104:30;;1154:18;1146:6;1143:30;1140:2;;;1186:1;1183;1176:12;1140:2;1220:4;1212:6;1208:17;1196:29;;1271:3;1263:4;1255:6;1251:17;1241:8;1237:32;1234:41;1231:2;;;1288:1;1285;1278:12;1231:2;1036:262;;;;;:::o;1324:722::-;;1452:3;1445:4;1437:6;1433:17;1429:27;1419:2;;1470:1;1467;1460:12;1419:2;1500:6;1494:13;1522:80;1537:64;1594:6;1537:64;:::i;:::-;1522:80;:::i;:::-;1513:89;;1619:5;1644:6;1637:5;1630:21;1674:4;1666:6;1662:17;1652:27;;1696:4;1691:3;1687:14;1680:21;;1749:6;1796:3;1788:4;1780:6;1776:17;1771:3;1767:27;1764:36;1761:2;;;1813:1;1810;1803:12;1761:2;1838:1;1823:217;1848:6;1845:1;1842:13;1823:217;;;1906:3;1928:48;1972:3;1960:10;1928:48;:::i;:::-;1923:3;1916:61;2000:4;1995:3;1991:14;1984:21;;2028:4;2023:3;2019:14;2012:21;;1880:160;1870:1;1867;1863:9;1858:14;;1823:217;;;1827:14;1412:634;;;;;;;:::o;2054:128::-;;2135:6;2129:13;2120:22;;2147:30;2171:5;2147:30;:::i;:::-;2114:68;;;;:::o;2189:128::-;;2268:6;2255:20;2246:29;;2280:32;2306:5;2280:32;:::i;:::-;2240:77;;;;:::o;2324:158::-;;2418:6;2405:20;2396:29;;2430:47;2471:5;2430:47;:::i;:::-;2390:92;;;;:::o;2489:172::-;;2590:6;2577:20;2568:29;;2602:54;2650:5;2602:54;:::i;:::-;2562:99;;;;:::o;2668:180::-;;2773:6;2760:20;2751:29;;2785:58;2837:5;2785:58;:::i;:::-;2745:103;;;;:::o;2855:162::-;;2951:6;2938:20;2929:29;;2963:49;3006:5;2963:49;:::i;:::-;2923:94;;;;:::o;3074:174::-;;3200:3;3191:6;3186:3;3182:16;3178:26;3175:2;;;3217:1;3214;3207:12;3175:2;3236:6;3227:15;;3168:80;;;;:::o;3255:134::-;;3339:6;3333:13;3324:22;;3351:33;3378:5;3351:33;:::i;:::-;3318:71;;;;:::o;3396:130::-;;3476:6;3463:20;3454:29;;3488:33;3515:5;3488:33;:::i;:::-;3448:78;;;;:::o;3533:134::-;;3617:6;3611:13;3602:22;;3629:33;3656:5;3629:33;:::i;:::-;3596:71;;;;:::o;3674:132::-;;3757:6;3751:13;3742:22;;3769:32;3795:5;3769:32;:::i;:::-;3736:70;;;;:::o;3813:126::-;;3891:6;3878:20;3869:29;;3903:31;3928:5;3903:31;:::i;:::-;3863:76;;;;:::o;3946:241::-;;4050:2;4038:9;4029:7;4025:23;4021:32;4018:2;;;4066:1;4063;4056:12;4018:2;4101:1;4118:53;4163:7;4154:6;4143:9;4139:22;4118:53;:::i;:::-;4108:63;;4080:97;4012:175;;;;:::o;4194:263::-;;4309:2;4297:9;4288:7;4284:23;4280:32;4277:2;;;4325:1;4322;4315:12;4277:2;4360:1;4377:64;4433:7;4424:6;4413:9;4409:22;4377:64;:::i;:::-;4367:74;;4339:108;4271:186;;;;:::o;4464:392::-;;4604:2;4592:9;4583:7;4579:23;4575:32;4572:2;;;4620:1;4617;4610:12;4572:2;4676:1;4665:9;4661:17;4655:24;4699:18;4691:6;4688:30;4685:2;;;4731:1;4728;4721:12;4685:2;4751:89;4832:7;4823:6;4812:9;4808:22;4751:89;:::i;:::-;4741:99;;4634:212;4566:290;;;;:::o;4863:257::-;;4975:2;4963:9;4954:7;4950:23;4946:32;4943:2;;;4991:1;4988;4981:12;4943:2;5026:1;5043:61;5096:7;5087:6;5076:9;5072:22;5043:61;:::i;:::-;5033:71;;5005:105;4937:183;;;;:::o;5127:239::-;;5230:2;5218:9;5209:7;5205:23;5201:32;5198:2;;;5246:1;5243;5236:12;5198:2;5281:1;5298:52;5342:7;5333:6;5322:9;5318:22;5298:52;:::i;:::-;5288:62;;5260:96;5192:174;;;;:::o;5373:269::-;;5491:2;5479:9;5470:7;5466:23;5462:32;5459:2;;;5507:1;5504;5497:12;5459:2;5542:1;5559:67;5618:7;5609:6;5598:9;5594:22;5559:67;:::i;:::-;5549:77;;5521:111;5453:189;;;;:::o;5649:1283::-;;;;;;;;;5956:3;5944:9;5935:7;5931:23;5927:33;5924:2;;;5973:1;5970;5963:12;5924:2;6008:1;6025:67;6084:7;6075:6;6064:9;6060:22;6025:67;:::i;:::-;6015:77;;5987:111;6129:2;6147:67;6206:7;6197:6;6186:9;6182:22;6147:67;:::i;:::-;6137:77;;6108:112;6251:2;6269:53;6314:7;6305:6;6294:9;6290:22;6269:53;:::i;:::-;6259:63;;6230:98;6359:2;6377:53;6422:7;6413:6;6402:9;6398:22;6377:53;:::i;:::-;6367:63;;6338:98;6467:3;6486:53;6531:7;6522:6;6511:9;6507:22;6486:53;:::i;:::-;6476:63;;6446:99;6576:3;6595:61;6648:7;6639:6;6628:9;6624:22;6595:61;:::i;:::-;6585:71;;6555:107;6721:3;6710:9;6706:19;6693:33;6746:18;6738:6;6735:30;6732:2;;;6778:1;6775;6768:12;6732:2;6806:110;6908:7;6899:6;6888:9;6884:22;6806:110;:::i;:::-;6788:128;;;;6672:250;5918:1014;;;;;;;;;;;:::o;6939:1493::-;;;;;;;;;;7305:3;7293:9;7284:7;7280:23;7276:33;7273:2;;;7322:1;7319;7312:12;7273:2;7357:1;7374:67;7433:7;7424:6;7413:9;7409:22;7374:67;:::i;:::-;7364:77;;7336:111;7478:2;7496:67;7555:7;7546:6;7535:9;7531:22;7496:67;:::i;:::-;7486:77;;7457:112;7600:2;7618:53;7663:7;7654:6;7643:9;7639:22;7618:53;:::i;:::-;7608:63;;7579:98;7708:2;7726:53;7771:7;7762:6;7751:9;7747:22;7726:53;:::i;:::-;7716:63;;7687:98;7816:3;7835:53;7880:7;7871:6;7860:9;7856:22;7835:53;:::i;:::-;7825:63;;7795:99;7925:3;7944:61;7997:7;7988:6;7977:9;7973:22;7944:61;:::i;:::-;7934:71;;7904:107;8070:3;8059:9;8055:19;8042:33;8095:18;8087:6;8084:30;8081:2;;;8127:1;8124;8117:12;8081:2;8155:110;8257:7;8248:6;8237:9;8233:22;8155:110;:::i;:::-;8137:128;;;;8021:250;8302:3;8321:95;8408:7;8399:6;8388:9;8384:22;8321:95;:::i;:::-;8311:105;;8281:141;7267:1165;;;;;;;;;;;:::o;8439:291::-;;8568:2;8556:9;8547:7;8543:23;8539:32;8536:2;;;8584:1;8581;8574:12;8536:2;8619:1;8636:78;8706:7;8697:6;8686:9;8682:22;8636:78;:::i;:::-;8626:88;;8598:122;8530:200;;;;:::o;8737:273::-;;8857:2;8845:9;8836:7;8832:23;8828:32;8825:2;;;8873:1;8870;8863:12;8825:2;8908:1;8925:69;8986:7;8977:6;8966:9;8962:22;8925:69;:::i;:::-;8915:79;;8887:113;8819:191;;;;:::o;9017:533::-;;;;9165:2;9153:9;9144:7;9140:23;9136:32;9133:2;;;9181:1;9178;9171:12;9133:2;9216:1;9233:64;9289:7;9280:6;9269:9;9265:22;9233:64;:::i;:::-;9223:74;;9195:108;9334:2;9352:64;9408:7;9399:6;9388:9;9384:22;9352:64;:::i;:::-;9342:74;;9313:109;9453:2;9471:63;9526:7;9517:6;9506:9;9502:22;9471:63;:::i;:::-;9461:73;;9432:108;9127:423;;;;;:::o;9557:241::-;;9661:2;9649:9;9640:7;9636:23;9632:32;9629:2;;;9677:1;9674;9667:12;9629:2;9712:1;9729:53;9774:7;9765:6;9754:9;9750:22;9729:53;:::i;:::-;9719:63;;9691:97;9623:175;;;;:::o;9805:263::-;;9920:2;9908:9;9899:7;9895:23;9891:32;9888:2;;;9936:1;9933;9926:12;9888:2;9971:1;9988:64;10044:7;10035:6;10024:9;10020:22;9988:64;:::i;:::-;9978:74;;9950:108;9882:186;;;;:::o;10075:717::-;;;;;10283:2;10271:9;10262:7;10258:23;10254:32;10251:2;;;10299:1;10296;10289:12;10251:2;10334:1;10351:53;10396:7;10387:6;10376:9;10372:22;10351:53;:::i;:::-;10341:63;;10313:97;10441:2;10459:53;10504:7;10495:6;10484:9;10480:22;10459:53;:::i;:::-;10449:63;;10420:98;10577:2;10566:9;10562:18;10549:32;10601:18;10593:6;10590:30;10587:2;;;10633:1;10630;10623:12;10587:2;10661:115;10768:7;10759:6;10748:9;10744:22;10661:115;:::i;:::-;10643:133;;;;10528:254;10245:547;;;;;;;:::o;10799:1137::-;;;;;;;;11079:3;11067:9;11058:7;11054:23;11050:33;11047:2;;;11096:1;11093;11086:12;11047:2;11131:1;11148:53;11193:7;11184:6;11173:9;11169:22;11148:53;:::i;:::-;11138:63;;11110:97;11238:2;11256:53;11301:7;11292:6;11281:9;11277:22;11256:53;:::i;:::-;11246:63;;11217:98;11374:2;11363:9;11359:18;11346:32;11398:18;11390:6;11387:30;11384:2;;;11430:1;11427;11420:12;11384:2;11458:115;11565:7;11556:6;11545:9;11541:22;11458:115;:::i;:::-;11440:133;;;;11325:254;11610:2;11628:74;11694:7;11685:6;11674:9;11670:22;11628:74;:::i;:::-;11618:84;;11589:119;11739:3;11758:53;11803:7;11794:6;11783:9;11779:22;11758:53;:::i;:::-;11748:63;;11718:99;11848:3;11867:53;11912:7;11903:6;11892:9;11888:22;11867:53;:::i;:::-;11857:63;;11827:99;11041:895;;;;;;;;;;:::o;11943:535::-;;;;12092:2;12080:9;12071:7;12067:23;12063:32;12060:2;;;12108:1;12105;12098:12;12060:2;12143:1;12160:64;12216:7;12207:6;12196:9;12192:22;12160:64;:::i;:::-;12150:74;;12122:108;12261:2;12279:64;12335:7;12326:6;12315:9;12311:22;12279:64;:::i;:::-;12269:74;;12240:109;12380:2;12398:64;12454:7;12445:6;12434:9;12430:22;12398:64;:::i;:::-;12388:74;;12359:109;12054:424;;;;;:::o;12485:237::-;;12587:2;12575:9;12566:7;12562:23;12558:32;12555:2;;;12603:1;12600;12593:12;12555:2;12638:1;12655:51;12698:7;12689:6;12678:9;12674:22;12655:51;:::i;:::-;12645:61;;12617:95;12549:173;;;;:::o;12730:::-;;12817:46;12859:3;12851:6;12817:46;:::i;:::-;12892:4;12887:3;12883:14;12869:28;;12810:93;;;;:::o;12912:173::-;;12999:46;13041:3;13033:6;12999:46;:::i;:::-;13074:4;13069:3;13065:14;13051:28;;12992:93;;;;:::o;13093:142::-;13184:45;13223:5;13184:45;:::i;:::-;13179:3;13172:58;13166:69;;:::o;13242:137::-;13341:32;13367:5;13341:32;:::i;:::-;13336:3;13329:45;13323:56;;:::o;13386:103::-;13459:24;13477:5;13459:24;:::i;:::-;13454:3;13447:37;13441:48;;:::o;13496:113::-;13579:24;13597:5;13579:24;:::i;:::-;13574:3;13567:37;13561:48;;:::o;13647:665::-;;13801:86;13880:6;13875:3;13801:86;:::i;:::-;13794:93;;13908:58;13960:5;13908:58;:::i;:::-;13986:7;14014:1;13999:291;14024:6;14021:1;14018:13;13999:291;;;14085:42;14120:6;14111:7;14085:42;:::i;:::-;14141:63;14200:3;14185:13;14141:63;:::i;:::-;14134:70;;14221:62;14276:6;14221:62;:::i;:::-;14211:72;;14056:234;14046:1;14043;14039:9;14034:14;;13999:291;;;14003:14;14303:3;14296:10;;13781:531;;;;;;;:::o;14351:690::-;;14496:54;14544:5;14496:54;:::i;:::-;14563:86;14642:6;14637:3;14563:86;:::i;:::-;14556:93;;14670:56;14720:5;14670:56;:::i;:::-;14746:7;14774:1;14759:260;14784:6;14781:1;14778:13;14759:260;;;14851:6;14845:13;14872:63;14931:3;14916:13;14872:63;:::i;:::-;14865:70;;14952:60;15005:6;14952:60;:::i;:::-;14942:70;;14816:203;14806:1;14803;14799:9;14794:14;;14759:260;;;14763:14;15032:3;15025:10;;14475:566;;;;;;;:::o;15049:104::-;15126:21;15141:5;15126:21;:::i;:::-;15121:3;15114:34;15108:45;;:::o;15160:148::-;15259:43;15278:23;15295:5;15278:23;:::i;:::-;15259:43;:::i;:::-;15254:3;15247:56;15241:67;;:::o;15338:310::-;;15470:88;15551:6;15546:3;15470:88;:::i;:::-;15463:95;;15570:43;15606:6;15601:3;15594:5;15570:43;:::i;:::-;15635:6;15630:3;15626:16;15619:23;;15456:192;;;;;:::o;15656:356::-;;15784:38;15816:5;15784:38;:::i;:::-;15834:88;15915:6;15910:3;15834:88;:::i;:::-;15827:95;;15927:52;15972:6;15967:3;15960:4;15953:5;15949:16;15927:52;:::i;:::-;16000:6;15995:3;15991:16;15984:23;;15764:248;;;;;:::o;16019:347::-;;16131:39;16164:5;16131:39;:::i;:::-;16182:71;16246:6;16241:3;16182:71;:::i;:::-;16175:78;;16258:52;16303:6;16298:3;16291:4;16284:5;16280:16;16258:52;:::i;:::-;16331:29;16353:6;16331:29;:::i;:::-;16326:3;16322:39;16315:46;;16111:255;;;;;:::o;16374:320::-;;16534:67;16598:2;16593:3;16534:67;:::i;:::-;16527:74;;16634:22;16630:1;16625:3;16621:11;16614:43;16685:2;16680:3;16676:12;16669:19;;16520:174;;;:::o;16703:375::-;;16863:67;16927:2;16922:3;16863:67;:::i;:::-;16856:74;;16963:34;16959:1;16954:3;16950:11;16943:55;17032:8;17027:2;17022:3;17018:12;17011:30;17069:2;17064:3;17060:12;17053:19;;16849:229;;;:::o;17087:314::-;;17247:67;17311:2;17306:3;17247:67;:::i;:::-;17240:74;;17347:16;17343:1;17338:3;17334:11;17327:37;17392:2;17387:3;17383:12;17376:19;;17233:168;;;:::o;17410:327::-;;17570:67;17634:2;17629:3;17570:67;:::i;:::-;17563:74;;17670:29;17666:1;17661:3;17657:11;17650:50;17728:2;17723:3;17719:12;17712:19;;17556:181;;;:::o;17746:379::-;;17906:67;17970:2;17965:3;17906:67;:::i;:::-;17899:74;;18006:34;18002:1;17997:3;17993:11;17986:55;18075:12;18070:2;18065:3;18061:12;18054:34;18116:2;18111:3;18107:12;18100:19;;17892:233;;;:::o;18134:375::-;;18294:67;18358:2;18353:3;18294:67;:::i;:::-;18287:74;;18394:34;18390:1;18385:3;18381:11;18374:55;18463:8;18458:2;18453:3;18449:12;18442:30;18500:2;18495:3;18491:12;18484:19;;18280:229;;;:::o;18518:316::-;;18678:67;18742:2;18737:3;18678:67;:::i;:::-;18671:74;;18778:18;18774:1;18769:3;18765:11;18758:39;18825:2;18820:3;18816:12;18809:19;;18664:170;;;:::o;18843:324::-;;19003:67;19067:2;19062:3;19003:67;:::i;:::-;18996:74;;19103:26;19099:1;19094:3;19090:11;19083:47;19158:2;19153:3;19149:12;19142:19;;18989:178;;;:::o;19176:388::-;;19336:67;19400:2;19395:3;19336:67;:::i;:::-;19329:74;;19436:34;19432:1;19427:3;19423:11;19416:55;19505:21;19500:2;19495:3;19491:12;19484:43;19555:2;19550:3;19546:12;19539:19;;19322:242;;;:::o;19573:370::-;;19733:67;19797:2;19792:3;19733:67;:::i;:::-;19726:74;;19833:34;19829:1;19824:3;19820:11;19813:55;19902:3;19897:2;19892:3;19888:12;19881:25;19934:2;19929:3;19925:12;19918:19;;19719:224;;;:::o;19952:332::-;;20112:67;20176:2;20171:3;20112:67;:::i;:::-;20105:74;;20212:34;20208:1;20203:3;20199:11;20192:55;20275:2;20270:3;20266:12;20259:19;;20098:186;;;:::o;20293:319::-;;20453:67;20517:2;20512:3;20453:67;:::i;:::-;20446:74;;20553:21;20549:1;20544:3;20540:11;20533:42;20603:2;20598:3;20594:12;20587:19;;20439:173;;;:::o;20621:312::-;;20781:67;20845:2;20840:3;20781:67;:::i;:::-;20774:74;;20881:14;20877:1;20872:3;20868:11;20861:35;20924:2;20919:3;20915:12;20908:19;;20767:166;;;:::o;20942:318::-;;21102:67;21166:2;21161:3;21102:67;:::i;:::-;21095:74;;21202:20;21198:1;21193:3;21189:11;21182:41;21251:2;21246:3;21242:12;21235:19;;21088:172;;;:::o;21269:316::-;;21429:67;21493:2;21488:3;21429:67;:::i;:::-;21422:74;;21529:18;21525:1;21520:3;21516:11;21509:39;21576:2;21571:3;21567:12;21560:19;;21415:170;;;:::o;21594:329::-;;21754:67;21818:2;21813:3;21754:67;:::i;:::-;21747:74;;21854:31;21850:1;21845:3;21841:11;21834:52;21914:2;21909:3;21905:12;21898:19;;21740:183;;;:::o;21932:326::-;;22092:67;22156:2;22151:3;22092:67;:::i;:::-;22085:74;;22192:28;22188:1;22183:3;22179:11;22172:49;22249:2;22244:3;22240:12;22233:19;;22078:180;;;:::o;22267:379::-;;22427:67;22491:2;22486:3;22427:67;:::i;:::-;22420:74;;22527:34;22523:1;22518:3;22514:11;22507:55;22596:12;22591:2;22586:3;22582:12;22575:34;22637:2;22632:3;22628:12;22621:19;;22413:233;;;:::o;22655:331::-;;22815:67;22879:2;22874:3;22815:67;:::i;:::-;22808:74;;22915:33;22911:1;22906:3;22902:11;22895:54;22977:2;22972:3;22968:12;22961:19;;22801:185;;;:::o;22995:319::-;;23155:67;23219:2;23214:3;23155:67;:::i;:::-;23148:74;;23255:21;23251:1;23246:3;23242:11;23235:42;23305:2;23300:3;23296:12;23289:19;;23141:173;;;:::o;23323:391::-;;23483:67;23547:2;23542:3;23483:67;:::i;:::-;23476:74;;23583:34;23579:1;23574:3;23570:11;23563:55;23652:24;23647:2;23642:3;23638:12;23631:46;23705:2;23700:3;23696:12;23689:19;;23469:245;;;:::o;23722:103::-;23795:24;23813:5;23795:24;:::i;:::-;23790:3;23783:37;23777:48;;:::o;23832:113::-;23915:24;23933:5;23915:24;:::i;:::-;23910:3;23903:37;23897:48;;:::o;23952:152::-;24053:45;24073:24;24091:5;24073:24;:::i;:::-;24053:45;:::i;:::-;24048:3;24041:58;24035:69;;:::o;24111:120::-;24191:34;24219:5;24191:34;:::i;:::-;24186:3;24179:47;24173:58;;:::o;24238:107::-;24317:22;24333:5;24317:22;:::i;:::-;24312:3;24305:35;24299:46;;:::o;24352:425::-;;24534:73;24603:3;24594:6;24534:73;:::i;:::-;24629:1;24624:3;24620:11;24613:18;;24649:103;24748:3;24739:6;24731;24649:103;:::i;:::-;24642:110;;24769:3;24762:10;;24522:255;;;;;;:::o;24784:880::-;;25078:73;25147:3;25138:6;25078:73;:::i;:::-;25173:1;25168:3;25164:11;25157:18;;25193:103;25292:3;25283:6;25275;25193:103;:::i;:::-;25186:110;;25307:75;25378:3;25369:6;25307:75;:::i;:::-;25404:2;25399:3;25395:12;25388:19;;25418:75;25489:3;25480:6;25418:75;:::i;:::-;25515:2;25510:3;25506:12;25499:19;;25536:103;25635:3;25626:6;25618;25536:103;:::i;:::-;25529:110;;25656:3;25649:10;;25066:598;;;;;;;;;;:::o;25671:271::-;;25824:93;25913:3;25904:6;25824:93;:::i;:::-;25817:100;;25934:3;25927:10;;25805:137;;;;:::o;25949:222::-;;26076:2;26065:9;26061:18;26053:26;;26090:71;26158:1;26147:9;26143:17;26134:6;26090:71;:::i;:::-;26047:124;;;;:::o;26178:238::-;;26313:2;26302:9;26298:18;26290:26;;26327:79;26403:1;26392:9;26388:17;26379:6;26327:79;:::i;:::-;26284:132;;;;:::o;26423:254::-;;26566:2;26555:9;26551:18;26543:26;;26580:87;26664:1;26653:9;26649:17;26640:6;26580:87;:::i;:::-;26537:140;;;;:::o;26684:333::-;;26839:2;26828:9;26824:18;26816:26;;26853:71;26921:1;26910:9;26906:17;26897:6;26853:71;:::i;:::-;26935:72;27003:2;26992:9;26988:18;26979:6;26935:72;:::i;:::-;26810:207;;;;;:::o;27024:444::-;;27207:2;27196:9;27192:18;27184:26;;27221:71;27289:1;27278:9;27274:17;27265:6;27221:71;:::i;:::-;27303:72;27371:2;27360:9;27356:18;27347:6;27303:72;:::i;:::-;27386;27454:2;27443:9;27439:18;27430:6;27386:72;:::i;:::-;27178:290;;;;;;:::o;27475:1020::-;;27806:3;27795:9;27791:19;27783:27;;27821:71;27889:1;27878:9;27874:17;27865:6;27821:71;:::i;:::-;27903:72;27971:2;27960:9;27956:18;27947:6;27903:72;:::i;:::-;27986;28054:2;28043:9;28039:18;28030:6;27986:72;:::i;:::-;28069;28137:2;28126:9;28122:18;28113:6;28069:72;:::i;:::-;28152:73;28220:3;28209:9;28205:19;28196:6;28152:73;:::i;:::-;28236;28304:3;28293:9;28289:19;28280:6;28236:73;:::i;:::-;28320:81;28396:3;28385:9;28381:19;28372:6;28320:81;:::i;:::-;28412:73;28480:3;28469:9;28465:19;28456:6;28412:73;:::i;:::-;27777:718;;;;;;;;;;;:::o;28502:333::-;;28657:2;28646:9;28642:18;28634:26;;28671:71;28739:1;28728:9;28724:17;28715:6;28671:71;:::i;:::-;28753:72;28821:2;28810:9;28806:18;28797:6;28753:72;:::i;:::-;28628:207;;;;;:::o;28842:370::-;;29019:2;29008:9;29004:18;28996:26;;29069:9;29063:4;29059:20;29055:1;29044:9;29040:17;29033:47;29094:108;29197:4;29188:6;29094:108;:::i;:::-;29086:116;;28990:222;;;;:::o;29219:210::-;;29340:2;29329:9;29325:18;29317:26;;29354:65;29416:1;29405:9;29401:17;29392:6;29354:65;:::i;:::-;29311:118;;;;:::o;29436:310::-;;29583:2;29572:9;29568:18;29560:26;;29633:9;29627:4;29623:20;29619:1;29608:9;29604:17;29597:47;29658:78;29731:4;29722:6;29658:78;:::i;:::-;29650:86;;29554:192;;;;:::o;29753:416::-;;29953:2;29942:9;29938:18;29930:26;;30003:9;29997:4;29993:20;29989:1;29978:9;29974:17;29967:47;30028:131;30154:4;30028:131;:::i;:::-;30020:139;;29924:245;;;:::o;30176:416::-;;30376:2;30365:9;30361:18;30353:26;;30426:9;30420:4;30416:20;30412:1;30401:9;30397:17;30390:47;30451:131;30577:4;30451:131;:::i;:::-;30443:139;;30347:245;;;:::o;30599:416::-;;30799:2;30788:9;30784:18;30776:26;;30849:9;30843:4;30839:20;30835:1;30824:9;30820:17;30813:47;30874:131;31000:4;30874:131;:::i;:::-;30866:139;;30770:245;;;:::o;31022:416::-;;31222:2;31211:9;31207:18;31199:26;;31272:9;31266:4;31262:20;31258:1;31247:9;31243:17;31236:47;31297:131;31423:4;31297:131;:::i;:::-;31289:139;;31193:245;;;:::o;31445:416::-;;31645:2;31634:9;31630:18;31622:26;;31695:9;31689:4;31685:20;31681:1;31670:9;31666:17;31659:47;31720:131;31846:4;31720:131;:::i;:::-;31712:139;;31616:245;;;:::o;31868:416::-;;32068:2;32057:9;32053:18;32045:26;;32118:9;32112:4;32108:20;32104:1;32093:9;32089:17;32082:47;32143:131;32269:4;32143:131;:::i;:::-;32135:139;;32039:245;;;:::o;32291:416::-;;32491:2;32480:9;32476:18;32468:26;;32541:9;32535:4;32531:20;32527:1;32516:9;32512:17;32505:47;32566:131;32692:4;32566:131;:::i;:::-;32558:139;;32462:245;;;:::o;32714:416::-;;32914:2;32903:9;32899:18;32891:26;;32964:9;32958:4;32954:20;32950:1;32939:9;32935:17;32928:47;32989:131;33115:4;32989:131;:::i;:::-;32981:139;;32885:245;;;:::o;33137:416::-;;33337:2;33326:9;33322:18;33314:26;;33387:9;33381:4;33377:20;33373:1;33362:9;33358:17;33351:47;33412:131;33538:4;33412:131;:::i;:::-;33404:139;;33308:245;;;:::o;33560:416::-;;33760:2;33749:9;33745:18;33737:26;;33810:9;33804:4;33800:20;33796:1;33785:9;33781:17;33774:47;33835:131;33961:4;33835:131;:::i;:::-;33827:139;;33731:245;;;:::o;33983:416::-;;34183:2;34172:9;34168:18;34160:26;;34233:9;34227:4;34223:20;34219:1;34208:9;34204:17;34197:47;34258:131;34384:4;34258:131;:::i;:::-;34250:139;;34154:245;;;:::o;34406:416::-;;34606:2;34595:9;34591:18;34583:26;;34656:9;34650:4;34646:20;34642:1;34631:9;34627:17;34620:47;34681:131;34807:4;34681:131;:::i;:::-;34673:139;;34577:245;;;:::o;34829:416::-;;35029:2;35018:9;35014:18;35006:26;;35079:9;35073:4;35069:20;35065:1;35054:9;35050:17;35043:47;35104:131;35230:4;35104:131;:::i;:::-;35096:139;;35000:245;;;:::o;35252:416::-;;35452:2;35441:9;35437:18;35429:26;;35502:9;35496:4;35492:20;35488:1;35477:9;35473:17;35466:47;35527:131;35653:4;35527:131;:::i;:::-;35519:139;;35423:245;;;:::o;35675:416::-;;35875:2;35864:9;35860:18;35852:26;;35925:9;35919:4;35915:20;35911:1;35900:9;35896:17;35889:47;35950:131;36076:4;35950:131;:::i;:::-;35942:139;;35846:245;;;:::o;36098:416::-;;36298:2;36287:9;36283:18;36275:26;;36348:9;36342:4;36338:20;36334:1;36323:9;36319:17;36312:47;36373:131;36499:4;36373:131;:::i;:::-;36365:139;;36269:245;;;:::o;36521:416::-;;36721:2;36710:9;36706:18;36698:26;;36771:9;36765:4;36761:20;36757:1;36746:9;36742:17;36735:47;36796:131;36922:4;36796:131;:::i;:::-;36788:139;;36692:245;;;:::o;36944:416::-;;37144:2;37133:9;37129:18;37121:26;;37194:9;37188:4;37184:20;37180:1;37169:9;37165:17;37158:47;37219:131;37345:4;37219:131;:::i;:::-;37211:139;;37115:245;;;:::o;37367:416::-;;37567:2;37556:9;37552:18;37544:26;;37617:9;37611:4;37607:20;37603:1;37592:9;37588:17;37581:47;37642:131;37768:4;37642:131;:::i;:::-;37634:139;;37538:245;;;:::o;37790:416::-;;37990:2;37979:9;37975:18;37967:26;;38040:9;38034:4;38030:20;38026:1;38015:9;38011:17;38004:47;38065:131;38191:4;38065:131;:::i;:::-;38057:139;;37961:245;;;:::o;38213:416::-;;38413:2;38402:9;38398:18;38390:26;;38463:9;38457:4;38453:20;38449:1;38438:9;38434:17;38427:47;38488:131;38614:4;38488:131;:::i;:::-;38480:139;;38384:245;;;:::o;38636:222::-;;38763:2;38752:9;38748:18;38740:26;;38777:71;38845:1;38834:9;38830:17;38821:6;38777:71;:::i;:::-;38734:124;;;;:::o;38865:501::-;;39080:2;39069:9;39065:18;39057:26;;39094:71;39162:1;39151:9;39147:17;39138:6;39094:71;:::i;:::-;39213:9;39207:4;39203:20;39198:2;39187:9;39183:18;39176:48;39238:118;39351:4;39342:6;39334;39238:118;:::i;:::-;39230:126;;39051:315;;;;;;:::o;39373:333::-;;39528:2;39517:9;39513:18;39505:26;;39542:71;39610:1;39599:9;39595:17;39586:6;39542:71;:::i;:::-;39624:72;39692:2;39681:9;39677:18;39668:6;39624:72;:::i;:::-;39499:207;;;;;:::o;39713:444::-;;39896:2;39885:9;39881:18;39873:26;;39910:71;39978:1;39967:9;39963:17;39954:6;39910:71;:::i;:::-;39992:72;40060:2;40049:9;40045:18;40036:6;39992:72;:::i;:::-;40075;40143:2;40132:9;40128:18;40119:6;40075:72;:::i;:::-;39867:290;;;;;;:::o;40164:656::-;;40397:3;40386:9;40382:19;40374:27;;40412:71;40480:1;40469:9;40465:17;40456:6;40412:71;:::i;:::-;40494:72;40562:2;40551:9;40547:18;40538:6;40494:72;:::i;:::-;40577;40645:2;40634:9;40630:18;40621:6;40577:72;:::i;:::-;40660;40728:2;40717:9;40713:18;40704:6;40660:72;:::i;:::-;40743:67;40805:3;40794:9;40790:19;40781:6;40743:67;:::i;:::-;40368:452;;;;;;;;:::o;40827:432::-;;41004:2;40993:9;40989:18;40981:26;;41018:68;41083:1;41072:9;41068:17;41059:6;41018:68;:::i;:::-;41097:69;41162:2;41151:9;41147:18;41138:6;41097:69;:::i;:::-;41177:72;41245:2;41234:9;41230:18;41221:6;41177:72;:::i;:::-;40975:284;;;;;;:::o;41266:428::-;;41441:2;41430:9;41426:18;41418:26;;41455:67;41519:1;41508:9;41504:17;41495:6;41455:67;:::i;:::-;41533:68;41597:2;41586:9;41582:18;41573:6;41533:68;:::i;:::-;41612:72;41680:2;41669:9;41665:18;41656:6;41612:72;:::i;:::-;41412:282;;;;;;:::o;41701:522::-;;;41852:11;41839:25;41948:1;41942:4;41938:12;41927:8;41911:14;41907:29;41903:48;41883:18;41879:73;41869:2;;41966:1;41963;41956:12;41869:2;41997:18;41987:8;41983:33;41975:41;;42050:4;42037:18;42027:28;;42075:18;42067:6;42064:30;42061:2;;;42107:1;42104;42097:12;42061:2;42135;42129:4;42125:13;42117:21;;42189:4;42181:6;42177:17;42161:14;42157:38;42151:4;42147:49;42144:2;;;42209:1;42206;42199:12;42144:2;41807:416;;;;;;:::o;42230:506::-;;;42365:11;42352:25;42461:1;42455:4;42451:12;42440:8;42424:14;42420:29;42416:48;42396:18;42392:73;42382:2;;42479:1;42476;42469:12;42382:2;42510:18;42500:8;42496:33;42488:41;;42563:4;42550:18;42540:28;;42588:18;42580:6;42577:30;42574:2;;;42620:1;42617;42610:12;42574:2;42648;42642:4;42638:13;42630:21;;42702:4;42694:6;42690:17;42674:14;42670:38;42664:4;42660:49;42657:2;;;42722:1;42719;42712:12;42657:2;42320:416;;;;;;:::o;42743:320::-;;42889:11;42876:25;42985:1;42979:4;42975:12;42964:8;42948:14;42944:29;42940:48;42920:18;42916:73;42906:2;;43003:1;43000;42993:12;42906:2;43034:18;43024:8;43020:33;43012:41;;42844:219;;;;;:::o;43070:327::-;;43221:11;43208:25;43319:1;43311:6;43307:14;43296:8;43280:14;43276:29;43272:50;43252:18;43248:75;43238:2;;43337:1;43334;43327:12;43238:2;43368:18;43358:8;43354:33;43346:41;;43176:221;;;;;:::o;43404:256::-;;43466:2;43460:9;43450:19;;43504:4;43496:6;43492:17;43603:6;43591:10;43588:22;43567:18;43555:10;43552:34;43549:62;43546:2;;;43624:1;43621;43614:12;43546:2;43644:10;43640:2;43633:22;43444:216;;;;:::o;43667:304::-;;43826:18;43818:6;43815:30;43812:2;;;43858:1;43855;43848:12;43812:2;43893:4;43885:6;43881:17;43873:25;;43956:4;43950;43946:15;43938:23;;43749:222;;;:::o;43978:118::-;;44066:3;44058:11;;44052:44;;;:::o;44103:151::-;;44189:3;44181:11;;44227:4;44222:3;44218:14;44210:22;;44175:79;;;:::o;44261:137::-;;44370:5;44364:12;44354:22;;44335:63;;;:::o;44405:121::-;;44498:5;44492:12;44482:22;;44463:63;;;:::o;44533:122::-;;44627:5;44621:12;44611:22;;44592:63;;;:::o;44662:110::-;;44762:4;44757:3;44753:14;44745:22;;44739:33;;;:::o;44779:108::-;;44877:4;44872:3;44868:14;44860:22;;44854:33;;;:::o;44895:178::-;;45025:6;45020:3;45013:19;45062:4;45057:3;45053:14;45038:29;;45006:67;;;;:::o;45082:178::-;;45212:6;45207:3;45200:19;45249:4;45244:3;45240:14;45225:29;;45193:67;;;;:::o;45269:144::-;;45404:3;45389:18;;45382:31;;;;:::o;45422:163::-;;45537:6;45532:3;45525:19;45574:4;45569:3;45565:14;45550:29;;45518:67;;;;:::o;45594:119::-;;45668:39;45703:2;45698:3;45694:12;45689:3;45668:39;:::i;:::-;45659:48;;45652:61;;;;:::o;45721:91::-;;45783:24;45801:5;45783:24;:::i;:::-;45772:35;;45766:46;;;:::o;45819:99::-;;45889:24;45907:5;45889:24;:::i;:::-;45878:35;;45872:46;;;:::o;45925:85::-;;45998:5;45991:13;45984:21;45973:32;;45967:43;;;:::o;46017:144::-;;46089:66;46082:5;46078:78;46067:89;;46061:100;;;:::o;46168:105::-;;46244:24;46262:5;46244:24;:::i;:::-;46233:35;;46227:46;;;:::o;46280:112::-;;46363:24;46381:5;46363:24;:::i;:::-;46352:35;;46346:46;;;:::o;46399:116::-;;46486:24;46504:5;46486:24;:::i;:::-;46475:35;;46469:46;;;:::o;46522:109::-;;46595:30;46588:5;46584:42;46573:53;;46567:64;;;:::o;46638:121::-;;46711:42;46704:5;46700:54;46689:65;;46683:76;;;:::o;46766:72::-;;46828:5;46817:16;;46811:27;;;:::o;46845:88::-;;46917:10;46910:5;46906:22;46895:33;;46889:44;;;:::o;46940:81::-;;47011:4;47004:5;47000:16;46989:27;;46983:38;;;:::o;47028:129::-;;47115:37;47146:5;47115:37;:::i;:::-;47102:50;;47096:61;;;:::o;47164:121::-;;47243:37;47274:5;47243:37;:::i;:::-;47230:50;;47224:61;;;:::o;47292:108::-;;47371:24;47389:5;47371:24;:::i;:::-;47358:37;;47352:48;;;:::o;47407:103::-;;47483:22;47499:5;47483:22;:::i;:::-;47470:35;;47464:46;;;:::o;47518:145::-;47599:6;47594:3;47589;47576:30;47655:1;47646:6;47641:3;47637:16;47630:27;47569:94;;;:::o;47672:268::-;47737:1;47744:101;47758:6;47755:1;47752:13;47744:101;;;47834:1;47829:3;47825:11;47819:18;47815:1;47810:3;47806:11;47799:39;47780:2;47777:1;47773:10;47768:15;;47744:101;;;47860:6;47857:1;47854:13;47851:2;;;47925:1;47916:6;47911:3;47907:16;47900:27;47851:2;47721:219;;;;:::o;47948:73::-;;48011:5;48000:16;;47994:27;;;:::o;48028:74::-;;48092:5;48081:16;;48075:27;;;:::o;48109:97::-;;48197:2;48193:7;48188:2;48181:5;48177:14;48173:28;48163:38;;48157:49;;;:::o;48214:117::-;48283:24;48301:5;48283:24;:::i;:::-;48276:5;48273:35;48263:2;;48322:1;48319;48312:12;48263:2;48257:74;:::o;48338:133::-;48415:32;48441:5;48415:32;:::i;:::-;48408:5;48405:43;48395:2;;48462:1;48459;48452:12;48395:2;48389:82;:::o;48478:111::-;48544:21;48559:5;48544:21;:::i;:::-;48537:5;48534:32;48524:2;;48580:1;48577;48570:12;48524:2;48518:71;:::o;48596:115::-;48664:23;48681:5;48664:23;:::i;:::-;48657:5;48654:34;48644:2;;48702:1;48699;48692:12;48644:2;48638:73;:::o;48718:145::-;48801:38;48833:5;48801:38;:::i;:::-;48794:5;48791:49;48781:2;;48854:1;48851;48844:12;48781:2;48775:88;:::o;48870:159::-;48960:45;48999:5;48960:45;:::i;:::-;48953:5;48950:56;48940:2;;49020:1;49017;49010:12;48940:2;48934:95;:::o;49036:167::-;49130:49;49173:5;49130:49;:::i;:::-;49123:5;49120:60;49110:2;;49194:1;49191;49184:12;49110:2;49104:99;:::o;49210:110::-;49295:1;49288:5;49285:12;49275:2;;49311:1;49308;49301:12;49275:2;49269:51;:::o;49327:117::-;49396:24;49414:5;49396:24;:::i;:::-;49389:5;49386:35;49376:2;;49435:1;49432;49425:12;49376:2;49370:74;:::o;49451:117::-;49520:24;49538:5;49520:24;:::i;:::-;49513:5;49510:35;49500:2;;49559:1;49556;49549:12;49500:2;49494:74;:::o;49575:115::-;49643:23;49660:5;49643:23;:::i;:::-;49636:5;49633:34;49623:2;;49681:1;49678;49671:12;49623:2;49617:73;:::o;49697:113::-;49764:22;49780:5;49764:22;:::i;:::-;49757:5;49754:33;49744:2;;49801:1;49798;49791:12;49744:2;49738:72;:::o
Swarm Source
ipfs://47b5d282b0d320eec69d21a35a11b3716965e09e53fbbb9927fd0f59f93539d1
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.