More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 42,447 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Token | 19572796 | 298 days ago | IN | 0 ETH | 0.00609182 | ||||
Withdraw Token | 19572794 | 298 days ago | IN | 0 ETH | 0.00864188 | ||||
Withdraw Token | 19410348 | 321 days ago | IN | 0 ETH | 0.0059601 | ||||
Withdraw Token | 19410348 | 321 days ago | IN | 0 ETH | 0.0059614 | ||||
Withdraw Token | 19410348 | 321 days ago | IN | 0 ETH | 0.00672709 | ||||
Withdraw Token | 19410348 | 321 days ago | IN | 0 ETH | 0.00609238 | ||||
Withdraw Token | 19410348 | 321 days ago | IN | 0 ETH | 0.00729135 | ||||
Withdraw Token | 19410348 | 321 days ago | IN | 0 ETH | 0.00672352 | ||||
Withdraw Token | 19410348 | 321 days ago | IN | 0 ETH | 0.0078476 | ||||
Withdraw Token | 19410348 | 321 days ago | IN | 0 ETH | 0.00684588 | ||||
Withdraw Token | 19410348 | 321 days ago | IN | 0 ETH | 0.00608036 | ||||
Withdraw Token | 19410337 | 321 days ago | IN | 0 ETH | 0.0086412 | ||||
Withdraw Token | 19410337 | 321 days ago | IN | 0 ETH | 0.00864052 | ||||
Withdraw Token | 19410337 | 321 days ago | IN | 0 ETH | 0.00864052 | ||||
Withdraw Token | 19410337 | 321 days ago | IN | 0 ETH | 0.0086412 | ||||
Withdraw Token | 19410337 | 321 days ago | IN | 0 ETH | 0.0086412 | ||||
Withdraw Token | 19410337 | 321 days ago | IN | 0 ETH | 0.00863984 | ||||
Withdraw Token | 19410337 | 321 days ago | IN | 0 ETH | 0.00864052 | ||||
Withdraw Token | 19410337 | 321 days ago | IN | 0 ETH | 0.00864052 | ||||
Withdraw Token | 19410337 | 321 days ago | IN | 0 ETH | 0.0086412 | ||||
Withdraw Token | 19410319 | 321 days ago | IN | 0 ETH | 0.00601847 | ||||
Withdraw Token | 19410319 | 321 days ago | IN | 0 ETH | 0.0086412 | ||||
Withdraw Token | 19375307 | 326 days ago | IN | 0 ETH | 0.00594529 | ||||
Withdraw Token | 19375307 | 326 days ago | IN | 0 ETH | 0.0086412 | ||||
Withdraw Token | 19375307 | 326 days ago | IN | 0 ETH | 0.00707051 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18626540 | 431 days ago | 10,145 ETH | ||||
18590579 | 436 days ago | 83 ETH | ||||
18574934 | 438 days ago | 15 ETH | ||||
18553273 | 441 days ago | 15 ETH | ||||
18541640 | 443 days ago | 21 ETH | ||||
18535253 | 444 days ago | 10 ETH | ||||
18532590 | 444 days ago | 133 ETH | ||||
18433014 | 458 days ago | 10 ETH | ||||
18431622 | 458 days ago | 10 ETH | ||||
18417223 | 460 days ago | 16 ETH | ||||
18416060 | 461 days ago | 10 ETH | ||||
18411813 | 461 days ago | 10 ETH | ||||
18388065 | 465 days ago | 30 ETH | ||||
18369005 | 467 days ago | 476 ETH | ||||
18368968 | 467 days ago | 13 ETH | ||||
18119347 | 502 days ago | 13 ETH | ||||
18088587 | 506 days ago | 63 ETH | ||||
17975605 | 522 days ago | 21 ETH | ||||
17950064 | 526 days ago | 308 ETH | ||||
17950019 | 526 days ago | 200 ETH | ||||
17949943 | 526 days ago | 100 ETH | ||||
17949919 | 526 days ago | 10 ETH | ||||
17877724 | 536 days ago | 102 ETH | ||||
17870756 | 537 days ago | 53 ETH | ||||
17864049 | 538 days ago | 22 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Bridge
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-28 */ // Sources flattened with hardhat v2.0.7 https://hardhat.org // File @openzeppelin/contracts/math/[email protected] // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @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; } } // File @openzeppelin/contracts/GSN/[email protected] pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor () internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File contracts/Container.sol pragma solidity ^0.7.0; contract Container { struct Item{ uint256 itemType; uint256 status; address[] addresses; } uint256 MaxItemAdressNum = 255; mapping (bytes32 => Item) private container; // bool private _nativePaused = false; function itemAddressExists(bytes32 _id, address _oneAddress) internal view returns(bool){ for(uint256 i = 0; i < container[_id].addresses.length; i++){ if(container[_id].addresses[i] == _oneAddress) return true; } return false; } function getItemAddresses(bytes32 _id) internal view returns(address[] memory){ return container[_id].addresses; } function getItemInfo(bytes32 _id) internal view returns(uint256, uint256, uint256){ return (container[_id].itemType, container[_id].status, container[_id].addresses.length); } function getItemAddressCount(bytes32 _id) internal view returns(uint256){ return container[_id].addresses.length; } function setItemInfo(bytes32 _id, uint256 _itemType, uint256 _status) internal{ container[_id].itemType = _itemType; container[_id].status = _status; } function addItemAddress(bytes32 _id, address _oneAddress) internal{ require(!itemAddressExists(_id, _oneAddress), "dup address added"); require(container[_id].addresses.length < MaxItemAdressNum, "too many addresses"); container[_id].addresses.push(_oneAddress); } function removeItemAddresses(bytes32 _id) internal { delete container[_id].addresses; } function removeOneItemAddress(bytes32 _id, address _oneAddress) internal { for(uint256 i = 0; i < container[_id].addresses.length; i++){ if(container[_id].addresses[i] == _oneAddress){ container[_id].addresses[i] = container[_id].addresses[container[_id].addresses.length - 1]; container[_id].addresses.pop(); return; } } } function removeItem(bytes32 _id) internal{ delete container[_id]; } function replaceItemAddress(bytes32 _id, address _oneAddress, address _anotherAddress) internal { for(uint256 i = 0; i < container[_id].addresses.length; i++){ if(container[_id].addresses[i] == _oneAddress){ container[_id].addresses[i] = _anotherAddress; return; } } } } // File contracts/BridgeStorage.sol pragma solidity ^0.7.0; contract BridgeStorage is Container { string public constant name = "BridgeStorage"; address private caller; constructor(address aCaller) { caller = aCaller; } modifier onlyCaller() { require(msg.sender == caller, "only use main contract to call"); _; } function supporterExists(bytes32 taskHash, address user) public view returns(bool) { return itemAddressExists(taskHash, user); } function setTaskInfo(bytes32 taskHash, uint256 taskType, uint256 status) external onlyCaller { setItemInfo(taskHash, taskType, status); } function getTaskInfo(bytes32 taskHash) public view returns(uint256, uint256, uint256){ return getItemInfo(taskHash); } function addSupporter(bytes32 taskHash, address oneAddress) external onlyCaller{ addItemAddress(taskHash, oneAddress); } function removeAllSupporter(bytes32 taskHash) external onlyCaller { removeItemAddresses(taskHash); } function removeTask(bytes32 taskHash)external onlyCaller{ removeItem(taskHash); } } // File contracts/BridgeAdmin.sol pragma solidity ^0.7.0; contract BridgeAdmin is Container { bytes32 internal constant OWNERHASH = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0; bytes32 internal constant OPERATORHASH = 0x46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622; bytes32 internal constant PAUSERHASH = 0x0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f; bytes32 internal constant STOREHASH = 0xe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd1680; bytes32 internal constant LOGICHASH = 0x397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f182; uint256 internal constant MAXUSERNUM = 255; bytes32[] private classHashArray; uint256 internal ownerRequireNum; uint256 internal operatorRequireNum; event AdminChanged(string TaskType, string class, address oldAddress, address newAddress); event AdminRequiredNumChanged(string TaskType, string class, uint256 previousNum, uint256 requiredNum); event AdminTaskDropped(bytes32 taskHash); modifier validRequirement(uint ownerCount, uint _required) { require(ownerCount <= MaxItemAdressNum && _required <= ownerCount && _required > 0 && ownerCount > 0); _; } modifier onlyOwner() { require(itemAddressExists(OWNERHASH, msg.sender), "only use owner to call"); _; } function initAdmin(address[] memory _owners, uint _ownerRequired) internal validRequirement(_owners.length, _ownerRequired) { for (uint i = 0; i < _owners.length; i++) { addItemAddress(OWNERHASH, _owners[i]); } addItemAddress(PAUSERHASH,_owners[0]);// we need an init pauser addItemAddress(LOGICHASH, address(0x0)); addItemAddress(STOREHASH, address(0x1)); classHashArray.push(OWNERHASH); classHashArray.push(OPERATORHASH); classHashArray.push(PAUSERHASH); classHashArray.push(STOREHASH); classHashArray.push(LOGICHASH); ownerRequireNum = _ownerRequired; operatorRequireNum = 2; } function classHashExist(bytes32 aHash) private view returns (bool) { for (uint256 i = 0; i < classHashArray.length; i++) if (classHashArray[i] == aHash) return true; return false; } function getAdminAddresses(string memory class) public view returns (address[] memory) { bytes32 classHash = getClassHash(class); return getItemAddresses(classHash); } function getOwnerRequireNum() public view returns (uint256){ return ownerRequireNum; } function getOperatorRequireNum() public view returns (uint256){ return operatorRequireNum; } function resetRequiredNum(string memory class, uint256 requiredNum) public onlyOwner returns (bool){ bytes32 classHash = getClassHash(class); require((classHash == OPERATORHASH) || (classHash == OWNERHASH), "wrong class"); bytes32 taskHash = keccak256(abi.encodePacked("resetRequiredNum", class, requiredNum)); addItemAddress(taskHash, msg.sender); if (getItemAddressCount(taskHash) >= ownerRequireNum) { removeItem(taskHash); uint256 previousNum = 0; if (classHash == OWNERHASH) { previousNum = ownerRequireNum; ownerRequireNum = requiredNum; } else if (classHash == OPERATORHASH) { previousNum = operatorRequireNum; operatorRequireNum = requiredNum; } else { revert("wrong class"); } emit AdminRequiredNumChanged("resetRequiredNum", class, previousNum, requiredNum); } return true; } function modifyAddress(string memory class, address oldAddress, address newAddress) internal onlyOwner returns (bool){ bytes32 classHash = getClassHash(class); bytes32 taskHash = keccak256(abi.encodePacked("modifyAddress", class, oldAddress, newAddress)); addItemAddress(taskHash, msg.sender); if (getItemAddressCount(taskHash) >= ownerRequireNum) { replaceItemAddress(classHash, oldAddress, newAddress); emit AdminChanged("modifyAddress", class, oldAddress, newAddress); removeItem(taskHash); return true; } return false; } function getClassHash(string memory class) private view returns (bytes32){ bytes32 classHash = keccak256(abi.encodePacked(class)); require(classHashExist(classHash), "invalid class"); return classHash; } function dropAddress(string memory class, address oneAddress) public onlyOwner returns (bool){ bytes32 classHash = getClassHash(class); require(classHash != STOREHASH && classHash != LOGICHASH, "wrong class"); require(itemAddressExists(classHash, oneAddress), "no such address exist"); if (classHash == OWNERHASH) require(getItemAddressCount(classHash) > ownerRequireNum, "insuffience addresses"); bytes32 taskHash = keccak256(abi.encodePacked("dropAddress", class, oneAddress)); addItemAddress(taskHash, msg.sender); if (getItemAddressCount(taskHash) >= ownerRequireNum) { removeOneItemAddress(classHash, oneAddress); emit AdminChanged("dropAddress", class, oneAddress, oneAddress); removeItem(taskHash); return true; } return false; } function addAddress(string memory class, address oneAddress) public onlyOwner returns (bool){ bytes32 classHash = getClassHash(class); require(classHash != STOREHASH && classHash != LOGICHASH, "wrong class"); bytes32 taskHash = keccak256(abi.encodePacked("addAddress", class, oneAddress)); addItemAddress(taskHash, msg.sender); if (getItemAddressCount(taskHash) >= ownerRequireNum) { addItemAddress(classHash, oneAddress); emit AdminChanged("addAddress", class, oneAddress, oneAddress); removeItem(taskHash); return true; } return false; } function dropTask(bytes32 taskHash) public onlyOwner returns (bool){ removeItem(taskHash); emit AdminTaskDropped(taskHash); return true; } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/BridgeLogic.sol pragma solidity ^0.7.0; contract BridgeLogic { using SafeMath for uint256; string public constant name = "BridgeLogic"; bytes32 internal constant OPERATORHASH = 0x46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622; uint256 public constant TASKINIT = 0; uint256 public constant TASKPROCESSING = 1; uint256 public constant TASKCANCELLED = 2; uint256 public constant TASKDONE = 3; uint256 public constant WITHDRAWTASK = 1; address private caller; BridgeStorage private store; constructor(address aCaller) { caller = aCaller; } modifier onlyCaller(){ require(msg.sender == caller, "only main contract can call"); _; } modifier operatorExists(address operator) { require(store.supporterExists(OPERATORHASH, operator), "wrong operator"); _; } function resetStoreLogic(address storeAddress) external onlyCaller { store = BridgeStorage(storeAddress); } function getStoreAddress() public view returns(address) { return address(store); } function supportTask(uint256 taskType, bytes32 taskHash, address oneAddress, uint256 requireNum) external onlyCaller returns(uint256){ require(!store.supporterExists(taskHash, oneAddress), "supporter already exists"); (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash); require(theTaskStatus < TASKDONE, "wrong status"); if (theTaskStatus != TASKINIT) require(theTaskType == taskType, "task type not match"); store.addSupporter(taskHash, oneAddress); theSupporterNum++; if(theSupporterNum >= requireNum) theTaskStatus = TASKDONE; else theTaskStatus = TASKPROCESSING; store.setTaskInfo(taskHash, taskType, theTaskStatus); return theTaskStatus; } function cancelTask(bytes32 taskHash) external onlyCaller returns(uint256) { (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash); require(theTaskStatus == TASKPROCESSING, "wrong status"); if(theSupporterNum > 0) store.removeAllSupporter(taskHash); theTaskStatus = TASKCANCELLED; store.setTaskInfo(taskHash, theTaskType, theTaskStatus); return theTaskStatus; } function removeTask(bytes32 taskHash) external onlyCaller { store.removeTask(taskHash); } } // File contracts/ERC20Sample.sol pragma solidity ^0.7.0; abstract contract ERC20Template is IERC20 { function mint(address account, uint256 amount) public{ } function burn(address account , uint256 amount) public{ } function redeem(address account, uint256 amount)public { } function issue(address account, uint256 amount) public { } } // File contracts/Bridge.sol pragma solidity ^0.7.0; contract Bridge is BridgeAdmin, Pausable { using SafeMath for uint256; string public constant name = "Bridge"; BridgeLogic private logic; event DepositNative(address indexed from, uint256 value, string targetAddress, string chain); event DepositToken(address indexed from, uint256 value, address indexed token, string targetAddress, string chain, uint256 nativeValue); event WithdrawingNative(address indexed to, uint256 value, string proof); event WithdrawingToken(address indexed to, address indexed token, uint256 value, string proof); event WithdrawDoneNative(address indexed to, uint256 value, string proof); event WithdrawDoneToken(address indexed to, address indexed token, uint256 value, string proof); modifier onlyOperator() { require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator"); _; } modifier onlyPauser() { require(itemAddressExists(PAUSERHASH, msg.sender), "wrong pauser"); _; } modifier positiveValue(uint _value) { require(_value > 0, "value need > 0"); _; } constructor(address[] memory _owners, uint _ownerRequired) { initAdmin(_owners, _ownerRequired); } function depositNative(string memory _targetAddress, string memory chain) public payable { emit DepositNative(msg.sender, msg.value, _targetAddress,chain); } function depositToken(address _token, uint value, string memory _targetAddress, string memory chain) public payable returns (bool){ //deposit(address token, address _from, uint256 _value) bool res = depositTokenLogic(_token, msg.sender, value); emit DepositToken(msg.sender, value, _token, _targetAddress, chain, msg.value); return res; }// function withdrawNative(address payable to, uint value, string memory proof, bytes32 taskHash) public onlyOperator whenNotPaused positiveValue(value) returns(bool) { require(address(this).balance >= value, "not enough native token"); require(taskHash == keccak256((abi.encodePacked(to,value,proof))),"taskHash is wrong"); uint256 status = logic.supportTask(logic.WITHDRAWTASK(), taskHash, msg.sender, operatorRequireNum); if (status == logic.TASKPROCESSING()){ emit WithdrawingNative(to, value, proof); }else if (status == logic.TASKDONE()) { emit WithdrawingNative(to, value, proof); emit WithdrawDoneNative(to, value, proof); to.transfer(value); logic.removeTask(taskHash); } return true; } function withdrawToken(address _token, address to, uint value, string memory proof, bytes32 taskHash) public onlyOperator whenNotPaused positiveValue(value) returns (bool) { require(taskHash == keccak256((abi.encodePacked(to,value,proof))),"taskHash is wrong"); uint256 status = logic.supportTask(logic.WITHDRAWTASK(), taskHash, msg.sender, operatorRequireNum); if (status == logic.TASKPROCESSING()){ emit WithdrawingToken(to, _token, value, proof); }else if (status == logic.TASKDONE()) { // withdraw(address token, address _to, address _value) bool res = withdrawTokenLogic( _token, to, value); emit WithdrawingToken(to, _token, value, proof); emit WithdrawDoneToken(to, _token, value, proof); logic.removeTask(taskHash); return res; } return true; } function modifyAdminAddress(string memory class, address oldAddress, address newAddress) public whenPaused { require(newAddress != address(0x0), "wrong address"); bool flag = modifyAddress(class, oldAddress, newAddress); if(flag){ bytes32 classHash = keccak256(abi.encodePacked(class)); if(classHash == LOGICHASH){ logic = BridgeLogic(newAddress); }else if(classHash == STOREHASH){ logic.resetStoreLogic(newAddress); } } } function getLogicAddress() public view returns(address){ return address(logic); } function getStoreAddress() public view returns(address){ return logic.getStoreAddress(); } function pause() public onlyPauser { _pause(); } function unpause() public onlyPauser { _unpause(); } function transferToken(address token, address to , uint256 value) onlyPauser external{ IERC20 atoken = IERC20(token); bool success = atoken.transfer(to,value); } function setDepositSelector(address token, string memory method, bool _isValueFirst) onlyOperator external{ depositSelector[token] = assetSelector(method,_isValueFirst); } function setWithdrawSelector(address token, string memory method, bool _isValueFirst) onlyOperator external{ withdrawSelector[token] = assetSelector(method,_isValueFirst); } struct assetSelector{ string selector; bool isValueFirst; } mapping (address=>assetSelector) public depositSelector; mapping (address=> assetSelector) public withdrawSelector; function depositTokenLogic(address token, address _from, uint256 _value) internal returns(bool){ bool status = false; bytes memory returnedData; if (bytes(depositSelector[token].selector).length == 0){ (status,returnedData)= token.call(abi.encodeWithSignature("transferFrom(address,address,uint256)",_from,this,_value)); } else{ assetSelector memory aselector = depositSelector[token]; if (aselector.isValueFirst){ (status, returnedData) = token.call(abi.encodeWithSignature(aselector.selector,_value,_from)); } else { (status,returnedData)= token.call(abi.encodeWithSignature(aselector.selector,_from,_value)); } } require( status && (returnedData.length == 0 || abi.decode(returnedData, (bool))), ' transfer failed'); return true; } function withdrawTokenLogic(address token, address _to, uint256 _value) internal returns(bool){ bool status = false; bytes memory returnedData; if (bytes(withdrawSelector[token].selector).length==0){ (status,returnedData)= token.call(abi.encodeWithSignature("transfer(address,uint256)",_to,_value)); } else{ assetSelector memory aselector = withdrawSelector[token]; if (aselector.isValueFirst){ (status,returnedData) = token.call(abi.encodeWithSignature( aselector.selector,_value,_to)); } else { (status,returnedData)= token.call(abi.encodeWithSignature(aselector.selector,_to,_value)); } } require(status && (returnedData.length == 0 || abi.decode(returnedData, (bool))),'withdraw failed'); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256","name":"_ownerRequired","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"uint256","name":"previousNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"AdminRequiredNumChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"AdminTaskDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"targetAddress","type":"string"},{"indexed":false,"internalType":"string","name":"chain","type":"string"}],"name":"DepositNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"string","name":"targetAddress","type":"string"},{"indexed":false,"internalType":"string","name":"chain","type":"string"},{"indexed":false,"internalType":"uint256","name":"nativeValue","type":"uint256"}],"name":"DepositToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawDoneNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawDoneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawingNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"WithdrawingToken","type":"event"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"addAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_targetAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"}],"name":"depositNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositSelector","outputs":[{"internalType":"string","name":"selector","type":"string"},{"internalType":"bool","name":"isValueFirst","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"_targetAddress","type":"string"},{"internalType":"string","name":"chain","type":"string"}],"name":"depositToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"dropAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"dropTask","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"}],"name":"getAdminAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLogicAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOperatorRequireNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnerRequireNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStoreAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oldAddress","type":"address"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"modifyAdminAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"resetRequiredNum","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"method","type":"string"},{"internalType":"bool","name":"_isValueFirst","type":"bool"}],"name":"setDepositSelector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"string","name":"method","type":"string"},{"internalType":"bool","name":"_isValueFirst","type":"bool"}],"name":"setWithdrawSelector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"withdrawNative","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"withdrawSelector","outputs":[{"internalType":"string","name":"selector","type":"string"},{"internalType":"bool","name":"isValueFirst","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"withdrawToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260ff6000553480156200001657600080fd5b506040516200606c3803806200606c833981810160405260408110156200003c57600080fd5b81019080805160405193929190846401000000008211156200005d57600080fd5b838201915060208201858111156200007457600080fd5b82518660208202830111640100000000821117156200009257600080fd5b8083526020830192505050908051906020019060200280838360005b83811015620000cb578082015181840152602081019050620000ae565b50505050905001604052602001805190602001909291905050506000600560006101000a81548160ff0219169083151502179055506200011282826200011a60201b60201c565b505062000662565b8151816000548211158015620001305750818111155b80156200013d5750600081115b80156200014a5750600082115b6200015457600080fd5b60005b8451811015620001b857620001aa7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8683815181106200019657fe5b60200260200101516200040060201b60201c565b808060010191505062000157565b50620002037f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b85600081518110620001ef57fe5b60200260200101516200040060201b60201c565b620002397f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b60006200040060201b60201c565b6200026f7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b60016200040060201b60201c565b60027f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b908060018154018082558091505060019003906000526020600020016000909190919091505560027f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b908060018154018082558091505060019003906000526020600020016000909190919091505560027f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b908060018154018082558091505060019003906000526020600020016000909190919091505560027fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b908060018154018082558091505060019003906000526020600020016000909190919091505560027f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b908060018154018082558091505060019003906000526020600020016000909190919091505582600381905550600260048190555050505050565b6200041282826200059260201b60201c565b1562000486576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60005460016000848152602001908152602001600020600201805490501062000517576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b60016000838152602001908152602001600020600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600080600090505b600160008581526020019081526020016000206002018054905081101562000656578273ffffffffffffffffffffffffffffffffffffffff16600160008681526020019081526020016000206002018281548110620005f557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415620006485760019150506200065c565b80806001019150506200059a565b50600090505b92915050565b6159fa80620006726000396000f3fe60806040526004361061013f5760003560e01c8063abd108ba116100b6578063d5b99d3c1161006f578063d5b99d3c14610c8d578063dd9b86c114610d9f578063e6a81ec414610f31578063e9e211bd14610f5c578063f5537ede14611044578063f60c757f146110bf5761013f565b8063abd108ba14610829578063b07ed3a91461086a578063c8e369bf146108ab578063c8fd90f9146109c8578063cb08e3ca14610abc578063ceb35b0f14610b8f5761013f565b80633f4ba83a116101085780633f4ba83a1461052d578063521cb590146105445780635c975abb146105955780638456cb59146105c25780638609d28c146105d957806391c40bf71461072b5761013f565b8062674f631461014457806302c1927c1461023857806306fdde031461036a5780631d75807c146103fa5780632c2df74214610425575b600080fd5b34801561015057600080fd5b506102366004803603606081101561016757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101a457600080fd5b8201836020820111156101b657600080fd5b803590602001918460018302840111640100000000831117156101d857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803515159060200190929190505050611192565b005b34801561024457600080fd5b50610352600480360360a081101561025b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156102c257600080fd5b8201836020820111156102d457600080fd5b803590602001918460018302840111640100000000831117156102f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506112cc565b60405180821515815260200191505060405180910390f35b34801561037657600080fd5b5061037f611b82565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103bf5780820151818401526020810190506103a4565b50505050905090810190601f1680156103ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561040657600080fd5b5061040f611bbb565b6040518082815260200191505060405180910390f35b34801561043157600080fd5b5061052b6004803603606081101561044857600080fd5b810190808035906020019064010000000081111561046557600080fd5b82018360208201111561047757600080fd5b8035906020019184600183028401116401000000008311171561049957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc5565b005b34801561053957600080fd5b50610542611ebe565b005b34801561055057600080fd5b5061057d6004803603602081101561056757600080fd5b8101908080359060200190929190505050611f67565b60405180821515815260200191505060405180910390f35b3480156105a157600080fd5b506105aa612051565b60405180821515815260200191505060405180910390f35b3480156105ce57600080fd5b506105d7612068565b005b610729600480360360408110156105ef57600080fd5b810190808035906020019064010000000081111561060c57600080fd5b82018360208201111561061e57600080fd5b8035906020019184600183028401116401000000008311171561064057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156106a357600080fd5b8201836020820111156106b557600080fd5b803590602001918460018302840111640100000000831117156106d757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612111565b005b34801561073757600080fd5b506108116004803603604081101561074e57600080fd5b810190808035906020019064010000000081111561076b57600080fd5b82018360208201111561077d57600080fd5b8035906020019184600183028401116401000000008311171561079f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061223d565b60405180821515815260200191505060405180910390f35b34801561083557600080fd5b5061083e6126f0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561087657600080fd5b5061087f61271a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108b757600080fd5b50610971600480360360208110156108ce57600080fd5b81019080803590602001906401000000008111156108eb57600080fd5b8201836020820111156108fd57600080fd5b8035906020019184600183028401116401000000008311171561091f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506127c4565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156109b4578082015181840152602081019050610999565b505050509050019250505060405180910390f35b3480156109d457600080fd5b50610aba600480360360608110156109eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610a2857600080fd5b820183602082011115610a3a57600080fd5b80359060200191846001830284011164010000000083111715610a5c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035151590602001909291905050506127e4565b005b348015610ac857600080fd5b50610b0b60048036036020811015610adf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061291e565b60405180806020018315158152602001828103825284818151815260200191508051906020019080838360005b83811015610b53578082015181840152602081019050610b38565b50505050905090810190601f168015610b805780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610b9b57600080fd5b50610c7560048036036040811015610bb257600080fd5b8101908080359060200190640100000000811115610bcf57600080fd5b820183602082011115610be157600080fd5b80359060200191846001830284011164010000000083111715610c0357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129e7565b60405180821515815260200191505060405180910390f35b348015610c9957600080fd5b50610d8760048036036080811015610cb057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610cf757600080fd5b820183602082011115610d0957600080fd5b80359060200191846001830284011164010000000083111715610d2b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612d73565b60405180821515815260200191505060405180910390f35b610f1960048036036080811015610db557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610dfc57600080fd5b820183602082011115610e0e57600080fd5b80359060200191846001830284011164010000000083111715610e3057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610e9357600080fd5b820183602082011115610ea557600080fd5b80359060200191846001830284011164010000000083111715610ec757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613687565b60405180821515815260200191505060405180910390f35b348015610f3d57600080fd5b50610f466137ea565b6040518082815260200191505060405180910390f35b348015610f6857600080fd5b5061102c60048036036040811015610f7f57600080fd5b8101908080359060200190640100000000811115610f9c57600080fd5b820183602082011115610fae57600080fd5b80359060200191846001830284011164010000000083111715610fd057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506137f4565b60405180821515815260200191505060405180910390f35b34801561105057600080fd5b506110bd6004803603606081101561106757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613c0d565b005b3480156110cb57600080fd5b5061110e600480360360208110156110e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d68565b60405180806020018315158152602001828103825284818151815260200191508051906020019080838360005b8381101561115657808201518184015260208101905061113b565b50505050905090810190601f1680156111835780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6111bf7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6040518060400160405280838152602001821515815250600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000190805190602001906112a39291906158dc565b5060208201518160010160006101000a81548160ff021916908315150217905550905050505050565b60006112fb7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b61136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600560009054906101000a900460ff16156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b8360008111611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f76616c7565206e656564203e203000000000000000000000000000000000000081525060200191505060405180910390fd5b858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b602083106114c557805182526020820191506020810190506020830392506114a2565b6001836020036101000a0380198251168184511680821785525050505050509050019350505050604051602081830303815290604052805190602001208314611576576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f7461736b486173682069732077726f6e6700000000000000000000000000000081525060200191505060405180910390fd5b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae0fd47f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663478538026040518163ffffffff1660e01b815260040160206040518083038186803b15801561161e57600080fd5b505afa158015611632573d6000803e3d6000fd5b505050506040513d602081101561164857600080fd5b810190808051906020019092919050505086336004546040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156116bf57600080fd5b505af11580156116d3573d6000803e3d6000fd5b505050506040513d60208110156116e957600080fd5b81019080805190602001909291905050509050600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afd464f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561176457600080fd5b505afa158015611778573d6000803e3d6000fd5b505050506040513d602081101561178e57600080fd5b810190808051906020019092919050505081141561187d578773ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f91b4005f248ece53c5402f0c547c6a472d18676fbb0e2e15029d4869140cbe2088886040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561183d578082015181840152602081019050611822565b50505050905090810190601f16801561186a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3611b72565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166310224a986040518163ffffffff1660e01b815260040160206040518083038186803b1580156118e557600080fd5b505afa1580156118f9573d6000803e3d6000fd5b505050506040513d602081101561190f57600080fd5b8101908080519060200190929190505050811415611b71576000611934898989613efc565b90508873ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f91b4005f248ece53c5402f0c547c6a472d18676fbb0e2e15029d4869140cbe2089896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156119cd5780820151818401526020810190506119b2565b50505050905090810190601f1680156119fa5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a38873ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f044513e921a12ac6560730ac3063f7946fdcb715deb39bc6f84c38be8083648a89896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611a9f578082015181840152602081019050611a84565b50505050905090810190601f168015611acc5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635035b622866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b505050508093505050611b78565b5b60019250505b5095945050505050565b6040518060400160405280600681526020017f427269646765000000000000000000000000000000000000000000000000000081525081565b6000600454905090565b600560009054906101000a900460ff16611c47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611cf7848484614602565b90508015611eb8576000846040516020018082805190602001908083835b60208310611d385780518252602082019150602081019050602083039250611d15565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b811415611de65782600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611eb6565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415611eb557600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0d80346846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611e9c57600080fd5b505af1158015611eb0573d6000803e3d6000fd5b505050505b5b505b50505050565b611eeb7f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613e31565b611f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720706175736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b611f656148e9565b565b6000611f967f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b612008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b612011826149dc565b7f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd64139826040518082815260200191505060405180910390a160019050919050565b6000600560009054906101000a900460ff16905090565b6120957f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613e31565b612107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720706175736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b61210f614a15565b565b3373ffffffffffffffffffffffffffffffffffffffff167f219295438b17c92dbc62ee9b1874dc1a25cf55368e13d34d65325217d4acbafe348484604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561219657808201518184015260208101905061217b565b50505050905090810190601f1680156121c35780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156121fc5780820151818401526020810190506121e1565b50505050905090810190601f1680156122295780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a25050565b600061226c7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b6122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006122e984614b09565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415801561234157507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b6123b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6123bd8184613e31565b61242f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e6f20737563682061646472657373206578697374000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8114156124da5760035461246682614c04565b116124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e7375666669656e636520616464726573736573000000000000000000000081525060200191505060405180910390fd5b5b6000848460405160200180807f64726f7041646472657373000000000000000000000000000000000000000000815250600b0183805190602001908083835b6020831061253c5780518252602082019150602081019050602083039250612519565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012090506125a38133614c27565b6003546125af82614c04565b106126e3576125be8285614daf565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600b8152602001807f64726f7041646472657373000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612692578082015181840152602081019050612677565b50505050905090810190601f1680156126bf5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a16126d8816149dc565b6001925050506126ea565b6000925050505b92915050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b15801561278457600080fd5b505afa158015612798573d6000803e3d6000fd5b505050506040513d60208110156127ae57600080fd5b8101908080519060200190929190505050905090565b606060006127d183614b09565b90506127dc81614f8f565b915050919050565b6128117f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6040518060400160405280838152602001821515815250600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000190805190602001906128f59291906158dc565b5060208201518160010160006101000a81548160ff021916908315150217905550905050505050565b6007602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129ca5780601f1061299f576101008083540402835291602001916129ca565b820191906000526020600020905b8154815290600101906020018083116129ad57829003601f168201915b5050505050908060010160009054906101000a900460ff16905082565b6000612a167f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b612a88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000612a9384614b09565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114158015612aeb57507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b612b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f6164644164647265737300000000000000000000000000000000000000000000815250600a0183805190602001908083835b60208310612bbf5780518252602082019150602081019050602083039250612b9c565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050612c268133614c27565b600354612c3282614c04565b10612d6657612c418285614c27565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600a8152602001807f6164644164647265737300000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612d15578082015181840152602081019050612cfa565b50505050905090810190601f168015612d425780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1612d5b816149dc565b600192505050612d6d565b6000925050505b92915050565b6000612da27f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b612e14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600560009054906101000a900460ff1615612e97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b8360008111612f0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f76616c7565206e656564203e203000000000000000000000000000000000000081525060200191505060405180910390fd5b84471015612f84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6e6f7420656e6f756768206e617469766520746f6b656e00000000000000000081525060200191505060405180910390fd5b858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b60208310612fe25780518252602082019150602081019050602083039250612fbf565b6001836020036101000a0380198251168184511680821785525050505050509050019350505050604051602081830303815290604052805190602001208314613093576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f7461736b486173682069732077726f6e6700000000000000000000000000000081525060200191505060405180910390fd5b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae0fd47f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663478538026040518163ffffffff1660e01b815260040160206040518083038186803b15801561313b57600080fd5b505afa15801561314f573d6000803e3d6000fd5b505050506040513d602081101561316557600080fd5b810190808051906020019092919050505086336004546040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156131dc57600080fd5b505af11580156131f0573d6000803e3d6000fd5b505050506040513d602081101561320657600080fd5b81019080805190602001909291905050509050600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afd464f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561328157600080fd5b505afa158015613295573d6000803e3d6000fd5b505050506040513d60208110156132ab57600080fd5b8101908080519060200190929190505050811415613383578673ffffffffffffffffffffffffffffffffffffffff167f85c53e7e269cd44a12210170eb2636cdc0d111b93e101a211305e0144733995587876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613343578082015181840152602081019050613328565b50505050905090810190601f1680156133705780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2613679565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166310224a986040518163ffffffff1660e01b815260040160206040518083038186803b1580156133eb57600080fd5b505afa1580156133ff573d6000803e3d6000fd5b505050506040513d602081101561341557600080fd5b8101908080519060200190929190505050811415613678578673ffffffffffffffffffffffffffffffffffffffff167f85c53e7e269cd44a12210170eb2636cdc0d111b93e101a211305e0144733995587876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156134ad578082015181840152602081019050613492565b50505050905090810190601f1680156134da5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff167fd8ff38332185c42ca14ded5671b8eb2842095abf024f6900cb42760ccb438f3387876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561356857808201518184015260208101905061354d565b50505050905090810190601f1680156135955780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f193505050501580156135e9573d6000803e3d6000fd5b50600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635035b622856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561365f57600080fd5b505af1158015613673573d6000803e3d6000fd5b505050505b5b600192505050949350505050565b600080613695863387615033565b90508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f63333d9ba80d323ed3a2c486809215e8f1fb8c645691606b862787fad572c1c787878734604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561373a57808201518184015260208101905061371f565b50505050905090810190601f1680156137675780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156137a0578082015181840152602081019050613785565b50505050905090810190601f1680156137cd5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a380915050949350505050565b6000600354905090565b60006138237f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b613895576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006138a084614b09565b90507f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b8114806138f557507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b81145b613967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f726573657452657175697265644e756d0000000000000000000000000000000081525060100183805190602001908083835b602083106139c957805182526020820191506020810190506020830392506139a6565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200192505050604051602081830303815290604052805190602001209050613a178133614c27565b600354613a2382614c04565b10613c0157613a31816149dc565b60007f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b831415613a6f57600354905084600381905550613b1a565b7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b831415613aab57600454905084600481905550613b19565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001807f726573657452657175697265644e756d00000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015613bc2578082015181840152602081019050613ba7565b50505050905090810190601f168015613bef5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b60019250505092915050565b613c3a7f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613e31565b613cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720706175736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613d2457600080fd5b505af1158015613d38573d6000803e3d6000fd5b505050506040513d6020811015613d4e57600080fd5b810190808051906020019092919050505090505050505050565b6006602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613e145780601f10613de957610100808354040283529160200191613e14565b820191906000526020600020905b815481529060010190602001808311613df757829003601f168201915b5050505050908060010160009054906101000a900460ff16905082565b600080600090505b6001600085815260200190815260200160002060020180549050811015613ef0578273ffffffffffffffffffffffffffffffffffffffff16600160008681526020019081526020016000206002018281548110613e9257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613ee3576001915050613ef6565b8080600101915050613e39565b50600090505b92915050565b6000806000905060606000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180546001816001161561010002031660029004905014156140cf578573ffffffffffffffffffffffffffffffffffffffff168585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061405a5780518252602082019150602081019050602083039250614037565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146140bc576040519150601f19603f3d011682016040523d82523d6000602084013e6140c1565b606091505b508092508193505050614548565b6140d761596a565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141ba5780601f1061418f576101008083540402835291602001916141ba565b820191906000526020600020905b81548152906001019060200180831161419d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff161515151581525050905080602001511561439a578673ffffffffffffffffffffffffffffffffffffffff1681600001518688604051602401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106142785780518252602082019150602081019050602083039250614255565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106143255780518252602082019150602081019050602083039250614302565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614387576040519150601f19603f3d011682016040523d82523d6000602084013e61438c565b606091505b508093508194505050614546565b8673ffffffffffffffffffffffffffffffffffffffff1681600001518787604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106144285780518252602082019150602081019050602083039250614405565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106144d557805182526020820191506020810190506020830392506144b2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614537576040519150601f19603f3d011682016040523d82523d6000602084013e61453c565b606091505b5080935081945050505b505b8180156145835750600081511480614582575080806020019051602081101561457057600080fd5b81019080805190602001909291905050505b5b6145f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f7769746864726177206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b6001925050509392505050565b60006146317f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b6146a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006146ae85614b09565b9050600085858560405160200180807f6d6f646966794164647265737300000000000000000000000000000000000000815250600d0184805190602001908083835b6020831061471357805182526020820191506020810190506020830392506146f0565b6001836020036101000a0380198251168184511680821785525050505050509050018373ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401935050505060405160208183030381529060405280519060200120905061479a8133614c27565b6003546147a682614c04565b106148db576147b6828686615757565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668686866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600d8152602001807f6d6f646966794164647265737300000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b8381101561488a57808201518184015260208101905061486f565b50505050905090810190601f1680156148b75780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a16148d0816149dc565b6001925050506148e2565b6000925050505b9392505050565b600560009054906101000a900460ff1661496b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6149af61587e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600160008281526020019081526020016000206000808201600090556001820160009055600282016000614a109190615986565b505050565b600560009054906101000a900460ff1615614a98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614adc61587e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600080826040516020018082805190602001908083835b60208310614b435780518252602082019150602081019050602083039250614b20565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050614b8981615886565b614bfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c6173730000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b600060016000838152602001908152602001600020600201805490509050919050565b614c318282613e31565b15614ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b600054600160008481526020019081526020016000206002018054905010614d34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b60016000838152602001908152602001600020600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60005b6001600084815260200190815260200160002060020180549050811015614f89578173ffffffffffffffffffffffffffffffffffffffff16600160008581526020019081526020016000206002018281548110614e0b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614f7c57600160008481526020019081526020016000206002016001806000868152602001908152602001600020600201805490500381548110614e8e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008581526020019081526020016000206002018281548110614eda57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000848152602001908152602001600020600201805480614f4157fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550614f8b565b8080600101915050614db2565b505b5050565b60606001600083815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561502757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614fdd575b50505050509050919050565b6000806000905060606000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054600181600116156101000203166002900490501415615224578573ffffffffffffffffffffffffffffffffffffffff16853086604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106151af578051825260208201915060208101905060208303925061518c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615211576040519150601f19603f3d011682016040523d82523d6000602084013e615216565b606091505b50809250819350505061569d565b61522c61596a565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561530f5780601f106152e45761010080835404028352916020019161530f565b820191906000526020600020905b8154815290600101906020018083116152f257829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152505090508060200151156154ef578673ffffffffffffffffffffffffffffffffffffffff1681600001518688604051602401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106153cd57805182526020820191506020810190506020830392506153aa565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061547a5780518252602082019150602081019050602083039250615457565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146154dc576040519150601f19603f3d011682016040523d82523d6000602084013e6154e1565b606091505b50809350819450505061569b565b8673ffffffffffffffffffffffffffffffffffffffff1681600001518787604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052906040518082805190602001908083835b6020831061557d578051825260208201915060208101905060208303925061555a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061562a5780518252602082019150602081019050602083039250615607565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461568c576040519150601f19603f3d011682016040523d82523d6000602084013e615691565b606091505b5080935081945050505b505b8180156156d857506000815114806156d757508080602001905160208110156156c557600080fd5b81019080805190602001909291905050505b5b61574a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f207472616e73666572206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b6001925050509392505050565b60005b6001600085815260200190815260200160002060020180549050811015615877578273ffffffffffffffffffffffffffffffffffffffff166001600086815260200190815260200160002060020182815481106157b357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561586a578160016000868152602001908152602001600020600201828154811061581c57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050615879565b808060010191505061575a565b505b505050565b600033905090565b600080600090505b6002805490508110156158d15782600282815481106158a957fe5b906000526020600020015414156158c45760019150506158d7565b808060010191505061588e565b50600090505b919050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826159125760008555615959565b82601f1061592b57805160ff1916838001178555615959565b82800160010185558215615959579182015b8281111561595857825182559160200191906001019061593d565b5b50905061596691906159a7565b5090565b6040518060400160405280606081526020016000151581525090565b50805460008255906000526020600020908101906159a491906159a7565b50565b5b808211156159c05760008160009055506001016159a8565b509056fea2646970667358221220175fd30761d46f49bdd013683f3d26a07b057927b3f48644cc55d126254c071864736f6c63430007040033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d2b75596a63728d84d341f2e3ce6ddae66810128
Deployed Bytecode
0x60806040526004361061013f5760003560e01c8063abd108ba116100b6578063d5b99d3c1161006f578063d5b99d3c14610c8d578063dd9b86c114610d9f578063e6a81ec414610f31578063e9e211bd14610f5c578063f5537ede14611044578063f60c757f146110bf5761013f565b8063abd108ba14610829578063b07ed3a91461086a578063c8e369bf146108ab578063c8fd90f9146109c8578063cb08e3ca14610abc578063ceb35b0f14610b8f5761013f565b80633f4ba83a116101085780633f4ba83a1461052d578063521cb590146105445780635c975abb146105955780638456cb59146105c25780638609d28c146105d957806391c40bf71461072b5761013f565b8062674f631461014457806302c1927c1461023857806306fdde031461036a5780631d75807c146103fa5780632c2df74214610425575b600080fd5b34801561015057600080fd5b506102366004803603606081101561016757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156101a457600080fd5b8201836020820111156101b657600080fd5b803590602001918460018302840111640100000000831117156101d857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803515159060200190929190505050611192565b005b34801561024457600080fd5b50610352600480360360a081101561025b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156102c257600080fd5b8201836020820111156102d457600080fd5b803590602001918460018302840111640100000000831117156102f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506112cc565b60405180821515815260200191505060405180910390f35b34801561037657600080fd5b5061037f611b82565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103bf5780820151818401526020810190506103a4565b50505050905090810190601f1680156103ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561040657600080fd5b5061040f611bbb565b6040518082815260200191505060405180910390f35b34801561043157600080fd5b5061052b6004803603606081101561044857600080fd5b810190808035906020019064010000000081111561046557600080fd5b82018360208201111561047757600080fd5b8035906020019184600183028401116401000000008311171561049957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611bc5565b005b34801561053957600080fd5b50610542611ebe565b005b34801561055057600080fd5b5061057d6004803603602081101561056757600080fd5b8101908080359060200190929190505050611f67565b60405180821515815260200191505060405180910390f35b3480156105a157600080fd5b506105aa612051565b60405180821515815260200191505060405180910390f35b3480156105ce57600080fd5b506105d7612068565b005b610729600480360360408110156105ef57600080fd5b810190808035906020019064010000000081111561060c57600080fd5b82018360208201111561061e57600080fd5b8035906020019184600183028401116401000000008311171561064057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156106a357600080fd5b8201836020820111156106b557600080fd5b803590602001918460018302840111640100000000831117156106d757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612111565b005b34801561073757600080fd5b506108116004803603604081101561074e57600080fd5b810190808035906020019064010000000081111561076b57600080fd5b82018360208201111561077d57600080fd5b8035906020019184600183028401116401000000008311171561079f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061223d565b60405180821515815260200191505060405180910390f35b34801561083557600080fd5b5061083e6126f0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561087657600080fd5b5061087f61271a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108b757600080fd5b50610971600480360360208110156108ce57600080fd5b81019080803590602001906401000000008111156108eb57600080fd5b8201836020820111156108fd57600080fd5b8035906020019184600183028401116401000000008311171561091f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506127c4565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156109b4578082015181840152602081019050610999565b505050509050019250505060405180910390f35b3480156109d457600080fd5b50610aba600480360360608110156109eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610a2857600080fd5b820183602082011115610a3a57600080fd5b80359060200191846001830284011164010000000083111715610a5c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035151590602001909291905050506127e4565b005b348015610ac857600080fd5b50610b0b60048036036020811015610adf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061291e565b60405180806020018315158152602001828103825284818151815260200191508051906020019080838360005b83811015610b53578082015181840152602081019050610b38565b50505050905090810190601f168015610b805780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610b9b57600080fd5b50610c7560048036036040811015610bb257600080fd5b8101908080359060200190640100000000811115610bcf57600080fd5b820183602082011115610be157600080fd5b80359060200191846001830284011164010000000083111715610c0357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129e7565b60405180821515815260200191505060405180910390f35b348015610c9957600080fd5b50610d8760048036036080811015610cb057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610cf757600080fd5b820183602082011115610d0957600080fd5b80359060200191846001830284011164010000000083111715610d2b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612d73565b60405180821515815260200191505060405180910390f35b610f1960048036036080811015610db557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610dfc57600080fd5b820183602082011115610e0e57600080fd5b80359060200191846001830284011164010000000083111715610e3057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610e9357600080fd5b820183602082011115610ea557600080fd5b80359060200191846001830284011164010000000083111715610ec757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613687565b60405180821515815260200191505060405180910390f35b348015610f3d57600080fd5b50610f466137ea565b6040518082815260200191505060405180910390f35b348015610f6857600080fd5b5061102c60048036036040811015610f7f57600080fd5b8101908080359060200190640100000000811115610f9c57600080fd5b820183602082011115610fae57600080fd5b80359060200191846001830284011164010000000083111715610fd057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506137f4565b60405180821515815260200191505060405180910390f35b34801561105057600080fd5b506110bd6004803603606081101561106757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613c0d565b005b3480156110cb57600080fd5b5061110e600480360360208110156110e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d68565b60405180806020018315158152602001828103825284818151815260200191508051906020019080838360005b8381101561115657808201518184015260208101905061113b565b50505050905090810190601f1680156111835780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6111bf7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6040518060400160405280838152602001821515815250600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000190805190602001906112a39291906158dc565b5060208201518160010160006101000a81548160ff021916908315150217905550905050505050565b60006112fb7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b61136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600560009054906101000a900460ff16156113f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b8360008111611467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f76616c7565206e656564203e203000000000000000000000000000000000000081525060200191505060405180910390fd5b858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b602083106114c557805182526020820191506020810190506020830392506114a2565b6001836020036101000a0380198251168184511680821785525050505050509050019350505050604051602081830303815290604052805190602001208314611576576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f7461736b486173682069732077726f6e6700000000000000000000000000000081525060200191505060405180910390fd5b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae0fd47f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663478538026040518163ffffffff1660e01b815260040160206040518083038186803b15801561161e57600080fd5b505afa158015611632573d6000803e3d6000fd5b505050506040513d602081101561164857600080fd5b810190808051906020019092919050505086336004546040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156116bf57600080fd5b505af11580156116d3573d6000803e3d6000fd5b505050506040513d60208110156116e957600080fd5b81019080805190602001909291905050509050600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afd464f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561176457600080fd5b505afa158015611778573d6000803e3d6000fd5b505050506040513d602081101561178e57600080fd5b810190808051906020019092919050505081141561187d578773ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f91b4005f248ece53c5402f0c547c6a472d18676fbb0e2e15029d4869140cbe2088886040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561183d578082015181840152602081019050611822565b50505050905090810190601f16801561186a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3611b72565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166310224a986040518163ffffffff1660e01b815260040160206040518083038186803b1580156118e557600080fd5b505afa1580156118f9573d6000803e3d6000fd5b505050506040513d602081101561190f57600080fd5b8101908080519060200190929190505050811415611b71576000611934898989613efc565b90508873ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f91b4005f248ece53c5402f0c547c6a472d18676fbb0e2e15029d4869140cbe2089896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156119cd5780820151818401526020810190506119b2565b50505050905090810190601f1680156119fa5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a38873ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f044513e921a12ac6560730ac3063f7946fdcb715deb39bc6f84c38be8083648a89896040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611a9f578082015181840152602081019050611a84565b50505050905090810190601f168015611acc5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635035b622866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b4f57600080fd5b505af1158015611b63573d6000803e3d6000fd5b505050508093505050611b78565b5b60019250505b5095945050505050565b6040518060400160405280600681526020017f427269646765000000000000000000000000000000000000000000000000000081525081565b6000600454905090565b600560009054906101000a900460ff16611c47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611cf7848484614602565b90508015611eb8576000846040516020018082805190602001908083835b60208310611d385780518252602082019150602081019050602083039250611d15565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b811415611de65782600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611eb6565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415611eb557600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0d80346846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611e9c57600080fd5b505af1158015611eb0573d6000803e3d6000fd5b505050505b5b505b50505050565b611eeb7f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613e31565b611f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720706175736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b611f656148e9565b565b6000611f967f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b612008576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b612011826149dc565b7f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd64139826040518082815260200191505060405180910390a160019050919050565b6000600560009054906101000a900460ff16905090565b6120957f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613e31565b612107576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720706175736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b61210f614a15565b565b3373ffffffffffffffffffffffffffffffffffffffff167f219295438b17c92dbc62ee9b1874dc1a25cf55368e13d34d65325217d4acbafe348484604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561219657808201518184015260208101905061217b565b50505050905090810190601f1680156121c35780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b838110156121fc5780820151818401526020810190506121e1565b50505050905090810190601f1680156122295780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a25050565b600061226c7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b6122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006122e984614b09565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415801561234157507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b6123b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6123bd8184613e31565b61242f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e6f20737563682061646472657373206578697374000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8114156124da5760035461246682614c04565b116124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e7375666669656e636520616464726573736573000000000000000000000081525060200191505060405180910390fd5b5b6000848460405160200180807f64726f7041646472657373000000000000000000000000000000000000000000815250600b0183805190602001908083835b6020831061253c5780518252602082019150602081019050602083039250612519565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012090506125a38133614c27565b6003546125af82614c04565b106126e3576125be8285614daf565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600b8152602001807f64726f7041646472657373000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612692578082015181840152602081019050612677565b50505050905090810190601f1680156126bf5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a16126d8816149dc565b6001925050506126ea565b6000925050505b92915050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b15801561278457600080fd5b505afa158015612798573d6000803e3d6000fd5b505050506040513d60208110156127ae57600080fd5b8101908080519060200190929190505050905090565b606060006127d183614b09565b90506127dc81614f8f565b915050919050565b6128117f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6040518060400160405280838152602001821515815250600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000190805190602001906128f59291906158dc565b5060208201518160010160006101000a81548160ff021916908315150217905550905050505050565b6007602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129ca5780601f1061299f576101008083540402835291602001916129ca565b820191906000526020600020905b8154815290600101906020018083116129ad57829003601f168201915b5050505050908060010160009054906101000a900460ff16905082565b6000612a167f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b612a88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000612a9384614b09565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114158015612aeb57507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b612b5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f6164644164647265737300000000000000000000000000000000000000000000815250600a0183805190602001908083835b60208310612bbf5780518252602082019150602081019050602083039250612b9c565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050612c268133614c27565b600354612c3282614c04565b10612d6657612c418285614c27565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600a8152602001807f6164644164647265737300000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612d15578082015181840152602081019050612cfa565b50505050905090810190601f168015612d425780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1612d5b816149dc565b600192505050612d6d565b6000925050505b92915050565b6000612da27f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613e31565b612e14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600560009054906101000a900460ff1615612e97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b8360008111612f0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f76616c7565206e656564203e203000000000000000000000000000000000000081525060200191505060405180910390fd5b84471015612f84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6e6f7420656e6f756768206e617469766520746f6b656e00000000000000000081525060200191505060405180910390fd5b858585604051602001808473ffffffffffffffffffffffffffffffffffffffff1660601b815260140183815260200182805190602001908083835b60208310612fe25780518252602082019150602081019050602083039250612fbf565b6001836020036101000a0380198251168184511680821785525050505050509050019350505050604051602081830303815290604052805190602001208314613093576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f7461736b486173682069732077726f6e6700000000000000000000000000000081525060200191505060405180910390fd5b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae0fd47f600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663478538026040518163ffffffff1660e01b815260040160206040518083038186803b15801561313b57600080fd5b505afa15801561314f573d6000803e3d6000fd5b505050506040513d602081101561316557600080fd5b810190808051906020019092919050505086336004546040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156131dc57600080fd5b505af11580156131f0573d6000803e3d6000fd5b505050506040513d602081101561320657600080fd5b81019080805190602001909291905050509050600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663afd464f26040518163ffffffff1660e01b815260040160206040518083038186803b15801561328157600080fd5b505afa158015613295573d6000803e3d6000fd5b505050506040513d60208110156132ab57600080fd5b8101908080519060200190929190505050811415613383578673ffffffffffffffffffffffffffffffffffffffff167f85c53e7e269cd44a12210170eb2636cdc0d111b93e101a211305e0144733995587876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613343578082015181840152602081019050613328565b50505050905090810190601f1680156133705780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2613679565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166310224a986040518163ffffffff1660e01b815260040160206040518083038186803b1580156133eb57600080fd5b505afa1580156133ff573d6000803e3d6000fd5b505050506040513d602081101561341557600080fd5b8101908080519060200190929190505050811415613678578673ffffffffffffffffffffffffffffffffffffffff167f85c53e7e269cd44a12210170eb2636cdc0d111b93e101a211305e0144733995587876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156134ad578082015181840152602081019050613492565b50505050905090810190601f1680156134da5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff167fd8ff38332185c42ca14ded5671b8eb2842095abf024f6900cb42760ccb438f3387876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561356857808201518184015260208101905061354d565b50505050905090810190601f1680156135955780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f193505050501580156135e9573d6000803e3d6000fd5b50600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635035b622856040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561365f57600080fd5b505af1158015613673573d6000803e3d6000fd5b505050505b5b600192505050949350505050565b600080613695863387615033565b90508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f63333d9ba80d323ed3a2c486809215e8f1fb8c645691606b862787fad572c1c787878734604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561373a57808201518184015260208101905061371f565b50505050905090810190601f1680156137675780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156137a0578082015181840152602081019050613785565b50505050905090810190601f1680156137cd5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a380915050949350505050565b6000600354905090565b60006138237f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b613895576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006138a084614b09565b90507f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b8114806138f557507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b81145b613967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f726573657452657175697265644e756d0000000000000000000000000000000081525060100183805190602001908083835b602083106139c957805182526020820191506020810190506020830392506139a6565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200192505050604051602081830303815290604052805190602001209050613a178133614c27565b600354613a2382614c04565b10613c0157613a31816149dc565b60007f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b831415613a6f57600354905084600381905550613b1a565b7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b831415613aab57600454905084600481905550613b19565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001807f726573657452657175697265644e756d00000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015613bc2578082015181840152602081019050613ba7565b50505050905090810190601f168015613bef5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b60019250505092915050565b613c3a7f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613e31565b613cac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f77726f6e6720706175736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b600083905060008173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613d2457600080fd5b505af1158015613d38573d6000803e3d6000fd5b505050506040513d6020811015613d4e57600080fd5b810190808051906020019092919050505090505050505050565b6006602052806000526040600020600091509050806000018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613e145780601f10613de957610100808354040283529160200191613e14565b820191906000526020600020905b815481529060010190602001808311613df757829003601f168201915b5050505050908060010160009054906101000a900460ff16905082565b600080600090505b6001600085815260200190815260200160002060020180549050811015613ef0578273ffffffffffffffffffffffffffffffffffffffff16600160008681526020019081526020016000206002018281548110613e9257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613ee3576001915050613ef6565b8080600101915050613e39565b50600090505b92915050565b6000806000905060606000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180546001816001161561010002031660029004905014156140cf578573ffffffffffffffffffffffffffffffffffffffff168585604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040527fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061405a5780518252602082019150602081019050602083039250614037565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146140bc576040519150601f19603f3d011682016040523d82523d6000602084013e6140c1565b606091505b508092508193505050614548565b6140d761596a565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141ba5780601f1061418f576101008083540402835291602001916141ba565b820191906000526020600020905b81548152906001019060200180831161419d57829003601f168201915b505050505081526020016001820160009054906101000a900460ff161515151581525050905080602001511561439a578673ffffffffffffffffffffffffffffffffffffffff1681600001518688604051602401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106142785780518252602082019150602081019050602083039250614255565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106143255780518252602082019150602081019050602083039250614302565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614387576040519150601f19603f3d011682016040523d82523d6000602084013e61438c565b606091505b508093508194505050614546565b8673ffffffffffffffffffffffffffffffffffffffff1681600001518787604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106144285780518252602082019150602081019050602083039250614405565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106144d557805182526020820191506020810190506020830392506144b2565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614537576040519150601f19603f3d011682016040523d82523d6000602084013e61453c565b606091505b5080935081945050505b505b8180156145835750600081511480614582575080806020019051602081101561457057600080fd5b81019080805190602001909291905050505b5b6145f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f7769746864726177206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b6001925050509392505050565b60006146317f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613e31565b6146a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006146ae85614b09565b9050600085858560405160200180807f6d6f646966794164647265737300000000000000000000000000000000000000815250600d0184805190602001908083835b6020831061471357805182526020820191506020810190506020830392506146f0565b6001836020036101000a0380198251168184511680821785525050505050509050018373ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1660601b8152601401935050505060405160208183030381529060405280519060200120905061479a8133614c27565b6003546147a682614c04565b106148db576147b6828686615757565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668686866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600d8152602001807f6d6f646966794164647265737300000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b8381101561488a57808201518184015260208101905061486f565b50505050905090810190601f1680156148b75780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a16148d0816149dc565b6001925050506148e2565b6000925050505b9392505050565b600560009054906101000a900460ff1661496b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6149af61587e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600160008281526020019081526020016000206000808201600090556001820160009055600282016000614a109190615986565b505050565b600560009054906101000a900460ff1615614a98576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614adc61587e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600080826040516020018082805190602001908083835b60208310614b435780518252602082019150602081019050602083039250614b20565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209050614b8981615886565b614bfb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c6173730000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b600060016000838152602001908152602001600020600201805490509050919050565b614c318282613e31565b15614ca4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b600054600160008481526020019081526020016000206002018054905010614d34576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b60016000838152602001908152602001600020600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60005b6001600084815260200190815260200160002060020180549050811015614f89578173ffffffffffffffffffffffffffffffffffffffff16600160008581526020019081526020016000206002018281548110614e0b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614f7c57600160008481526020019081526020016000206002016001806000868152602001908152602001600020600201805490500381548110614e8e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008581526020019081526020016000206002018281548110614eda57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016000848152602001908152602001600020600201805480614f4157fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550614f8b565b8080600101915050614db2565b505b5050565b60606001600083815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561502757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614fdd575b50505050509050919050565b6000806000905060606000600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054600181600116156101000203166002900490501415615224578573ffffffffffffffffffffffffffffffffffffffff16853086604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200193505050506040516020818303038152906040527f23b872dd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106151af578051825260208201915060208101905060208303925061518c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114615211576040519150601f19603f3d011682016040523d82523d6000602084013e615216565b606091505b50809250819350505061569d565b61522c61596a565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806040016040529081600082018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561530f5780601f106152e45761010080835404028352916020019161530f565b820191906000526020600020905b8154815290600101906020018083116152f257829003601f168201915b505050505081526020016001820160009054906101000a900460ff16151515158152505090508060200151156154ef578673ffffffffffffffffffffffffffffffffffffffff1681600001518688604051602401808381526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050604051602081830303815290604052906040518082805190602001908083835b602083106153cd57805182526020820191506020810190506020830392506153aa565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061547a5780518252602082019150602081019050602083039250615457565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146154dc576040519150601f19603f3d011682016040523d82523d6000602084013e6154e1565b606091505b50809350819450505061569b565b8673ffffffffffffffffffffffffffffffffffffffff1681600001518787604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052906040518082805190602001908083835b6020831061557d578051825260208201915060208101905060208303925061555a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061562a5780518252602082019150602081019050602083039250615607565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461568c576040519150601f19603f3d011682016040523d82523d6000602084013e615691565b606091505b5080935081945050505b505b8180156156d857506000815114806156d757508080602001905160208110156156c557600080fd5b81019080805190602001909291905050505b5b61574a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f207472616e73666572206661696c65640000000000000000000000000000000081525060200191505060405180910390fd5b6001925050509392505050565b60005b6001600085815260200190815260200160002060020180549050811015615877578273ffffffffffffffffffffffffffffffffffffffff166001600086815260200190815260200160002060020182815481106157b357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561586a578160016000868152602001908152602001600020600201828154811061581c57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050615879565b808060010191505061575a565b505b505050565b600033905090565b600080600090505b6002805490508110156158d15782600282815481106158a957fe5b906000526020600020015414156158c45760019150506158d7565b808060010191505061588e565b50600090505b919050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826159125760008555615959565b82601f1061592b57805160ff1916838001178555615959565b82800160010185558215615959579182015b8281111561595857825182559160200191906001019061593d565b5b50905061596691906159a7565b5090565b6040518060400160405280606081526020016000151581525090565b50805460008255906000526020600020908101906159a491906159a7565b50565b5b808211156159c05760008160009055506001016159a8565b509056fea2646970667358221220175fd30761d46f49bdd013683f3d26a07b057927b3f48644cc55d126254c071864736f6c63430007040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d2b75596a63728d84d341f2e3ce6ddae66810128
-----Decoded View---------------
Arg [0] : _owners (address[]): 0xD2B75596A63728D84D341f2E3ce6ddaE66810128
Arg [1] : _ownerRequired (uint256): 1
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [3] : 000000000000000000000000d2b75596a63728d84d341f2e3ce6ddae66810128
Deployed Bytecode Sourcemap
24936:7214:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29683:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27634:931;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25021:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15251:106;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28573:549;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29413:66;;;;;;;;;;;;;:::i;:::-;;18873:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7585:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29343:62;;;;;;;;;;;;;:::i;:::-;;26203:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17305:891;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29128:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29231:104;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14945:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29876:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30226:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18204:661;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26774:852;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26383:380;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15143:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15365:1046;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29489:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30163:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29683:185;25750:43;12805:66;25768:12;;25782:10;25750:17;:43::i;:::-;25742:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29825:35:::1;;;;;;;;29839:6;29825:35;;;;29846:13;29825:35;;;;::::0;29800:15:::1;:22;29816:5;29800:22;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29683:185:::0;;;:::o;27634:931::-;27820:4;25750:43;12805:66;25768:12;;25782:10;25750:17;:43::i;:::-;25742:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7903:7:::1;;;;;;;;;;;7902:8;7894:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27799:5:::2;26031:1;26022:6;:10;26014:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;27890:2:::3;27893:5;27899;27873:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27862:45;;;;;;27850:8;:57;27842:86;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;27939:14;27956:5;;;;;;;;;;;:17;;;27974:5;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27996:8;28006:10;28018:18;;27956:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27939:98;;28064:5;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;28054:6;:32;28050:486;;;28128:6;28107:42;;28124:2;28107:42;;;28136:5;28143;28107:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28050:486;;;28180:5;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;28170:6;:26;28166:370;;;28282:8;28293:38;28313:6;28321:2;28325:5;28293:18;:38::i;:::-;28282:49;;28374:6;28353:42;;28370:2;28353:42;;;28382:5;28389;28353:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28437:6;28415:43;;28433:2;28415:43;;;28445:5;28452;28415:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28473:5;;;;;;;;;;;:16;;;28490:8;28473:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;28521:3;28514:10;;;;;;28166:370;28050:486;28553:4;28546:11;;;26062:1;7942::::2;27634:931:::0;;;;;;;:::o;25021:38::-;;;;;;;;;;;;;;;;;;;:::o;15251:106::-;15305:7;15331:18;;15324:25;;15251:106;:::o;28573:549::-;8179:7;;;;;;;;;;;8171:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28721:3:::1;28699:26;;:10;:26;;;;28691:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28754:9;28766:44;28780:5;28787:10;28799;28766:13;:44::i;:::-;28754:56;;28824:4;28821:294;;;28844:17;28891:5;28874:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28864:34;;;;;;28844:54;;13139:66;28929:9;;28916;:22;28913:191;;;28978:10;28958:5;;:31;;;;;;;;;;;;;;;;;;28913:191;;;13028:66;29026:9;;29013;:22;29010:94;;;29055:5;;;;;;;;;;;:21;;;29077:10;29055:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29010:94;28913:191;28821:294;;8222:1;28573:549:::0;;;:::o;29413:66::-;25881:41;12917:66;25899:10;;25911;25881:17;:41::i;:::-;25873:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29461:10:::1;:8;:10::i;:::-;29413:66::o:0;18873:170::-;18935:4;13909:40;12691:66;13927:9;;13938:10;13909:17;:40::i;:::-;13901:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18951:20:::1;18962:8;18951:10;:20::i;:::-;18987:26;19004:8;18987:26;;;;;;;;;;;;;;;;;;19031:4;19024:11;;18873:170:::0;;;:::o;7585:78::-;7624:4;7648:7;;;;;;;;;;;7641:14;;7585:78;:::o;29343:62::-;25881:41;12917:66;25899:10;;25911;25881:17;:41::i;:::-;25873:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29389:8:::1;:6;:8::i;:::-;29343:62::o:0;26203:172::-;26323:10;26309:58;;;26335:9;26346:14;26361:5;26309:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26203:172;;:::o;17305:891::-;17393:4;13909:40;12691:66;13927:9;;13938:10;13909:17;:40::i;:::-;13901:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17409:17:::1;17429:19;17442:5;17429:12;:19::i;:::-;17409:39;;13028:66;17480:9;;17467;:22;;:48;;;;;13139:66;17506:9;;17493;:22;;17467:48;17459:72;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17550:40;17568:9;17579:10;17550:17;:40::i;:::-;17542:74;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;12691:66;17646:9;;17633;:22;17629:123;;;17711:15;;17678:30;17698:9;17678:19;:30::i;:::-;:48;17670:82;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17629:123;17765:16;17826:5;17833:10;17794:50;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17784:61;;;;;;17765:80;;17856:36;17871:8;17881:10;17856:14;:36::i;:::-;17940:15;;17907:29;17927:8;17907:19;:29::i;:::-;:48;17903:263;;17972:43;17993:9;18004:10;17972:20;:43::i;:::-;18035:58;18063:5;18070:10;18082;18035:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18108:20;18119:8;18108:10;:20::i;:::-;18150:4;18143:11;;;;;;17903:263;18183:5;18176:12;;;;13987:1;17305:891:::0;;;;:::o;29128:95::-;29175:7;29209:5;;;;;;;;;;;29194:21;;29128:95;:::o;29231:104::-;29278:7;29304:5;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29297:30;;29231:104;:::o;14945:190::-;15014:16;15043:17;15063:19;15076:5;15063:12;:19::i;:::-;15043:39;;15100:27;15117:9;15100:16;:27::i;:::-;15093:34;;;14945:190;;;:::o;29876:187::-;25750:43;12805:66;25768:12;;25782:10;25750:17;:43::i;:::-;25742:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30020:35:::1;;;;;;;;30034:6;30020:35;;;;30041:13;30020:35;;;;::::0;29994:16:::1;:23;30011:5;29994:23;;;;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29876:187:::0;;;:::o;30226:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18204:661::-;18291:4;13909:40;12691:66;13927:9;;13938:10;13909:17;:40::i;:::-;13901:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18307:17:::1;18327:19;18340:5;18327:12;:19::i;:::-;18307:39;;13028:66;18378:9;;18365;:22;;:48;;;;;13139:66;18404:9;;18391;:22;;18365:48;18357:72;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;18442:16;18502:5;18509:10;18471:49;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18461:60;;;;;;18442:79;;18532:36;18547:8;18557:10;18532:14;:36::i;:::-;18616:15;;18583:29;18603:8;18583:19;:29::i;:::-;:48;18579:256;;18648:37;18663:9;18674:10;18648:14;:37::i;:::-;18705:57;18732:5;18739:10;18751;18705:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18777:20;18788:8;18777:10;:20::i;:::-;18819:4;18812:11;;;;;;18579:256;18852:5;18845:12;;;;13987:1;18204:661:::0;;;;:::o;26774:852::-;26952:4;25750:43;12805:66;25768:12;;25782:10;25750:17;:43::i;:::-;25742:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7903:7:::1;;;;;;;;;;;7902:8;7894:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26932:5:::2;26031:1;26022:6;:10;26014:37;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;27007:5:::3;26982:21;:30;;26974:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;27099:2;27102:5;27108;27082:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27071:45;;;;;;27059:8;:57;27051:86;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;27148:14;27165:5;;;;;;;;;;;:17;;;27183:5;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27205:8;27215:10;27227:18;;27165:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27148:98;;27273:5;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27263:6;:32;27259:338;;;27334:2;27316:35;;;27338:5;27345;27316:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27259:338;;;27382:5;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;27372:6;:26;27368:229;;;27438:2;27420:35;;;27442:5;27449;27420:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27494:2;27475:36;;;27498:5;27505;27475:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27526:2;:11;;:18;27538:5;27526:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;27559:5;;;;;;;;;;;:16;;;27576:8;27559:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;27368:229;27259:338;27614:4;27607:11;;;7942:1:::2;26774:852:::0;;;;;;:::o;26383:380::-;26508:4;26589:8;26600:45;26618:6;26627:10;26639:5;26600:17;:45::i;:::-;26589:56;;26693:6;26661:73;;26674:10;26661:73;;;26686:5;26701:14;26717:5;26724:9;26661:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26752:3;26745:10;;;26383:380;;;;;;:::o;15143:100::-;15194:7;15220:15;;15213:22;;15143:100;:::o;15365:1046::-;15459:4;13909:40;12691:66;13927:9;;13938:10;13909:17;:40::i;:::-;13901:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15475:17:::1;15495:19;15508:5;15495:12;:19::i;:::-;15475:39;;12805:66;15547:12;;15534:9;:25;15533:55;;;;12691:66;15578:9;;15565;:22;15533:55;15525:79;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15617:16;15683:5;15690:11;15646:56;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15636:67;;;;;;15617:86;;15714:36;15729:8;15739:10;15714:14;:36::i;:::-;15800:15;;15767:29;15787:8;15767:19;:29::i;:::-;:48;15763:619;;15832:20;15843:8;15832:10;:20::i;:::-;15867:19;12691:66;15922:9;;15909;:22;15905:370;;;15966:15;;15952:29;;16018:11;16000:15;:29;;;;15905:370;;;12805:66;16081:12;;16068:9;:25;16064:211;;;16128:18;;16114:32;;16186:11;16165:18;:32;;;;16064:211;;;16238:21;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;16064:211;15905:370;16294:76;16338:5;16345:11;16358;16294:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15763:619;;16399:4;16392:11;;;;15365:1046:::0;;;;:::o;29489:184::-;25881:41;12917:66;25899:10;;25911;25881:17;:41::i;:::-;25873:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29585:13:::1;29608:5;29585:29;;29625:12;29640:6;:15;;;29656:2;29659:5;29640:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;29625:40;;25950:1;;29489:184:::0;;;:::o;30163:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9099:291::-;9182:4;9202:9;9214:1;9202:13;;9198:162;9221:9;:14;9231:3;9221:14;;;;;;;;;;;:24;;:31;;;;9217:1;:35;9198:162;;;9307:11;9276:42;;:9;:14;9286:3;9276:14;;;;;;;;;;;:24;;9301:1;9276:27;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;9273:75;;;9344:4;9337:11;;;;;9273:75;9254:3;;;;;;;9198:162;;;;9377:5;9370:12;;9099:291;;;;;:::o;31249:898::-;31338:4;31354:11;31368:5;31354:19;;31384:25;31472:1;31430:16;:23;31447:5;31430:23;;;;;;;;;;;;;;;:32;;31424:46;;;;;;;;;;;;;;;;:49;31420:586;;;31512:5;:10;;31575:3;31579:6;31523:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31512:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31489:98;;;;;;;;31420:586;;;31628:30;;:::i;:::-;31661:16;:23;31678:5;31661:23;;;;;;;;;;;;;;;31628:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31703:9;:22;;;31699:296;;;31769:5;:10;;31805:9;:18;;;31824:6;31831:3;31780:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31769:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31745:91;;;;;;;;31699:296;;;31913:5;:10;;31948:9;:18;;;31967:3;31971:6;31924:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31913:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31890:89;;;;;;;;31699:296;31420:586;;32026:6;:72;;;;;32060:1;32037:12;:19;:24;:60;;;;32076:12;32065:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32037:60;32026:72;32018:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32135:4;32128:11;;;;31249:898;;;;;:::o;16419:635::-;16531:4;13909:40;12691:66;13927:9;;13938:10;13909:17;:40::i;:::-;13901:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16547:17:::1;16567:19;16580:5;16567:12;:19::i;:::-;16547:39;;16597:16;16660:5;16667:10;16679;16626:64;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16616:75;;;;;;16597:94;;16702:36;16717:8;16727:10;16702:14;:36::i;:::-;16786:15;;16753:29;16773:8;16753:19;:29::i;:::-;:48;16749:275;;16818:53;16837:9;16848:10;16860;16818:18;:53::i;:::-;16891:60;16921:5;16928:10;16940;16891:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16966:20;16977:8;16966:10;:20::i;:::-;17008:4;17001:11;;;;;;16749:275;17041:5;17034:12;;;;13987:1;16419:635:::0;;;;;:::o;8634:120::-;8179:7;;;;;;;;;;;8171:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8703:5:::1;8693:7;;:15;;;;;;;;;;;;;;;;;;8724:22;8733:12;:10;:12::i;:::-;8724:22;;;;;;;;;;;;;;;;;;;;8634:120::o:0;10890:81::-;10949:9;:14;10959:3;10949:14;;;;;;;;;;;;10942:21;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;10890:81;:::o;8375:118::-;7903:7;;;;;;;;;;;7902:8;7894:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8445:4:::1;8435:7;;:14;;;;;;;;;;;;;;;;;;8465:20;8472:12;:10;:12::i;:::-;8465:20;;;;;;;;;;;;;;;;;;;;8375:118::o:0;17062:235::-;17127:7;17146:17;17193:5;17176:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17166:34;;;;;;17146:54;;17219:25;17234:9;17219:14;:25::i;:::-;17211:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17280:9;17273:16;;;17062:235;;;:::o;9729:129::-;9793:7;9819:9;:14;9829:3;9819:14;;;;;;;;;;;:24;;:31;;;;9812:38;;9729:129;;;:::o;10048:296::-;10134:35;10152:3;10157:11;10134:17;:35::i;:::-;10133:36;10125:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10244:16;;10210:9;:14;10220:3;10210:14;;;;;;;;;;;:24;;:31;;;;:50;10202:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10294:9;:14;10304:3;10294:14;;;;;;;;;;;:24;;10324:11;10294:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10048:296;;:::o;10459:423::-;10547:9;10543:332;10566:9;:14;10576:3;10566:14;;;;;;;;;;;:24;;:31;;;;10562:1;:35;10543:332;;;10652:11;10621:42;;:9;:14;10631:3;10621:14;;;;;;;;;;;:24;;10646:1;10621:27;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;10618:246;;;10713:9;:14;10723:3;10713:14;;;;;;;;;;;:24;;10772:1;10738:9;:14;10748:3;10738:14;;;;;;;;;;;:24;;:31;;;;:35;10713:61;;;;;;;;;;;;;;;;;;;;;;;;;10683:9;:14;10693:3;10683:14;;;;;;;;;;;:24;;10708:1;10683:27;;;;;;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;10793:9;:14;10803:3;10793:14;;;;;;;;;;;:24;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10842:7;;;10618:246;10599:3;;;;;;;10543:332;;;;10459:423;;;:::o;9396:128::-;9457:16;9492:9;:14;9502:3;9492:14;;;;;;;;;;;:24;;9485:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9396:128;;;:::o;30292:949::-;30382:4;30398:11;30412:5;30398:19;;30428:25;30517:1;30474:15;:22;30490:5;30474:22;;;;;;;;;;;;;;;:31;;30468:45;;;;;;;;;;;;;;;;:50;30464:609;;;30557:5;:10;;30632:5;30638:4;30643:6;30568:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30557:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30534:117;;;;;;;;30464:609;;;30692:30;;:::i;:::-;30725:15;:22;30741:5;30725:22;;;;;;;;;;;;;;;30692:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30766:9;:22;;;30762:300;;;30833:5;:10;;30868:9;:18;;;30887:6;30894:5;30844:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30833:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30808:93;;;;;;;;30762:300;;;30978:5;:10;;31013:9;:18;;;31032:5;31038:6;30989:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30978:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30955:91;;;;;;;;30762:300;30464:609;;31105:6;:72;;;;;31139:1;31116:12;:19;:24;:60;;;;31155:12;31144:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31116:60;31105:72;31083:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31229:4;31222:11;;;;30292:949;;;;;:::o;10979:351::-;11090:9;11086:237;11109:9;:14;11119:3;11109:14;;;;;;;;;;;:24;;:31;;;;11105:1;:35;11086:237;;;11195:11;11164:42;;:9;:14;11174:3;11164:14;;;;;;;;;;;:24;;11189:1;11164:27;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;11161:151;;;11256:15;11226:9;:14;11236:3;11226:14;;;;;;;;;;;:24;;11251:1;11226:27;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;11290:7;;;11161:151;11142:3;;;;;;;11086:237;;;;10979:351;;;;:::o;6136:106::-;6189:15;6224:10;6217:17;;6136:106;:::o;14720:217::-;14781:4;14803:9;14815:1;14803:13;;14798:108;14822:14;:21;;;;14818:1;:25;14798:108;;;14888:5;14867:14;14882:1;14867:17;;;;;;;;;;;;;;;;:26;14863:43;;;14902:4;14895:11;;;;;14863:43;14845:3;;;;;;;14798:108;;;;14924:5;14917:12;;14720:217;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://175fd30761d46f49bdd013683f3d26a07b057927b3f48644cc55d126254c0718
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 98.16% | $3,208.1 | 0.8447 | $2,709.79 |
ETH | 0.64% | $17,572.67 | 0.001 | $17.57 | |
ETH | 0.24% | $24.13 | 0.275 | $6.64 | |
ETH | 0.22% | $308.53 | 0.02 | $6.17 | |
ETH | 0.15% | $71.16 | 0.06 | $4.27 | |
ETH | 0.12% | $11.25 | 0.3 | $3.38 | |
ETH | 0.05% | $15.16 | 0.096 | $1.46 | |
ETH | 0.03% | $0.019171 | 50.0029 | $0.9586 | |
ETH | 0.03% | $1.22 | 0.7 | $0.854 | |
ETH | 0.03% | $1.51 | 0.5 | $0.755 | |
ETH | 0.03% | $0.873158 | 0.8618 | $0.7524 | |
ETH | 0.03% | $0.00072 | 1,000 | $0.7202 | |
ETH | <0.01% | $0.75137 | 0.3 | $0.2254 | |
ETH | <0.01% | $0.000019 | 8,223 | $0.1537 | |
BSC | 0.23% | $0.684583 | 9.2177 | $6.31 | |
BSC | 0.01% | $0.028705 | 10 | $0.287 | |
BSC | <0.01% | $0.00004 | 5,000 | $0.2021 | |
BSC | <0.01% | $664.79 | 0.00000372 | $0.002476 | |
FTM | <0.01% | $0.501047 | 0.0009 | $0.000451 | |
OP | <0.01% | $3,209.79 | 0.00000001 | $0.000032 |
Loading...
Loading
[ Download: CSV Export ]
[ 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.