Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Latest 5 from a total of 5 transactions
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
AIADZMatrix
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-10-26 */ /** *Submitted for verification at testnet.bscscan.com on 2024-10-24 */ /** *Submitted for verification at testnet.bscscan.com on 2024-01-18 */ /** *Submitted for verification at testnet.bscscan.com on 2024-01-02 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Interface of the BEP20 standard as defined in the EIP. */ interface IBEP20 { /** * @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 ); } /** * @dev Collection of functions related to the address type */ 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 in 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" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); 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); } } } } /** * @title SafeBEP20 * @dev Wrappers around BEP20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeBEP20 for IBEP20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeBEP20 { using SafeMath for uint256; using Address for address; function safeTransfer( IBEP20 token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IBEP20 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 * {IBEP20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IBEP20 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), "SafeBEP20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IBEP20 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( IBEP20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeBEP20: 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(IBEP20 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, "SafeBEP20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), "SafeBEP20: BEP20 operation did not succeed" ); } } } contract SmartMatrixForsageBasic { address public contractOwner; struct User { uint256 id; address referrer; uint256 partnersCount; mapping(uint8 => bool) activeX3Levels; mapping(uint8 => bool) activeX6Levels; mapping(uint8 => X3) x3Matrix; mapping(uint8 => X6) x6Matrix; } struct X3 { address currentReferrer; address[] referrals; bool blocked; uint256 reinvestCount; } struct X6 { address currentReferrer; address[] firstLevelReferrals; address[] secondLevelReferrals; bool blocked; uint256 reinvestCount; address closedPart; } uint8 public LAST_LEVEL; mapping(address => User) public users; mapping(uint256 => address) public idToAddress; mapping(uint256 => address) public userIds; mapping(address => uint256) public balances; uint256 public lastUserId; address public id1; address public multisig; mapping(uint8 => uint256) public levelPrice; IBEP20 public depositToken; uint256 public BASIC_PRICE; bool public locked; event Registration( address indexed user, address indexed referrer, uint256 indexed userId, uint256 referrerId ); event Reinvest( address indexed user, address indexed currentReferrer, address indexed caller, uint8 matrix, uint8 level ); event Upgrade( address indexed user, address indexed referrer, uint8 matrix, uint8 level ); event NewUserPlace( address indexed user, address indexed referrer, uint8 matrix, uint8 level, uint8 place ); event MissedEthReceive( address indexed receiver, address indexed from, uint8 matrix, uint8 level ); event SentExtraEthDividends( address indexed from, address indexed receiver, uint8 matrix, uint8 level ); event UpdateOwnerAddress(address _owner, uint256 time); event UpdateMultiSig(address _multiSig, uint256 time); event UpdateShares(uint256 _ownerShare, uint256 _rewardShare, uint256 time); event UpdateDepositToken(address _token, uint256 time); event UpdateContractOwner(address _ownerAddress, uint256 time); event UpdateAdminWallet(address _wallet, uint256 time); } contract AIADZMatrix is SmartMatrixForsageBasic { using SafeBEP20 for IBEP20; using Address for address; uint256 public uplineShare = 55e18; uint256 public ownerShare = 45e18; address public adminWallet; constructor(address _wallet){ contractOwner = msg.sender; setWallet(_wallet); } modifier NotContract(address _account) { require(!_account.isContract(), "Addr not be ContractAddress"); _; } modifier IsContract(address _account) { require(_account.isContract(), "Addr not be userAddress"); _; } modifier isZeroAddress(address _addr) { require(_addr != address(0), "0!"); _; } modifier onlyContractOwner() { require(msg.sender == contractOwner, "onlyOwner"); _; } modifier onlyUnlocked() { require(!locked || msg.sender == contractOwner); _; } function setWallet(address _newWallet) public onlyContractOwner isZeroAddress(_newWallet) NotContract(_newWallet) { adminWallet = _newWallet; emit UpdateAdminWallet(_newWallet, block.timestamp); } function updateAdminWallet(address _newWallet) public { setWallet(_newWallet); } function updateContractOwner(address _contractOwner) external onlyContractOwner isZeroAddress(_contractOwner) { contractOwner = _contractOwner; emit UpdateContractOwner(_contractOwner, block.timestamp); } function updateMultiSig(address _multisig) external onlyContractOwner isZeroAddress(_multisig) { multisig = _multisig; emit UpdateMultiSig(_multisig, block.timestamp); } function updateOwnerAddress(address _owner) external onlyContractOwner isZeroAddress(_owner) NotContract(_owner) { id1 = _owner; emit UpdateOwnerAddress(_owner, block.timestamp); } function updateShares(uint256 _ownerShare, uint256 _uplineShare) external onlyContractOwner { require(_ownerShare + _uplineShare == 100e18, "Invalid share"); ownerShare = _ownerShare; uplineShare = _uplineShare; emit UpdateShares(_ownerShare, _uplineShare, block.timestamp); } function updateDepositToken(address _token) external onlyContractOwner isZeroAddress(_token) IsContract(_token) { depositToken = IBEP20(_token); emit UpdateDepositToken(_token, block.timestamp); } function init( address _ownerAddress, address _multisig, IBEP20 _depositTokenAddress ) public onlyContractOwner { BASIC_PRICE = 5e18; LAST_LEVEL = 12; levelPrice[1] = BASIC_PRICE; for (uint8 i = 2; i <= 8; i++) { levelPrice[i] = levelPrice[i - 1] * 2; } levelPrice[9] = 1250e18; levelPrice[10] = 2500e18; levelPrice[11] = 5000e18; levelPrice[12] = 9900e18; id1 = _ownerAddress; User storage user = users[_ownerAddress]; user.id = 1; user.referrer = address(0); user.partnersCount = uint256(0); idToAddress[1] = _ownerAddress; for (uint8 i = 1; i <= LAST_LEVEL; i++) { users[_ownerAddress].activeX3Levels[i] = true; users[_ownerAddress].activeX6Levels[i] = true; } userIds[1] = _ownerAddress; lastUserId = 2; multisig = _multisig; depositToken = _depositTokenAddress; locked = true; } function changeLock() external onlyContractOwner { locked = !locked; } fallback() external { if (msg.data.length == 0) { return registration(msg.sender, id1); } registration(msg.sender, bytesToAddress(msg.data)); } function registrationExt(address referrerAddress) external onlyUnlocked isZeroAddress(referrerAddress) NotContract(referrerAddress) { registration(msg.sender, referrerAddress); } function registrationFor(address userAddress, address referrerAddress) external onlyUnlocked isZeroAddress(userAddress) NotContract(userAddress) isZeroAddress(referrerAddress) NotContract(referrerAddress) { registration(userAddress, referrerAddress); } function buyNewLevel(uint8 matrix, uint8 level) external onlyUnlocked { _buyNewLevel(msg.sender, matrix, level); } function buyNewLevelFor( address userAddress, uint8 matrix, uint8 level ) external onlyUnlocked { _buyNewLevel(userAddress, matrix, level); } function _buyNewLevel( address _userAddress, uint8 matrix, uint8 level ) internal { require( isUserExists(_userAddress), "user is not exists. Register first." ); require(matrix == 1 || matrix == 2, "invalid matrix"); require(level > 1 && level <= LAST_LEVEL, "invalid level"); depositToken.safeTransferFrom( msg.sender, address(this), levelPrice[level] ); depositToken.safeTransfer( adminWallet, (levelPrice[level] * ownerShare) / 100e18 ); if (matrix == 1) { require( users[_userAddress].activeX3Levels[level - 1], "buy previous level first" ); require( !users[_userAddress].activeX3Levels[level], "level already activated" ); if (users[_userAddress].x3Matrix[level - 1].blocked) { users[_userAddress].x3Matrix[level - 1].blocked = false; } address freeX3Referrer = findFreeX3Referrer(_userAddress, level); users[_userAddress] .x3Matrix[level] .currentReferrer = freeX3Referrer; users[_userAddress].activeX3Levels[level] = true; updateX3Referrer(_userAddress, freeX3Referrer, level); emit Upgrade(_userAddress, freeX3Referrer, 1, level); } else { require( users[_userAddress].activeX6Levels[level - 1], "buy previous level first" ); require( !users[_userAddress].activeX6Levels[level], "level already activated" ); if (users[_userAddress].x6Matrix[level - 1].blocked) { users[_userAddress].x6Matrix[level - 1].blocked = false; } address freeX6Referrer = findFreeX6Referrer(_userAddress, level); users[_userAddress].activeX6Levels[level] = true; updateX6Referrer(_userAddress, freeX6Referrer, level); emit Upgrade(_userAddress, freeX6Referrer, 2, level); } } function registration(address userAddress, address referrerAddress) private { require(!isUserExists(userAddress), "user exists"); require(isUserExists(referrerAddress), "referrer not exists"); depositToken.safeTransferFrom( msg.sender, address(this), BASIC_PRICE * 2 ); User storage user = users[userAddress]; user.id = lastUserId; user.referrer = referrerAddress; user.partnersCount = 0; idToAddress[lastUserId] = userAddress; // -----------Already initialized----------- users[userAddress].referrer = referrerAddress; users[userAddress].activeX3Levels[1] = true; users[userAddress].activeX6Levels[1] = true; userIds[lastUserId] = userAddress; lastUserId++; users[referrerAddress].partnersCount++; address freeX3Referrer = findFreeX3Referrer(userAddress, 1); users[userAddress].x3Matrix[1].currentReferrer = freeX3Referrer; depositToken.safeTransfer( adminWallet, (BASIC_PRICE * 2 * ownerShare) / 100e18 ); updateX3Referrer(userAddress, freeX3Referrer, 1); updateX6Referrer(userAddress, findFreeX6Referrer(userAddress, 1), 1); emit Registration( userAddress, referrerAddress, users[userAddress].id, users[referrerAddress].id ); } function updateX3Referrer( address userAddress, address referrerAddress, uint8 level ) private { users[referrerAddress].x3Matrix[level].referrals.push(userAddress); if (users[referrerAddress].x3Matrix[level].referrals.length < 3) { emit NewUserPlace( userAddress, referrerAddress, 1, level, uint8(users[referrerAddress].x3Matrix[level].referrals.length) ); return sendTokenDividends(referrerAddress, userAddress, 1, level); } emit NewUserPlace(userAddress, referrerAddress, 1, level, 3); //close matrix users[referrerAddress].x3Matrix[level].referrals = new address[](0); if ( !users[referrerAddress].activeX3Levels[level + 1] && level != LAST_LEVEL ) { users[referrerAddress].x3Matrix[level].blocked = true; } //create new one by recursion if (referrerAddress != id1) { //check referrer active level address freeReferrerAddress = findFreeX3Referrer( referrerAddress, level ); if ( users[referrerAddress].x3Matrix[level].currentReferrer != freeReferrerAddress ) { users[referrerAddress] .x3Matrix[level] .currentReferrer = freeReferrerAddress; } users[referrerAddress].x3Matrix[level].reinvestCount++; emit Reinvest( referrerAddress, freeReferrerAddress, userAddress, 1, level ); updateX3Referrer(referrerAddress, freeReferrerAddress, level); } else { sendTokenDividends(id1, userAddress, 1, level); users[id1].x3Matrix[level].reinvestCount++; emit Reinvest(id1, address(0), userAddress, 1, level); } } function updateX6Referrer( address userAddress, address referrerAddress, uint8 level ) private { require( users[referrerAddress].activeX6Levels[level], "500. Referrer level is inactive" ); if ( // ONLY FIRST LEVEL LESSER THEN 2 users[referrerAddress].x6Matrix[level].firstLevelReferrals.length < 2 ) { users[referrerAddress].x6Matrix[level].firstLevelReferrals.push( userAddress ); emit NewUserPlace( userAddress, referrerAddress, 2, level, uint8( users[referrerAddress] .x6Matrix[level] .firstLevelReferrals .length ) ); //set current level users[userAddress] .x6Matrix[level] .currentReferrer = referrerAddress; if (referrerAddress == id1) { return sendTokenDividends(referrerAddress, userAddress, 2, level); } address ref = users[referrerAddress] .x6Matrix[level] .currentReferrer; users[ref].x6Matrix[level].secondLevelReferrals.push(userAddress); uint256 len = users[ref].x6Matrix[level].firstLevelReferrals.length; if ( (len == 2) && (users[ref].x6Matrix[level].firstLevelReferrals[0] == referrerAddress) && (users[ref].x6Matrix[level].firstLevelReferrals[1] == referrerAddress) ) { if ( users[referrerAddress] .x6Matrix[level] .firstLevelReferrals .length == 1 ) { emit NewUserPlace(userAddress, ref, 2, level, 5); } else { emit NewUserPlace(userAddress, ref, 2, level, 6); } } else if ( (len == 1 || len == 2) && users[ref].x6Matrix[level].firstLevelReferrals[0] == referrerAddress ) { if ( users[referrerAddress] .x6Matrix[level] .firstLevelReferrals .length == 1 ) { emit NewUserPlace(userAddress, ref, 2, level, 3); } else { emit NewUserPlace(userAddress, ref, 2, level, 4); } } else if ( len == 2 && users[ref].x6Matrix[level].firstLevelReferrals[1] == referrerAddress ) { if ( users[referrerAddress] .x6Matrix[level] .firstLevelReferrals .length == 1 ) { emit NewUserPlace(userAddress, ref, 2, level, 5); } else { emit NewUserPlace(userAddress, ref, 2, level, 6); } } return updateX6ReferrerSecondLevel(userAddress, ref, level); } users[referrerAddress].x6Matrix[level].secondLevelReferrals.push( userAddress ); if (users[referrerAddress].x6Matrix[level].closedPart != address(0)) { if ( (users[referrerAddress].x6Matrix[level].firstLevelReferrals[ 0 ] == users[referrerAddress].x6Matrix[level].firstLevelReferrals[ 1 ]) && (users[referrerAddress].x6Matrix[level].firstLevelReferrals[ 0 ] == users[referrerAddress].x6Matrix[level].closedPart) ) { updateX6(userAddress, referrerAddress, level, true); return updateX6ReferrerSecondLevel( userAddress, referrerAddress, level ); } else if ( users[referrerAddress].x6Matrix[level].firstLevelReferrals[0] == users[referrerAddress].x6Matrix[level].closedPart ) { updateX6(userAddress, referrerAddress, level, true); return updateX6ReferrerSecondLevel( userAddress, referrerAddress, level ); } else { updateX6(userAddress, referrerAddress, level, false); return updateX6ReferrerSecondLevel( userAddress, referrerAddress, level ); } } // if ( users[referrerAddress].x6Matrix[level].firstLevelReferrals[1] == userAddress ) { updateX6(userAddress, referrerAddress, level, false); return updateX6ReferrerSecondLevel( userAddress, referrerAddress, level ); } else if ( users[referrerAddress].x6Matrix[level].firstLevelReferrals[0] == userAddress ) { updateX6(userAddress, referrerAddress, level, true); return updateX6ReferrerSecondLevel( userAddress, referrerAddress, level ); } if ( // users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[0]] .x6Matrix[level] .firstLevelReferrals .length <= users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]] .x6Matrix[level] .firstLevelReferrals .length ) { updateX6(userAddress, referrerAddress, level, false); } else { updateX6(userAddress, referrerAddress, level, true); } updateX6ReferrerSecondLevel(userAddress, referrerAddress, level); } function updateX6( address userAddress, address referrerAddress, uint8 level, bool x2 ) private { if (!x2) { users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[0]] .x6Matrix[level] .firstLevelReferrals .push(userAddress); emit NewUserPlace( userAddress, users[referrerAddress].x6Matrix[level].firstLevelReferrals[0], 2, level, uint8( users[ users[referrerAddress] .x6Matrix[level] .firstLevelReferrals[0] ].x6Matrix[level].firstLevelReferrals.length ) ); emit NewUserPlace( userAddress, referrerAddress, 2, level, 2 + uint8( users[ users[referrerAddress] .x6Matrix[level] .firstLevelReferrals[0] ].x6Matrix[level].firstLevelReferrals.length ) ); //set current level users[userAddress].x6Matrix[level].currentReferrer = users[ referrerAddress ].x6Matrix[level].firstLevelReferrals[0]; } else { users[users[referrerAddress].x6Matrix[level].firstLevelReferrals[1]] .x6Matrix[level] .firstLevelReferrals .push(userAddress); emit NewUserPlace( userAddress, users[referrerAddress].x6Matrix[level].firstLevelReferrals[1], 2, level, uint8( users[ users[referrerAddress] .x6Matrix[level] .firstLevelReferrals[1] ].x6Matrix[level].firstLevelReferrals.length ) ); emit NewUserPlace( userAddress, referrerAddress, 2, level, 4 + uint8( users[ users[referrerAddress] .x6Matrix[level] .firstLevelReferrals[1] ].x6Matrix[level].firstLevelReferrals.length ) ); //set current level users[userAddress].x6Matrix[level].currentReferrer = users[ referrerAddress ].x6Matrix[level].firstLevelReferrals[1]; } } function updateX6ReferrerSecondLevel( address userAddress, address referrerAddress, uint8 level ) private { if ( users[referrerAddress].x6Matrix[level].secondLevelReferrals.length < 4 ) { return sendTokenDividends(referrerAddress, userAddress, 2, level); } address[] memory x6 = users[ users[referrerAddress].x6Matrix[level].currentReferrer ].x6Matrix[level].firstLevelReferrals; // ------- if else ------- if (x6.length == 2) { if (x6[0] == referrerAddress || x6[1] == referrerAddress) { users[users[referrerAddress].x6Matrix[level].currentReferrer] .x6Matrix[level] .closedPart = referrerAddress; } else if (x6.length == 1) { if (x6[0] == referrerAddress) { users[ users[referrerAddress].x6Matrix[level].currentReferrer ].x6Matrix[level].closedPart = referrerAddress; } } } users[referrerAddress] .x6Matrix[level] .firstLevelReferrals = new address[](0); users[referrerAddress] .x6Matrix[level] .secondLevelReferrals = new address[](0); users[referrerAddress].x6Matrix[level].closedPart = address(0); if ( !users[referrerAddress].activeX6Levels[level + 1] && level != LAST_LEVEL ) { users[referrerAddress].x6Matrix[level].blocked = true; } users[referrerAddress].x6Matrix[level].reinvestCount++; if (referrerAddress != id1) { address freeReferrerAddress = findFreeX6Referrer( referrerAddress, level ); emit Reinvest( referrerAddress, freeReferrerAddress, userAddress, 2, level ); updateX6Referrer(referrerAddress, freeReferrerAddress, level); } else { emit Reinvest(id1, address(0), userAddress, 2, level); sendTokenDividends(id1, userAddress, 2, level); } } function findFreeX3Referrer(address userAddress, uint8 level) public view returns (address) { while (true) { if (users[users[userAddress].referrer].activeX3Levels[level]) { return users[userAddress].referrer; } userAddress = users[userAddress].referrer; } return address(0); } function findFreeX6Referrer(address userAddress, uint8 level) public view returns (address) { while (true) { if (users[users[userAddress].referrer].activeX6Levels[level]) { return users[userAddress].referrer; } userAddress = users[userAddress].referrer; } return address(0); } function usersActiveX3Levels(address userAddress, uint8 level) public view returns (bool) { return users[userAddress].activeX3Levels[level]; } function usersActiveX6Levels(address userAddress, uint8 level) public view returns (bool) { return users[userAddress].activeX6Levels[level]; } function usersX3Matrix(address userAddress, uint8 level) public view returns ( address currentReferrer, address[] memory referrals, bool blocked ) { currentReferrer = users[userAddress].x3Matrix[level].currentReferrer; referrals = users[userAddress].x3Matrix[level].referrals; blocked = users[userAddress].x3Matrix[level].blocked; } function usersX6Matrix(address userAddress, uint8 level) public view returns ( address currentReferrer, address[] memory firstLevelReferrals, address[] memory secondLevelReferrals, bool blocked, address closedPart ) { return ( currentReferrer = users[userAddress] .x6Matrix[level] .currentReferrer, firstLevelReferrals = users[userAddress] .x6Matrix[level] .firstLevelReferrals, secondLevelReferrals = users[userAddress] .x6Matrix[level] .secondLevelReferrals, blocked = users[userAddress].x6Matrix[level].blocked, closedPart = users[userAddress].x6Matrix[level].closedPart ); } function isUserExists(address user) public view returns (bool) { return (users[user].id != 0); } function findTokenReceiver( address userAddress, address _from, uint8 matrix, uint8 level ) private returns (address, bool) { address receiver = userAddress; bool isExtraDividends; if (matrix == 1) { while (true) { if (users[receiver].x3Matrix[level].blocked) { emit MissedEthReceive(receiver, _from, 1, level); isExtraDividends = true; receiver = users[receiver].x3Matrix[level].currentReferrer; } else { return (receiver, isExtraDividends); } } } else { while (true) { if (users[receiver].x6Matrix[level].blocked) { emit MissedEthReceive(receiver, _from, 2, level); isExtraDividends = true; receiver = users[receiver].x6Matrix[level].currentReferrer; } else { return (receiver, isExtraDividends); } } } return (address(0),false); } function sendTokenDividends( address userAddress, address _from, uint8 matrix, uint8 level ) private { (address receiver, bool isExtraDividends) = findTokenReceiver( userAddress, _from, matrix, level ); depositToken.safeTransfer( receiver, (levelPrice[level] * uplineShare) / 100e18 ); if (isExtraDividends) { emit SentExtraEthDividends(_from, receiver, matrix, level); } } function bytesToAddress(bytes memory bys) private pure returns (address addr) { assembly { addr := mload(add(bys, 20)) } } function withdrawLostTokens(address tokenAddress) public onlyContractOwner { if (tokenAddress == address(0)) { payable(address(multisig)).transfer(address(this).balance); } else { IBEP20(tokenAddress).transfer( multisig, IBEP20(tokenAddress).balanceOf(address(this)) ); } } }
[{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint8","name":"matrix","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"level","type":"uint8"}],"name":"MissedEthReceive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint8","name":"matrix","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"level","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"place","type":"uint8"}],"name":"NewUserPlace","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"uint256","name":"userId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"referrerId","type":"uint256"}],"name":"Registration","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"currentReferrer","type":"address"},{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint8","name":"matrix","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"level","type":"uint8"}],"name":"Reinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint8","name":"matrix","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"level","type":"uint8"}],"name":"SentExtraEthDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"UpdateAdminWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_ownerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"UpdateContractOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"UpdateDepositToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_multiSig","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"UpdateMultiSig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"UpdateOwnerAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_ownerShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_rewardShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"UpdateShares","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint8","name":"matrix","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"level","type":"uint8"}],"name":"Upgrade","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"BASIC_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LAST_LEVEL","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"matrix","type":"uint8"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"buyNewLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint8","name":"matrix","type":"uint8"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"buyNewLevelFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"findFreeX3Referrer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"findFreeX6Referrer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"id1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idToAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ownerAddress","type":"address"},{"internalType":"address","name":"_multisig","type":"address"},{"internalType":"contract IBEP20","name":"_depositTokenAddress","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isUserExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUserId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"levelPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multisig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrerAddress","type":"address"}],"name":"registrationExt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"address","name":"referrerAddress","type":"address"}],"name":"registrationFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"updateAdminWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"}],"name":"updateContractOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"updateDepositToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_multisig","type":"address"}],"name":"updateMultiSig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"updateOwnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ownerShare","type":"uint256"},{"internalType":"uint256","name":"_uplineShare","type":"uint256"}],"name":"updateShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uplineShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"userIds","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"partnersCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"usersActiveX3Levels","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"usersActiveX6Levels","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"usersX3Matrix","outputs":[{"internalType":"address","name":"currentReferrer","type":"address"},{"internalType":"address[]","name":"referrals","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"usersX6Matrix","outputs":[{"internalType":"address","name":"currentReferrer","type":"address"},{"internalType":"address[]","name":"firstLevelReferrals","type":"address[]"},{"internalType":"address[]","name":"secondLevelReferrals","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"},{"internalType":"address","name":"closedPart","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526802fb474098f67c0000600c55680270801d946c940000600d553480156200002b57600080fd5b50604051620041b5380380620041b58339810160408190526200004e91620001b2565b600080546001600160a01b031916331790556200006b8162000072565b50620001e4565b6000546001600160a01b03163314620000be5760405162461bcd60e51b815260206004820152600960248201526837b7363ca7bbb732b960b91b60448201526064015b60405180910390fd5b806001600160a01b038116620000fc5760405162461bcd60e51b8152602060048201526002602482015261302160f01b6044820152606401620000b5565b816001600160a01b0381163b15620001575760405162461bcd60e51b815260206004820152601b60248201527f41646472206e6f7420626520436f6e74726163744164647265737300000000006044820152606401620000b5565b600e80546001600160a01b0319166001600160a01b038516908117909155604080519182524260208301527fd007073ff32fd9063a33ff58f48a697fd1a437e76846a8239cc8c496440f7d8f910160405180910390a1505050565b600060208284031215620001c557600080fd5b81516001600160a01b0381168114620001dd57600080fd5b9392505050565b613fc180620001f46000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80638f1c315111610130578063c89039c5116100b8578063eb9df7db1161007c578063eb9df7db146105f8578063ecabdf791461060b578063f07b62be1461062b578063f27715b414610633578063fa45323d1461064657610227565b8063c89039c51461059f578063ce606ee0146105b2578063cf309012146105c5578063deaa59df146105d2578063e06e8dbd146105e557610227565b8063a87430ba116100ff578063a87430ba146104ca578063ab86496c14610527578063b2f7543a1461053a578063b99a967114610579578063be389d571461058c57610227565b80638f1c3151146104815780639ac7e09e1461048a5780639cc102fc14610493578063a3546be4146104b757610227565b80634635fd68116101b35780635b66859c116101825780635b66859c1461041d5780635eec0870146104265780636479020814610439578063797eee241461044c57806383ba31b21461045f57610227565b80634635fd68146103a35780634783c35b146103cc578063509222cd146103df578063517999bc1461040a57610227565b80632a2d0c47116101fa5780632a2d0c4714610320578063348d44871461036157806336b19cd71461036a57806338d7822b1461037d5780633f490f211461039057610227565b806307279e2a14610291578063184b9559146102b957806327e235e3146102cc57806329c70400146102fa575b36600003610248576006546102469033906001600160a01b0316610659565b005b6102463361028c6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061093092505050565b610659565b6102a461029f366004613ae8565b610937565b60405190151581526020015b60405180910390f35b6102466102c7366004613b1d565b61096d565b6102ec6102da366004613b68565b60046020526000908152604090205481565b6040519081526020016102b0565b60005461030e90600160a01b900460ff1681565b60405160ff90911681526020016102b0565b61034961032e366004613b8c565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102b0565b6102ec60055481565b600e54610349906001600160a01b031681565b61024661038b366004613ba5565b610c60565b61024661039e366004613b68565b610d37565b6103496103b1366004613b8c565b6003602052600090815260409020546001600160a01b031681565b600754610349906001600160a01b031681565b6102a46103ed366004613b68565b6001600160a01b0316600090815260016020526040902054151590565b600654610349906001600160a01b031681565b6102ec600c5481565b610246610434366004613b68565b610e3c565b610246610447366004613bde565b610e48565b61024661045a366004613b68565b610f15565b61047261046d366004613ae8565b610f99565b6040516102b093929190613c44565b6102ec600d5481565b6102ec600a5481565b6104a66104a1366004613ae8565b611060565b6040516102b0959493929190613c7a565b6102466104c5366004613b68565b6111c0565b6105046104d8366004613b68565b60016020819052600091825260409091208054918101546002909101546001600160a01b039091169083565b604080519384526001600160a01b039092166020840152908201526060016102b0565b610246610535366004613b68565b61131b565b6102a4610548366004613ae8565b6001600160a01b0391909116600090815260016020908152604080832060ff94851684526004019091529020541690565b610246610587366004613cc9565b6113e8565b61024661059a366004613d0e565b611418565b600954610349906001600160a01b031681565b600054610349906001600160a01b031681565b600b546102a49060ff1681565b6102466105e0366004613b68565b611448565b6103496105f3366004613ae8565b611515565b610246610606366004613b68565b6115a4565b6102ec610619366004613d2a565b60086020526000908152604090205481565b610246611648565b610246610641366004613b68565b611686565b610349610654366004613ae8565b61172a565b6001600160a01b038216600090815260016020526040902054156106b25760405162461bcd60e51b815260206004820152600b60248201526a757365722065786973747360a81b60448201526064015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205461070d5760405162461bcd60e51b81526020600482015260136024820152727265666572726572206e6f742065786973747360681b60448201526064016106a9565b6107353330600a5460026107219190613d5b565b6009546001600160a01b03169291906117b9565b6001600160a01b0380831660008181526001602081815260408084206005805482558185018054988a166001600160a01b0319998a1681178255600280850189905583548952865284882080548b168a17905581548a1617905584865260038083018552838720805460ff199081168817909155868852600484018652848820805490911690961790955580548652939092528320805490951690931790935582549192906107e383613d72565b90915550506001600160a01b038216600090815260016020526040812060020180549161080f83613d72565b9190505550600061082184600161172a565b6001600160a01b03858116600090815260016020818152604080842092845260059092019052902080546001600160a01b031916838316179055600e54600d54600a549394506108ad93919092169168056bc75e2d6310000091610886906002613d5b565b6108909190613d5b565b61089a9190613d8b565b6009546001600160a01b0316919061182a565b6108b98482600161185a565b6108cf846108c8866001611515565b6001611c05565b6001600160a01b03848116600081815260016020908152604080832054948816808452928190205490519081529192917f309bb360e8b69c23937ccc5fb01f9aeeead1c95a99604e175113ff82f2b1723a910160405180910390a450505050565b6014015190565b6001600160a01b038216600090815260016020908152604080832060ff8086168552600390910190925290912054165b92915050565b6000546001600160a01b031633146109975760405162461bcd60e51b81526004016106a990613dad565b674563918244f40000600a8190556000805460ff60a01b1916600360a21b1781556001905260086020527fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f5560025b60088160ff1611610a445760086000610a00600184613dd0565b60ff168152602081019190915260400160002054610a1f906002613d5b565b60ff821660009081526008602052604090205580610a3c81613de9565b9150506109e6565b506843c33c1937564800007f82c9e868e45873bb5a4f47c09e14a12f6a6314e13aabd611e4374762bb4e8b365568878678326eac9000007f586689db7536874b78a6eac0f58556a56a106985743f7c16a699b27bb02f88bd5569010f0cf064dd592000007fcb250a1a60f48f70f08c912424f39071fd9a8b7099a72dffd251fce0294f374955690218ae196b8d4f3000007faba08fc86a199da17c4b45fa0fb586714474d27e5e1f0220658b6275561b2e1855600680546001600160a01b0385166001600160a01b03199182168117909255600082815260016020818152604083208281558083018054861690556002808201859055938390529290527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e08054909316909317909155905b60005460ff600160a01b909104811690821611610be2576001600160a01b038516600090815260016020818152604080842060ff86168552600381018352818520805460ff1990811686179091556004909101909252909220805490921617905580610bda81613de9565b915050610b6f565b50506001600081905260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c80546001600160a01b03199081166001600160a01b03968716179091556002600555600780548216948616949094179093556009805490931691909316179055600b805460ff19169091179055565b600b5460ff161580610c7c57506000546001600160a01b031633145b610c8557600080fd5b816001600160a01b038116610cac5760405162461bcd60e51b81526004016106a990613e08565b826001600160a01b0381163b15610cd55760405162461bcd60e51b81526004016106a990613e24565b826001600160a01b038116610cfc5760405162461bcd60e51b81526004016106a990613e08565b836001600160a01b0381163b15610d255760405162461bcd60e51b81526004016106a990613e24565b610d2f8686610659565b505050505050565b6000546001600160a01b03163314610d615760405162461bcd60e51b81526004016106a990613dad565b806001600160a01b038116610d885760405162461bcd60e51b81526004016106a990613e08565b816001600160a01b0381163b610de05760405162461bcd60e51b815260206004820152601760248201527f41646472206e6f7420626520757365724164647265737300000000000000000060448201526064016106a9565b600980546001600160a01b0319166001600160a01b038516908117909155604080519182524260208301527fff285ed7890ca11517fc52ef49b514876c9a109b3a51ca874cfbfb009b501e4691015b60405180910390a1505050565b610e4581611448565b50565b6000546001600160a01b03163314610e725760405162461bcd60e51b81526004016106a990613dad565b610e7c8183613e5b565b68056bc75e2d6310000014610ec35760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420736861726560981b60448201526064016106a9565b600d829055600c819055604080518381526020810183905242918101919091527f64c94d581fb7cb437cd1e3005aab5b574323ceec38914c05cb8c7cdbd7a3b5b8906060015b60405180910390a15050565b600b5460ff161580610f3157506000546001600160a01b031633145b610f3a57600080fd5b806001600160a01b038116610f615760405162461bcd60e51b81526004016106a990613e08565b816001600160a01b0381163b15610f8a5760405162461bcd60e51b81526004016106a990613e24565b610f943384610659565b505050565b6001600160a01b03828116600090815260016020818152604080842060ff871685526005018252808420805493018054825181850281018501909352808352939095169460609493919290919083018282801561101f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611001575b5050506001600160a01b03909716600090815260016020908152604080832060ff998a16845260050190915290206002015494979196505092909316925050565b6001600160a01b03828116600090815260016020818152604080842060ff87168552600601825280842080549301805482518185028101850190935280835293909516946060948594909384938893909290918301828280156110ec57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110ce575b5050506001600160a01b038b16600090815260016020908152604080832060ff8e1684526006018252918290206002018054835181840281018401909452808452959a508a95929450925083018282801561117057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611152575b505050506001600160a01b039a8b16600090815260016020908152604080832060ff9d8e16845260060190915290206003810154600590910154949c939b929a1698505091909116945092505050565b6000546001600160a01b031633146111ea5760405162461bcd60e51b81526004016106a990613dad565b6001600160a01b038116611235576007546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611231573d6000803e3d6000fd5b5050565b6007546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a0823190602401602060405180830381865afa158015611288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ac9190613e6e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156112f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112319190613e87565b6000546001600160a01b031633146113455760405162461bcd60e51b81526004016106a990613dad565b806001600160a01b03811661136c5760405162461bcd60e51b81526004016106a990613e08565b816001600160a01b0381163b156113955760405162461bcd60e51b81526004016106a990613e24565b600680546001600160a01b0319166001600160a01b038516908117909155604080519182524260208301527f5df0867df0c51fc3d093e7e1676ef570bfa902751b82ca4014a31921185064d49101610e2f565b600b5460ff16158061140457506000546001600160a01b031633145b61140d57600080fd5b610f948383836125c6565b600b5460ff16158061143457506000546001600160a01b031633145b61143d57600080fd5b6112313383836125c6565b6000546001600160a01b031633146114725760405162461bcd60e51b81526004016106a990613dad565b806001600160a01b0381166114995760405162461bcd60e51b81526004016106a990613e08565b816001600160a01b0381163b156114c25760405162461bcd60e51b81526004016106a990613e24565b600e80546001600160a01b0319166001600160a01b038516908117909155604080519182524260208301527fd007073ff32fd9063a33ff58f48a697fd1a437e76846a8239cc8c496440f7d8f9101610e2f565b60005b6001600160a01b03808416600090815260016020818152604080842090920154909316825280822060ff80871684526004909101909352902054161561157d57506001600160a01b038083166000908152600160208190526040909120015416610967565b6001600160a01b039283166000908152600160208190526040909120015490921691611518565b6000546001600160a01b031633146115ce5760405162461bcd60e51b81526004016106a990613dad565b806001600160a01b0381166115f55760405162461bcd60e51b81526004016106a990613e08565b600080546001600160a01b0319166001600160a01b038416908117909155604080519182524260208301527fe71abb5b5918d9680236abfac31641af9d01609233238e90f028fdb290a84dd49101610f09565b6000546001600160a01b031633146116725760405162461bcd60e51b81526004016106a990613dad565b600b805460ff19811660ff90911615179055565b6000546001600160a01b031633146116b05760405162461bcd60e51b81526004016106a990613dad565b806001600160a01b0381166116d75760405162461bcd60e51b81526004016106a990613e08565b600780546001600160a01b0319166001600160a01b038416908117909155604080519182524260208301527f1c51c4620ac3af2259b60794e923ed0033aac058dd7408ca8de735e0216502919101610f09565b60005b6001600160a01b03808416600090815260016020818152604080842090920154909316825280822060ff80871684526003909101909352902054161561179257506001600160a01b038083166000908152600160208190526040909120015416610967565b6001600160a01b03928316600090815260016020819052604090912001549092169161172d565b6040516001600160a01b03808516602483015283166044820152606481018290526118249085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612be1565b50505050565b6040516001600160a01b038316602482015260448101829052610f9490849063a9059cbb60e01b906064016117ed565b6001600160a01b03828116600090815260016020818152604080842060ff87168086526005909101835290842083018054938401815580855291842090920180546001600160a01b0319169488169490941790935590525460031115611927576001600160a01b03828116600081815260016020818152604080842060ff888116808752600590920184529482902084015482519485529284015292168183015290519192861691600080516020613f4c8339815191529181900360600190a3610f948284600184612cb3565b604080516001815260ff8316602082015260038183015290516001600160a01b038481169290861691600080516020613f4c8339815191529181900360600190a360408051600080825260208083018085526001600160a01b0387168352600180835285842060ff881685526005019092529390912091516119ae93929091019190613a43565b506001600160a01b0382166000908152600160208190526040822060030191906119d9908490613ea9565b60ff908116825260208201929092526040016000205416158015611a0c575060005460ff828116600160a01b9092041614155b15611a4a576001600160a01b038216600090815260016020818152604080842060ff86168552600501909152909120600201805460ff191690911790555b6006546001600160a01b03838116911614611b69576000611a6b838361172a565b6001600160a01b03848116600090815260016020908152604080832060ff88168452600501909152902054919250828116911614611ae3576001600160a01b03838116600090815260016020908152604080832060ff87168452600501909152902080546001600160a01b0319169183169190911790555b6001600160a01b038316600090815260016020908152604080832060ff861684526005019091528120600301805491611b1b83613d72565b9091555050604080516001815260ff841660208201526001600160a01b03808716928482169291871691600080516020613f6c833981519152910160405180910390a461182483828461185a565b600654611b82906001600160a01b031684600184612cb3565b6006546001600160a01b0316600090815260016020908152604080832060ff851684526005019091528120600301805491611bbc83613d72565b9091555050600654604080516001815260ff841660208201526001600160a01b0386811693600093911691600080516020613f6c833981519152910160405180910390a4505050565b6001600160a01b038216600090815260016020908152604080832060ff808616855260049091019092529091205416611c805760405162461bcd60e51b815260206004820152601f60248201527f3530302e205265666572726572206c6576656c20697320696e6163746976650060448201526064016106a9565b6001600160a01b038216600090815260016020818152604080842060ff861685526006019091529091200154600211156121f5576001600160a01b03828116600081815260016020818152604080842060ff8881168087526006909201845282862085018054958601815580875284872090950180546001600160a01b031916988c169889179055948190529254815160028152928301939093529190921690820152909190600080516020613f4c8339815191529060600160405180910390a36001600160a01b03838116600090815260016020908152604080832060ff86168452600690810190925290912080546001600160a01b03191685841690811790915590549091169003611d9b57610f948284600284612cb3565b6001600160a01b03828116600090815260016020818152604080842060ff871680865260069182018452828620548716808752858552838720828852909201845291852060028082018054808801825590885294872090940180546001600160a01b031916978b16979097179096559352920154909181148015611e7157506001600160a01b03828116600090815260016020818152604080842060ff89168552600601909152822001805492871692909190611e5a57611e5a613ec2565b6000918252602090912001546001600160a01b0316145b8015611ed357506001600160a01b03828116600090815260016020818152604080842060ff8916855260060190915290912081018054928716929091908110611ebc57611ebc613ec2565b6000918252602090912001546001600160a01b0316145b15611f98576001600160a01b038416600090815260016020818152604080842060ff881685526006019091529091208101549003611f5657604080516002815260ff851660208201526005918101919091526001600160a01b038084169190871690600080516020613f4c833981519152906060015b60405180910390a36121e3565b604080516002815260ff851660208201526006918101919091526001600160a01b038084169190871690600080516020613f4c83398151915290606001611f49565b8060011480611fa75750806002145b801561200557506001600160a01b03828116600090815260016020818152604080842060ff89168552600601909152822001805492871692909190611fee57611fee613ec2565b6000918252602090912001546001600160a01b0316145b156120c1576001600160a01b038416600090815260016020818152604080842060ff88168552600601909152909120810154900361207f57604080516002815260ff851660208201526003918101919091526001600160a01b038084169190871690600080516020613f4c83398151915290606001611f49565b604080516002815260ff851660208201526004918101919091526001600160a01b038084169190871690600080516020613f4c83398151915290606001611f49565b80600214801561212757506001600160a01b03828116600090815260016020818152604080842060ff891685526006019091529091208101805492871692909190811061211057612110613ec2565b6000918252602090912001546001600160a01b0316145b156121e3576001600160a01b038416600090815260016020818152604080842060ff8816855260060190915290912081015490036121a157604080516002815260ff851660208201526005918101919091526001600160a01b038084169190871690600080516020613f4c83398151915290606001611f49565b604080516002815260ff8516602082015260068183015290516001600160a01b038481169290881691600080516020613f4c8339815191529181900360600190a35b6121ee858385612d56565b5050505050565b6001600160a01b03828116600090815260016020818152604080842060ff8716808652600690910183529084206002810180549485018155855291842090920180546001600160a01b03191688861617905591526005015416156123ef576001600160a01b038216600090815260016020818152604080842060ff8616855260060190915290912081018054909190811061229257612292613ec2565b60009182526020808320909101546001600160a01b0385811684526001808452604080862060ff881687526006019094529284209092018054929091169290916122de576122de613ec2565b6000918252602090912001546001600160a01b031614801561235857506001600160a01b03828116600090815260016020818152604080842060ff8716855260060190915282206005810154910180549190931692919061234157612341613ec2565b6000918252602090912001546001600160a01b0316145b156123755761236a83838360016131f7565b610f94838383612d56565b6001600160a01b03828116600090815260016020818152604080842060ff871685526006019091528220600581015491018054919093169291906123bb576123bb613ec2565b6000918252602090912001546001600160a01b0316036123e25761236a83838360016131f7565b61236a83838360006131f7565b6001600160a01b03828116600090815260016020818152604080842060ff871685526006019091529091208101805492861692909190811061243357612433613ec2565b6000918252602090912001546001600160a01b03160361245a5761236a83838360006131f7565b6001600160a01b03828116600090815260016020818152604080842060ff8716855260060190915282200180549286169290919061249a5761249a613ec2565b6000918252602090912001546001600160a01b0316036124c15761236a83838360016131f7565b6001600160a01b038216600090815260016020818152604080842060ff861685526006019091528220810180549192918390811061250157612501613ec2565b60009182526020808320909101546001600160a01b039081168452838201949094526040928301822060ff8616808452600691820183528484206001908101549689168552808452858520918552910190915291812082018054829061256957612569613ec2565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff86168252600601909252902060010154116125b9576125b483838360006131f7565b61236a565b61236a83838360016131f7565b6001600160a01b0383166000908152600160205260409020546126375760405162461bcd60e51b815260206004820152602360248201527f75736572206973206e6f74206578697374732e2052656769737465722066697260448201526239ba1760e91b60648201526084016106a9565b8160ff166001148061264c57508160ff166002145b6126895760405162461bcd60e51b815260206004820152600e60248201526d0d2dcecc2d8d2c840dac2e8e4d2f60931b60448201526064016106a9565b60018160ff161180156126ac575060005460ff600160a01b909104811690821611155b6126e85760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081b195d995b609a1b60448201526064016106a9565b60ff8116600090815260086020526040902054600954612717916001600160a01b0390911690339030906117b9565b600e54600d5460ff8316600090815260086020526040902054612753926001600160a01b03169168056bc75e2d63100000916108909190613d5b565b8160ff166001036129b5576001600160a01b0383166000908152600160208190526040822060030191906127879084613dd0565b60ff9081168252602082019290925260400160002054166127e55760405162461bcd60e51b8152602060048201526018602482015277189d5e481c1c995d9a5bdd5cc81b195d995b08199a5c9cdd60421b60448201526064016106a9565b6001600160a01b038316600090815260016020908152604080832060ff8086168552600390910190925290912054161561285b5760405162461bcd60e51b81526020600482015260176024820152761b195d995b08185b1c9958591e481858dd1a5d985d1959604a1b60448201526064016106a9565b6001600160a01b0383166000908152600160208190526040822060050191906128849084613dd0565b60ff908116825260208201929092526040016000206002015416156128f3576001600160a01b038316600090815260016020819052604082206005019082906128cd9085613dd0565b60ff1681526020810191909152604001600020600201805460ff19169115159190911790555b60006128ff848361172a565b6001600160a01b03858116600090815260016020818152604080842060ff8916855260058101835281852080546001600160a01b0319169688169690961790955560039094019052919020805460ff19169091179055905061296284828461185a565b604080516001815260ff841660208201526001600160a01b0380841692908716917f18a92df19fd94d6cfff209966673a5ca05a1c8e2bb68e097fce2bdc2ed81111991015b60405180910390a350505050565b6001600160a01b0383166000908152600160208190526040822060040191906129de9084613dd0565b60ff908116825260208201929092526040016000205416612a3c5760405162461bcd60e51b8152602060048201526018602482015277189d5e481c1c995d9a5bdd5cc81b195d995b08199a5c9cdd60421b60448201526064016106a9565b6001600160a01b038316600090815260016020908152604080832060ff80861685526004909101909252909120541615612ab25760405162461bcd60e51b81526020600482015260176024820152761b195d995b08185b1c9958591e481858dd1a5d985d1959604a1b60448201526064016106a9565b6001600160a01b038316600090815260016020819052604082206006019190612adb9084613dd0565b60ff90811682526020820192909252604001600020600301541615612b4a576001600160a01b03831660009081526001602081905260408220600601908290612b249085613dd0565b60ff1681526020810191909152604001600020600301805460ff19169115159190911790555b6000612b568483611515565b6001600160a01b038516600090815260016020818152604080842060ff88168552600401909152909120805460ff191690911790559050612b98848284611c05565b604080516002815260ff841660208201526001600160a01b0380841692908716917f18a92df19fd94d6cfff209966673a5ca05a1c8e2bb68e097fce2bdc2ed81111991016129a7565b6000612c36826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137aa9092919063ffffffff16565b805190915015610f945780806020019051810190612c549190613e87565b610f945760405162461bcd60e51b815260206004820152602a60248201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a9565b600080612cc2868686866137c1565b91509150612cfb8268056bc75e2d63100000600c54600860008860ff1660ff168152602001908152602001600020546108909190613d5b565b8015610d2f576040805160ff8087168252851660208201526001600160a01b0380851692908816917ff0ddc65c0d411f042f723dcfa1b7d13e85a35b7b70761d447c6500411cacf328910160405180910390a3505050505050565b6001600160a01b038216600090815260016020908152604080832060ff8516845260060190915290206002015460041115612d9857610f948284600284612cb3565b6001600160a01b03808316600090815260016020818152604080842060ff87168086526006918201845282862054909616855283835281852095855294909401815283832090910180548451818402810184019095528085529293929091830182828015612e2f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612e11575b505050505090508051600203612f9f57826001600160a01b031681600081518110612e5c57612e5c613ec2565b60200260200101516001600160a01b03161480612ea45750826001600160a01b031681600181518110612e9157612e91613ec2565b60200260200101516001600160a01b0316145b15612f08576001600160a01b03808416600081815260016020818152604080842060ff8916808652600691820184528286205490971685529282528084209584529490910190529190912060050180546001600160a01b0319169091179055612f9f565b8051600103612f9f57826001600160a01b031681600081518110612f2e57612f2e613ec2565b60200260200101516001600160a01b031603612f9f576001600160a01b03808416600081815260016020818152604080842060ff8916808652600691820184528286205490971685529282528084209584529490910190529190912060050180546001600160a01b03191690911790555b60408051600080825260208083018085526001600160a01b0388168352600180835285842060ff89168552600601909252939091209151612fe593929091019190613a43565b5060408051600080825260208083018085526001600160a01b03881683526001825284832060ff88168452600601909152929020905161302b9260029092019190613a43565b506001600160a01b038316600081815260016020818152604080842060ff8816855260068101835290842060050180546001600160a01b031916905593835281905260049092019161307e908590613ea9565b60ff9081168252602082019290925260400160002054161580156130b1575060005460ff838116600160a01b9092041614155b156130ef576001600160a01b038316600090815260016020818152604080842060ff87168552600601909152909120600301805460ff191690911790555b6001600160a01b038316600090815260016020908152604080832060ff86168452600601909152812060040180549161312783613d72565b90915550506006546001600160a01b0384811691161461319f57600061314d8484611515565b604080516002815260ff861660208201529192506001600160a01b03808816928185169291881691600080516020613f6c833981519152910160405180910390a4613199848285611c05565b50611824565b600654604080516002815260ff851660208201526001600160a01b0387811693600093911691600080516020613f6c833981519152910160405180910390a4600654611824906001600160a01b031685600285612cb3565b806134ce576001600160a01b038316600090815260016020818152604080842060ff87168552600601909152822081018054919291829061323a5761323a613ec2565b6000918252602080832091909101546001600160a01b039081168452838201949094526040928301822060ff8716808452600691820183528484206001908101805480830182559086528486200180546001600160a01b0319168c8916179055958916845285835284842090845201905290812090910180549091906132c2576132c2613ec2565b60009182526020808320909101546001600160a01b0386811684526001808452604080862060ff89168752600601909452928420830180549282169491891693600080516020613f4c8339815191529360029389939091829061332757613327613ec2565b6000918252602080832091909101546001600160a01b03168352828101939093526040918201812060ff8b81168352600690910184529082902060010154825195821686529381169285019290925291169082015260600160405180910390a36001600160a01b03808416600081815260016020818152604080842060ff891685526006019091528220810180549394891693600080516020613f4c833981519152936002938993909282906133df576133df613ec2565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff8b168252600601909252902060010154613423906002613ea9565b6040805160ff9485168152928416602084015292168183015290519081900360600190a36001600160a01b038316600090815260016020818152604080842060ff87168552600601909152822001805490919061348257613482613ec2565b60009182526020808320909101546001600160a01b03878116845260018352604080852060ff881686526006019093529190922080546001600160a01b03191691909216179055611824565b6001600160a01b038316600090815260016020818152604080842060ff871685526006019091528220810180549192918390811061350e5761350e613ec2565b6000918252602080832091909101546001600160a01b039081168452838201949094526040928301822060ff8716808452600691820183528484206001908101805480830182559086528486200180546001600160a01b0319168c891617905595891684528583528484209084520190522081018054909190811061359557613595613ec2565b60009182526020808320909101546001600160a01b0386811684526001808452604080862060ff89168752600601909452928420830180549282169491891693600080516020613f4c8339815191529360029389939091839081106135fc576135fc613ec2565b6000918252602080832091909101546001600160a01b03168352828101939093526040918201812060ff8b81168352600690910184529082902060010154825195821686529381169285019290925291169082015260600160405180910390a36001600160a01b03808416600081815260016020818152604080842060ff891685526006019091528220810180549394891693600080516020613f4c8339815191529360029389939092839081106136b6576136b6613ec2565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff8b1682526006019092529020600101546136fa906004613ea9565b6040805160ff9485168152928416602084015292168183015290519081900360600190a36001600160a01b038316600090815260016020818152604080842060ff8716855260060190915290912081018054909190811061375d5761375d613ec2565b60009182526020808320909101546001600160a01b03878116845260018352604080852060ff881686526006019093529190922080546001600160a01b0319169190921617905550505050565b60606137b98484600085613957565b949350505050565b600080858160ff8616600103613895575b6001600160a01b038216600090815260016020908152604080832060ff808a168552600590910190925290912060020154161561388b57604080516001815260ff871660208201526001600160a01b03808a1692908516917ffc0cb63f8dbd6b20ceb84a3c5358a41576a1479e6ecd040b4b985525dc09a709910160405180910390a3506001600160a01b03908116600090815260016020818152604080842060ff8916855260050190915290912054909116906137d2565b909250905061394e565b6001600160a01b038216600090815260016020908152604080832060ff808a168552600690910190925290912060030154161561388b57604080516002815260ff871660208201526001600160a01b03808a1692908516917ffc0cb63f8dbd6b20ceb84a3c5358a41576a1479e6ecd040b4b985525dc09a709910160405180910390a3506001600160a01b03908116600090815260016020818152604080842060ff891685526006019091529091205490911690613895565b94509492505050565b6060843b6139a75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a9565b600080866001600160a01b031685876040516139c39190613efc565b60006040518083038185875af1925050503d8060008114613a00576040519150601f19603f3d011682016040523d82523d6000602084013e613a05565b606091505b50915091508115613a195791506137b99050565b805115613a295780518082602001fd5b8360405162461bcd60e51b81526004016106a99190613f18565b828054828255906000526020600020908101928215613a98579160200282015b82811115613a9857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613a63565b50613aa4929150613aa8565b5090565b5b80821115613aa45760008155600101613aa9565b6001600160a01b0381168114610e4557600080fd5b803560ff81168114613ae357600080fd5b919050565b60008060408385031215613afb57600080fd5b8235613b0681613abd565b9150613b1460208401613ad2565b90509250929050565b600080600060608486031215613b3257600080fd5b8335613b3d81613abd565b92506020840135613b4d81613abd565b91506040840135613b5d81613abd565b809150509250925092565b600060208284031215613b7a57600080fd5b8135613b8581613abd565b9392505050565b600060208284031215613b9e57600080fd5b5035919050565b60008060408385031215613bb857600080fd5b8235613bc381613abd565b91506020830135613bd381613abd565b809150509250929050565b60008060408385031215613bf157600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015613c395781516001600160a01b031687529582019590820190600101613c14565b509495945050505050565b6001600160a01b0384168152606060208201819052600090613c6890830185613c00565b90508215156040830152949350505050565b600060018060a01b03808816835260a06020840152613c9c60a0840188613c00565b8381036040850152613cae8188613c00565b95151560608501525092909216608090910152509392505050565b600080600060608486031215613cde57600080fd5b8335613ce981613abd565b9250613cf760208501613ad2565b9150613d0560408501613ad2565b90509250925092565b60008060408385031215613d2157600080fd5b613b0683613ad2565b600060208284031215613d3c57600080fd5b613b8582613ad2565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761096757610967613d45565b600060018201613d8457613d84613d45565b5060010190565b600082613da857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526009908201526837b7363ca7bbb732b960b91b604082015260600190565b60ff828116828216039081111561096757610967613d45565b600060ff821660ff8103613dff57613dff613d45565b60010192915050565b602080825260029082015261302160f01b604082015260600190565b6020808252601b908201527f41646472206e6f7420626520436f6e7472616374416464726573730000000000604082015260600190565b8082018082111561096757610967613d45565b600060208284031215613e8057600080fd5b5051919050565b600060208284031215613e9957600080fd5b81518015158114613b8557600080fd5b60ff818116838216019081111561096757610967613d45565b634e487b7160e01b600052603260045260246000fd5b60005b83811015613ef3578181015183820152602001613edb565b50506000910152565b60008251613f0e818460208701613ed8565b9190910192915050565b6020815260008251806020840152613f37816040850160208701613ed8565b601f01601f1916919091016040019291505056fe68062c5925c4317adf3a7095478d28b33fd8b41458bc7620b61bc46bf1b24d82a00c953eff38ec1b71e7fe060b2ab8df0bbe5354319fbdde4fbdafd6324386a6a264697066735822122020a4ad5c42a5adc06a2dfe2000f37baafa0213724b19f65994d9c66122970c4f64736f6c63430008130033000000000000000000000000f768f177309cd1e28f7ffd640f88cdd70647f778
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102275760003560e01c80638f1c315111610130578063c89039c5116100b8578063eb9df7db1161007c578063eb9df7db146105f8578063ecabdf791461060b578063f07b62be1461062b578063f27715b414610633578063fa45323d1461064657610227565b8063c89039c51461059f578063ce606ee0146105b2578063cf309012146105c5578063deaa59df146105d2578063e06e8dbd146105e557610227565b8063a87430ba116100ff578063a87430ba146104ca578063ab86496c14610527578063b2f7543a1461053a578063b99a967114610579578063be389d571461058c57610227565b80638f1c3151146104815780639ac7e09e1461048a5780639cc102fc14610493578063a3546be4146104b757610227565b80634635fd68116101b35780635b66859c116101825780635b66859c1461041d5780635eec0870146104265780636479020814610439578063797eee241461044c57806383ba31b21461045f57610227565b80634635fd68146103a35780634783c35b146103cc578063509222cd146103df578063517999bc1461040a57610227565b80632a2d0c47116101fa5780632a2d0c4714610320578063348d44871461036157806336b19cd71461036a57806338d7822b1461037d5780633f490f211461039057610227565b806307279e2a14610291578063184b9559146102b957806327e235e3146102cc57806329c70400146102fa575b36600003610248576006546102469033906001600160a01b0316610659565b005b6102463361028c6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061093092505050565b610659565b6102a461029f366004613ae8565b610937565b60405190151581526020015b60405180910390f35b6102466102c7366004613b1d565b61096d565b6102ec6102da366004613b68565b60046020526000908152604090205481565b6040519081526020016102b0565b60005461030e90600160a01b900460ff1681565b60405160ff90911681526020016102b0565b61034961032e366004613b8c565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016102b0565b6102ec60055481565b600e54610349906001600160a01b031681565b61024661038b366004613ba5565b610c60565b61024661039e366004613b68565b610d37565b6103496103b1366004613b8c565b6003602052600090815260409020546001600160a01b031681565b600754610349906001600160a01b031681565b6102a46103ed366004613b68565b6001600160a01b0316600090815260016020526040902054151590565b600654610349906001600160a01b031681565b6102ec600c5481565b610246610434366004613b68565b610e3c565b610246610447366004613bde565b610e48565b61024661045a366004613b68565b610f15565b61047261046d366004613ae8565b610f99565b6040516102b093929190613c44565b6102ec600d5481565b6102ec600a5481565b6104a66104a1366004613ae8565b611060565b6040516102b0959493929190613c7a565b6102466104c5366004613b68565b6111c0565b6105046104d8366004613b68565b60016020819052600091825260409091208054918101546002909101546001600160a01b039091169083565b604080519384526001600160a01b039092166020840152908201526060016102b0565b610246610535366004613b68565b61131b565b6102a4610548366004613ae8565b6001600160a01b0391909116600090815260016020908152604080832060ff94851684526004019091529020541690565b610246610587366004613cc9565b6113e8565b61024661059a366004613d0e565b611418565b600954610349906001600160a01b031681565b600054610349906001600160a01b031681565b600b546102a49060ff1681565b6102466105e0366004613b68565b611448565b6103496105f3366004613ae8565b611515565b610246610606366004613b68565b6115a4565b6102ec610619366004613d2a565b60086020526000908152604090205481565b610246611648565b610246610641366004613b68565b611686565b610349610654366004613ae8565b61172a565b6001600160a01b038216600090815260016020526040902054156106b25760405162461bcd60e51b815260206004820152600b60248201526a757365722065786973747360a81b60448201526064015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205461070d5760405162461bcd60e51b81526020600482015260136024820152727265666572726572206e6f742065786973747360681b60448201526064016106a9565b6107353330600a5460026107219190613d5b565b6009546001600160a01b03169291906117b9565b6001600160a01b0380831660008181526001602081815260408084206005805482558185018054988a166001600160a01b0319998a1681178255600280850189905583548952865284882080548b168a17905581548a1617905584865260038083018552838720805460ff199081168817909155868852600484018652848820805490911690961790955580548652939092528320805490951690931790935582549192906107e383613d72565b90915550506001600160a01b038216600090815260016020526040812060020180549161080f83613d72565b9190505550600061082184600161172a565b6001600160a01b03858116600090815260016020818152604080842092845260059092019052902080546001600160a01b031916838316179055600e54600d54600a549394506108ad93919092169168056bc75e2d6310000091610886906002613d5b565b6108909190613d5b565b61089a9190613d8b565b6009546001600160a01b0316919061182a565b6108b98482600161185a565b6108cf846108c8866001611515565b6001611c05565b6001600160a01b03848116600081815260016020908152604080832054948816808452928190205490519081529192917f309bb360e8b69c23937ccc5fb01f9aeeead1c95a99604e175113ff82f2b1723a910160405180910390a450505050565b6014015190565b6001600160a01b038216600090815260016020908152604080832060ff8086168552600390910190925290912054165b92915050565b6000546001600160a01b031633146109975760405162461bcd60e51b81526004016106a990613dad565b674563918244f40000600a8190556000805460ff60a01b1916600360a21b1781556001905260086020527fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f5560025b60088160ff1611610a445760086000610a00600184613dd0565b60ff168152602081019190915260400160002054610a1f906002613d5b565b60ff821660009081526008602052604090205580610a3c81613de9565b9150506109e6565b506843c33c1937564800007f82c9e868e45873bb5a4f47c09e14a12f6a6314e13aabd611e4374762bb4e8b365568878678326eac9000007f586689db7536874b78a6eac0f58556a56a106985743f7c16a699b27bb02f88bd5569010f0cf064dd592000007fcb250a1a60f48f70f08c912424f39071fd9a8b7099a72dffd251fce0294f374955690218ae196b8d4f3000007faba08fc86a199da17c4b45fa0fb586714474d27e5e1f0220658b6275561b2e1855600680546001600160a01b0385166001600160a01b03199182168117909255600082815260016020818152604083208281558083018054861690556002808201859055938390529290527fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e08054909316909317909155905b60005460ff600160a01b909104811690821611610be2576001600160a01b038516600090815260016020818152604080842060ff86168552600381018352818520805460ff1990811686179091556004909101909252909220805490921617905580610bda81613de9565b915050610b6f565b50506001600081905260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c80546001600160a01b03199081166001600160a01b03968716179091556002600555600780548216948616949094179093556009805490931691909316179055600b805460ff19169091179055565b600b5460ff161580610c7c57506000546001600160a01b031633145b610c8557600080fd5b816001600160a01b038116610cac5760405162461bcd60e51b81526004016106a990613e08565b826001600160a01b0381163b15610cd55760405162461bcd60e51b81526004016106a990613e24565b826001600160a01b038116610cfc5760405162461bcd60e51b81526004016106a990613e08565b836001600160a01b0381163b15610d255760405162461bcd60e51b81526004016106a990613e24565b610d2f8686610659565b505050505050565b6000546001600160a01b03163314610d615760405162461bcd60e51b81526004016106a990613dad565b806001600160a01b038116610d885760405162461bcd60e51b81526004016106a990613e08565b816001600160a01b0381163b610de05760405162461bcd60e51b815260206004820152601760248201527f41646472206e6f7420626520757365724164647265737300000000000000000060448201526064016106a9565b600980546001600160a01b0319166001600160a01b038516908117909155604080519182524260208301527fff285ed7890ca11517fc52ef49b514876c9a109b3a51ca874cfbfb009b501e4691015b60405180910390a1505050565b610e4581611448565b50565b6000546001600160a01b03163314610e725760405162461bcd60e51b81526004016106a990613dad565b610e7c8183613e5b565b68056bc75e2d6310000014610ec35760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420736861726560981b60448201526064016106a9565b600d829055600c819055604080518381526020810183905242918101919091527f64c94d581fb7cb437cd1e3005aab5b574323ceec38914c05cb8c7cdbd7a3b5b8906060015b60405180910390a15050565b600b5460ff161580610f3157506000546001600160a01b031633145b610f3a57600080fd5b806001600160a01b038116610f615760405162461bcd60e51b81526004016106a990613e08565b816001600160a01b0381163b15610f8a5760405162461bcd60e51b81526004016106a990613e24565b610f943384610659565b505050565b6001600160a01b03828116600090815260016020818152604080842060ff871685526005018252808420805493018054825181850281018501909352808352939095169460609493919290919083018282801561101f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611001575b5050506001600160a01b03909716600090815260016020908152604080832060ff998a16845260050190915290206002015494979196505092909316925050565b6001600160a01b03828116600090815260016020818152604080842060ff87168552600601825280842080549301805482518185028101850190935280835293909516946060948594909384938893909290918301828280156110ec57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110ce575b5050506001600160a01b038b16600090815260016020908152604080832060ff8e1684526006018252918290206002018054835181840281018401909452808452959a508a95929450925083018282801561117057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611152575b505050506001600160a01b039a8b16600090815260016020908152604080832060ff9d8e16845260060190915290206003810154600590910154949c939b929a1698505091909116945092505050565b6000546001600160a01b031633146111ea5760405162461bcd60e51b81526004016106a990613dad565b6001600160a01b038116611235576007546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611231573d6000803e3d6000fd5b5050565b6007546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a0823190602401602060405180830381865afa158015611288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ac9190613e6e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156112f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112319190613e87565b6000546001600160a01b031633146113455760405162461bcd60e51b81526004016106a990613dad565b806001600160a01b03811661136c5760405162461bcd60e51b81526004016106a990613e08565b816001600160a01b0381163b156113955760405162461bcd60e51b81526004016106a990613e24565b600680546001600160a01b0319166001600160a01b038516908117909155604080519182524260208301527f5df0867df0c51fc3d093e7e1676ef570bfa902751b82ca4014a31921185064d49101610e2f565b600b5460ff16158061140457506000546001600160a01b031633145b61140d57600080fd5b610f948383836125c6565b600b5460ff16158061143457506000546001600160a01b031633145b61143d57600080fd5b6112313383836125c6565b6000546001600160a01b031633146114725760405162461bcd60e51b81526004016106a990613dad565b806001600160a01b0381166114995760405162461bcd60e51b81526004016106a990613e08565b816001600160a01b0381163b156114c25760405162461bcd60e51b81526004016106a990613e24565b600e80546001600160a01b0319166001600160a01b038516908117909155604080519182524260208301527fd007073ff32fd9063a33ff58f48a697fd1a437e76846a8239cc8c496440f7d8f9101610e2f565b60005b6001600160a01b03808416600090815260016020818152604080842090920154909316825280822060ff80871684526004909101909352902054161561157d57506001600160a01b038083166000908152600160208190526040909120015416610967565b6001600160a01b039283166000908152600160208190526040909120015490921691611518565b6000546001600160a01b031633146115ce5760405162461bcd60e51b81526004016106a990613dad565b806001600160a01b0381166115f55760405162461bcd60e51b81526004016106a990613e08565b600080546001600160a01b0319166001600160a01b038416908117909155604080519182524260208301527fe71abb5b5918d9680236abfac31641af9d01609233238e90f028fdb290a84dd49101610f09565b6000546001600160a01b031633146116725760405162461bcd60e51b81526004016106a990613dad565b600b805460ff19811660ff90911615179055565b6000546001600160a01b031633146116b05760405162461bcd60e51b81526004016106a990613dad565b806001600160a01b0381166116d75760405162461bcd60e51b81526004016106a990613e08565b600780546001600160a01b0319166001600160a01b038416908117909155604080519182524260208301527f1c51c4620ac3af2259b60794e923ed0033aac058dd7408ca8de735e0216502919101610f09565b60005b6001600160a01b03808416600090815260016020818152604080842090920154909316825280822060ff80871684526003909101909352902054161561179257506001600160a01b038083166000908152600160208190526040909120015416610967565b6001600160a01b03928316600090815260016020819052604090912001549092169161172d565b6040516001600160a01b03808516602483015283166044820152606481018290526118249085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612be1565b50505050565b6040516001600160a01b038316602482015260448101829052610f9490849063a9059cbb60e01b906064016117ed565b6001600160a01b03828116600090815260016020818152604080842060ff87168086526005909101835290842083018054938401815580855291842090920180546001600160a01b0319169488169490941790935590525460031115611927576001600160a01b03828116600081815260016020818152604080842060ff888116808752600590920184529482902084015482519485529284015292168183015290519192861691600080516020613f4c8339815191529181900360600190a3610f948284600184612cb3565b604080516001815260ff8316602082015260038183015290516001600160a01b038481169290861691600080516020613f4c8339815191529181900360600190a360408051600080825260208083018085526001600160a01b0387168352600180835285842060ff881685526005019092529390912091516119ae93929091019190613a43565b506001600160a01b0382166000908152600160208190526040822060030191906119d9908490613ea9565b60ff908116825260208201929092526040016000205416158015611a0c575060005460ff828116600160a01b9092041614155b15611a4a576001600160a01b038216600090815260016020818152604080842060ff86168552600501909152909120600201805460ff191690911790555b6006546001600160a01b03838116911614611b69576000611a6b838361172a565b6001600160a01b03848116600090815260016020908152604080832060ff88168452600501909152902054919250828116911614611ae3576001600160a01b03838116600090815260016020908152604080832060ff87168452600501909152902080546001600160a01b0319169183169190911790555b6001600160a01b038316600090815260016020908152604080832060ff861684526005019091528120600301805491611b1b83613d72565b9091555050604080516001815260ff841660208201526001600160a01b03808716928482169291871691600080516020613f6c833981519152910160405180910390a461182483828461185a565b600654611b82906001600160a01b031684600184612cb3565b6006546001600160a01b0316600090815260016020908152604080832060ff851684526005019091528120600301805491611bbc83613d72565b9091555050600654604080516001815260ff841660208201526001600160a01b0386811693600093911691600080516020613f6c833981519152910160405180910390a4505050565b6001600160a01b038216600090815260016020908152604080832060ff808616855260049091019092529091205416611c805760405162461bcd60e51b815260206004820152601f60248201527f3530302e205265666572726572206c6576656c20697320696e6163746976650060448201526064016106a9565b6001600160a01b038216600090815260016020818152604080842060ff861685526006019091529091200154600211156121f5576001600160a01b03828116600081815260016020818152604080842060ff8881168087526006909201845282862085018054958601815580875284872090950180546001600160a01b031916988c169889179055948190529254815160028152928301939093529190921690820152909190600080516020613f4c8339815191529060600160405180910390a36001600160a01b03838116600090815260016020908152604080832060ff86168452600690810190925290912080546001600160a01b03191685841690811790915590549091169003611d9b57610f948284600284612cb3565b6001600160a01b03828116600090815260016020818152604080842060ff871680865260069182018452828620548716808752858552838720828852909201845291852060028082018054808801825590885294872090940180546001600160a01b031916978b16979097179096559352920154909181148015611e7157506001600160a01b03828116600090815260016020818152604080842060ff89168552600601909152822001805492871692909190611e5a57611e5a613ec2565b6000918252602090912001546001600160a01b0316145b8015611ed357506001600160a01b03828116600090815260016020818152604080842060ff8916855260060190915290912081018054928716929091908110611ebc57611ebc613ec2565b6000918252602090912001546001600160a01b0316145b15611f98576001600160a01b038416600090815260016020818152604080842060ff881685526006019091529091208101549003611f5657604080516002815260ff851660208201526005918101919091526001600160a01b038084169190871690600080516020613f4c833981519152906060015b60405180910390a36121e3565b604080516002815260ff851660208201526006918101919091526001600160a01b038084169190871690600080516020613f4c83398151915290606001611f49565b8060011480611fa75750806002145b801561200557506001600160a01b03828116600090815260016020818152604080842060ff89168552600601909152822001805492871692909190611fee57611fee613ec2565b6000918252602090912001546001600160a01b0316145b156120c1576001600160a01b038416600090815260016020818152604080842060ff88168552600601909152909120810154900361207f57604080516002815260ff851660208201526003918101919091526001600160a01b038084169190871690600080516020613f4c83398151915290606001611f49565b604080516002815260ff851660208201526004918101919091526001600160a01b038084169190871690600080516020613f4c83398151915290606001611f49565b80600214801561212757506001600160a01b03828116600090815260016020818152604080842060ff891685526006019091529091208101805492871692909190811061211057612110613ec2565b6000918252602090912001546001600160a01b0316145b156121e3576001600160a01b038416600090815260016020818152604080842060ff8816855260060190915290912081015490036121a157604080516002815260ff851660208201526005918101919091526001600160a01b038084169190871690600080516020613f4c83398151915290606001611f49565b604080516002815260ff8516602082015260068183015290516001600160a01b038481169290881691600080516020613f4c8339815191529181900360600190a35b6121ee858385612d56565b5050505050565b6001600160a01b03828116600090815260016020818152604080842060ff8716808652600690910183529084206002810180549485018155855291842090920180546001600160a01b03191688861617905591526005015416156123ef576001600160a01b038216600090815260016020818152604080842060ff8616855260060190915290912081018054909190811061229257612292613ec2565b60009182526020808320909101546001600160a01b0385811684526001808452604080862060ff881687526006019094529284209092018054929091169290916122de576122de613ec2565b6000918252602090912001546001600160a01b031614801561235857506001600160a01b03828116600090815260016020818152604080842060ff8716855260060190915282206005810154910180549190931692919061234157612341613ec2565b6000918252602090912001546001600160a01b0316145b156123755761236a83838360016131f7565b610f94838383612d56565b6001600160a01b03828116600090815260016020818152604080842060ff871685526006019091528220600581015491018054919093169291906123bb576123bb613ec2565b6000918252602090912001546001600160a01b0316036123e25761236a83838360016131f7565b61236a83838360006131f7565b6001600160a01b03828116600090815260016020818152604080842060ff871685526006019091529091208101805492861692909190811061243357612433613ec2565b6000918252602090912001546001600160a01b03160361245a5761236a83838360006131f7565b6001600160a01b03828116600090815260016020818152604080842060ff8716855260060190915282200180549286169290919061249a5761249a613ec2565b6000918252602090912001546001600160a01b0316036124c15761236a83838360016131f7565b6001600160a01b038216600090815260016020818152604080842060ff861685526006019091528220810180549192918390811061250157612501613ec2565b60009182526020808320909101546001600160a01b039081168452838201949094526040928301822060ff8616808452600691820183528484206001908101549689168552808452858520918552910190915291812082018054829061256957612569613ec2565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff86168252600601909252902060010154116125b9576125b483838360006131f7565b61236a565b61236a83838360016131f7565b6001600160a01b0383166000908152600160205260409020546126375760405162461bcd60e51b815260206004820152602360248201527f75736572206973206e6f74206578697374732e2052656769737465722066697260448201526239ba1760e91b60648201526084016106a9565b8160ff166001148061264c57508160ff166002145b6126895760405162461bcd60e51b815260206004820152600e60248201526d0d2dcecc2d8d2c840dac2e8e4d2f60931b60448201526064016106a9565b60018160ff161180156126ac575060005460ff600160a01b909104811690821611155b6126e85760405162461bcd60e51b815260206004820152600d60248201526c1a5b9d985b1a59081b195d995b609a1b60448201526064016106a9565b60ff8116600090815260086020526040902054600954612717916001600160a01b0390911690339030906117b9565b600e54600d5460ff8316600090815260086020526040902054612753926001600160a01b03169168056bc75e2d63100000916108909190613d5b565b8160ff166001036129b5576001600160a01b0383166000908152600160208190526040822060030191906127879084613dd0565b60ff9081168252602082019290925260400160002054166127e55760405162461bcd60e51b8152602060048201526018602482015277189d5e481c1c995d9a5bdd5cc81b195d995b08199a5c9cdd60421b60448201526064016106a9565b6001600160a01b038316600090815260016020908152604080832060ff8086168552600390910190925290912054161561285b5760405162461bcd60e51b81526020600482015260176024820152761b195d995b08185b1c9958591e481858dd1a5d985d1959604a1b60448201526064016106a9565b6001600160a01b0383166000908152600160208190526040822060050191906128849084613dd0565b60ff908116825260208201929092526040016000206002015416156128f3576001600160a01b038316600090815260016020819052604082206005019082906128cd9085613dd0565b60ff1681526020810191909152604001600020600201805460ff19169115159190911790555b60006128ff848361172a565b6001600160a01b03858116600090815260016020818152604080842060ff8916855260058101835281852080546001600160a01b0319169688169690961790955560039094019052919020805460ff19169091179055905061296284828461185a565b604080516001815260ff841660208201526001600160a01b0380841692908716917f18a92df19fd94d6cfff209966673a5ca05a1c8e2bb68e097fce2bdc2ed81111991015b60405180910390a350505050565b6001600160a01b0383166000908152600160208190526040822060040191906129de9084613dd0565b60ff908116825260208201929092526040016000205416612a3c5760405162461bcd60e51b8152602060048201526018602482015277189d5e481c1c995d9a5bdd5cc81b195d995b08199a5c9cdd60421b60448201526064016106a9565b6001600160a01b038316600090815260016020908152604080832060ff80861685526004909101909252909120541615612ab25760405162461bcd60e51b81526020600482015260176024820152761b195d995b08185b1c9958591e481858dd1a5d985d1959604a1b60448201526064016106a9565b6001600160a01b038316600090815260016020819052604082206006019190612adb9084613dd0565b60ff90811682526020820192909252604001600020600301541615612b4a576001600160a01b03831660009081526001602081905260408220600601908290612b249085613dd0565b60ff1681526020810191909152604001600020600301805460ff19169115159190911790555b6000612b568483611515565b6001600160a01b038516600090815260016020818152604080842060ff88168552600401909152909120805460ff191690911790559050612b98848284611c05565b604080516002815260ff841660208201526001600160a01b0380841692908716917f18a92df19fd94d6cfff209966673a5ca05a1c8e2bb68e097fce2bdc2ed81111991016129a7565b6000612c36826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137aa9092919063ffffffff16565b805190915015610f945780806020019051810190612c549190613e87565b610f945760405162461bcd60e51b815260206004820152602a60248201527f5361666542455032303a204245503230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106a9565b600080612cc2868686866137c1565b91509150612cfb8268056bc75e2d63100000600c54600860008860ff1660ff168152602001908152602001600020546108909190613d5b565b8015610d2f576040805160ff8087168252851660208201526001600160a01b0380851692908816917ff0ddc65c0d411f042f723dcfa1b7d13e85a35b7b70761d447c6500411cacf328910160405180910390a3505050505050565b6001600160a01b038216600090815260016020908152604080832060ff8516845260060190915290206002015460041115612d9857610f948284600284612cb3565b6001600160a01b03808316600090815260016020818152604080842060ff87168086526006918201845282862054909616855283835281852095855294909401815283832090910180548451818402810184019095528085529293929091830182828015612e2f57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612e11575b505050505090508051600203612f9f57826001600160a01b031681600081518110612e5c57612e5c613ec2565b60200260200101516001600160a01b03161480612ea45750826001600160a01b031681600181518110612e9157612e91613ec2565b60200260200101516001600160a01b0316145b15612f08576001600160a01b03808416600081815260016020818152604080842060ff8916808652600691820184528286205490971685529282528084209584529490910190529190912060050180546001600160a01b0319169091179055612f9f565b8051600103612f9f57826001600160a01b031681600081518110612f2e57612f2e613ec2565b60200260200101516001600160a01b031603612f9f576001600160a01b03808416600081815260016020818152604080842060ff8916808652600691820184528286205490971685529282528084209584529490910190529190912060050180546001600160a01b03191690911790555b60408051600080825260208083018085526001600160a01b0388168352600180835285842060ff89168552600601909252939091209151612fe593929091019190613a43565b5060408051600080825260208083018085526001600160a01b03881683526001825284832060ff88168452600601909152929020905161302b9260029092019190613a43565b506001600160a01b038316600081815260016020818152604080842060ff8816855260068101835290842060050180546001600160a01b031916905593835281905260049092019161307e908590613ea9565b60ff9081168252602082019290925260400160002054161580156130b1575060005460ff838116600160a01b9092041614155b156130ef576001600160a01b038316600090815260016020818152604080842060ff87168552600601909152909120600301805460ff191690911790555b6001600160a01b038316600090815260016020908152604080832060ff86168452600601909152812060040180549161312783613d72565b90915550506006546001600160a01b0384811691161461319f57600061314d8484611515565b604080516002815260ff861660208201529192506001600160a01b03808816928185169291881691600080516020613f6c833981519152910160405180910390a4613199848285611c05565b50611824565b600654604080516002815260ff851660208201526001600160a01b0387811693600093911691600080516020613f6c833981519152910160405180910390a4600654611824906001600160a01b031685600285612cb3565b806134ce576001600160a01b038316600090815260016020818152604080842060ff87168552600601909152822081018054919291829061323a5761323a613ec2565b6000918252602080832091909101546001600160a01b039081168452838201949094526040928301822060ff8716808452600691820183528484206001908101805480830182559086528486200180546001600160a01b0319168c8916179055958916845285835284842090845201905290812090910180549091906132c2576132c2613ec2565b60009182526020808320909101546001600160a01b0386811684526001808452604080862060ff89168752600601909452928420830180549282169491891693600080516020613f4c8339815191529360029389939091829061332757613327613ec2565b6000918252602080832091909101546001600160a01b03168352828101939093526040918201812060ff8b81168352600690910184529082902060010154825195821686529381169285019290925291169082015260600160405180910390a36001600160a01b03808416600081815260016020818152604080842060ff891685526006019091528220810180549394891693600080516020613f4c833981519152936002938993909282906133df576133df613ec2565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff8b168252600601909252902060010154613423906002613ea9565b6040805160ff9485168152928416602084015292168183015290519081900360600190a36001600160a01b038316600090815260016020818152604080842060ff87168552600601909152822001805490919061348257613482613ec2565b60009182526020808320909101546001600160a01b03878116845260018352604080852060ff881686526006019093529190922080546001600160a01b03191691909216179055611824565b6001600160a01b038316600090815260016020818152604080842060ff871685526006019091528220810180549192918390811061350e5761350e613ec2565b6000918252602080832091909101546001600160a01b039081168452838201949094526040928301822060ff8716808452600691820183528484206001908101805480830182559086528486200180546001600160a01b0319168c891617905595891684528583528484209084520190522081018054909190811061359557613595613ec2565b60009182526020808320909101546001600160a01b0386811684526001808452604080862060ff89168752600601909452928420830180549282169491891693600080516020613f4c8339815191529360029389939091839081106135fc576135fc613ec2565b6000918252602080832091909101546001600160a01b03168352828101939093526040918201812060ff8b81168352600690910184529082902060010154825195821686529381169285019290925291169082015260600160405180910390a36001600160a01b03808416600081815260016020818152604080842060ff891685526006019091528220810180549394891693600080516020613f4c8339815191529360029389939092839081106136b6576136b6613ec2565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812060ff8b1682526006019092529020600101546136fa906004613ea9565b6040805160ff9485168152928416602084015292168183015290519081900360600190a36001600160a01b038316600090815260016020818152604080842060ff8716855260060190915290912081018054909190811061375d5761375d613ec2565b60009182526020808320909101546001600160a01b03878116845260018352604080852060ff881686526006019093529190922080546001600160a01b0319169190921617905550505050565b60606137b98484600085613957565b949350505050565b600080858160ff8616600103613895575b6001600160a01b038216600090815260016020908152604080832060ff808a168552600590910190925290912060020154161561388b57604080516001815260ff871660208201526001600160a01b03808a1692908516917ffc0cb63f8dbd6b20ceb84a3c5358a41576a1479e6ecd040b4b985525dc09a709910160405180910390a3506001600160a01b03908116600090815260016020818152604080842060ff8916855260050190915290912054909116906137d2565b909250905061394e565b6001600160a01b038216600090815260016020908152604080832060ff808a168552600690910190925290912060030154161561388b57604080516002815260ff871660208201526001600160a01b03808a1692908516917ffc0cb63f8dbd6b20ceb84a3c5358a41576a1479e6ecd040b4b985525dc09a709910160405180910390a3506001600160a01b03908116600090815260016020818152604080842060ff891685526006019091529091205490911690613895565b94509492505050565b6060843b6139a75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a9565b600080866001600160a01b031685876040516139c39190613efc565b60006040518083038185875af1925050503d8060008114613a00576040519150601f19603f3d011682016040523d82523d6000602084013e613a05565b606091505b50915091508115613a195791506137b99050565b805115613a295780518082602001fd5b8360405162461bcd60e51b81526004016106a99190613f18565b828054828255906000526020600020908101928215613a98579160200282015b82811115613a9857825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613a63565b50613aa4929150613aa8565b5090565b5b80821115613aa45760008155600101613aa9565b6001600160a01b0381168114610e4557600080fd5b803560ff81168114613ae357600080fd5b919050565b60008060408385031215613afb57600080fd5b8235613b0681613abd565b9150613b1460208401613ad2565b90509250929050565b600080600060608486031215613b3257600080fd5b8335613b3d81613abd565b92506020840135613b4d81613abd565b91506040840135613b5d81613abd565b809150509250925092565b600060208284031215613b7a57600080fd5b8135613b8581613abd565b9392505050565b600060208284031215613b9e57600080fd5b5035919050565b60008060408385031215613bb857600080fd5b8235613bc381613abd565b91506020830135613bd381613abd565b809150509250929050565b60008060408385031215613bf157600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015613c395781516001600160a01b031687529582019590820190600101613c14565b509495945050505050565b6001600160a01b0384168152606060208201819052600090613c6890830185613c00565b90508215156040830152949350505050565b600060018060a01b03808816835260a06020840152613c9c60a0840188613c00565b8381036040850152613cae8188613c00565b95151560608501525092909216608090910152509392505050565b600080600060608486031215613cde57600080fd5b8335613ce981613abd565b9250613cf760208501613ad2565b9150613d0560408501613ad2565b90509250925092565b60008060408385031215613d2157600080fd5b613b0683613ad2565b600060208284031215613d3c57600080fd5b613b8582613ad2565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761096757610967613d45565b600060018201613d8457613d84613d45565b5060010190565b600082613da857634e487b7160e01b600052601260045260246000fd5b500490565b60208082526009908201526837b7363ca7bbb732b960b91b604082015260600190565b60ff828116828216039081111561096757610967613d45565b600060ff821660ff8103613dff57613dff613d45565b60010192915050565b602080825260029082015261302160f01b604082015260600190565b6020808252601b908201527f41646472206e6f7420626520436f6e7472616374416464726573730000000000604082015260600190565b8082018082111561096757610967613d45565b600060208284031215613e8057600080fd5b5051919050565b600060208284031215613e9957600080fd5b81518015158114613b8557600080fd5b60ff818116838216019081111561096757610967613d45565b634e487b7160e01b600052603260045260246000fd5b60005b83811015613ef3578181015183820152602001613edb565b50506000910152565b60008251613f0e818460208701613ed8565b9190910192915050565b6020815260008251806020840152613f37816040850160208701613ed8565b601f01601f1916919091016040019291505056fe68062c5925c4317adf3a7095478d28b33fd8b41458bc7620b61bc46bf1b24d82a00c953eff38ec1b71e7fe060b2ab8df0bbe5354319fbdde4fbdafd6324386a6a264697066735822122020a4ad5c42a5adc06a2dfe2000f37baafa0213724b19f65994d9c66122970c4f64736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f768f177309cd1e28f7ffd640f88cdd70647f778
-----Decoded View---------------
Arg [0] : _wallet (address): 0xf768F177309CD1e28F7FFd640F88cDD70647F778
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f768f177309cd1e28f7ffd640f88cdd70647f778
Deployed Bytecode Sourcemap
21755:27796:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25662:8;;:20;25658:89;;25731:3;;25706:29;;25719:10;;-1:-1:-1;;;;;25731:3:0;25706:12;:29::i;:::-;21755:27796;25658:89;25759:50;25772:10;25784:24;25799:8;;25784:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25784:14:0;;-1:-1:-1;;;25784:24:0:i;:::-;25759:12;:50::i;45390:188::-;;;;;;:::i;:::-;;:::i;:::-;;;798:14:1;;791:22;773:41;;761:2;746:18;45390:188:0;;;;;;;;24452:1075;;;;;;:::i;:::-;;:::i;20127:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1771:25:1;;;1759:2;1744:18;20127:43:0;1625:177:1;19949:23:0;;;;;-1:-1:-1;;;19949:23:0;;;;;;;;;1979:4:1;1967:17;;;1949:36;;1937:2;1922:18;19949:23:0;1807:184:1;20025:46:0;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;20025:46:0;;;;;;-1:-1:-1;;;;;2345:32:1;;;2327:51;;2315:2;2300:18;20025:46:0;2181:203:1;20179:25:0;;;;;;21958:26;;;;;-1:-1:-1;;;;;21958:26:0;;;26066:325;;;;;;:::i;:::-;;:::i;24184:260::-;;;;;;:::i;:::-;;:::i;20078:42::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;20078:42:0;;;20236:23;;;;;-1:-1:-1;;;;;20236:23:0;;;47116:110;;;;;;:::i;:::-;-1:-1:-1;;;;;47198:11:0;47173:4;47198:11;;;:5;:11;;;;;:14;:19;;;47116:110;20211:18;;;;;-1:-1:-1;;;;;20211:18:0;;;21877:34;;;;;;22983:94;;;;;;:::i;:::-;;:::i;23836:340::-;;;;;;:::i;:::-;;:::i;25825:233::-;;;;;;:::i;:::-;;:::i;45782:444::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;21918:33::-;;;;;;20355:26;;;;;;46234:874;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;49170:378::-;;;;;;:::i;:::-;;:::i;19981:37::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19981:37:0;;;;;;;;;;4899:25:1;;;-1:-1:-1;;;;;4960:32:1;;;4955:2;4940:18;;4933:60;5009:18;;;5002:34;4887:2;4872:18;19981:37:0;4697:345:1;23584:244:0;;;;;;:::i;:::-;;:::i;45586:188::-;;;;;;:::i;:::-;-1:-1:-1;;;;;45726:18:0;;;;45697:4;45726:18;;;:5;:18;;;;;;;;:40;;;;;;:33;;:40;;;;;;;;45586:188;26535:187;;;;;;:::i;:::-;;:::i;26399:128::-;;;;;;:::i;:::-;;:::i;20320:26::-;;;;;-1:-1:-1;;;;;20320:26:0;;;19258:28;;;;;-1:-1:-1;;;;;19258:28:0;;;20390:18;;;;;;;;;22715:260;;;;;;:::i;:::-;;:::i;44984:398::-;;;;;;:::i;:::-;;:::i;23085:259::-;;;;;;:::i;:::-;;:::i;20268:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;25535:84;;;:::i;23352:224::-;;;;;;:::i;:::-;;:::i;44570:406::-;;;;;;:::i;:::-;;:::i;29020:1511::-;-1:-1:-1;;;;;47198:11:0;;47173:4;47198:11;;;:5;:11;;;;;:14;:19;29121:50;;;;-1:-1:-1;;;29121:50:0;;6307:2:1;29121:50:0;;;6289:21:1;6346:2;6326:18;;;6319:30;-1:-1:-1;;;6365:18:1;;;6358:41;6416:18;;29121:50:0;;;;;;;;;-1:-1:-1;;;;;47198:11:0;;47173:4;47198:11;;;:5;:11;;;;;:14;29182:61;;;;-1:-1:-1;;;29182:61:0;;6647:2:1;29182:61:0;;;6629:21:1;6686:2;6666:18;;;6659:30;-1:-1:-1;;;6705:18:1;;;6698:49;6764:18;;29182:61:0;6445:343:1;29182:61:0;29256:123;29300:10;29333:4;29353:11;;29367:1;29353:15;;;;:::i;:::-;29256:12;;-1:-1:-1;;;;;29256:12:0;;:123;;:29;:123::i;:::-;-1:-1:-1;;;;;29415:18:0;;;29395:17;29415:18;;;:5;:18;;;;;;;;29456:10;;;29446:20;;29477:13;;;:31;;;;;-1:-1:-1;;;;;;29477:31:0;;;;;;;29519:18;;;;:22;;;29566:10;;29554:23;;;;;;;:37;;;;;;;;29658:45;;;;;;;29716:36;;;:33;;;;:36;;;;;:43;;-1:-1:-1;;29716:43:0;;;;;;;;29770:36;;;:33;;;:36;;;;;:43;;;;;;;;;;;29834:10;;29826:19;;;;;;;;:33;;;;;;;;;;;29870:12;;29415:18;;29456:10;29870:12;;;:::i;:::-;;;;-1:-1:-1;;;;;;;29895:22:0;;;;;;:5;:22;;;;;:36;;:38;;;;;;:::i;:::-;;;;;;29946:22;29971:34;29990:11;30003:1;29971:18;:34::i;:::-;-1:-1:-1;;;;;30016:18:0;;;;;;;:5;:18;;;;;;;;:30;;;:27;;;;:30;;;;:63;;-1:-1:-1;;;;;;30016:63:0;;;;;;;30132:11;;30177:10;;30159:11;;30016:63;;-1:-1:-1;30092:116:0;;30132:11;;;;;30191:6;;30159:15;;30173:1;30159:15;:::i;:::-;:28;;;;:::i;:::-;30158:39;;;;:::i;:::-;30092:12;;-1:-1:-1;;;;;30092:12:0;;:116;:25;:116::i;:::-;30221:48;30238:11;30251:14;30267:1;30221:16;:48::i;:::-;30282:68;30299:11;30312:34;30331:11;30344:1;30312:18;:34::i;:::-;30348:1;30282:16;:68::i;:::-;-1:-1:-1;;;;;30451:18:0;;;;;;;:5;:18;;;;;;;;:21;30368:155;;;30487:22;;;;;;;:25;30368:155;;1771:25:1;;;30368:155:0;;30451:18;30368:155;;1744:18:1;30368:155:0;;;;;;;29110:1421;;29020:1511;;:::o;48972:190::-;49140:2;49131:12;49125:19;;48972:190::o;45390:188::-;-1:-1:-1;;;;;45530:18:0;;45501:4;45530:18;;;:5;:18;;;;;;;;:40;;;;;;:33;;;;:40;;;;;;;;45390:188;;;;;:::o;24452:1075::-;22550:13;;-1:-1:-1;;;;;22550:13:0;22536:10;:27;22528:49;;;;-1:-1:-1;;;22528:49:0;;;;;;;:::i;:::-;24621:4:::1;24607:11;:18:::0;;;24636:10:::1;:15:::0;;-1:-1:-1;;;;24636:15:0::1;-1:-1:-1::0;;;24636:15:0::1;::::0;;-1:-1:-1;24664:13:0;;:10:::1;:13;::::0;;:27;24717:1:::1;24702:95;24725:1;24720;:6;;;24702:95;;24764:10;:17;24775:5;24779:1;24775::::0;:5:::1;:::i;:::-;24764:17;;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;24764:17:0;;:21:::1;::::0;24784:1:::1;24764:21;:::i;:::-;24748:13;::::0;::::1;;::::0;;;:10:::1;:13;::::0;;;;:37;24759:1;24728:3:::1;24759:1:::0;24728:3:::1;:::i;:::-;;;;24702:95;;;-1:-1:-1::0;24825:7:0::1;24809:13:::0;:23;24860:7:::1;24843:14:::0;:24;24895:7:::1;24878:14:::0;:24;24930:7:::1;24913:14:::0;:24;24950:3:::1;:19:::0;;-1:-1:-1;;;;;24950:19:0;::::1;-1:-1:-1::0;;;;;;24950:19:0;;::::1;::::0;::::1;::::0;;;24809:13:::1;25002:20:::0;;;24950:19;24809:13:::1;25002:20:::0;;;24809:13;25002:20;;25035:11;;;25057:13;;::::1;:26:::0;;;::::1;::::0;;25094:18:::1;::::0;;::::1;:31:::0;;;25138:14;;;;;;;;:30;;;;::::1;::::0;;::::1;::::0;;;25002:20;25181:172:::1;25204:10;::::0;::::1;-1:-1:-1::0;;;25204:10:0;;::::1;::::0;::::1;25199:15:::0;;::::1;;25181:172;;-1:-1:-1::0;;;;;25236:20:0;::::1;;::::0;;;25277:4:::1;25236:20;::::0;;;;;;;:38:::1;::::0;::::1;::::0;;:35:::1;::::0;::::1;:38:::0;;;;;:45;;-1:-1:-1;;25236:45:0;;::::1;::::0;::::1;::::0;;;25296:35:::1;::::0;;::::1;:38:::0;;;;;;:45;;;;::::1;;::::0;;25236:38;25216:3:::1;25236:38:::0;25216:3:::1;:::i;:::-;;;;25181:172;;;-1:-1:-1::0;;25373:1:0::1;25365:10;::::0;;;:7:::1;:10;::::0;;:26;;-1:-1:-1;;;;;;25365:26:0;;::::1;-1:-1:-1::0;;;;;25365:26:0;;::::1;;::::0;;;25415:1:::1;25402:10;:14:::0;25427:8:::1;:20:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25460:12:::1;:35:::0;;;;::::1;::::0;;;::::1;;::::0;;25506:6:::1;:13:::0;;-1:-1:-1;;25506:13:0::1;::::0;;::::1;::::0;;24452:1075::o;26066:325::-;22649:6;;;;22648:7;;:38;;-1:-1:-1;22673:13:0;;-1:-1:-1;;;;;22673:13:0;22659:10;:27;22648:38;22640:47;;;;;;26200:11;-1:-1:-1;;;;;22434:19:0;::::1;22426:34;;;;-1:-1:-1::0;;;22426:34:0::1;;;;;;;:::i;:::-;26234:11:::0;-1:-1:-1;;;;;22162:19:0;::::2;9585:20:::0;9633:8;22153:62:::2;;;;-1:-1:-1::0;;;22153:62:0::2;;;;;;;:::i;:::-;26270:15:::0;-1:-1:-1;;;;;22434:19:0;::::3;22426:34;;;;-1:-1:-1::0;;;22426:34:0::3;;;;;;;:::i;:::-;26308:15:::0;-1:-1:-1;;;;;22162:19:0;::::4;9585:20:::0;9633:8;22153:62:::4;;;;-1:-1:-1::0;;;22153:62:0::4;;;;;;;:::i;:::-;26341:42:::5;26354:11;26367:15;26341:12;:42::i;:::-;22471:1:::4;22226::::3;22471::::2;22698::::1;26066:325:::0;;:::o;24184:260::-;22550:13;;-1:-1:-1;;;;;22550:13:0;22536:10;:27;22528:49;;;;-1:-1:-1;;;22528:49:0;;;;;;;:::i;:::-;24296:6;-1:-1:-1;;;;;22434:19:0;::::1;22426:34;;;;-1:-1:-1::0;;;22426:34:0::1;;;;;;;:::i;:::-;24324:6:::0;-1:-1:-1;;;;;22300:19:0;::::2;9585:20:::0;22292:57:::2;;;::::0;-1:-1:-1;;;22292:57:0;;9021:2:1;22292:57:0::2;::::0;::::2;9003:21:1::0;9060:2;9040:18;;;9033:30;9099:25;9079:18;;;9072:53;9142:18;;22292:57:0::2;8819:347:1::0;22292:57:0::2;24348:12:::3;:29:::0;;-1:-1:-1;;;;;;24348:29:0::3;-1:-1:-1::0;;;;;24348:29:0;::::3;::::0;;::::3;::::0;;;24393:43:::3;::::0;;9345:51:1;;;24420:15:0::3;9427:2:1::0;9412:18;;9405:34;24393:43:0::3;::::0;9318:18:1;24393:43:0::3;;;;;;;;22471:1:::2;22588::::1;24184:260:::0;:::o;22983:94::-;23048:21;23058:10;23048:9;:21::i;:::-;22983:94;:::o;23836:340::-;22550:13;;-1:-1:-1;;;;;22550:13:0;22536:10;:27;22528:49;;;;-1:-1:-1;;;22528:49:0;;;;;;;:::i;:::-;23970:26:::1;23984:12:::0;23970:11;:26:::1;:::i;:::-;24000:6;23970:36;23962:62;;;::::0;-1:-1:-1;;;23962:62:0;;9782:2:1;23962:62:0::1;::::0;::::1;9764:21:1::0;9821:2;9801:18;;;9794:30;-1:-1:-1;;;9840:18:1;;;9833:43;9893:18;;23962:62:0::1;9580:337:1::0;23962:62:0::1;24035:10;:24:::0;;;24070:11:::1;:26:::0;;;24112:56:::1;::::0;;10124:25:1;;;10180:2;10165:18;;10158:34;;;24152:15:0::1;10208:18:1::0;;;10201:34;;;;24112:56:0::1;::::0;10112:2:1;10097:18;24112:56:0::1;;;;;;;;23836:340:::0;;:::o;25825:233::-;22649:6;;;;22648:7;;:38;;-1:-1:-1;22673:13:0;;-1:-1:-1;;;;;22673:13:0;22659:10;:27;22648:38;22640:47;;;;;;25938:15;-1:-1:-1;;;;;22434:19:0;::::1;22426:34;;;;-1:-1:-1::0;;;22426:34:0::1;;;;;;;:::i;:::-;25976:15:::0;-1:-1:-1;;;;;22162:19:0;::::2;9585:20:::0;9633:8;22153:62:::2;;;;-1:-1:-1::0;;;22153:62:0::2;;;;;;;:::i;:::-;26009:41:::3;26022:10;26034:15;26009:12;:41::i;:::-;22471:1:::2;22698::::1;25825:233:::0;:::o;45782:444::-;-1:-1:-1;;;;;46038:18:0;;;45901:23;46038:18;;;:5;:18;;;;;;;;:34;;;;;:27;;:34;;;;;:50;;46111:44;;46099:56;;;;;;;;;;;;;;;;;46038:50;;;;;45939:26;;45901:23;46099:56;;46111:44;;46099:56;;;46111:44;46099:56;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46099:56:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;46176:18:0;;;;;;;:5;:18;;;;;;;;:34;;;;;;:27;;:34;;;;;:42;;;45782:444;;46099:56;;-1:-1:-1;;46176:42:0;;;;;-1:-1:-1;;45782:444:0:o;46234:874::-;-1:-1:-1;;;;;46607:18:0;;;46353:23;46607:18;;;:5;:18;;;;;;;;:52;;;;;:45;;:52;;;;;:86;;46730:90;;46708:112;;;;;;;;;;;;;;;;;46607:86;;;;;46391:36;;;;46353:23;;;;46607:86;;46708:112;;46730:90;;46708:112;;46730:90;46708:112;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46708:112:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;46858:18:0;;;;;;:5;:18;;;;;;;;:52;;;;;:45;;:52;;;;;;:91;;46835:114;;;;;;;;;;;;;;;;;46708:112;;-1:-1:-1;46708:112:0;;46835:114;;-1:-1:-1;46858:91:0;-1:-1:-1;46835:114:0;;46858:91;46835:114;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46835:114:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;46974:18:0;;;;;;;:5;:18;;;;;;;;:34;;;;;;:27;;:34;;;;;:42;;;;47044:45;;;;;46567:533;;;;46835:114;;46974:42;;-1:-1:-1;;47044:45:0;;;;;-1:-1:-1;46567:533:0;-1:-1:-1;;;46234:874:0:o;49170:378::-;22550:13;;-1:-1:-1;;;;;22550:13:0;22536:10;:27;22528:49;;;;-1:-1:-1;;;22528:49:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49260:26:0;::::1;49256:285;;49319:8;::::0;49303:58:::1;::::0;-1:-1:-1;;;;;49319:8:0;;::::1;::::0;49339:21:::1;49303:58:::0;::::1;;;::::0;49319:8:::1;49303:58:::0;49319:8;49303:58;49339:21;49319:8;49303:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22983:94:::0;:::o;49256:285::-:1;49442:8;::::0;49469:45:::1;::::0;-1:-1:-1;;;49469:45:0;;49508:4:::1;49469:45;::::0;::::1;2327:51:1::0;-1:-1:-1;;;;;49394:29:0;;::::1;::::0;::::1;::::0;49442:8;::::1;::::0;49394:29;;49469:30:::1;::::0;2300:18:1;;49469:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49394:135;::::0;-1:-1:-1;;;;;;49394:135:0::1;::::0;;;;;;-1:-1:-1;;;;;9363:32:1;;;49394:135:0::1;::::0;::::1;9345:51:1::0;9412:18;;;9405:34;9318:18;;49394:135:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23584:244::-:0;22550:13;;-1:-1:-1;;;;;22550:13:0;22536:10;:27;22528:49;;;;-1:-1:-1;;;22528:49:0;;;;;;;:::i;:::-;23696:6;-1:-1:-1;;;;;22434:19:0;::::1;22426:34;;;;-1:-1:-1::0;;;22426:34:0::1;;;;;;;:::i;:::-;23725:6:::0;-1:-1:-1;;;;;22162:19:0;::::2;9585:20:::0;9633:8;22153:62:::2;;;;-1:-1:-1::0;;;22153:62:0::2;;;;;;;:::i;:::-;23749:3:::3;:12:::0;;-1:-1:-1;;;;;;23749:12:0::3;-1:-1:-1::0;;;;;23749:12:0;::::3;::::0;;::::3;::::0;;;23777:43:::3;::::0;;9345:51:1;;;23804:15:0::3;9427:2:1::0;9412:18;;9405:34;23777:43:0::3;::::0;9318:18:1;23777:43:0::3;9171:274:1::0;26535:187:0;22649:6;;;;22648:7;;:38;;-1:-1:-1;22673:13:0;;-1:-1:-1;;;;;22673:13:0;22659:10;:27;22648:38;22640:47;;;;;;26674:40:::1;26687:11;26700:6;26708:5;26674:12;:40::i;26399:128::-:0;22649:6;;;;22648:7;;:38;;-1:-1:-1;22673:13:0;;-1:-1:-1;;;;;22673:13:0;22659:10;:27;22648:38;22640:47;;;;;;26480:39:::1;26493:10;26505:6;26513:5;26480:12;:39::i;22715:260::-:0;22550:13;;-1:-1:-1;;;;;22550:13:0;22536:10;:27;22528:49;;;;-1:-1:-1;;;22528:49:0;;;;;;;:::i;:::-;22820:10;-1:-1:-1;;;;;22434:19:0;::::1;22426:34;;;;-1:-1:-1::0;;;22426:34:0::1;;;;;;;:::i;:::-;22853:10:::0;-1:-1:-1;;;;;22162:19:0;::::2;9585:20:::0;9633:8;22153:62:::2;;;;-1:-1:-1::0;;;22153:62:0::2;;;;;;;:::i;:::-;22881:11:::3;:24:::0;;-1:-1:-1;;;;;;22881:24:0::3;-1:-1:-1::0;;;;;22881:24:0;::::3;::::0;;::::3;::::0;;;22921:46:::3;::::0;;9345:51:1;;;22951:15:0::3;9427:2:1::0;9412:18;;9405:34;22921:46:0::3;::::0;9318:18:1;22921:46:0::3;9171:274:1::0;44984:398:0;45094:7;45119:228;-1:-1:-1;;;;;45157:18:0;;;45151:34;45157:18;;;45151:5;45157:18;;;;;;;;:27;;;;;;;45151:34;;;;;:56;;;;;;:49;;;;:56;;;;;;;45147:131;;;-1:-1:-1;;;;;;45235:18:0;;;;;;;:5;:18;;;;;;;;:27;;;45228:34;;45147:131;-1:-1:-1;;;;;45308:18:0;;;;;;;:5;:18;;;;;;;;:27;;;;;;45119:228;;23085:259;22550:13;;-1:-1:-1;;;;;22550:13:0;22536:10;:27;22528:49;;;;-1:-1:-1;;;22528:49:0;;;;;;;:::i;:::-;23206:14;-1:-1:-1;;;;;22434:19:0;::::1;22426:34;;;;-1:-1:-1::0;;;22426:34:0::1;;;;;;;:::i;:::-;23238:13:::2;:30:::0;;-1:-1:-1;;;;;;23238:30:0::2;-1:-1:-1::0;;;;;23238:30:0;::::2;::::0;;::::2;::::0;;;23284:52:::2;::::0;;9345:51:1;;;23320:15:0::2;9427:2:1::0;9412:18;;9405:34;23284:52:0::2;::::0;9318:18:1;23284:52:0::2;9171:274:1::0;25535:84:0;22550:13;;-1:-1:-1;;;;;22550:13:0;22536:10;:27;22528:49;;;;-1:-1:-1;;;22528:49:0;;;;;;;:::i;:::-;25605:6:::1;::::0;;-1:-1:-1;;25595:16:0;::::1;25605:6;::::0;;::::1;25604:7;25595:16;::::0;;25535:84::o;23352:224::-;22550:13;;-1:-1:-1;;;;;22550:13:0;22536:10;:27;22528:49;;;;-1:-1:-1;;;22528:49:0;;;;;;;:::i;:::-;23463:9;-1:-1:-1;;;;;22434:19:0;::::1;22426:34;;;;-1:-1:-1::0;;;22426:34:0::1;;;;;;;:::i;:::-;23490:8:::2;:20:::0;;-1:-1:-1;;;;;;23490:20:0::2;-1:-1:-1::0;;;;;23490:20:0;::::2;::::0;;::::2;::::0;;;23526:42:::2;::::0;;9345:51:1;;;23552:15:0::2;9427:2:1::0;9412:18;;9405:34;23526:42:0::2;::::0;9318:18:1;23526:42:0::2;9171:274:1::0;44570:406:0;44680:7;44705:226;-1:-1:-1;;;;;44743:18:0;;;44737:34;44743:18;;;44737:5;44743:18;;;;;;;;:27;;;;;;;44737:34;;;;;:56;;;;;;:49;;;;:56;;;;;;;44733:131;;;-1:-1:-1;;;;;;44821:18:0;;;;;;;:5;:18;;;;;;;;:27;;;44814:34;;44733:131;-1:-1:-1;;;;;44892:18:0;;;;;;;:5;:18;;;;;;;;:27;;;;;;44705:226;;15729:285;15927:68;;-1:-1:-1;;;;;10975:15:1;;;15927:68:0;;;10957:34:1;11027:15;;11007:18;;;11000:43;11059:18;;;11052:34;;;15873:133:0;;15907:5;;-1:-1:-1;;;15950:27:0;10892:18:1;;15927:68:0;;;;-1:-1:-1;;15927:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;15927:68:0;-1:-1:-1;;;;;;15927:68:0;;;;;;;;;;15873:19;:133::i;:::-;15729:285;;;;:::o;15473:248::-;15644:58;;-1:-1:-1;;;;;9363:32:1;;15644:58:0;;;9345:51:1;9412:18;;;9405:34;;;15590:123:0;;15624:5;;-1:-1:-1;;;15667:23:0;9318:18:1;;15644:58:0;9171:274:1;30539:2106:0;-1:-1:-1;;;;;30677:22:0;;;;;;;:5;:22;;;;;;;;:38;;;;;;:31;;;;:38;;;;;:48;;:66;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30677:66:0;;;;;;;;;;;30760:38;;:55;30818:1;-1:-1:-1;30756:393:0;;;-1:-1:-1;;;;;30841:216:0;;;30986:22;;;;30936:1;30986:22;;;;;;;;:38;;;;;;;:31;;;;:38;;;;;;:48;;:55;30841:216;;11297:36:1;;;11349:18;;;11342:45;11423:17;;11403:18;;;11396:45;30841:216:0;;;;;;;-1:-1:-1;;;;;;;;;;;30841:216:0;;;;11285:2:1;30841:216:0;;;31079:58;31098:15;31115:11;31128:1;31131:5;31079:18;:58::i;30756:393::-;31164:55;;;31207:1;11297:36:1;;11327:4;11369:17;;11364:2;11349:18;;11342:45;31217:1:0;11403:18:1;;;11396:45;31164:55:0;;-1:-1:-1;;;;;31164:55:0;;;;;;;;-1:-1:-1;;;;;;;;;;;31164:55:0;;;;11285:2:1;31164:55:0;;;31305:16;;;31319:1;31305:16;;;;;;;;;;-1:-1:-1;;;;;31254:22:0;;;;:5;:22;;;;;;:38;;;;;:31;;:38;;;;;;;:67;;;;:48;;;;;31305:16;31254:67;:::i;:::-;-1:-1:-1;;;;;;31351:22:0;;;;;;:5;:22;;;;;;;:37;;;:22;31389:9;;:5;;:9;:::i;:::-;31351:48;;;;;;;;;;;;;;;-1:-1:-1;31351:48:0;;;31350:49;:85;;;;-1:-1:-1;31425:10:0;;;31416:19;;;-1:-1:-1;;;31425:10:0;;;;31416:19;;31350:85;31332:195;;;-1:-1:-1;;;;;31462:22:0;;;;;;31511:4;31462:22;;;;;;;;:38;;;;;:31;;:38;;;;;;:46;;:53;;-1:-1:-1;;31462:53:0;;;;;;31332:195;31601:3;;-1:-1:-1;;;;;31582:22:0;;;31601:3;;31582:22;31578:1060;;31664:27;31694:91;31731:15;31765:5;31694:18;:91::i;:::-;-1:-1:-1;;;;;31822:22:0;;;;;;;:5;:22;;;;;;;;:38;;;;;:31;;:38;;;;;:54;31664:121;;-1:-1:-1;31822:94:0;;;:54;;:94;31800:287;;-1:-1:-1;;;;;31951:22:0;;;;;;;:5;:22;;;;;;;;:60;;;;;:53;;:60;;;;;:120;;-1:-1:-1;;;;;;31951:120:0;;;;;;;;;;31800:287;-1:-1:-1;;;;;32103:22:0;;;;;;:5;:22;;;;;;;;:38;;;;;:31;;:38;;;;;:52;;:54;;;;;;:::i;:::-;;;;-1:-1:-1;;32177:169:0;;;32306:1;12278:36:1;;12308:4;12350:17;;12345:2;12330:18;;12323:45;-1:-1:-1;;;;;32177:169:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;32177:169:0;12251:18:1;32177:169:0;;;;;;;32361:61;32378:15;32395:19;32416:5;32361:16;:61::i;31578:1060::-;32474:3;;32455:46;;-1:-1:-1;;;;;32474:3:0;32479:11;32474:3;32495:5;32455:18;:46::i;:::-;32522:3;;-1:-1:-1;;;;;32522:3:0;32516:10;;;;:5;:10;;;;;;;;:26;;;;;:19;;:26;;;;;:40;;:42;;;;;;:::i;:::-;;;;-1:-1:-1;;32587:3:0;;32578:48;;;32587:3;12278:36:1;;12308:4;12350:17;;12345:2;12330:18;;12323:45;-1:-1:-1;;;;;32578:48:0;;;;32600:1;;32587:3;;;-1:-1:-1;;;;;;;;;;;32578:48:0;12251:18:1;32578:48:0;;;;;;;30539:2106;;;:::o;32653:6656::-;-1:-1:-1;;;;;32813:22:0;;;;;;:5;:22;;;;;;;;:44;;;;;;:37;;;;:44;;;;;;;;32791:125;;;;-1:-1:-1;;;32791:125:0;;12581:2:1;32791:125:0;;;12563:21:1;12620:2;12600:18;;;12593:30;12659:33;12639:18;;;12632:61;12710:18;;32791:125:0;12379:355:1;32791:125:0;-1:-1:-1;;;;;32994:22:0;;;;;;:5;:22;;;;;;;;:38;;;;;:31;;:38;;;;;;:58;:65;33075:1;-1:-1:-1;32929:3202:0;;;-1:-1:-1;;;;;33103:22:0;;;;;;;:5;:22;;;;;;;;:38;;;;;;;:31;;;;:38;;;;;:58;;:108;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33103:108:0;;;;;;;;;33398:64;;;;:143;;33231:344;;33326:1;11297:36:1;;11349:18;;;11342:45;;;;11423:17;;;;11403:18;;;11396:45;33103:22:0;;:108;-1:-1:-1;;;;;;;;;;;33231:344:0;11285:2:1;11270:18;33231:344:0;;;;;;;-1:-1:-1;;;;;33625:18:0;;;;;;;:5;:18;;;;;;;;:52;;;;;:45;;;;:52;;;;;;:104;;-1:-1:-1;;;;;;33625:104:0;;;;;;;;;;33769:3;;;;;33750:22;;33746:149;;33821:58;33840:15;33857:11;33870:1;33873:5;33821:18;:58::i;33746:149::-;-1:-1:-1;;;;;33925:22:0;;;33911:11;33925:22;;;:5;:22;;;;;;;;:56;;;;;;:49;;;;:56;;;;;:90;;;34030:10;;;;;;;;;:26;;;:19;;;:26;;;;;:47;;;;:65;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34030:65:0;;;;;;;;;;;34126:26;;:46;;:53;33925:90;;34219:8;;34218:122;;;;-1:-1:-1;;;;;;34250:10:0;;;;;;;:5;:10;;;;;;;;:26;;;;;:19;;:26;;;;;:46;:49;;:89;;;;:46;;:10;:49;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;34250:49:0;:89;34218:122;:234;;;;-1:-1:-1;;;;;;34362:10:0;;;;;;;:5;:10;;;;;;;;:26;;;;;:19;;:26;;;;;;:46;;:49;;:89;;;;:46;;:5;:49;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;34362:49:0;:89;34218:234;34196:1850;;;-1:-1:-1;;;;;34513:22:0;;;;;;:5;:22;;;;;;;;:64;;;;;:57;;:64;;;;;;:110;;:143;:148;;34487:382;;34709:43;;;34740:1;11297:36:1;;11327:4;11369:17;;11364:2;11349:18;;11342:45;34750:1:0;11403:18:1;;;11396:45;;;;-1:-1:-1;;;;;34709:43:0;;;;;;;;-1:-1:-1;;;;;;;;;;;34709:43:0;11285:2:1;11270:18;34709:43:0;;;;;;;;34196:1850;;34487:382;34806:43;;;34837:1;11297:36:1;;11327:4;11369:17;;11364:2;11349:18;;11342:45;34847:1:0;11403:18:1;;;11396:45;;;;-1:-1:-1;;;;;34806:43:0;;;;;;;;-1:-1:-1;;;;;;;;;;;34806:43:0;11285:2:1;11270:18;34806:43:0;11097:350:1;34196:1850:0;34913:3;34920:1;34913:8;:20;;;;34925:3;34932:1;34925:8;34913:20;34912:128;;;;-1:-1:-1;;;;;;34955:10:0;;;;;;;:5;:10;;;;;;;;:26;;;;;:19;;:26;;;;;:46;:49;;:85;;;;:46;;:10;:49;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;34955:49:0;:85;34912:128;34890:1156;;;-1:-1:-1;;;;;35101:22:0;;;;;;:5;:22;;;;;;;;:64;;;;;:57;;:64;;;;;;:110;;:143;:148;;35075:382;;35297:43;;;35328:1;11297:36:1;;11327:4;11369:17;;11364:2;11349:18;;11342:45;35338:1:0;11403:18:1;;;11396:45;;;;-1:-1:-1;;;;;35297:43:0;;;;;;;;-1:-1:-1;;;;;;;;;;;35297:43:0;11285:2:1;11270:18;35297:43:0;11097:350:1;35075:382:0;35394:43;;;35425:1;11297:36:1;;11327:4;11369:17;;11364:2;11349:18;;11342:45;35435:1:0;11403:18:1;;;11396:45;;;;-1:-1:-1;;;;;35394:43:0;;;;;;;;-1:-1:-1;;;;;;;;;;;35394:43:0;11285:2:1;11270:18;35394:43:0;11097:350:1;34890:1156:0;35500:3;35507:1;35500:8;:114;;;;-1:-1:-1;;;;;;35529:10:0;;;;;;;:5;:10;;;;;;;;:26;;;;;:19;;:26;;;;;;:46;;:49;;:85;;;;:46;;:5;:49;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;35529:49:0;:85;35500:114;35478:568;;;-1:-1:-1;;;;;35675:22:0;;;;;;:5;:22;;;;;;;;:64;;;;;:57;;:64;;;;;;:110;;:143;:148;;35649:382;;35871:43;;;35902:1;11297:36:1;;11327:4;11369:17;;11364:2;11349:18;;11342:45;35912:1:0;11403:18:1;;;11396:45;;;;-1:-1:-1;;;;;35871:43:0;;;;;;;;-1:-1:-1;;;;;;;;;;;35871:43:0;11285:2:1;11270:18;35871:43:0;11097:350:1;35649:382:0;35968:43;;;35999:1;11297:36:1;;11327:4;11369:17;;11364:2;11349:18;;11342:45;36009:1:0;11403:18:1;;;11396:45;35968:43:0;;-1:-1:-1;;;;;35968:43:0;;;;;;;;-1:-1:-1;;;;;;;;;;;35968:43:0;;;;11285:2:1;35968:43:0;;;35649:382;36067:52;36095:11;36108:3;36113:5;36067:27;:52::i;:::-;36060:59;;32653:6656;;;:::o;32929:3202::-;-1:-1:-1;;;;;36143:22:0;;;;;;;:5;:22;;;;;;;;:38;;;;;;:31;;;;:38;;;;;:59;;;:101;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;36143:101:0;;;;;;;36261:38;;:49;;;;:63;36257:1614;;-1:-1:-1;;;;;36490:22:0;;;;;;:5;:22;;;;;;;;:38;;;;;:31;;:38;;;;;;:58;;:109;;:58;;:5;:109;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;36364:22:0;;;;;36490:109;36364:22;;;;;;;:38;;;;;:31;;:38;;;;;;:58;;;:101;;36490:109;;;;;36364:58;;:101;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;36364:101:0;:235;36363:414;;;;-1:-1:-1;;;;;;36727:22:0;;;;;;;:5;:22;;;;;;;;:38;;;;;:31;;:38;;;;;:49;;;;36622:58;;:101;;36727:49;;;;;36622:58;36727:22;36622:101;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;36622:101:0;:154;36363:414;36341:1519;;;36812:51;36821:11;36834:15;36851:5;36858:4;36812:8;:51::i;:::-;36910:162;36964:11;37002:15;37044:5;36910:27;:162::i;36341:1519::-;-1:-1:-1;;;;;37198:22:0;;;;;;;:5;:22;;;;;;;;:38;;;;;:31;;:38;;;;;:49;;;;37116:58;;:61;;37198:49;;;;;37116:58;37198:22;37116:61;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;37116:61:0;:131;37094:766;;37282:51;37291:11;37304:15;37321:5;37328:4;37282:8;:51::i;37094:766::-;37583:52;37592:11;37605:15;37622:5;37629;37583:8;:52::i;37094:766::-;-1:-1:-1;;;;;37904:22:0;;;;;;;:5;:22;;;;;;;;:38;;;;;:31;;:38;;;;;;:58;;:61;;:89;;;;:58;;:5;:61;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;37904:61:0;:89;37886:771;;38020:52;38029:11;38042:15;38059:5;38066;38020:8;:52::i;37886:771::-;-1:-1:-1;;;;;38293:22:0;;;;;;;:5;:22;;;;;;;;:38;;;;;:31;;:38;;;;;:58;:61;;:89;;;;:58;;:22;:61;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;38293:61:0;:89;38275:382;;38409:51;38418:11;38431:15;38448:5;38455:4;38409:8;:51::i;38275:382::-;-1:-1:-1;;;;;38891:22:0;;38885:68;38891:22;;;38885:5;38891:22;;;;;;;;:38;;;;;:31;;:38;;;;;:58;;:61;;38885:5;;:68;:5;;38891:61;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38891:61:0;;;38885:68;;;;;;;;;;;;;;;:102;;;;;;:95;;;;:102;;;;;38891:61;38885:140;;;:165;38709:22;;;;;;;;;;;:38;;;:31;;:38;;;;;;:58;;:61;;38891;;38709;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38709:61:0;38703:68;;;;;;;;;;;;;;;:102;;;;;:95;;:102;;;;;38709:61;38703:140;:165;:347;38669:556;;39077:52;39086:11;39099:15;39116:5;39123;39077:8;:52::i;:::-;38669:556;;;39162:51;39171:11;39184:15;39201:5;39208:4;39162:8;:51::i;26730:2282::-;-1:-1:-1;;;;;47198:11:0;;47173:4;47198:11;;;:5;:11;;;;;:14;26855:111;;;;-1:-1:-1;;;26855:111:0;;14888:2:1;26855:111:0;;;14870:21:1;14927:2;14907:18;;;14900:30;14966:34;14946:18;;;14939:62;-1:-1:-1;;;15017:18:1;;;15010:33;15060:19;;26855:111:0;14686:399:1;26855:111:0;26985:6;:11;;26995:1;26985:11;:26;;;;27000:6;:11;;27010:1;27000:11;26985:26;26977:53;;;;-1:-1:-1;;;26977:53:0;;15292:2:1;26977:53:0;;;15274:21:1;15331:2;15311:18;;;15304:30;-1:-1:-1;;;15350:18:1;;;15343:44;15404:18;;26977:53:0;15090:338:1;26977:53:0;27059:1;27051:5;:9;;;:32;;;;-1:-1:-1;27073:10:0;;;-1:-1:-1;;;27073:10:0;;;;;27064:19;;;;;27051:32;27043:58;;;;-1:-1:-1;;;27043:58:0;;15635:2:1;27043:58:0;;;15617:21:1;15674:2;15654:18;;;15647:30;-1:-1:-1;;;15693:18:1;;;15686:43;15746:18;;27043:58:0;15433:337:1;27043:58:0;27209:17;;;;;;;:10;:17;;;;;;27112:12;;:125;;-1:-1:-1;;;;;27112:12:0;;;;27156:10;;27189:4;;27112:29;:125::i;:::-;27290:11;;27337:10;;27317:17;;;27290:11;27317:17;;;:10;:17;;;;;;27250:118;;-1:-1:-1;;;;;27290:11:0;;27351:6;;27317:30;;27337:10;27317:30;:::i;27250:118::-;27385:6;:11;;27395:1;27385:11;27381:1624;;-1:-1:-1;;;;;27439:19:0;;;;;;:5;:19;;;;;;;:34;;;:19;27474:9;;:5;:9;:::i;:::-;27439:45;;;;;;;;;;;;;;;-1:-1:-1;27439:45:0;;;27413:131;;;;-1:-1:-1;;;27413:131:0;;15977:2:1;27413:131:0;;;15959:21:1;16016:2;15996:18;;;15989:30;-1:-1:-1;;;16035:18:1;;;16028:54;16099:18;;27413:131:0;15775:348:1;27413:131:0;-1:-1:-1;;;;;27586:19:0;;;;;;:5;:19;;;;;;;;:41;;;;;;:34;;;;:41;;;;;;;;27585:42;27559:127;;;;-1:-1:-1;;;27559:127:0;;16330:2:1;27559:127:0;;;16312:21:1;16369:2;16349:18;;;16342:30;-1:-1:-1;;;16388:18:1;;;16381:53;16451:18;;27559:127:0;16128:347:1;27559:127:0;-1:-1:-1;;;;;27707:19:0;;;;;;:5;:19;;;;;;;:28;;;:19;27736:9;;:5;:9;:::i;:::-;27707:39;;;;;;;;;;;;;;;-1:-1:-1;27707:39:0;:47;;;;27703:143;;;-1:-1:-1;;;;;27775:19:0;;27825:5;27775:19;;;:5;:19;;;;;;;:28;;;27825:5;;27804:9;;:5;:9;:::i;:::-;27775:39;;;;;;;;;;;;;-1:-1:-1;27775:39:0;:47;;:55;;-1:-1:-1;;27775:55:0;;;;;;;;;;27703:143;27862:22;27887:39;27906:12;27920:5;27887:18;:39::i;:::-;-1:-1:-1;;;;;27941:19:0;;;;;;;:5;:19;;;;;;;;:53;;;;;:46;;;:53;;;;;:104;;-1:-1:-1;;;;;;27941:104:0;;;;;;;;;;;28060:34;;;;:41;;;;;:48;;-1:-1:-1;;28060:48:0;;;;;;27941:104;-1:-1:-1;28123:53:0;27941:19;:104;:53;28123:16;:53::i;:::-;28198:47;;;28236:1;12278:36:1;;12308:4;12350:17;;12345:2;12330:18;;12323:45;-1:-1:-1;;;;;28198:47:0;;;;;;;;;;12251:18:1;28198:47:0;;;;;;;;27398:859;22471:1:::2;22698::::1;25825:233:::0;:::o;27381:1624::-;-1:-1:-1;;;;;28304:19:0;;;;;;:5;:19;;;;;;;:34;;;:19;28339:9;;:5;:9;:::i;:::-;28304:45;;;;;;;;;;;;;;;-1:-1:-1;28304:45:0;;;28278:131;;;;-1:-1:-1;;;28278:131:0;;15977:2:1;28278:131:0;;;15959:21:1;16016:2;15996:18;;;15989:30;-1:-1:-1;;;16035:18:1;;;16028:54;16099:18;;28278:131:0;15775:348:1;28278:131:0;-1:-1:-1;;;;;28451:19:0;;;;;;:5;:19;;;;;;;;:41;;;;;;:34;;;;:41;;;;;;;;28450:42;28424:127;;;;-1:-1:-1;;;28424:127:0;;16330:2:1;28424:127:0;;;16312:21:1;16369:2;16349:18;;;16342:30;-1:-1:-1;;;16388:18:1;;;16381:53;16451:18;;28424:127:0;16128:347:1;28424:127:0;-1:-1:-1;;;;;28572:19:0;;;;;;:5;:19;;;;;;;:28;;;:19;28601:9;;:5;:9;:::i;:::-;28572:39;;;;;;;;;;;;;;;-1:-1:-1;28572:39:0;:47;;;;28568:143;;;-1:-1:-1;;;;;28640:19:0;;28690:5;28640:19;;;:5;:19;;;;;;;:28;;;28690:5;;28669:9;;:5;:9;:::i;:::-;28640:39;;;;;;;;;;;;;-1:-1:-1;28640:39:0;:47;;:55;;-1:-1:-1;;28640:55:0;;;;;;;;;;28568:143;28727:22;28752:39;28771:12;28785:5;28752:18;:39::i;:::-;-1:-1:-1;;;;;28808:19:0;;;;;;28852:4;28808:19;;;;;;;;:41;;;;;:34;;:41;;;;;;:48;;-1:-1:-1;;28808:48:0;;;;;;28727:64;-1:-1:-1;28871:53:0;28814:12;28727:64;28843:5;28871:16;:53::i;:::-;28946:47;;;28984:1;12278:36:1;;12308:4;12350:17;;12345:2;12330:18;;12323:45;-1:-1:-1;;;;;28946:47:0;;;;;;;;;;12251:18:1;28946:47:0;12102:272:1;18349:860:0;18773:23;18799:106;18841:4;18799:106;;;;;;;;;;;;;;;;;18807:5;-1:-1:-1;;;;;18799:27:0;;;:106;;;;;:::i;:::-;18920:17;;18773:132;;-1:-1:-1;18920:21:0;18916:286;;19093:10;19082:30;;;;;;;;;;;;:::i;:::-;19056:134;;;;-1:-1:-1;;;19056:134:0;;16959:2:1;19056:134:0;;;16941:21:1;16998:2;16978:18;;;16971:30;17037:34;17017:18;;;17010:62;-1:-1:-1;;;17088:18:1;;;17081:40;17138:19;;19056:134:0;16757:406:1;48398:566:0;48552:16;48570:21;48595:115;48627:11;48653:5;48673:6;48694:5;48595:17;:115::i;:::-;48551:159;;;;48721:116;48761:8;48820:6;48805:11;;48785:10;:17;48796:5;48785:17;;;;;;;;;;;;;;;;:31;;;;:::i;48721:116::-;48854:16;48850:107;;;48892:53;;;12308:4:1;12296:17;;;12278:36;;12350:17;;12345:2;12330:18;;12323:45;-1:-1:-1;;;;;48892:53:0;;;;;;;;;;12251:18:1;48892:53:0;;;;;;;48540:424;;48398:566;;;;:::o;42239:2323::-;-1:-1:-1;;;;;42406:22:0;;;;;;:5;:22;;;;;;;;:38;;;;;:31;;:38;;;;;:59;;:66;42488:1;-1:-1:-1;42388:205:0;;;42523:58;42542:15;42559:11;42572:1;42575:5;42523:18;:58::i;42388:205::-;-1:-1:-1;;;;;42647:22:0;;;42605:19;42647:22;;;42627:5;42647:22;;;;;;;;:38;;;;;;:31;;;;:38;;;;;:54;;;;42627:85;;;;;;;;:101;;;:94;;;;:101;;;;;:121;;;42605:143;;;;;;;;;;;;;;;;;:19;;:143;42627:121;;42605:143;;42627:121;42605:143;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42605:143:0;;;;;;;;;;;;;;;;;;;;;;;42799:2;:9;42812:1;42799:14;42795:576;;42843:15;-1:-1:-1;;;;;42834:24:0;:2;42837:1;42834:5;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;42834:24:0;;:52;;;;42871:15;-1:-1:-1;;;;;42862:24:0;:2;42865:1;42862:5;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;42862:24:0;;42834:52;42830:530;;;-1:-1:-1;;;;;42913:22:0;;;42907:61;42913:22;;;42907:5;42913:22;;;;;;;;:38;;;;;;:31;;;;:38;;;;;:54;;;;42907:61;;;;;;;;:99;;;:92;;;;:99;;;;;;:132;;:150;;-1:-1:-1;;;;;;42907:150:0;;;;;;42830:530;;;43083:2;:9;43096:1;43083:14;43079:281;;43131:15;-1:-1:-1;;;;;43122:24:0;:2;43125:1;43122:5;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;43122:24:0;;43118:227;;-1:-1:-1;;;;;43203:22:0;;;43171:109;43203:22;;;43171:5;43203:22;;;;;;;;:38;;;;;;:31;;;;:38;;;;;:54;;;;43171:109;;;;;;;;:125;;;:118;;;;:125;;;;;;:136;;:154;;-1:-1:-1;;;;;;43171:154:0;;;;;;43118:227;43472:16;;;43486:1;43472:16;;;;;;;;;;-1:-1:-1;;;;;43383:22:0;;;;:5;:22;;;;;;:52;;;;;:45;;:52;;;;;;;:105;;;;:86;;;;;43472:16;43383:105;:::i;:::-;-1:-1:-1;43589:16:0;;;43603:1;43589:16;;;;;;;;;;-1:-1:-1;;;;;43499:22:0;;;;:5;:22;;;;;:52;;;;;:45;;:52;;;;;;:106;;;;:87;;;;;43589:16;43499:106;:::i;:::-;-1:-1:-1;;;;;;43616:22:0;;43676:1;43616:22;;;:5;:22;;;;;;;;:38;;;;;:31;;;:38;;;;;:49;;:62;;-1:-1:-1;;;;;;43616:62:0;;;43710:22;;;;;;:37;;;;;43748:9;;43648:5;;43748:9;:::i;:::-;43710:48;;;;;;;;;;;;;;;-1:-1:-1;43710:48:0;;;43709:49;:85;;;;-1:-1:-1;43784:10:0;;;43775:19;;;-1:-1:-1;;;43784:10:0;;;;43775:19;;43709:85;43691:195;;;-1:-1:-1;;;;;43821:22:0;;;;;;43870:4;43821:22;;;;;;;;:38;;;;;:31;;:38;;;;;;:46;;:53;;-1:-1:-1;;43821:53:0;;;;;;43691:195;-1:-1:-1;;;;;43898:22:0;;;;;;:5;:22;;;;;;;;:38;;;;;:31;;:38;;;;;:52;;:54;;;;;;:::i;:::-;;;;-1:-1:-1;;43988:3:0;;-1:-1:-1;;;;;43969:22:0;;;43988:3;;43969:22;43965:590;;44008:27;44038:91;44075:15;44109:5;44038:18;:91::i;:::-;44151:169;;;44280:1;12278:36:1;;12308:4;12350:17;;12345:2;12330:18;;12323:45;44008:121:0;;-1:-1:-1;;;;;;44151:169:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;44151:169:0;12251:18:1;44151:169:0;;;;;;;44335:61;44352:15;44369:19;44390:5;44335:16;:61::i;:::-;43993:415;43965:590;;;44443:3;;44434:48;;;44473:1;12278:36:1;;12308:4;12350:17;;12345:2;12330:18;;12323:45;-1:-1:-1;;;;;44434:48:0;;;;44456:1;;44443:3;;;-1:-1:-1;;;;;;;;;;;44434:48:0;12251:18:1;44434:48:0;;;;;;;44516:3;;44497:46;;-1:-1:-1;;;;;44516:3:0;44521:11;44534:1;44537:5;44497:18;:46::i;39317:2914::-;39470:2;39465:2759;;-1:-1:-1;;;;;39495:22:0;;39489:68;39495:22;;;39489:5;39495:22;;;;;;;;:38;;;;;:31;;:38;;;;;:58;;:61;;39489:5;;:68;;;39495:61;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;39495:61:0;;;39489:68;;;;;;;;;;;;;;;:102;;;;;;:95;;;;:102;;;;;39495:61;39489:140;;;:176;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39489:176:0;;;;;;;39746:22;;;;;;;;;;;:38;;;:31;:38;;;;;:58;;;:61;;:58;;39495:61;39746;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39930:22:0;;;;;39746:61;39930:22;;;;;;;:68;;;;;:61;;:68;;;;;;:118;;:121;;39746:61;;;;39685:466;;;;-1:-1:-1;;;;;;;;;;;39685:466:0;39826:1;;39846:5;;39746:61;;;;39930:121;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;39930:121:0;39898:176;;;;;;;;;;;;;;;:192;;;;;;:185;;;;:192;;;;;;39930:121;39898:212;:219;39685:466;;11315:17:1;;;11297:36;;11369:17;;;11349:18;;;11342:45;;;;11423:17;;11403:18;;;11396:45;11285:2;11270:18;39685:466:0;;;;;;;-1:-1:-1;;;;;40171:469:0;;;40367:192;40403:22;;;40367:5;40403:22;;;;;;;;:72;;;;;:65;;:72;;;;;:126;;:129;;40171:469;;;;;-1:-1:-1;;;;;;;;;;;40171:469:0;40266:1;;40286:5;;40367;;:192;;40403:129;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40403:129:0;40367:192;;;;;;;;;;;;;;;:208;;;;;:201;;:208;;;;;40403:129;40367:228;:235;40310:315;;:1;:315;:::i;:::-;40171:469;;;11327:4:1;11315:17;;;11297:36;;11369:17;;;11364:2;11349:18;;11342:45;11423:17;;11403:18;;;11396:45;40171:469:0;;;;;;11285:2:1;40171:469:0;;;-1:-1:-1;;;;;40741:54:0;;;;;;:5;:54;;;;;;;;:70;;;;;:63;;:70;;;;;:90;:93;;:90;;:54;:93;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40688:18:0;;;;;40741:93;40688:18;;;;;;:34;;;;;:27;;:34;;;;;;;:146;;-1:-1:-1;;;;;;40688:146:0;40741:93;;;;40688:146;;;39465:2759;;;-1:-1:-1;;;;;40873:22:0;;40867:68;40873:22;;;40867:5;40873:22;;;;;;;;:38;;;;;:31;;:38;;;;;:58;;:61;;40867:5;;:68;:5;;40873:61;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;40873:61:0;;;40867:68;;;;;;;;;;;;;;;:102;;;;;;:95;;;;:102;;;;;40873:61;40867:140;;;:176;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40867:176:0;;;;;;;41124:22;;;;;;;;;;;:38;;;:31;:38;;;:58;;:61;;:58;;40873:61;41124;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41308:22:0;;;;;41124:61;41308:22;;;;;;;:68;;;;;:61;;:68;;;;;;:118;;:121;;41124:61;;;;41063:466;;;;-1:-1:-1;;;;;;;;;;;41063:466:0;41204:1;;41224:5;;41124:61;;;;41308:121;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;41308:121:0;41276:176;;;;;;;;;;;;;;;:192;;;;;;:185;;;;:192;;;;;;41308:121;41276:212;:219;41063:466;;11315:17:1;;;11297:36;;11369:17;;;11349:18;;;11342:45;;;;11423:17;;11403:18;;;11396:45;11285:2;11270:18;41063:466:0;;;;;;;-1:-1:-1;;;;;41549:469:0;;;41745:192;41781:22;;;41745:5;41781:22;;;;;;;;:72;;;;;:65;;:72;;;;;:126;;:129;;41549:469;;;;;-1:-1:-1;;;;;;;;;;;41549:469:0;41644:1;;41664:5;;41745;;;;41781:129;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;41781:129:0;41745:192;;;;;;;;;;;;;;;:208;;;;;:201;;:208;;;;;41781:129;41745:228;:235;41688:315;;:1;:315;:::i;:::-;41549:469;;;11327:4:1;11315:17;;;11297:36;;11369:17;;;11364:2;11349:18;;11342:45;11423:17;;11403:18;;;11396:45;41549:469:0;;;;;;11285:2:1;41549:469:0;;;-1:-1:-1;;;;;42119:54:0;;;;;;:5;:54;;;;;;;;:70;;;;;:63;;:70;;;;;;:90;;:93;;:90;;:5;:93;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42066:18:0;;;;;42119:93;42066:18;;;;;;:34;;;;;:27;;:34;;;;;;;:146;;-1:-1:-1;;;;;;42066:146:0;42119:93;;;;42066:146;;;39317:2914;;;;:::o;12242:230::-;12379:12;12411:53;12434:6;12442:4;12448:1;12451:12;12411:22;:53::i;:::-;12404:60;12242:230;-1:-1:-1;;;;12242:230:0:o;47234:1156::-;47384:7;;47429:11;47384:7;47487:11;;;47497:1;47487:11;47483:863;;47515:394;-1:-1:-1;;;;;47551:15:0;;;;;;:5;:15;;;;;;;;:31;;;;;;:24;;;;:31;;;;;;:39;;;;47547:347;;;47620:43;;;47654:1;12278:36:1;;12308:4;12350:17;;12345:2;12330:18;;12323:45;-1:-1:-1;;;;;47620:43:0;;;;;;;;;;12251:18:1;47620:43:0;;;;;;;-1:-1:-1;;;;;;47743:15:0;;;;;;;47705:4;47743:15;;;;;;;;:31;;;;;:24;;:31;;;;;;:47;;;;;47515:394;;47547:347;47847:8;;-1:-1:-1;47857:16:0;-1:-1:-1;47839:35:0;;47483:863;-1:-1:-1;;;;;47977:15:0;;;;;;:5;:15;;;;;;;;:31;;;;;;:24;;;;:31;;;;;;:39;;;;47973:347;;;48046:43;;;48080:1;12278:36:1;;12308:4;12350:17;;12345:2;12330:18;;12323:45;-1:-1:-1;;;;;48046:43:0;;;;;;;;;;12251:18:1;48046:43:0;;;;;;;-1:-1:-1;;;;;;48169:15:0;;;;;;;48131:4;48169:15;;;;;;;;:31;;;;;:24;;:31;;;;;;:47;;;;;47941:394;;47234:1156;;;;;;;;:::o;13863:1044::-;14036:12;9585:20;;14061:60;;;;-1:-1:-1;;;14061:60:0;;17637:2:1;14061:60:0;;;17619:21:1;17676:2;17656:18;;;17649:30;17715:31;17695:18;;;17688:59;17764:18;;14061:60:0;17435:353:1;14061:60:0;14195:12;14209:23;14236:6;-1:-1:-1;;;;;14236:11:0;14255:8;14279:4;14236:58;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14194:100;;;;14309:7;14305:595;;;14340:10;-1:-1:-1;14333:17:0;;-1:-1:-1;14333:17:0;14305:595;14454:17;;:21;14450:439;;14717:10;14711:17;14778:15;14765:10;14761:2;14757:19;14750:44;14450:439;14860:12;14853:20;;-1:-1:-1;;;14853:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:156;216:20;;276:4;265:16;;255:27;;245:55;;296:1;293;286:12;245:55;150:156;;;:::o;311:317::-;377:6;385;438:2;426:9;417:7;413:23;409:32;406:52;;;454:1;451;444:12;406:52;493:9;480:23;512:31;537:5;512:31;:::i;:::-;562:5;-1:-1:-1;586:36:1;618:2;603:18;;586:36;:::i;:::-;576:46;;311:317;;;;;:::o;825:543::-;916:6;924;932;985:2;973:9;964:7;960:23;956:32;953:52;;;1001:1;998;991:12;953:52;1040:9;1027:23;1059:31;1084:5;1059:31;:::i;:::-;1109:5;-1:-1:-1;1166:2:1;1151:18;;1138:32;1179:33;1138:32;1179:33;:::i;:::-;1231:7;-1:-1:-1;1290:2:1;1275:18;;1262:32;1303:33;1262:32;1303:33;:::i;:::-;1355:7;1345:17;;;825:543;;;;;:::o;1373:247::-;1432:6;1485:2;1473:9;1464:7;1460:23;1456:32;1453:52;;;1501:1;1498;1491:12;1453:52;1540:9;1527:23;1559:31;1584:5;1559:31;:::i;:::-;1609:5;1373:247;-1:-1:-1;;;1373:247:1:o;1996:180::-;2055:6;2108:2;2096:9;2087:7;2083:23;2079:32;2076:52;;;2124:1;2121;2114:12;2076:52;-1:-1:-1;2147:23:1;;1996:180;-1:-1:-1;1996:180:1:o;2389:388::-;2457:6;2465;2518:2;2506:9;2497:7;2493:23;2489:32;2486:52;;;2534:1;2531;2524:12;2486:52;2573:9;2560:23;2592:31;2617:5;2592:31;:::i;:::-;2642:5;-1:-1:-1;2699:2:1;2684:18;;2671:32;2712:33;2671:32;2712:33;:::i;:::-;2764:7;2754:17;;;2389:388;;;;;:::o;2782:248::-;2850:6;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:52;;;2927:1;2924;2917:12;2879:52;-1:-1:-1;;2950:23:1;;;3020:2;3005:18;;;2992:32;;-1:-1:-1;2782:248:1:o;3035:461::-;3088:3;3126:5;3120:12;3153:6;3148:3;3141:19;3179:4;3208:2;3203:3;3199:12;3192:19;;3245:2;3238:5;3234:14;3266:1;3276:195;3290:6;3287:1;3284:13;3276:195;;;3355:13;;-1:-1:-1;;;;;3351:39:1;3339:52;;3411:12;;;;3446:15;;;;3387:1;3305:9;3276:195;;;-1:-1:-1;3487:3:1;;3035:461;-1:-1:-1;;;;;3035:461:1:o;3501:439::-;-1:-1:-1;;;;;3730:32:1;;3712:51;;3799:2;3794;3779:18;;3772:30;;;-1:-1:-1;;3819:56:1;;3856:18;;3848:6;3819:56;:::i;:::-;3811:64;;3925:6;3918:14;3911:22;3906:2;3895:9;3891:18;3884:50;3501:439;;;;;;:::o;3945:747::-;4243:4;4289:1;4285;4280:3;4276:11;4272:19;4330:2;4322:6;4318:15;4307:9;4300:34;4370:3;4365:2;4354:9;4350:18;4343:31;4397:57;4449:3;4438:9;4434:19;4426:6;4397:57;:::i;:::-;4502:9;4494:6;4490:22;4485:2;4474:9;4470:18;4463:50;4530:44;4567:6;4559;4530:44;:::i;:::-;4617:14;;4610:22;4605:2;4590:18;;4583:50;-1:-1:-1;4670:15:1;;;;4664:3;4649:19;;;4642:44;-1:-1:-1;4522:52:1;3945:747;-1:-1:-1;;;3945:747:1:o;5047:387::-;5120:6;5128;5136;5189:2;5177:9;5168:7;5164:23;5160:32;5157:52;;;5205:1;5202;5195:12;5157:52;5244:9;5231:23;5263:31;5288:5;5263:31;:::i;:::-;5313:5;-1:-1:-1;5337:36:1;5369:2;5354:18;;5337:36;:::i;:::-;5327:46;;5392:36;5424:2;5413:9;5409:18;5392:36;:::i;:::-;5382:46;;5047:387;;;;;:::o;5439:252::-;5503:6;5511;5564:2;5552:9;5543:7;5539:23;5535:32;5532:52;;;5580:1;5577;5570:12;5532:52;5603:27;5620:9;5603:27;:::i;5918:182::-;5975:6;6028:2;6016:9;6007:7;6003:23;5999:32;5996:52;;;6044:1;6041;6034:12;5996:52;6067:27;6084:9;6067:27;:::i;6793:127::-;6854:10;6849:3;6845:20;6842:1;6835:31;6885:4;6882:1;6875:15;6909:4;6906:1;6899:15;6925:168;6998:9;;;7029;;7046:15;;;7040:22;;7026:37;7016:71;;7067:18;;:::i;7098:135::-;7137:3;7158:17;;;7155:43;;7178:18;;:::i;:::-;-1:-1:-1;7225:1:1;7214:13;;7098:135::o;7238:217::-;7278:1;7304;7294:132;;7348:10;7343:3;7339:20;7336:1;7329:31;7383:4;7380:1;7373:15;7411:4;7408:1;7401:15;7294:132;-1:-1:-1;7440:9:1;;7238:217::o;7460:332::-;7662:2;7644:21;;;7701:1;7681:18;;;7674:29;-1:-1:-1;;;7734:2:1;7719:18;;7712:39;7783:2;7768:18;;7460:332::o;7797:151::-;7887:4;7880:12;;;7866;;;7862:31;;7905:14;;7902:40;;;7922:18;;:::i;7953:175::-;7990:3;8034:4;8027:5;8023:16;8063:4;8054:7;8051:17;8048:43;;8071:18;;:::i;:::-;8120:1;8107:15;;7953:175;-1:-1:-1;;7953:175:1:o;8133:325::-;8335:2;8317:21;;;8374:1;8354:18;;;8347:29;-1:-1:-1;;;8407:2:1;8392:18;;8385:32;8449:2;8434:18;;8133:325::o;8463:351::-;8665:2;8647:21;;;8704:2;8684:18;;;8677:30;8743:29;8738:2;8723:18;;8716:57;8805:2;8790:18;;8463:351::o;9450:125::-;9515:9;;;9536:10;;;9533:36;;;9549:18;;:::i;10246:184::-;10316:6;10369:2;10357:9;10348:7;10344:23;10340:32;10337:52;;;10385:1;10382;10375:12;10337:52;-1:-1:-1;10408:16:1;;10246:184;-1:-1:-1;10246:184:1:o;10435:277::-;10502:6;10555:2;10543:9;10534:7;10530:23;10526:32;10523:52;;;10571:1;10568;10561:12;10523:52;10603:9;10597:16;10656:5;10649:13;10642:21;10635:5;10632:32;10622:60;;10678:1;10675;10668:12;11949:148;12037:4;12016:12;;;12030;;;12012:31;;12055:13;;12052:39;;;12071:18;;:::i;13094:127::-;13155:10;13150:3;13146:20;13143:1;13136:31;13186:4;13183:1;13176:15;13210:4;13207:1;13200:15;17793:250;17878:1;17888:113;17902:6;17899:1;17896:13;17888:113;;;17978:11;;;17972:18;17959:11;;;17952:39;17924:2;17917:10;17888:113;;;-1:-1:-1;;18035:1:1;18017:16;;18010:27;17793:250::o;18048:287::-;18177:3;18215:6;18209:13;18231:66;18290:6;18285:3;18278:4;18270:6;18266:17;18231:66;:::i;:::-;18313:16;;;;;18048:287;-1:-1:-1;;18048:287:1:o;18340:396::-;18489:2;18478:9;18471:21;18452:4;18521:6;18515:13;18564:6;18559:2;18548:9;18544:18;18537:34;18580:79;18652:6;18647:2;18636:9;18632:18;18627:2;18619:6;18615:15;18580:79;:::i;:::-;18720:2;18699:15;-1:-1:-1;;18695:29:1;18680:45;;;;18727:2;18676:54;;18340:396;-1:-1:-1;;18340:396:1:o
Swarm Source
ipfs://20a4ad5c42a5adc06a2dfe2000f37baafa0213724b19f65994d9c66122970c4f
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.