Polygon Sponsored slots available. Book your slot here!
Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
XP
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.8.0; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "./lib/BasicMetaTransaction.sol"; import "./Admin.sol"; contract XP is Pausable, BasicMetaTransaction, Admin { using SafeMath for uint256; // Potential statuses of an asset enum ProjectStatus { NonExistant, Running, Paused } enum Direction { increase, decrease } event ProjectCreated( bytes32 indexed projectId, string name, address creator, Action[] actions, address[] owners, address[] updaters ); event NewActions(bytes32 projectId, Action[] actions); event UpdateScore( bytes32 updateId, bytes32 projectId, address targetAddress, uint256 newPoints, uint256 pointChange, Direction direction, string actionName, string scoreType, string[] scoreTypes // All score types for the project ); event UpdateScoreFailed( bytes32 updateId, bytes32 projectId, address targetAddress ); event ProjectUpdaterAdded(bytes32 projectId, address newUpdater); event ProjectUpdaterRemoved(bytes32 projectId, address updaterRemoved); struct Action { string name; uint256 points; Direction direction; bool isValid; } struct ScoreBoard { string[] types; // keeps scores for different types, dynamic list of types, futureproof, if you would like to track score for different things on the platform, creator score vs collector score etc. mapping(string => bool) scoreToIsAdded; mapping(string => uint256) scores; } /* A project is an instance of an XP system */ struct Project { bytes32 id; string name; mapping(string => Action) nameToAction; Action[] actions; address[] owners; mapping(address => bool) isAddressOwner; // used to check if an address is an owner address[] updaters; // contracts and wallets allowed to update the score mapping(address => bool) isAddressUpdater; // used to check if an address is an updater ProjectStatus status; // allow the owner of this to pause project updates mapping(address => ScoreBoard) addressToScoreBoard; mapping(bytes32 => bool) updateIdToDoesExist; mapping(string => bool) scoreTypeToDoesExist; string[] scoreTypes; } bytes32[] projectIds; // keeps track of all project ids // Mapping of all the exists projects mapping(bytes32 => Project) public idToProject; // ************************ OWNER ONLY CALLABLE FUNCTIONS ******************************* function pause() external onlyOwner whenNotPaused { _pause(); // from Pausable.sol } function unpause() external onlyOwner whenPaused { _unpause(); //from Pausable.sol } // ************************ END ---- OWNER ONLY CALLABLE FUNCTIONS ----- END ******************************* function createProject( bytes32 _projectId, string memory _name, Action[] memory _inputActions, address[] memory _owners, address[] memory _updaters ) public whenNotPaused returns (bytes32) { require( idToProject[_projectId].status == ProjectStatus.NonExistant, "Project already exists" ); require(_inputActions.length <= 20, "Can submit up to 20 actions"); Project storage newProject = idToProject[_projectId]; newProject.id = _projectId; newProject.name = _name; newProject.owners = _owners; newProject.updaters = _updaters; newProject.status = ProjectStatus.Running; // Loops through and add actions 1 by 1, limit actions list to 20 for (uint256 i = 0; i < _inputActions.length; i++) { newProject.actions.push( Action( _inputActions[i].name, _inputActions[i].points, _inputActions[i].direction, true ) ); // Mapping points each name to the action object associated newProject.nameToAction[_inputActions[i].name] = Action( _inputActions[i].name, _inputActions[i].points, _inputActions[i].direction, true ); } for (uint256 j = 0; j < _owners.length; j++) { // Owners array placed into mapping newProject.isAddressOwner[_owners[j]] = true; } for (uint256 k = 0; k < _updaters.length; k++) { // Owners array placed into mapping newProject.isAddressUpdater[_updaters[k]] = true; } projectIds.push(_projectId); emit ProjectCreated( _projectId, _name, msgSender(), newProject.actions, _owners, _updaters ); return newProject.id; } function addProjectUpdater(bytes32 _projectId, address _newUpdater) public whenNotPaused { require( (idToProject[_projectId].isAddressOwner[msgSender()] || owner() == msgSender() || isAdmin(msgSender()) == true), "You must be an owner of the project" ); idToProject[_projectId].isAddressUpdater[_newUpdater] = true; idToProject[_projectId].updaters.push(_newUpdater); emit ProjectUpdaterAdded(_projectId, _newUpdater); } function removeProjectUpdater(bytes32 _projectId, address _updater) public whenNotPaused { require( (idToProject[_projectId].isAddressOwner[msgSender()] || owner() == msgSender() || isAdmin(msgSender()) == true), "You must be an owner of the project" ); require( idToProject[_projectId].isAddressUpdater[_updater] == true, "This address is not an updater." ); idToProject[_projectId].isAddressUpdater[_updater] = false; for (uint256 i = 0; i < idToProject[_projectId].updaters.length; i++) { if (idToProject[_projectId].updaters[i] == _updater) { delete idToProject[_projectId].updaters[i]; break; } } emit ProjectUpdaterRemoved(_projectId, _updater); } function pauseProject(bytes32 _projectId) public whenNotPaused { require( (idToProject[_projectId].isAddressOwner[msgSender()] || owner() == msgSender() || isAdmin(msgSender()) == true), "You must be an owner of the project" ); idToProject[_projectId].status = ProjectStatus.Paused; } function resumeProject(bytes32 _projectId) public whenNotPaused { require( (idToProject[_projectId].isAddressOwner[msgSender()] || owner() == msgSender() || isAdmin(msgSender()) == true), "You must be an owner of the project" ); idToProject[_projectId].status = ProjectStatus.Running; } /* Add new action types to project scoreboards */ function addActions(bytes32 _projectId, Action[] memory _inputActions) public whenNotPaused { require( idToProject[_projectId].status != ProjectStatus.NonExistant, "Project does not exist" ); require( (idToProject[_projectId].isAddressOwner[msgSender()] || owner() == msgSender() || isAdmin(msgSender()) == true), "You must be an owner of the project to update actions" ); require(_inputActions.length <= 20, "Can submit up to 20 actions"); // Loops through and add actions 1 by 1, limit actions list to 20 Project storage project = idToProject[_projectId]; for (uint256 i = 0; i < _inputActions.length; i++) { if (idToProject[_projectId].nameToAction[_inputActions[i].name].isValid) { // Action exists, only need to update project.nameToAction[_inputActions[i].name] = Action( _inputActions[i].name, _inputActions[i].points, _inputActions[i].direction, true ); } else { //Action does not exist so update it in the mapping as well as the actions list project.actions.push( Action( _inputActions[i].name, _inputActions[i].points, _inputActions[i].direction, true ) ); //List of actions to loop through. project.nameToAction[_inputActions[i].name] = Action( _inputActions[i].name, _inputActions[i].points, _inputActions[i].direction, true ); } } emit NewActions(_projectId, _inputActions); } function updateScore( bytes32 _updateId, bytes32 _projectId, string memory _actionName, string memory _scoreType, address _targetWallet ) public whenNotPaused { require( idToProject[_projectId].status == ProjectStatus.Running, "Project is not active" ); require( (idToProject[_projectId].isAddressOwner[msgSender()] || idToProject[_projectId].isAddressUpdater[msgSender()] || owner() == msgSender() || isAdmin(msgSender()) == true), "You must be either an owner or an updater to use this function" ); require( idToProject[_projectId].nameToAction[_actionName].isValid, "Action must exist" ); bytes32 currentProjectId = _projectId; if (idToProject[currentProjectId].updateIdToDoesExist[_updateId] == false) { idToProject[currentProjectId].updateIdToDoesExist[_updateId] = true; if ( idToProject[currentProjectId].scoreTypeToDoesExist[_scoreType] == false ) { idToProject[currentProjectId].scoreTypeToDoesExist[_scoreType] = true; idToProject[currentProjectId].scoreTypes.push(_scoreType); } Action memory currAction = idToProject[currentProjectId].nameToAction[ _actionName ]; ScoreBoard storage currScoreboard = idToProject[currentProjectId] .addressToScoreBoard[_targetWallet]; if (currScoreboard.scoreToIsAdded[_scoreType] == false) { currScoreboard.scoreToIsAdded[_scoreType] = true; currScoreboard.types.push(_scoreType); } if (currAction.direction == Direction.increase) { currScoreboard.scores[_scoreType] = currScoreboard .scores[_scoreType] .add(currAction.points); } else if (currAction.direction == Direction.decrease) { //check if score will go below zero, if so then set it to 0 (lower limit); if (currAction.points >= currScoreboard.scores[_scoreType]) { currScoreboard.scores[_scoreType] = uint256(0); } else { currScoreboard.scores[_scoreType] = currScoreboard .scores[_scoreType] .sub(currAction.points); //score update } } else { return; } emit UpdateScore( _updateId, currentProjectId, _targetWallet, currScoreboard.scores[_scoreType], currAction.points, currAction.direction, _actionName, _scoreType, idToProject[currentProjectId].scoreTypes ); } else { emit UpdateScoreFailed(_updateId, currentProjectId, _targetWallet); } } /* Returns specific score for a user (must specift score type) */ function getScore( bytes32 _projectId, string memory _scoreType, address _targetWallet ) external view returns (uint256) { return idToProject[_projectId].addressToScoreBoard[_targetWallet].scores[ _scoreType ]; } function getScoreTypesFromScoreboard( bytes32 _projectId, address _targetWallet ) external view returns (string[] memory) { return idToProject[_projectId].addressToScoreBoard[_targetWallet].types; } function getActionsFromProjectId(bytes32 _projectId) external view returns (Action[] memory) { return idToProject[_projectId].actions; } function getUpdatersFromProjectId(bytes32 _projectId) external view returns (address[] memory) { return idToProject[_projectId].updaters; } }
pragma solidity ^0.8.0; pragma experimental ABIEncoderV2; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; contract BasicMetaTransaction { using SafeMath for uint256; event MetaTransactionExecuted( address userAddress, address payable relayerAddress, bytes functionSignature ); mapping(address => uint256) nonces; function getChainID() public view returns (uint256) { uint256 id; assembly { id := chainid() } return id; } /** * Main function to be called when user wants to execute meta transaction. * The actual function to be called should be passed as param with name functionSignature * Here the basic signature recovery is being used. Signature is expected to be generated using * personal_sign method. * @param userAddress Address of user trying to do meta transaction * @param functionSignature Signature of the actual function to be called via meta transaction * @param sigR R part of the signature * @param sigS S part of the signature * @param sigV V part of the signature */ function executeMetaTransaction( address userAddress, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public payable returns (bytes memory) { require( verify( userAddress, nonces[userAddress], getChainID(), functionSignature, sigR, sigS, sigV ), "Signer and signature do not match" ); nonces[userAddress] = nonces[userAddress].add(1); // Append userAddress at the end to extract it from calling context (bool success, bytes memory returnData) = address(this).call( abi.encodePacked(functionSignature, userAddress) ); require(success, "Function call not successfull"); emit MetaTransactionExecuted( userAddress, payable(msg.sender), functionSignature ); return returnData; } function getNonce(address user) public view returns (uint256 nonce) { nonce = nonces[user]; } // Builds a prefixed hash to mimic the behavior of eth_sign. function prefixed(bytes32 hash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } function verify( address owner, uint256 nonce, uint256 chainID, bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV ) public view returns (bool) { bytes32 hash = prefixed( keccak256(abi.encodePacked(nonce, this, chainID, functionSignature)) ); address signer = ecrecover(hash, sigV, sigR, sigS); require(signer != address(0), "Invalid signature"); return (owner == signer); } function msgSender() internal view returns (address sender) { if (msg.sender == address(this)) { bytes memory array = msg.data; uint256 index = msg.data.length; assembly { // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those. sender := and( mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff ) } } else { return msg.sender; } } }
pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; contract Admin is Ownable { // Contract level admins mapping(address => bool) addressToIsAdmin; address[] public admins; function isAdmin(address _user) internal view returns (bool) { return addressToIsAdmin[_user]; } function addAdmin(address _newAdmin) external onlyOwner { addressToIsAdmin[_newAdmin] = true; admins.push(_newAdmin); } function removeAdmin(address _removeAdmin) external onlyOwner { addressToIsAdmin[_removeAdmin] = false; for (uint256 i = 0; i < admins.length; i++) { if (admins[i] == _removeAdmin) { delete admins[i]; break; } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^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 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 payable(msg.sender); } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @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() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual 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()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "istanbul", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address payable","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"projectId","type":"bytes32"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"enum XP.Direction","name":"direction","type":"uint8"},{"internalType":"bool","name":"isValid","type":"bool"}],"indexed":false,"internalType":"struct XP.Action[]","name":"actions","type":"tuple[]"}],"name":"NewActions","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"projectId","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"enum XP.Direction","name":"direction","type":"uint8"},{"internalType":"bool","name":"isValid","type":"bool"}],"indexed":false,"internalType":"struct XP.Action[]","name":"actions","type":"tuple[]"},{"indexed":false,"internalType":"address[]","name":"owners","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"updaters","type":"address[]"}],"name":"ProjectCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"projectId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"newUpdater","type":"address"}],"name":"ProjectUpdaterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"projectId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"updaterRemoved","type":"address"}],"name":"ProjectUpdaterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"updateId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"projectId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"targetAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"newPoints","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"pointChange","type":"uint256"},{"indexed":false,"internalType":"enum XP.Direction","name":"direction","type":"uint8"},{"indexed":false,"internalType":"string","name":"actionName","type":"string"},{"indexed":false,"internalType":"string","name":"scoreType","type":"string"},{"indexed":false,"internalType":"string[]","name":"scoreTypes","type":"string[]"}],"name":"UpdateScore","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"updateId","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"projectId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"targetAddress","type":"address"}],"name":"UpdateScoreFailed","type":"event"},{"inputs":[{"internalType":"bytes32","name":"_projectId","type":"bytes32"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"enum XP.Direction","name":"direction","type":"uint8"},{"internalType":"bool","name":"isValid","type":"bool"}],"internalType":"struct XP.Action[]","name":"_inputActions","type":"tuple[]"}],"name":"addActions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_projectId","type":"bytes32"},{"internalType":"address","name":"_newUpdater","type":"address"}],"name":"addProjectUpdater","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"admins","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_projectId","type":"bytes32"},{"internalType":"string","name":"_name","type":"string"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"enum XP.Direction","name":"direction","type":"uint8"},{"internalType":"bool","name":"isValid","type":"bool"}],"internalType":"struct XP.Action[]","name":"_inputActions","type":"tuple[]"},{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"address[]","name":"_updaters","type":"address[]"}],"name":"createProject","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_projectId","type":"bytes32"}],"name":"getActionsFromProjectId","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"enum XP.Direction","name":"direction","type":"uint8"},{"internalType":"bool","name":"isValid","type":"bool"}],"internalType":"struct XP.Action[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChainID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_projectId","type":"bytes32"},{"internalType":"string","name":"_scoreType","type":"string"},{"internalType":"address","name":"_targetWallet","type":"address"}],"name":"getScore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_projectId","type":"bytes32"},{"internalType":"address","name":"_targetWallet","type":"address"}],"name":"getScoreTypesFromScoreboard","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_projectId","type":"bytes32"}],"name":"getUpdatersFromProjectId","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"idToProject","outputs":[{"internalType":"bytes32","name":"id","type":"bytes32"},{"internalType":"string","name":"name","type":"string"},{"internalType":"enum XP.ProjectStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_projectId","type":"bytes32"}],"name":"pauseProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_removeAdmin","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_projectId","type":"bytes32"},{"internalType":"address","name":"_updater","type":"address"}],"name":"removeProjectUpdater","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_projectId","type":"bytes32"}],"name":"resumeProject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_updateId","type":"bytes32"},{"internalType":"bytes32","name":"_projectId","type":"bytes32"},{"internalType":"string","name":"_actionName","type":"string"},{"internalType":"string","name":"_scoreType","type":"string"},{"internalType":"address","name":"_targetWallet","type":"address"}],"name":"updateScore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"chainID","type":"uint256"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060008060006101000a81548160ff0219169083151502179055506200004c620000406200005260201b60201c565b6200005a60201b60201c565b62000120565b600033905090565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b615fc880620001306000396000f3fe6080604052600436106101665760003560e01c80635c975abb116100d15780638696355c1161008a578063b70ac26711610064578063b70ac2671461052d578063c34fb83f14610556578063c72884f514610593578063f2fde38b146105d057610166565b80638696355c146104b05780638da5cb5b146104d95780638dffc7b81461050457610166565b80635c975abb146103c85780636281133d146103f35780637048027514610430578063715018a6146104595780637fdaad76146104705780638456cb591461049957610166565b806334399a781161012357806334399a78146102a45780633f4ba83a146102cd57806347348b6e146102e45780634bb6e0281461032157806354eb66f914610360578063564b81ef1461039d57610166565b80630b0e17cf1461016b5780630c53c51c146101a857806314bfd6d0146101d85780631785f53c146102155780631c6c5a861461023e5780632d0335ab14610267575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d919061446a565b6105f9565b60405161019f919061538e565b60405180910390f35b6101c260048036038101906101bd9190614325565b61069d565b6040516101cf91906155df565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190614708565b6108e1565b60405161020c919061531a565b60405180910390f35b34801561022157600080fd5b5061023c600480360381019061023791906142fc565b610920565b005b34801561024a57600080fd5b506102656004803603810190610260919061446a565b610b1f565b005b34801561027357600080fd5b5061028e600480360381019061028991906142fc565b610cd8565b60405161029b9190615870565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c691906144cf565b610d21565b005b3480156102d957600080fd5b506102e26116e1565b005b3480156102f057600080fd5b5061030b600480360381019061030691906145ca565b6117ae565b6040516103189190615870565b60405180910390f35b34801561032d57600080fd5b506103486004803603810190610343919061446a565b61182c565b6040516103579392919061555c565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190614631565b6118eb565b604051610394919061540f565b60405180910390f35b3480156103a957600080fd5b506103b2612146565b6040516103bf9190615870565b60405180910390f35b3480156103d457600080fd5b506103dd612153565b6040516103ea91906153f4565b60405180910390f35b3480156103ff57600080fd5b5061041a600480360381019061041591906143b4565b612169565b60405161042791906153f4565b60405180910390f35b34801561043c57600080fd5b50610457600480360381019061045291906142fc565b6122a4565b005b34801561046557600080fd5b5061046e6123de565b005b34801561047c57600080fd5b5061049760048036038101906104929190614493565b612466565b005b3480156104a557600080fd5b506104ae6126d7565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190614523565b6127a5565b005b3480156104e557600080fd5b506104ee61319c565b6040516104fb919061531a565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190614493565b6131c6565b005b34801561053957600080fd5b50610554600480360381019061054f919061446a565b6135cb565b005b34801561056257600080fd5b5061057d60048036038101906105789190614493565b613784565b60405161058a91906153b0565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b5919061446a565b6138b4565b6040516105c791906153d2565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f291906142fc565b613a67565b005b60606006600083815260200190815260200160002060060180548060200260200160405190810160405280929190818152602001828054801561069157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610647575b50505050509050919050565b60606106f486600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106eb612146565b88888888612169565b610733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072a90615750565b60405180910390fd5b61078560018060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b5f90919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000803073ffffffffffffffffffffffffffffffffffffffff1687896040516020016107f592919061526b565b6040516020818303038152906040526040516108119190615254565b6000604051808303816000865af19150503d806000811461084e576040519150601f19603f3d011682016040523d82523d6000602084013e610853565b606091505b509150915081610898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088f906156b0565b60405180910390fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8833896040516108cb93929190615350565b60405180910390a1809250505095945050505050565b600481815481106108f157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610928613b75565b73ffffffffffffffffffffffffffffffffffffffff1661094661319c565b73ffffffffffffffffffffffffffffffffffffffff161461099c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099390615730565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b600480549050811015610b1b578173ffffffffffffffffffffffffffffffffffffffff1660048281548110610a55577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b085760048181548110610ad6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055610b1b565b8080610b1390615d72565b9150506109f7565b5050565b610b27612153565b15610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e906156f0565b60405180910390fd5b600660008281526020019081526020016000206005016000610b87613b7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610c135750610bdd613b7d565b73ffffffffffffffffffffffffffffffffffffffff16610bfb61319c565b73ffffffffffffffffffffffffffffffffffffffff16145b80610c31575060011515610c2d610c28613b7d565b613c33565b1515145b610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6790615790565b60405180910390fd5b60026006600083815260200190815260200160002060080160006101000a81548160ff02191690836002811115610cd0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d29612153565b15610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d60906156f0565b60405180910390fd5b60006002811115610da3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6006600084815260200190815260200160002060080160009054906101000a900460ff166002811115610dff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906157f0565b60405180910390fd5b600660008381526020019081526020016000206005016000610e60613b7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680610eec5750610eb6613b7d565b73ffffffffffffffffffffffffffffffffffffffff16610ed461319c565b73ffffffffffffffffffffffffffffffffffffffff16145b80610f0a575060011515610f06610f01613b7d565b613c33565b1515145b610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4090615810565b60405180910390fd5b601481511115610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8590615830565b60405180910390fd5b600060066000848152602001908152602001600020905060005b82518110156116a25760066000858152602001908152602001600020600201838281518110611000577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600001516040516110199190615293565b908152602001604051809103902060020160019054906101000a900460ff161561126e576040518060800160405280848381518110611081577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516000015181526020018483815181106110cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151602001518152602001848381518110611115577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604001516001811115611159577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160011515815250826002018483815181106111a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600001516040516111bb9190615293565b908152602001604051809103902060008201518160000190805190602001906111e5929190613ed8565b506020820151816001015560408201518160020160006101000a81548160ff02191690836001811115611241577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060608201518160020160016101000a81548160ff02191690831515021790555090505061168f565b8160030160405180608001604052808584815181106112b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600001518152602001858481518110611300577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160200151815260200185848151811061134a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160400151600181111561138e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160011515815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000190805190602001906113df929190613ed8565b506020820151816001015560408201518160020160006101000a81548160ff0219169083600181111561143b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060608201518160020160016101000a81548160ff021916908315150217905550505060405180608001604052808483815181106114a6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516000015181526020018483815181106114f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160200151815260200184838151811061153a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160400151600181111561157e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815260200160011515815250826002018483815181106115c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600001516040516115e09190615293565b9081526020016040518091039020600082015181600001908051906020019061160a929190613ed8565b506020820151816001015560408201518160020160006101000a81548160ff02191690836001811115611666577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060608201518160020160016101000a81548160ff0219169083151502179055509050505b808061169a90615d72565b915050610fa8565b507f925a971da7b8a2422c4fa67db7c7410b16fa33451659314737ba70a81a936d0683836040516116d4929190615453565b60405180910390a1505050565b6116e9613b75565b73ffffffffffffffffffffffffffffffffffffffff1661170761319c565b73ffffffffffffffffffffffffffffffffffffffff161461175d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175490615730565b60405180910390fd5b611765612153565b6117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90615670565b60405180910390fd5b6117ac613c89565b565b60006006600085815260200190815260200160002060090160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201836040516118149190615293565b90815260200160405180910390205490509392505050565b600660205280600052604060002060009150905080600001549080600101805461185590615cf2565b80601f016020809104026020016040519081016040528092919081815260200182805461188190615cf2565b80156118ce5780601f106118a3576101008083540402835291602001916118ce565b820191906000526020600020905b8154815290600101906020018083116118b157829003601f168201915b5050505050908060080160009054906101000a900460ff16905083565b60006118f5612153565b15611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c906156f0565b60405180910390fd5b6000600281111561196f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6006600088815260200190815260200160002060080160009054906101000a900460ff1660028111156119cb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14611a0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a02906157d0565b60405180910390fd5b601484511115611a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4790615830565b60405180910390fd5b600060066000888152602001908152602001600020905086816000018190555085816001019080519060200190611a88929190613ed8565b5083816004019080519060200190611aa1929190613f5e565b5082816006019080519060200190611aba929190613f5e565b5060018160080160006101000a81548160ff02191690836002811115611b09577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060005b8551811015611f4d57816003016040518060800160405280888481518110611b62577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600001518152602001888481518110611bac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151602001518152602001888481518110611bf6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604001516001811115611c3a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020016001151581525090806001815401808255809150506001900390600052602060002090600302016000909190919091506000820151816000019080519060200190611c8b929190613ed8565b506020820151816001015560408201518160020160006101000a81548160ff02191690836001811115611ce7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060608201518160020160016101000a81548160ff02191690831515021790555050506040518060800160405280878381518110611d52577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600001518152602001878381518110611d9c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151602001518152602001878381518110611de6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604001516001811115611e2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020016001151581525082600201878381518110611e73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160000151604051611e8c9190615293565b90815260200160405180910390206000820151816000019080519060200190611eb6929190613ed8565b506020820151816001015560408201518160020160006101000a81548160ff02191690836001811115611f12577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555060608201518160020160016101000a81548160ff0219169083151502179055509050508080611f4590615d72565b915050611b11565b5060005b8451811015612007576001826005016000878481518110611f9b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611fff90615d72565b915050611f51565b5060005b83518110156120c1576001826007016000868481518110612055577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120b990615d72565b91505061200b565b506005879080600181540180825580915050600190039060005260206000200160009091909190915055867fe566cbf7d13703ea4252dbd9e0078954f7f66a67e9f7dd346225cb10fa40864387612116613b7d565b84600301888860405161212d959493929190615601565b60405180910390a2806000015491505095945050505050565b6000804690508091505090565b60008060009054906101000a900460ff16905090565b6000806121a18830898960405160200161218694939291906152d0565b60405160208183030381529060405280519060200120613d2a565b90506000600182858888604051600081526020016040526040516121c8949392919061559a565b6020604051602081039080840390855afa1580156121ea573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225d906156d0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161492505050979650505050505050565b6122ac613b75565b73ffffffffffffffffffffffffffffffffffffffff166122ca61319c565b73ffffffffffffffffffffffffffffffffffffffff1614612320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231790615730565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123e6613b75565b73ffffffffffffffffffffffffffffffffffffffff1661240461319c565b73ffffffffffffffffffffffffffffffffffffffff161461245a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245190615730565b60405180910390fd5b6124646000613d5a565b565b61246e612153565b156124ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a5906156f0565b60405180910390fd5b6006600083815260200190815260200160002060050160006124ce613b7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061255a5750612524613b7d565b73ffffffffffffffffffffffffffffffffffffffff1661254261319c565b73ffffffffffffffffffffffffffffffffffffffff16145b8061257857506001151561257461256f613b7d565b613c33565b1515145b6125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae90615790565b60405180910390fd5b60016006600084815260200190815260200160002060070160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060066000838152602001908152602001600020600601819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa47203dcb0d9b586516ee8d3f53c3bb54a50102bf92747a833dd698eac72998382826040516126cb92919061542a565b60405180910390a15050565b6126df613b75565b73ffffffffffffffffffffffffffffffffffffffff166126fd61319c565b73ffffffffffffffffffffffffffffffffffffffff1614612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274a90615730565b60405180910390fd5b61275b612153565b1561279b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612792906156f0565b60405180910390fd5b6127a3613e20565b565b6127ad612153565b156127ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e4906156f0565b60405180910390fd5b60016002811115612827577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6006600086815260200190815260200160002060080160009054906101000a900460ff166002811115612883577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b146128c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ba90615770565b60405180910390fd5b6006600085815260200190815260200160002060050160006128e3613b7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061299a5750600660008581526020019081526020016000206007016000612951613b7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806129de57506129a8613b7d565b73ffffffffffffffffffffffffffffffffffffffff166129c661319c565b73ffffffffffffffffffffffffffffffffffffffff16145b806129fc5750600115156129f86129f3613b7d565b613c33565b1515145b612a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3290615850565b60405180910390fd5b6006600085815260200190815260200160002060020183604051612a5f9190615293565b908152602001604051809103902060020160019054906101000a900460ff16612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490615710565b60405180910390fd5b60008490506000151560066000838152602001908152602001600020600a01600088815260200190815260200160002060009054906101000a900460ff161515141561315757600160066000838152602001908152602001600020600a01600088815260200190815260200160002060006101000a81548160ff0219169083151502179055506000151560066000838152602001908152602001600020600b0184604051612b6b9190615293565b908152602001604051809103902060009054906101000a900460ff1615151415612c2b57600160066000838152602001908152602001600020600b0184604051612bb59190615293565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060066000828152602001908152602001600020600c0183908060018154018082558091505060019003906000526020600020016000909190919091509080519060200190612c29929190613ed8565b505b60006006600083815260200190815260200160002060020185604051612c519190615293565b9081526020016040518091039020604051806080016040529081600082018054612c7a90615cf2565b80601f0160208091040260200160405190810160405280929190818152602001828054612ca690615cf2565b8015612cf35780601f10612cc857610100808354040283529160200191612cf3565b820191906000526020600020905b815481529060010190602001808311612cd657829003601f168201915b50505050508152602001600182015481526020016002820160009054906101000a900460ff166001811115612d51577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001811115612d89577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020016002820160019054906101000a900460ff161515151581525050905060006006600084815260200190815260200160002060090160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600015158160010186604051612e179190615293565b908152602001604051809103902060009054906101000a900460ff1615151415612eb35760018160010186604051612e4f9190615293565b908152602001604051809103902060006101000a81548160ff0219169083151502179055508060000185908060018154018082558091505060019003906000526020600020016000909190919091509080519060200190612eb1929190613ed8565b505b60006001811115612eed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b82604001516001811115612f2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612f9057612f6782602001518260020187604051612f4a9190615293565b908152602001604051809103902054613b5f90919063ffffffff16565b8160020186604051612f799190615293565b9081526020016040518091039020819055506130cc565b600180811115612fc9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b82604001516001811115613006577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156130c357806002018560405161301e9190615293565b908152602001604051809103902054826020015110613062576000816002018660405161304b9190615293565b9081526020016040518091039020819055506130be565b6130998260200151826002018760405161307c9190615293565b908152602001604051809103902054613ec290919063ffffffff16565b81600201866040516130ab9190615293565b9081526020016040518091039020819055505b6130cb565b505050613195565b5b7f6ded0f47391f4098773ec0e338d3c321e7fcf92b580d0925ae90942f292236ac88848684600201896040516131029190615293565b908152602001604051809103902054866020015187604001518c8c600660008d8152602001908152602001600020600c01604051613148999897969594939291906154ba565b60405180910390a15050613193565b7fd22d7033fccba80f2459d8d4091adaf35ec8f6666b4ddaf5c788e17e9e296e0b86828460405161318a93929190615483565b60405180910390a15b505b5050505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6131ce612153565b1561320e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613205906156f0565b60405180910390fd5b60066000838152602001908152602001600020600501600061322e613b7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132ba5750613284613b7d565b73ffffffffffffffffffffffffffffffffffffffff166132a261319c565b73ffffffffffffffffffffffffffffffffffffffff16145b806132d85750600115156132d46132cf613b7d565b613c33565b1515145b613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330e90615790565b60405180910390fd5b600115156006600084815260200190815260200160002060070160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146133be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133b5906157b0565b60405180910390fd5b60006006600084815260200190815260200160002060070160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b600660008481526020019081526020016000206006018054905081101561358d578173ffffffffffffffffffffffffffffffffffffffff166006600085815260200190815260200160002060060182815481106134b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561357a57600660008481526020019081526020016000206006018181548110613548577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561358d565b808061358590615d72565b91505061342d565b507f4a9d9ee7c0b327bc99524679cd76120147a0a4e217ee786a788c589de5ba32ed82826040516135bf92919061542a565b60405180910390a15050565b6135d3612153565b15613613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360a906156f0565b60405180910390fd5b600660008281526020019081526020016000206005016000613633613b7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136bf5750613689613b7d565b73ffffffffffffffffffffffffffffffffffffffff166136a761319c565b73ffffffffffffffffffffffffffffffffffffffff16145b806136dd5750600115156136d96136d4613b7d565b613c33565b1515145b61371c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161371390615790565b60405180910390fd5b60016006600083815260200190815260200160002060080160006101000a81548160ff0219169083600281111561377c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b021790555050565b60606006600084815260200190815260200160002060090160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805480602002602001604051908101604052809291908181526020016000905b828210156138a857838290600052602060002001805461381b90615cf2565b80601f016020809104026020016040519081016040528092919081815260200182805461384790615cf2565b80156138945780601f1061386957610100808354040283529160200191613894565b820191906000526020600020905b81548152906001019060200180831161387757829003601f168201915b5050505050815260200190600101906137fc565b50505050905092915050565b606060066000838152602001908152602001600020600301805480602002602001604051908101604052809291908181526020016000905b82821015613a5c578382906000526020600020906003020160405180608001604052908160008201805461391f90615cf2565b80601f016020809104026020016040519081016040528092919081815260200182805461394b90615cf2565b80156139985780601f1061396d57610100808354040283529160200191613998565b820191906000526020600020905b81548152906001019060200180831161397b57829003601f168201915b50505050508152602001600182015481526020016002820160009054906101000a900460ff1660018111156139f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6001811115613a2e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81526020016002820160019054906101000a900460ff161515151581525050815260200190600101906138ec565b505050509050919050565b613a6f613b75565b73ffffffffffffffffffffffffffffffffffffffff16613a8d61319c565b73ffffffffffffffffffffffffffffffffffffffff1614613ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ada90615730565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4a90615690565b60405180910390fd5b613b5c81613d5a565b50565b60008183613b6d9190615aed565b905092915050565b600033905090565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613c2757600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050613c2f565b339050613c30565b5b90565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b613c91612153565b613cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cc790615670565b60405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa613d13613b75565b604051613d209190615335565b60405180910390a1565b600081604051602001613d3d91906152aa565b604051602081830303815290604052805190602001209050919050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613e28612153565b15613e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5f906156f0565b60405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613eab613b75565b604051613eb89190615335565b60405180910390a1565b60008183613ed09190615b43565b905092915050565b828054613ee490615cf2565b90600052602060002090601f016020900481019282613f065760008555613f4d565b82601f10613f1f57805160ff1916838001178555613f4d565b82800160010185558215613f4d579182015b82811115613f4c578251825591602001919060010190613f31565b5b509050613f5a9190613fe8565b5090565b828054828255906000526020600020908101928215613fd7579160200282015b82811115613fd65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613f7e565b5b509050613fe49190613fe8565b5090565b5b80821115614001576000816000905550600101613fe9565b5090565b6000614018614013846158bc565b61588b565b9050808382526020820190508285602086028201111561403757600080fd5b60005b85811015614067578161404d888261414a565b84526020840193506020830192505060018101905061403a565b5050509392505050565b600061408461407f846158e8565b61588b565b9050808382526020820190508260005b858110156140c457813585016140aa8882614246565b845260208401935060208301925050600181019050614094565b5050509392505050565b60006140e16140dc84615914565b61588b565b9050828152602081018484840111156140f957600080fd5b614104848285615cb0565b509392505050565b600061411f61411a84615944565b61588b565b90508281526020810184848401111561413757600080fd5b614142848285615cb0565b509392505050565b60008135905061415981615f0f565b92915050565b600082601f83011261417057600080fd5b8135614180848260208601614005565b91505092915050565b600082601f83011261419a57600080fd5b81356141aa848260208601614071565b91505092915050565b6000813590506141c281615f26565b92915050565b6000813590506141d781615f3d565b92915050565b600082601f8301126141ee57600080fd5b81356141fe8482602086016140ce565b91505092915050565b60008135905061421681615f54565b92915050565b600082601f83011261422d57600080fd5b813561423d84826020860161410c565b91505092915050565b60006080828403121561425857600080fd5b614262608061588b565b9050600082013567ffffffffffffffff81111561427e57600080fd5b61428a8482850161421c565b600083015250602061429e848285016142d2565b60208301525060406142b284828501614207565b60408301525060606142c6848285016141b3565b60608301525092915050565b6000813590506142e181615f64565b92915050565b6000813590506142f681615f7b565b92915050565b60006020828403121561430e57600080fd5b600061431c8482850161414a565b91505092915050565b600080600080600060a0868803121561433d57600080fd5b600061434b8882890161414a565b955050602086013567ffffffffffffffff81111561436857600080fd5b614374888289016141dd565b9450506040614385888289016141c8565b9350506060614396888289016141c8565b92505060806143a7888289016142e7565b9150509295509295909350565b600080600080600080600060e0888a0312156143cf57600080fd5b60006143dd8a828b0161414a565b97505060206143ee8a828b016142d2565b96505060406143ff8a828b016142d2565b955050606088013567ffffffffffffffff81111561441c57600080fd5b6144288a828b016141dd565b94505060806144398a828b016141c8565b93505060a061444a8a828b016141c8565b92505060c061445b8a828b016142e7565b91505092959891949750929550565b60006020828403121561447c57600080fd5b600061448a848285016141c8565b91505092915050565b600080604083850312156144a657600080fd5b60006144b4858286016141c8565b92505060206144c58582860161414a565b9150509250929050565b600080604083850312156144e257600080fd5b60006144f0858286016141c8565b925050602083013567ffffffffffffffff81111561450d57600080fd5b61451985828601614189565b9150509250929050565b600080600080600060a0868803121561453b57600080fd5b6000614549888289016141c8565b955050602061455a888289016141c8565b945050604086013567ffffffffffffffff81111561457757600080fd5b6145838882890161421c565b935050606086013567ffffffffffffffff8111156145a057600080fd5b6145ac8882890161421c565b92505060806145bd8882890161414a565b9150509295509295909350565b6000806000606084860312156145df57600080fd5b60006145ed868287016141c8565b935050602084013567ffffffffffffffff81111561460a57600080fd5b6146168682870161421c565b92505060406146278682870161414a565b9150509250925092565b600080600080600060a0868803121561464957600080fd5b6000614657888289016141c8565b955050602086013567ffffffffffffffff81111561467457600080fd5b6146808882890161421c565b945050604086013567ffffffffffffffff81111561469d57600080fd5b6146a988828901614189565b935050606086013567ffffffffffffffff8111156146c657600080fd5b6146d28882890161415f565b925050608086013567ffffffffffffffff8111156146ef57600080fd5b6146fb8882890161415f565b9150509295509295909350565b60006020828403121561471a57600080fd5b6000614728848285016142d2565b91505092915050565b600061473d83836147b7565b60208301905092915050565b60006147558383614b0e565b905092915050565b60006147698383614bb1565b905092915050565b600061477d838361512f565b905092915050565b60006147918383615192565b905092915050565b6147a281615c32565b82525050565b6147b181615bad565b82525050565b6147c081615b9b565b82525050565b6147cf81615b9b565b82525050565b6147e66147e182615b9b565b615dbb565b82525050565b60006147f7826159e3565b6148018185615a71565b935061480c83615974565b8060005b8381101561483d5781516148248882614731565b975061482f83615a30565b925050600181019050614810565b5085935050505092915050565b6000614855826159ee565b61485f8185615a82565b93508360208202850161487185615984565b8060005b858110156148ad578484038952815161488e8582614749565b945061489983615a3d565b925060208a01995050600181019050614875565b50829750879550505050505092915050565b60006148ca826159f9565b6148d48185615a82565b9350836020820285016148e685615994565b8060005b8581101561492157848403895281614902858261475d565b945061490d83615a4a565b925060208a019950506001810190506148ea565b50829750879550505050505092915050565b600061493e82615a04565b6149488185615a93565b93508360208202850161495a856159a9565b8060005b8581101561499657848403895281516149778582614771565b945061498283615a57565b925060208a0199505060018101905061495e565b50829750879550505050505092915050565b60006149b382615a0f565b6149bd8185615a93565b9350836020820285016149cf856159b9565b8060005b85811015614a0a578484038952816149eb8582614785565b94506149f683615a64565b925060208a019950506001810190506149d3565b50829750879550505050505092915050565b614a2581615bbf565b82525050565b614a3481615bbf565b82525050565b614a4381615bcb565b82525050565b614a5a614a5582615bcb565b615dcd565b82525050565b6000614a6b82615a1a565b614a758185615aa4565b9350614a85818560208601615cbf565b614a8e81615eaf565b840191505092915050565b6000614aa482615a1a565b614aae8185615ab5565b9350614abe818560208601615cbf565b80840191505092915050565b614adb614ad682615c44565b615dbb565b82525050565b614aea81615c68565b82525050565b614af981615c68565b82525050565b614b0881615c7a565b82525050565b6000614b1982615a25565b614b238185615ac0565b9350614b33818560208601615cbf565b614b3c81615eaf565b840191505092915050565b6000614b5282615a25565b614b5c8185615ad1565b9350614b6c818560208601615cbf565b614b7581615eaf565b840191505092915050565b6000614b8b82615a25565b614b958185615ae2565b9350614ba5818560208601615cbf565b80840191505092915050565b60008154614bbe81615cf2565b614bc88186615ac0565b94506001821660008114614be35760018114614bf557614c28565b60ff1983168652602086019350614c28565b614bfe856159ce565b60005b83811015614c2057815481890152600182019150602081019050614c01565b808801955050505b50505092915050565b6000614c3e601483615ad1565b91507f5061757361626c653a206e6f74207061757365640000000000000000000000006000830152602082019050919050565b6000614c7e601c83615ae2565b91507f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000830152601c82019050919050565b6000614cbe602683615ad1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614d24601d83615ad1565b91507f46756e6374696f6e2063616c6c206e6f74207375636365737366756c6c0000006000830152602082019050919050565b6000614d64601183615ad1565b91507f496e76616c6964207369676e61747572650000000000000000000000000000006000830152602082019050919050565b6000614da4601083615ad1565b91507f5061757361626c653a20706175736564000000000000000000000000000000006000830152602082019050919050565b6000614de4601183615ad1565b91507f416374696f6e206d7573742065786973740000000000000000000000000000006000830152602082019050919050565b6000614e24602083615ad1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614e64602183615ad1565b91507f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008301527f68000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614eca601583615ad1565b91507f50726f6a656374206973206e6f742061637469766500000000000000000000006000830152602082019050919050565b6000614f0a602383615ad1565b91507f596f75206d75737420626520616e206f776e6572206f66207468652070726f6a60008301527f65637400000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614f70601f83615ad1565b91507f546869732061646472657373206973206e6f7420616e20757064617465722e006000830152602082019050919050565b6000614fb0601683615ad1565b91507f50726f6a65637420616c726561647920657869737473000000000000000000006000830152602082019050919050565b6000614ff0601683615ad1565b91507f50726f6a65637420646f6573206e6f74206578697374000000000000000000006000830152602082019050919050565b6000615030603583615ad1565b91507f596f75206d75737420626520616e206f776e6572206f66207468652070726f6a60008301527f65637420746f2075706461746520616374696f6e7300000000000000000000006020830152604082019050919050565b6000615096601b83615ad1565b91507f43616e207375626d697420757020746f20323020616374696f6e7300000000006000830152602082019050919050565b60006150d6603e83615ad1565b91507f596f75206d7573742062652065697468657220616e206f776e6572206f72206160008301527f6e207570646174657220746f2075736520746869732066756e6374696f6e00006020830152604082019050919050565b6000608083016000830151848203600086015261514c8282614b0e565b91505060208301516151616020860182615210565b5060408301516151746040860182614ae1565b5060608301516151876060860182614a1c565b508091505092915050565b600060808301600080840185830360008701526151af8382614bb1565b925050600184015490506151c281615d3e565b6151cf6020870182615210565b50600284015490506151e081615d24565b6151ed6040870182614ae1565b506151f781615d58565b6152046060870182614a1c565b50819250505092915050565b61521981615c1b565b82525050565b61522881615c1b565b82525050565b61523f61523a82615c1b565b615de9565b82525050565b61524e81615c25565b82525050565b60006152608284614a99565b915081905092915050565b60006152778285614a99565b915061528382846147d5565b6014820191508190509392505050565b600061529f8284614b80565b915081905092915050565b60006152b582614c71565b91506152c18284614a49565b60208201915081905092915050565b60006152dc828761522e565b6020820191506152ec8286614aca565b6014820191506152fc828561522e565b60208201915061530c8284614a99565b915081905095945050505050565b600060208201905061532f60008301846147c6565b92915050565b600060208201905061534a6000830184614799565b92915050565b600060608201905061536560008301866147c6565b61537260208301856147a8565b81810360408301526153848184614a60565b9050949350505050565b600060208201905081810360008301526153a881846147ec565b905092915050565b600060208201905081810360008301526153ca818461484a565b905092915050565b600060208201905081810360008301526153ec8184614933565b905092915050565b60006020820190506154096000830184614a2b565b92915050565b60006020820190506154246000830184614a3a565b92915050565b600060408201905061543f6000830185614a3a565b61544c60208301846147c6565b9392505050565b60006040820190506154686000830185614a3a565b818103602083015261547a8184614933565b90509392505050565b60006060820190506154986000830186614a3a565b6154a56020830185614a3a565b6154b260408301846147c6565b949350505050565b6000610120820190506154d0600083018c614a3a565b6154dd602083018b614a3a565b6154ea604083018a6147c6565b6154f7606083018961521f565b615504608083018861521f565b61551160a0830187614af0565b81810360c08301526155238186614b47565b905081810360e08301526155378185614b47565b905081810361010083015261554c81846148bf565b90509a9950505050505050505050565b60006060820190506155716000830186614a3a565b81810360208301526155838185614b47565b90506155926040830184614aff565b949350505050565b60006080820190506155af6000830187614a3a565b6155bc6020830186615245565b6155c96040830185614a3a565b6155d66060830184614a3a565b95945050505050565b600060208201905081810360008301526155f98184614a60565b905092915050565b600060a082019050818103600083015261561b8188614b47565b905061562a60208301876147c6565b818103604083015261563c81866149a8565b9050818103606083015261565081856147ec565b9050818103608083015261566481846147ec565b90509695505050505050565b6000602082019050818103600083015261568981614c31565b9050919050565b600060208201905081810360008301526156a981614cb1565b9050919050565b600060208201905081810360008301526156c981614d17565b9050919050565b600060208201905081810360008301526156e981614d57565b9050919050565b6000602082019050818103600083015261570981614d97565b9050919050565b6000602082019050818103600083015261572981614dd7565b9050919050565b6000602082019050818103600083015261574981614e17565b9050919050565b6000602082019050818103600083015261576981614e57565b9050919050565b6000602082019050818103600083015261578981614ebd565b9050919050565b600060208201905081810360008301526157a981614efd565b9050919050565b600060208201905081810360008301526157c981614f63565b9050919050565b600060208201905081810360008301526157e981614fa3565b9050919050565b6000602082019050818103600083015261580981614fe3565b9050919050565b6000602082019050818103600083015261582981615023565b9050919050565b6000602082019050818103600083015261584981615089565b9050919050565b60006020820190508181036000830152615869816150c9565b9050919050565b6000602082019050615885600083018461521f565b92915050565b6000604051905081810181811067ffffffffffffffff821117156158b2576158b1615e80565b5b8060405250919050565b600067ffffffffffffffff8211156158d7576158d6615e80565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561590357615902615e80565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561592f5761592e615e80565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561595f5761595e615e80565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081549050919050565b600081519050919050565b600081549050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000600182019050919050565b6000602082019050919050565b6000600382019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000615af882615c1b565b9150615b0383615c1b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615b3857615b37615df3565b5b828201905092915050565b6000615b4e82615c1b565b9150615b5983615c1b565b925082821015615b6c57615b6b615df3565b5b828203905092915050565b600060ff82169050919050565b600060ff82169050919050565b6000819050919050565b6000615ba682615bfb565b9050919050565b6000615bb882615bfb565b9050919050565b60008115159050919050565b6000819050919050565b6000819050615be382615ee7565b919050565b6000819050615bf682615efb565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615c3d82615c8c565b9050919050565b6000615c4f82615c56565b9050919050565b6000615c6182615bfb565b9050919050565b6000615c7382615bd5565b9050919050565b6000615c8582615be8565b9050919050565b6000615c9782615c9e565b9050919050565b6000615ca982615bfb565b9050919050565b82818337600083830152505050565b60005b83811015615cdd578082015181840152602081019050615cc2565b83811115615cec576000848401525b50505050565b60006002820490506001821680615d0a57607f821691505b60208210811415615d1e57615d1d615e51565b5b50919050565b6000615d37615d3283615ecd565b615b84565b9050919050565b6000615d51615d4c83615ecd565b615b91565b9050919050565b6000615d6b615d6683615eda565b615b77565b9050919050565b6000615d7d82615c1b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615db057615daf615df3565b5b600182019050919050565b6000615dc682615dd7565b9050919050565b6000819050919050565b6000615de282615ec0565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160001c9050919050565b60008160081c9050919050565b60028110615ef857615ef7615e22565b5b50565b60038110615f0c57615f0b615e22565b5b50565b615f1881615b9b565b8114615f2357600080fd5b50565b615f2f81615bbf565b8114615f3a57600080fd5b50565b615f4681615bcb565b8114615f5157600080fd5b50565b60028110615f6157600080fd5b50565b615f6d81615c1b565b8114615f7857600080fd5b50565b615f8481615c25565b8114615f8f57600080fd5b5056fea2646970667358221220a186a78bc8852f67cecc5fb60dd3d51f5f4102dcb80a48b7a0c73aa973eb0f9464736f6c63430008000033
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.