Token AurusGOLD

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
30,754.936258 AWG

Holders:
420 addresses

Transfers:
-

Contract:
0xAEe0ffb690B37449B7f1C49B199E1E3ec60844900xAEe0ffb690B37449B7f1C49B199E1E3ec6084490

Decimals:
18

Official Site:

Social Profiles:

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AWG

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-30
*/

// File: openzeppelin-solidity/contracts/access/Roles.sol
pragma solidity 0.8.10;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
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.
     *
     * > Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Emitted when the `owner` initiates a force transfer
     *
     * Note that `value` may be zero.
     * Note that `details` may be zero.
     */
    event ForceTransfer(address indexed from, address indexed to, uint256 value, bytes32 details);
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol
/**
 * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        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-solidity/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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        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) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20Fee.sol
/**
 * @dev Implementation of the `IERC20` interface.
 *
 * *For a detailed writeup see our guide [How to implement supply
 * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an `Approval` event is emitted on calls to `transferFrom`.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See `IERC20.approve`.
 */
contract ERC20Fee is IERC20 {
    using SafeMath for uint256;


    mapping (address => uint256) private _balances;

    /**
     * @dev List of whitelisted accounts.
     * 0 = default (initial value for all accounts)
     * 1 = verified account
     * 2 = partner account
     * 3 = blacklisted account (cannot send or receive tokens)
     */
    mapping (address => uint8) public whitelist;

    /**
     * @dev List of fixed transfer fees in order of account level (0 to 2). Value is in wei.
     */
    uint[] public fixedTransferFee = [uint32(0), uint32(0), uint32(0)];

    /**
     * @dev List of dynamic transfer fees in order of account level (0 to 2). Value is in mpip (milipip or 1/1000 of a PIP) per amount transferred.
     */
    uint[] public dynamicTransferFee = [uint32(0), uint32(0), uint32(0)];

    /**
     * @dev Constant mpip divider
     */
    uint256 private constant mpipDivider = 10000000;

    /**
     * @dev The account that receives the fees (transfer).
     */
    address public feeManager;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    address public childChainManagerProxy = 0xA6FA4fB5f76172d178d61B04b0ecd319C5d1C0aa;

    // being proxified smart contract, most probably childChainManagerProxy contract's address
    // is not going to change ever, but still, lets keep it 
    function _updateChildChainManager(address newChildChainManagerProxy) internal {
        require(newChildChainManagerProxy != address(0), "Bad ChildChainManagerProxy address");
        childChainManagerProxy = newChildChainManagerProxy;
    }

    function _deposit(address user, bytes calldata depositData) internal {
        require(msg.sender == childChainManagerProxy, "You're not allowed to deposit");

        uint256 amount = abi.decode(depositData, (uint256));

        // `amount` token getting minted here & equal amount got locked in RootChainManager
        _totalSupply = _totalSupply.add(amount);
        _balances[user] = _balances[user].add(amount);
        
        emit Transfer(address(0), user, amount);
    }

    function _withdraw(uint256 amount) internal {
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        _totalSupply = _totalSupply.sub(amount);
        
        emit Transfer(msg.sender, address(0), amount);
    }

    /**
     * @dev Forced transfer from one account to another. Will contain details about AML procedure.
     */
    function _forceTransfer(address sender, address recipient, uint256 amount, bytes32 details) internal {
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        emit ForceTransfer(sender, recipient, amount, details);
    }

    /**
     * @dev See `IERC20.totalSupply`.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See `IERC20.balanceOf`.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See `IERC20.transfer`.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) override virtual public returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See `IERC20.allowance`.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See `IERC20.approve`.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) override virtual public returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev See `IERC20.transferFrom`.
     *
     * Emits an `Approval` event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of `ERC20`;
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `value`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) override virtual public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) virtual public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) virtual public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to `transfer`, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a `Transfer` event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");


        uint8 level = whitelist[sender];
        require(level != 3, "Sender is blacklisted");

        uint256 transferFee = fixedTransferFee[level] + ((dynamicTransferFee[level].mul(amount)).div(mpipDivider));

        _balances[sender] = (_balances[sender].sub(amount)).sub(transferFee);
        _balances[recipient] = _balances[recipient].add(amount);

        emit Transfer(sender, recipient, amount);

        if (transferFee > 0) {
            _balances[feeManager] = _balances[feeManager].add(transferFee);
            emit Transfer(sender, feeManager, transferFee);
        }
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an `Approval` event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }
}

// File: openzeppelin-solidity/contracts/access/roles/PauserRole.sol
contract PauserRole {
    using Roles for Roles.Role;

    event PauserAdded(address indexed account);
    event PauserRemoved(address indexed account);

    Roles.Role private _pausers;

    constructor ()  {
        _addPauser(msg.sender);
    }

    modifier onlyPauser() {
        require(isPauser(msg.sender), "PauserRole: caller does not have the Pauser role");
        _;
    }

    function isPauser(address account) public view returns (bool) {
        return _pausers.has(account);
    }

    function addPauser(address account) public onlyPauser {
        _addPauser(account);
    }

    function renouncePauser() public {
        _removePauser(msg.sender);
    }

    function _addPauser(address account) internal {
        _pausers.add(account);
        emit PauserAdded(account);
    }

    function _removePauser(address account) internal {
        _pausers.remove(account);
        emit PauserRemoved(account);
    }
}

// File: openzeppelin-solidity/contracts/lifecycle/Pausable.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.
 */
contract Pausable is PauserRole {
    /**
     * @dev Emitted when the pause is triggered by a pauser (`account`).
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by a pauser (`account`).
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state. Assigns the Pauser role
     * to the deployer.
     */
    constructor ()  {
        _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.
     */
    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    /**
     * @dev Called by a pauser to pause, triggers stopped state.
     */
    function pause() public onlyPauser whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    /**
     * @dev Called by a pauser to unpause, returns to normal state.
     */
    function unpause() public onlyPauser whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20TransferFee.sol
/**
 * @title Pausable token
 * @dev ERC20 modified with pausable transfers.
 */
contract ERC20TransferFee is ERC20Fee, Pausable {
    function transfer(address to, uint256 value) override public whenNotPaused returns (bool) {
        return super.transfer(to, value);
    }

    function transferFrom(address from, address to, uint256 value) override virtual public whenNotPaused returns (bool) {
        return super.transferFrom(from, to, value);
    }

    function approve(address spender, uint256 value) override virtual public whenNotPaused returns (bool) {
        return super.approve(spender, value);
    }

    function increaseAllowance(address spender, uint addedValue) override virtual public whenNotPaused returns (bool) {
        return super.increaseAllowance(spender, addedValue);
    }

    function decreaseAllowance(address spender, uint subtractedValue) override virtual public whenNotPaused returns (bool) {
        return super.decreaseAllowance(spender, subtractedValue);
    }
}

// File: openzeppelin-solidity/contracts/ownership/Ownable.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.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor ()  {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _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 onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/token/ECRecovery.sol
/**
 * @title Eliptic curve signature operations
 * @dev Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d
 * TODO Remove this library once solidity supports passing a signature to ecrecover.
 * See https://github.com/ethereum/solidity/issues/864
 */
library ECRecovery {

    /**
     * @dev Recover signer address from a message by using their signature
     * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
     * @param sig bytes signature, the signature is generated using web3.eth.sign()
     */
    function recover(bytes32 hash, bytes memory sig)
        internal
        pure
        returns (address)
    {
        bytes32 r;
        bytes32 s;
        uint8 v;

        // Check the signature length
        if (sig.length != 65) {
            return (address(0));
        }

        // Divide the signature in r, s and v variables
        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solium-disable-next-line security/no-inline-assembly
        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            v := byte(0, mload(add(sig, 96)))
        }

        // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
        if (v < 27) {
            v += 27;
        }

        // If the version is correct return the signer address
        if (v != 27 && v != 28) {
            return (address(0));
        } else {
            // solium-disable-next-line arg-overflow
            return ecrecover(hash, v, r, s);
        }
    }

    /**
     * toEthSignedMessageHash
     * @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
     * and hash the result
     */
    function toEthSignedMessageHash(bytes32 hash)
        internal
        pure
        returns (bytes32)
    {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(
            abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
        );
    }
}

// File: contracts/token/AWG.sol
/**
 * @title AWG Token
 * @notice ERC20 token implementation.
 * @dev Implements pausable token interfaces.
 */
contract AWG is ERC20TransferFee, Ownable {

    /**
     * @dev Fired when a feeless transfer has been executed.
     */
    event TransferFeeless(address indexed account, uint256 indexed value);

    /**
     * @dev Fired when a feeless approve has been executed.
     */
    event ApproveFeeless(address indexed spender, uint256 indexed value);

    /**
     * @notice ERC20 convention.
     */
    uint8 public constant decimals = 18;

    /**
     * @notice ERC20 convention.
     */
    string public constant name = "AurusGOLD";
    
    /**
     * @notice ERC20 convention.
     */
    string public constant symbol = "AWG";


    /**
     * Update the childChainManagerProxy
     */
    function updateChildChainManager(address newChildChainManagerProxy) external onlyOwner {
        _updateChildChainManager(newChildChainManagerProxy);
    }

    function deposit(address user, bytes calldata depositData) external {
        _deposit(user, depositData);
    }

    function withdraw(uint256 amount) external {
        _withdraw(amount);
    }

    /**
     * @dev Force a transfer between 2 accounts. AML logs on https://aurus.io/aml
     */
    function forceTransfer(address sender, address recipient, uint256 amount, bytes32 details) external onlyOwner {
        _forceTransfer(sender,recipient,amount,details);
    }

    /**
     * @dev Set the whitelisting level for an account.
     */
    function whitelistAddress(address account, uint8 level) external onlyOwner {
        require(level<=3, "Level: Please use level 0 to 3.");
        whitelist[account] = level;
    }

    /**
     * @dev Set the fees in the system. All the fees are in mpip, except fixedTransferFee that is in wei. Level is between 0 and 2
     */
    function setFees(uint256 _fixedTransferFee, uint256 _dynamicTransferFee, uint8 level) external onlyOwner {
        require(level<=2, "Level: Please use level 0 to 2.");
        fixedTransferFee[level] = _fixedTransferFee;
        dynamicTransferFee[level] = _dynamicTransferFee;
    }

    /**
     * @dev Set the address where the fees are forwarded.
     */
    function setFeeManager(address account) external onlyOwner {
        feeManager = account;
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ApproveFeeless","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"ForceTransfer","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":"address","name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferFeeless","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addPauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"childChainManagerProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dynamicTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fixedTransferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"details","type":"bytes32"}],"name":"forceTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renouncePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setFeeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fixedTransferFee","type":"uint256"},{"internalType":"uint256","name":"_dynamicTransferFee","type":"uint256"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newChildChainManagerProxy","type":"address"}],"name":"updateChildChainManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint8","name":"level","type":"uint8"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060600160405280600063ffffffff1663ffffffff168152602001600063ffffffff1663ffffffff168152602001600063ffffffff1663ffffffff16815250600290600362000058929190620003e0565b506040518060600160405280600063ffffffff1663ffffffff168152602001600063ffffffff1663ffffffff168152602001600063ffffffff1663ffffffff168152506003906003620000ad929190620003e0565b5073a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200011057600080fd5b5062000122336200020160201b60201c565b6000600960006101000a81548160ff02191690831515021790555033600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a362000574565b6200021c8160086200026260201b6200119f1790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b6200027482826200031560201b60201c565b15620002b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ae90620004ba565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003809062000552565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b82805482825590600052602060002090810192821562000427579160200282015b8281111562000426578251829063ffffffff1690559160200191906001019062000401565b5b5090506200043691906200043a565b5090565b5b80821115620004555760008160009055506001016200043b565b5090565b600082825260208201905092915050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b6000620004a2601f8362000459565b9150620004af826200046a565b602082019050919050565b60006020820190508181036000830152620004d58162000493565b9050919050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200053a60228362000459565b91506200054782620004dc565b604082019050919050565b600060208201905081810360008301526200056d816200052b565b9050919050565b61377180620005846000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636ef8d66d1161011a57806395d89b41116100ad578063cf2c52cb1161007c578063cf2c52cb146105a0578063d0fb0203146105bc578063dd62ed3e146105da578063de94e0f61461060a578063f2fde38b14610626576101fb565b806395d89b41146104f25780639b19251a14610510578063a457c2d714610540578063a9059cbb14610570576101fb565b80638456cb59116100e95780638456cb591461047c5780638929b55e146104865780638da5cb5b146104b65780638f32d59b146104d4576101fb565b80636ef8d66d1461041c57806370a0823114610426578063715018a61461045657806382dc1ec414610460576101fb565b80633950935111610192578063472d35b911610161578063472d35b9146103a85780635c975abb146103c457806362f629e7146103e25780636b9a5c6c14610400576101fb565b806339509351146103225780633f4ba83a14610352578063445a67971461035c57806346fbf68e14610378576101fb565b806323b872dd116101ce57806323b872dd1461029c5780632e1a7d4d146102cc578063313ce567146102e857806337d3213414610306576101fb565b806305fff8f71461020057806306fdde0314610230578063095ea7b31461024e57806318160ddd1461027e575b600080fd5b61021a600480360381019061021591906125e1565b610642565b604051610227919061261d565b60405180910390f35b610238610666565b60405161024591906126d1565b60405180910390f35b61026860048036038101906102639190612751565b61069f565b60405161027591906127ac565b60405180910390f35b610286610703565b604051610293919061261d565b60405180910390f35b6102b660048036038101906102b191906127c7565b61070d565b6040516102c391906127ac565b60405180910390f35b6102e660048036038101906102e191906125e1565b610773565b005b6102f061077f565b6040516102fd9190612836565b60405180910390f35b610320600480360381019061031b919061287d565b610784565b005b61033c60048036038101906103379190612751565b610863565b60405161034991906127ac565b60405180910390f35b61035a6108c7565b005b610376600480360381019061037191906128d0565b6109b2565b005b610392600480360381019061038d91906128d0565b610a05565b60405161039f91906127ac565b60405180910390f35b6103c260048036038101906103bd91906128d0565b610a22565b005b6103cc610aad565b6040516103d991906127ac565b60405180910390f35b6103ea610ac4565b6040516103f7919061290c565b60405180910390f35b61041a60048036038101906104159190612927565b610aea565b005b610424610bd4565b005b610440600480360381019061043b91906128d0565b610bdf565b60405161044d919061261d565b60405180910390f35b61045e610c27565b005b61047a600480360381019061047591906128d0565b610d2f565b005b610484610d83565b005b6104a0600480360381019061049b91906125e1565b610e6f565b6040516104ad919061261d565b60405180910390f35b6104be610e93565b6040516104cb919061290c565b60405180910390f35b6104dc610ebd565b6040516104e991906127ac565b60405180910390f35b6104fa610f15565b60405161050791906126d1565b60405180910390f35b61052a600480360381019061052591906128d0565b610f4e565b6040516105379190612836565b60405180910390f35b61055a60048036038101906105559190612751565b610f6e565b60405161056791906127ac565b60405180910390f35b61058a60048036038101906105859190612751565b610fd2565b60405161059791906127ac565b60405180910390f35b6105ba60048036038101906105b591906129cc565b611036565b005b6105c4611046565b6040516105d1919061290c565b60405180910390f35b6105f460048036038101906105ef9190612a2c565b61106c565b604051610601919061261d565b60405180910390f35b610624600480360381019061061f9190612aa2565b6110f3565b005b610640600480360381019061063b91906128d0565b61114c565b005b6003818154811061065257600080fd5b906000526020600020016000915090505481565b6040518060400160405280600981526020017f4175727573474f4c44000000000000000000000000000000000000000000000081525081565b6000600960009054906101000a900460ff16156106f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e890612b55565b60405180910390fd5b6106fb8383611247565b905092915050565b6000600654905090565b6000600960009054906101000a900460ff161561075f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075690612b55565b60405180910390fd5b61076a84848461125e565b90509392505050565b61077c8161130f565b50565b601281565b61078c610ebd565b6107cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c290612bc1565b60405180910390fd5b60028160ff161115610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990612c2d565b60405180910390fd5b8260028260ff168154811061082a57610829612c4d565b5b90600052602060002001819055508160038260ff16815481106108505761084f612c4d565b5b9060005260206000200181905550505050565b6000600960009054906101000a900460ff16156108b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ac90612b55565b60405180910390fd5b6108bf8383611426565b905092915050565b6108d033610a05565b61090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090690612cee565b60405180910390fd5b600960009054906101000a900460ff1661095e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095590612d5a565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336040516109a8919061290c565b60405180910390a1565b6109ba610ebd565b6109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090612bc1565b60405180910390fd5b610a02816114cb565b50565b6000610a1b82600861157f90919063ffffffff16565b9050919050565b610a2a610ebd565b610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090612bc1565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900460ff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610af2610ebd565b610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890612bc1565b60405180910390fd5b60038160ff161115610b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6f90612dc6565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055505050565b610bdd33611647565b565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c2f610ebd565b610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590612bc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610d3833610a05565b610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e90612cee565b60405180910390fd5b610d80816116a1565b50565b610d8c33610a05565b610dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc290612cee565b60405180910390fd5b600960009054906101000a900460ff1615610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290612b55565b60405180910390fd5b6001600960006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051610e65919061290c565b60405180910390a1565b60028181548110610e7f57600080fd5b906000526020600020016000915090505481565b6000600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6040518060400160405280600381526020017f415747000000000000000000000000000000000000000000000000000000000081525081565b60016020528060005260406000206000915054906101000a900460ff1681565b6000600960009054906101000a900460ff1615610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb790612b55565b60405180910390fd5b610fca83836116fb565b905092915050565b6000600960009054906101000a900460ff1615611024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101b90612b55565b60405180910390fd5b61102e83836117a0565b905092915050565b6110418383836117b7565b505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6110fb610ebd565b61113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113190612bc1565b60405180910390fd5b61114684848484611974565b50505050565b611154610ebd565b611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a90612bc1565b60405180910390fd5b61119c81611b6c565b50565b6111a9828261157f565b156111e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e090612e32565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611254338484611c9c565b6001905092915050565b600061126b848484611e67565b61130484336112ff85600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461236490919063ffffffff16565b611c9c565b600190509392505050565b611360816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461236490919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506113b78160065461236490919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161141b919061261d565b60405180910390a350565b60006114c133846114bc85600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123c390919063ffffffff16565b611c9c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153290612ec4565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e790612f56565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61165b81600861242190919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b6116b581600861119f90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b6000611796338461179185600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461236490919063ffffffff16565b611c9c565b6001905092915050565b60006117ad338484611e67565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183e90612fc2565b60405180910390fd5b6000828281019061185891906125e1565b905061186f816006546123c390919063ffffffff16565b6006819055506118c6816000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123c390919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611966919061261d565b60405180910390a350505050565b6119c5826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461236490919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a58826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123c390919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611af7919061261d565b60405180910390a38273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f91f8b835be584629107fbfe5be695e33c56ebe55697d7c8a30d309a2b8dce9378484604051611b5e929190612ff1565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd39061308c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d039061311e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d73906131b0565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e5a919061261d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece90613242565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3e906132d4565b60405180910390fd5b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905060038160ff161415611fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd690613340565b60405180910390fd5b600061202a6298968061201c8560038660ff168154811061200357612002612c4d565b5b90600052602060002001546124c890919063ffffffff16565b61254390919063ffffffff16565b60028360ff168154811061204157612040612c4d565b5b9060005260206000200154612056919061338f565b90506120bb816120ad856000808a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461236490919063ffffffff16565b61236490919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061214e836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123c390919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516121ed919061261d565b60405180910390a3600081111561235d5761227181600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123c390919063ffffffff16565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612354919061261d565b60405180910390a35b5050505050565b6000828211156123a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a090613431565b60405180910390fd5b600082846123b79190613451565b90508091505092915050565b60008082846123d2919061338f565b905083811015612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e906134d1565b60405180910390fd5b8091505092915050565b61242b828261157f565b61246a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246190613563565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000808314156124db576000905061253d565b600082846124e99190613583565b90508284826124f8919061360c565b14612538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252f906136af565b60405180910390fd5b809150505b92915050565b6000808211612587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257e9061371b565b60405180910390fd5b60008284612595919061360c565b90508091505092915050565b600080fd5b600080fd5b6000819050919050565b6125be816125ab565b81146125c957600080fd5b50565b6000813590506125db816125b5565b92915050565b6000602082840312156125f7576125f66125a1565b5b6000612605848285016125cc565b91505092915050565b612617816125ab565b82525050565b6000602082019050612632600083018461260e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612672578082015181840152602081019050612657565b83811115612681576000848401525b50505050565b6000601f19601f8301169050919050565b60006126a382612638565b6126ad8185612643565b93506126bd818560208601612654565b6126c681612687565b840191505092915050565b600060208201905081810360008301526126eb8184612698565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061271e826126f3565b9050919050565b61272e81612713565b811461273957600080fd5b50565b60008135905061274b81612725565b92915050565b60008060408385031215612768576127676125a1565b5b60006127768582860161273c565b9250506020612787858286016125cc565b9150509250929050565b60008115159050919050565b6127a681612791565b82525050565b60006020820190506127c1600083018461279d565b92915050565b6000806000606084860312156127e0576127df6125a1565b5b60006127ee8682870161273c565b93505060206127ff8682870161273c565b9250506040612810868287016125cc565b9150509250925092565b600060ff82169050919050565b6128308161281a565b82525050565b600060208201905061284b6000830184612827565b92915050565b61285a8161281a565b811461286557600080fd5b50565b60008135905061287781612851565b92915050565b600080600060608486031215612896576128956125a1565b5b60006128a4868287016125cc565b93505060206128b5868287016125cc565b92505060406128c686828701612868565b9150509250925092565b6000602082840312156128e6576128e56125a1565b5b60006128f48482850161273c565b91505092915050565b61290681612713565b82525050565b600060208201905061292160008301846128fd565b92915050565b6000806040838503121561293e5761293d6125a1565b5b600061294c8582860161273c565b925050602061295d85828601612868565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261298c5761298b612967565b5b8235905067ffffffffffffffff8111156129a9576129a861296c565b5b6020830191508360018202830111156129c5576129c4612971565b5b9250929050565b6000806000604084860312156129e5576129e46125a1565b5b60006129f38682870161273c565b935050602084013567ffffffffffffffff811115612a1457612a136125a6565b5b612a2086828701612976565b92509250509250925092565b60008060408385031215612a4357612a426125a1565b5b6000612a518582860161273c565b9250506020612a628582860161273c565b9150509250929050565b6000819050919050565b612a7f81612a6c565b8114612a8a57600080fd5b50565b600081359050612a9c81612a76565b92915050565b60008060008060808587031215612abc57612abb6125a1565b5b6000612aca8782880161273c565b9450506020612adb8782880161273c565b9350506040612aec878288016125cc565b9250506060612afd87828801612a8d565b91505092959194509250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612b3f601083612643565b9150612b4a82612b09565b602082019050919050565b60006020820190508181036000830152612b6e81612b32565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612bab602083612643565b9150612bb682612b75565b602082019050919050565b60006020820190508181036000830152612bda81612b9e565b9050919050565b7f4c6576656c3a20506c6561736520757365206c6576656c203020746f20322e00600082015250565b6000612c17601f83612643565b9150612c2282612be1565b602082019050919050565b60006020820190508181036000830152612c4681612c0a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f506175736572526f6c653a2063616c6c657220646f6573206e6f74206861766560008201527f207468652050617573657220726f6c6500000000000000000000000000000000602082015250565b6000612cd8603083612643565b9150612ce382612c7c565b604082019050919050565b60006020820190508181036000830152612d0781612ccb565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000612d44601483612643565b9150612d4f82612d0e565b602082019050919050565b60006020820190508181036000830152612d7381612d37565b9050919050565b7f4c6576656c3a20506c6561736520757365206c6576656c203020746f20332e00600082015250565b6000612db0601f83612643565b9150612dbb82612d7a565b602082019050919050565b60006020820190508181036000830152612ddf81612da3565b9050919050565b7f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500600082015250565b6000612e1c601f83612643565b9150612e2782612de6565b602082019050919050565b60006020820190508181036000830152612e4b81612e0f565b9050919050565b7f426164204368696c64436861696e4d616e6167657250726f787920616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612eae602283612643565b9150612eb982612e52565b604082019050919050565b60006020820190508181036000830152612edd81612ea1565b9050919050565b7f526f6c65733a206163636f756e7420697320746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f40602283612643565b9150612f4b82612ee4565b604082019050919050565b60006020820190508181036000830152612f6f81612f33565b9050919050565b7f596f75277265206e6f7420616c6c6f77656420746f206465706f736974000000600082015250565b6000612fac601d83612643565b9150612fb782612f76565b602082019050919050565b60006020820190508181036000830152612fdb81612f9f565b9050919050565b612feb81612a6c565b82525050565b6000604082019050613006600083018561260e565b6130136020830184612fe2565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613076602683612643565b91506130818261301a565b604082019050919050565b600060208201905081810360008301526130a581613069565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613108602483612643565b9150613113826130ac565b604082019050919050565b60006020820190508181036000830152613137816130fb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061319a602283612643565b91506131a58261313e565b604082019050919050565b600060208201905081810360008301526131c98161318d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061322c602583612643565b9150613237826131d0565b604082019050919050565b6000602082019050818103600083015261325b8161321f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006132be602383612643565b91506132c982613262565b604082019050919050565b600060208201905081810360008301526132ed816132b1565b9050919050565b7f53656e64657220697320626c61636b6c69737465640000000000000000000000600082015250565b600061332a601583612643565b9150613335826132f4565b602082019050919050565b600060208201905081810360008301526133598161331d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061339a826125ab565b91506133a5836125ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133da576133d9613360565b5b828201905092915050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000600082015250565b600061341b601e83612643565b9150613426826133e5565b602082019050919050565b6000602082019050818103600083015261344a8161340e565b9050919050565b600061345c826125ab565b9150613467836125ab565b92508282101561347a57613479613360565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006134bb601b83612643565b91506134c682613485565b602082019050919050565b600060208201905081810360008301526134ea816134ae565b9050919050565b7f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b600061354d602183612643565b9150613558826134f1565b604082019050919050565b6000602082019050818103600083015261357c81613540565b9050919050565b600061358e826125ab565b9150613599836125ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135d2576135d1613360565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613617826125ab565b9150613622836125ab565b925082613632576136316135dd565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613699602183612643565b91506136a48261363d565b604082019050919050565b600060208201905081810360008301526136c88161368c565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000600082015250565b6000613705601a83612643565b9150613710826136cf565b602082019050919050565b60006020820190508181036000830152613734816136f8565b905091905056fea2646970667358221220f9784be2fd5eafbbf0c662b4923a79420ef3858f65b8d49ac738980f0ef1606564736f6c634300080a0033

Deployed ByteCode Sourcemap

26241:2275:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9669:68;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26754:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20864:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11860:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20679:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27255:79;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26658:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28042:288;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21029:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20190:118;;;:::i;:::-;;26968:157;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17715:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28415:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19399:78;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10082:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27701:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17932:77;;;:::i;:::-;;12014:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23103:140;;;:::i;:::-;;17832:92;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19979:116;;;:::i;:::-;;9427:66;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22292:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22658:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26860:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9263:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21221:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20530:141;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27133:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9933:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12573:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27443:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23398:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9669:68;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26754:41::-;;;;;;;;;;;;;;;;;;;:::o;20864:157::-;20960:4;19636:7;;;;;;;;;;;19635:8;19627:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;20984:29:::1;20998:7;21007:5;20984:13;:29::i;:::-;20977:36;;20864:157:::0;;;;:::o;11860:91::-;11904:7;11931:12;;11924:19;;11860:91;:::o;20679:177::-;20789:4;19636:7;;;;;;;;;;;19635:8;19627:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;20813:35:::1;20832:4;20838:2;20842:5;20813:18;:35::i;:::-;20806:42;;20679:177:::0;;;;;:::o;27255:79::-;27309:17;27319:6;27309:9;:17::i;:::-;27255:79;:::o;26658:35::-;26691:2;26658:35;:::o;28042:288::-;22504:9;:7;:9::i;:::-;22496:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;28173:1:::1;28166:5;:8;;;;28158:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;28247:17;28221:16;28238:5;28221:23;;;;;;;;;;:::i;:::-;;;;;;;;;:43;;;;28303:19;28275:18;28294:5;28275:25;;;;;;;;;;:::i;:::-;;;;;;;;;:47;;;;28042:288:::0;;;:::o;21029:184::-;21137:4;19636:7;;;;;;;;;;;19635:8;19627:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;21161:44:::1;21185:7;21194:10;21161:23;:44::i;:::-;21154:51;;21029:184:::0;;;;:::o;20190:118::-;17614:20;17623:10;17614:8;:20::i;:::-;17606:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;19835:7:::1;;;;;;;;;;;19827:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;20259:5:::2;20249:7;;:15;;;;;;;;;;;;;;;;;;20280:20;20289:10;20280:20;;;;;;:::i;:::-;;;;;;;;20190:118::o:0;26968:157::-;22504:9;:7;:9::i;:::-;22496:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27066:51:::1;27091:25;27066:24;:51::i;:::-;26968:157:::0;:::o;17715:109::-;17771:4;17795:21;17808:7;17795:8;:12;;:21;;;;:::i;:::-;17788:28;;17715:109;;;:::o;28415:98::-;22504:9;:7;:9::i;:::-;22496:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;28498:7:::1;28485:10;;:20;;;;;;;;;;;;;;;;;;28415:98:::0;:::o;19399:78::-;19438:4;19462:7;;;;;;;;;;;19455:14;;19399:78;:::o;10082:82::-;;;;;;;;;;;;;:::o;27701:183::-;22504:9;:7;:9::i;:::-;22496:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27802:1:::1;27795:5;:8;;;;27787:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;27871:5;27850:9;:18;27860:7;27850:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;27701:183:::0;;:::o;17932:77::-;17976:25;17990:10;17976:13;:25::i;:::-;17932:77::o;12014:110::-;12071:7;12098:9;:18;12108:7;12098:18;;;;;;;;;;;;;;;;12091:25;;12014:110;;;:::o;23103:140::-;22504:9;:7;:9::i;:::-;22496:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;23202:1:::1;23165:40;;23186:6;;;;;;;;;;;23165:40;;;;;;;;;;;;23233:1;23216:6;;:19;;;;;;;;;;;;;;;;;;23103:140::o:0;17832:92::-;17614:20;17623:10;17614:8;:20::i;:::-;17606:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;17897:19:::1;17908:7;17897:10;:19::i;:::-;17832:92:::0;:::o;19979:116::-;17614:20;17623:10;17614:8;:20::i;:::-;17606:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;19636:7:::1;;;;;;;;;;;19635:8;19627:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;20049:4:::2;20039:7;;:14;;;;;;;;;;;;;;;;;;20069:18;20076:10;20069:18;;;;;;:::i;:::-;;;;;;;;19979:116::o:0;9427:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22292:79::-;22330:7;22357:6;;;;;;;;;;;22350:13;;22292:79;:::o;22658:92::-;22698:4;22736:6;;;;;;;;;;;22722:20;;:10;:20;;;22715:27;;22658:92;:::o;26860:37::-;;;;;;;;;;;;;;;;;;;:::o;9263:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;21221:194::-;21334:4;19636:7;;;;;;;;;;;19635:8;19627:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;21358:49:::1;21382:7;21391:15;21358:23;:49::i;:::-;21351:56;;21221:194:::0;;;;:::o;20530:141::-;20614:4;19636:7;;;;;;;;;;;19635:8;19627:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;20638:25:::1;20653:2;20657:5;20638:14;:25::i;:::-;20631:32;;20530:141:::0;;;;:::o;27133:114::-;27212:27;27221:4;27227:11;;27212:8;:27::i;:::-;27133:114;;;:::o;9933:25::-;;;;;;;;;;;;;:::o;12573:134::-;12645:7;12672:11;:18;12684:5;12672:18;;;;;;;;;;;;;;;:27;12691:7;12672:27;;;;;;;;;;;;;;;;12665:34;;12573:134;;;;:::o;27443:176::-;22504:9;:7;:9::i;:::-;22496:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27564:47:::1;27579:6;27586:9;27596:6;27603:7;27564:14;:47::i;:::-;27443:176:::0;;;;:::o;23398:109::-;22504:9;:7;:9::i;:::-;22496:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;23471:28:::1;23490:8;23471:18;:28::i;:::-;23398:109:::0;:::o;333:178::-;411:18;415:4;421:7;411:3;:18::i;:::-;410:19;402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;499:4;476;:11;;:20;488:7;476:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;333:178;;:::o;12854:165::-;12936:4;12953:36;12962:10;12974:7;12983:5;12953:8;:36::i;:::-;13007:4;13000:11;;12854:165;;;;:::o;13490:273::-;13596:4;13613:36;13623:6;13631:9;13642:6;13613:9;:36::i;:::-;13660:73;13669:6;13677:10;13689:43;13725:6;13689:11;:19;13701:6;13689:19;;;;;;;;;;;;;;;:31;13709:10;13689:31;;;;;;;;;;;;;;;;:35;;:43;;;;:::i;:::-;13660:8;:73::i;:::-;13751:4;13744:11;;13490:273;;;;;:::o;11082:236::-;11161:33;11187:6;11161:9;:21;11171:10;11161:21;;;;;;;;;;;;;;;;:25;;:33;;;;:::i;:::-;11137:9;:21;11147:10;11137:21;;;;;;;;;;;;;;;:57;;;;11220:24;11237:6;11220:12;;:16;;:24;;;;:::i;:::-;11205:12;:39;;;;11299:1;11270:40;;11279:10;11270:40;;;11303:6;11270:40;;;;;;:::i;:::-;;;;;;;;11082:236;:::o;14172:214::-;14260:4;14277:79;14286:10;14298:7;14307:48;14344:10;14307:11;:23;14319:10;14307:23;;;;;;;;;;;;;;;:32;14331:7;14307:32;;;;;;;;;;;;;;;;:36;;:48;;;;:::i;:::-;14277:8;:79::i;:::-;14374:4;14367:11;;14172:214;;;;:::o;10331:244::-;10465:1;10428:39;;:25;:39;;;;10420:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;10542:25;10517:22;;:50;;;;;;;;;;;;;;;;;;10331:244;:::o;869:203::-;941:4;985:1;966:21;;:7;:21;;;;958:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1044:4;:11;;:20;1056:7;1044:20;;;;;;;;;;;;;;;;;;;;;;;;;1037:27;;869:203;;;;:::o;18147:130::-;18207:24;18223:7;18207:8;:15;;:24;;;;:::i;:::-;18261:7;18247:22;;;;;;;;;;;;18147:130;:::o;18017:122::-;18074:21;18087:7;18074:8;:12;;:21;;;;:::i;:::-;18123:7;18111:20;;;;;;;;;;;;18017:122;:::o;14889:224::-;14982:4;14999:84;15008:10;15020:7;15029:53;15066:15;15029:11;:23;15041:10;15029:23;;;;;;;;;;;;;;;:32;15053:7;15029:32;;;;;;;;;;;;;;;;:36;;:53;;;;:::i;:::-;14999:8;:84::i;:::-;15101:4;15094:11;;14889:224;;;;:::o;12337:173::-;12423:4;12440:40;12450:10;12462:9;12473:6;12440:9;:40::i;:::-;12498:4;12491:11;;12337:173;;;;:::o;10583:491::-;10685:22;;;;;;;;;;;10671:36;;:10;:36;;;10663:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10754:14;10782:11;;10771:34;;;;;;;:::i;:::-;10754:51;;10926:24;10943:6;10926:12;;:16;;:24;;;;:::i;:::-;10911:12;:39;;;;10979:27;10999:6;10979:9;:15;10989:4;10979:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;10961:9;:15;10971:4;10961:15;;;;;;;;;;;;;;;:45;;;;11053:4;11032:34;;11049:1;11032:34;;;11059:6;11032:34;;;;;;:::i;:::-;;;;;;;;10652:422;10583:491;;;:::o;11444:351::-;11576:29;11598:6;11576:9;:17;11586:6;11576:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;11556:9;:17;11566:6;11556:17;;;;;;;;;;;;;;;:49;;;;11639:32;11664:6;11639:9;:20;11649:9;11639:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11616:9;:20;11626:9;11616:20;;;;;;;;;;;;;;;:55;;;;11704:9;11687:35;;11696:6;11687:35;;;11715:6;11687:35;;;;;;:::i;:::-;;;;;;;;11760:9;11738:49;;11752:6;11738:49;;;11771:6;11779:7;11738:49;;;;;;;:::i;:::-;;;;;;;;11444:351;;;;:::o;23613:229::-;23707:1;23687:22;;:8;:22;;;;23679:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23797:8;23768:38;;23789:6;;;;;;;;;;;23768:38;;;;;;;;;;;;23826:8;23817:6;;:17;;;;;;;;;;;;;;;;;;23613:229;:::o;16896:335::-;17006:1;16989:19;;:5;:19;;;;16981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17087:1;17068:21;;:7;:21;;;;17060:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17171:5;17141:11;:18;17153:5;17141:18;;;;;;;;;;;;;;;:27;17160:7;17141:27;;;;;;;;;;;;;;;:35;;;;17208:7;17192:31;;17201:5;17192:31;;;17217:5;17192:31;;;;;;:::i;:::-;;;;;;;;16896:335;;;:::o;15603:853::-;15719:1;15701:20;;:6;:20;;;;15693:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15803:1;15782:23;;:9;:23;;;;15774:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15860:11;15874:9;:17;15884:6;15874:17;;;;;;;;;;;;;;;;;;;;;;;;;15860:31;;15919:1;15910:5;:10;;;;15902:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;15959:19;16008:56;9838:8;16009:37;16039:6;16009:18;16028:5;16009:25;;;;;;;;;;:::i;:::-;;;;;;;;;;:29;;:37;;;;:::i;:::-;16008:43;;:56;;;;:::i;:::-;15981:16;15998:5;15981:23;;;;;;;;;;:::i;:::-;;;;;;;;;;:84;;;;:::i;:::-;15959:106;;16098:48;16134:11;16099:29;16121:6;16099:9;:17;16109:6;16099:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;16098:35;;:48;;;;:::i;:::-;16078:9;:17;16088:6;16078:17;;;;;;;;;;;;;;;:68;;;;16180:32;16205:6;16180:9;:20;16190:9;16180:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;16157:9;:20;16167:9;16157:20;;;;;;;;;;;;;;;:55;;;;16247:9;16230:35;;16239:6;16230:35;;;16258:6;16230:35;;;;;;:::i;:::-;;;;;;;;16296:1;16282:11;:15;16278:171;;;16338:38;16364:11;16338:9;:21;16348:10;;;;;;;;;;;16338:21;;;;;;;;;;;;;;;;:25;;:38;;;;:::i;:::-;16314:9;:21;16324:10;;;;;;;;;;;16314:21;;;;;;;;;;;;;;;:62;;;;16413:10;;;;;;;;;;;16396:41;;16405:6;16396:41;;;16425:11;16396:41;;;;;;:::i;:::-;;;;;;;;16278:171;15682:774;;15603:853;;;:::o;5552:184::-;5610:7;5643:1;5638;:6;;5630:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;5690:9;5706:1;5702;:5;;;;:::i;:::-;5690:17;;5727:1;5720:8;;;5552:184;;;;:::o;5096:181::-;5154:7;5174:9;5190:1;5186;:5;;;;:::i;:::-;5174:17;;5215:1;5210;:6;;5202:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5268:1;5261:8;;;5096:181;;;;:::o;591:183::-;671:18;675:4;681:7;671:3;:18::i;:::-;663:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;761:5;738:4;:11;;:20;750:7;738:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;591:183;;:::o;5987:470::-;6045:7;6294:1;6289;:6;6285:47;;;6319:1;6312:8;;;;6285:47;6344:9;6360:1;6356;:5;;;;:::i;:::-;6344:17;;6389:1;6384;6380;:5;;;;:::i;:::-;:10;6372:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6448:1;6441:8;;;5987:470;;;;;:::o;6925:333::-;6983:7;7082:1;7078;:5;7070:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;7125:9;7141:1;7137;:5;;;;:::i;:::-;7125:17;;7249:1;7242:8;;;6925:333;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:222::-;1242:4;1280:2;1269:9;1265:18;1257:26;;1293:71;1361:1;1350:9;1346:17;1337:6;1293:71;:::i;:::-;1149:222;;;;:::o;1377:99::-;1429:6;1463:5;1457:12;1447:22;;1377:99;;;:::o;1482:169::-;1566:11;1600:6;1595:3;1588:19;1640:4;1635:3;1631:14;1616:29;;1482:169;;;;:::o;1657:307::-;1725:1;1735:113;1749:6;1746:1;1743:13;1735:113;;;1834:1;1829:3;1825:11;1819:18;1815:1;1810:3;1806:11;1799:39;1771:2;1768:1;1764:10;1759:15;;1735:113;;;1866:6;1863:1;1860:13;1857:101;;;1946:1;1937:6;1932:3;1928:16;1921:27;1857:101;1706:258;1657:307;;;:::o;1970:102::-;2011:6;2062:2;2058:7;2053:2;2046:5;2042:14;2038:28;2028:38;;1970:102;;;:::o;2078:364::-;2166:3;2194:39;2227:5;2194:39;:::i;:::-;2249:71;2313:6;2308:3;2249:71;:::i;:::-;2242:78;;2329:52;2374:6;2369:3;2362:4;2355:5;2351:16;2329:52;:::i;:::-;2406:29;2428:6;2406:29;:::i;:::-;2401:3;2397:39;2390:46;;2170:272;2078:364;;;;:::o;2448:313::-;2561:4;2599:2;2588:9;2584:18;2576:26;;2648:9;2642:4;2638:20;2634:1;2623:9;2619:17;2612:47;2676:78;2749:4;2740:6;2676:78;:::i;:::-;2668:86;;2448:313;;;;:::o;2767:126::-;2804:7;2844:42;2837:5;2833:54;2822:65;;2767:126;;;:::o;2899:96::-;2936:7;2965:24;2983:5;2965:24;:::i;:::-;2954:35;;2899:96;;;:::o;3001:122::-;3074:24;3092:5;3074:24;:::i;:::-;3067:5;3064:35;3054:63;;3113:1;3110;3103:12;3054:63;3001:122;:::o;3129:139::-;3175:5;3213:6;3200:20;3191:29;;3229:33;3256:5;3229:33;:::i;:::-;3129:139;;;;:::o;3274:474::-;3342:6;3350;3399:2;3387:9;3378:7;3374:23;3370:32;3367:119;;;3405:79;;:::i;:::-;3367:119;3525:1;3550:53;3595:7;3586:6;3575:9;3571:22;3550:53;:::i;:::-;3540:63;;3496:117;3652:2;3678:53;3723:7;3714:6;3703:9;3699:22;3678:53;:::i;:::-;3668:63;;3623:118;3274:474;;;;;:::o;3754:90::-;3788:7;3831:5;3824:13;3817:21;3806:32;;3754:90;;;:::o;3850:109::-;3931:21;3946:5;3931:21;:::i;:::-;3926:3;3919:34;3850:109;;:::o;3965:210::-;4052:4;4090:2;4079:9;4075:18;4067:26;;4103:65;4165:1;4154:9;4150:17;4141:6;4103:65;:::i;:::-;3965:210;;;;:::o;4181:619::-;4258:6;4266;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:119;;;4329:79;;:::i;:::-;4291:119;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:53;4647:7;4638:6;4627:9;4623:22;4602:53;:::i;:::-;4592:63;;4547:118;4704:2;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4675:118;4181:619;;;;;:::o;4806:86::-;4841:7;4881:4;4874:5;4870:16;4859:27;;4806:86;;;:::o;4898:112::-;4981:22;4997:5;4981:22;:::i;:::-;4976:3;4969:35;4898:112;;:::o;5016:214::-;5105:4;5143:2;5132:9;5128:18;5120:26;;5156:67;5220:1;5209:9;5205:17;5196:6;5156:67;:::i;:::-;5016:214;;;;:::o;5236:118::-;5307:22;5323:5;5307:22;:::i;:::-;5300:5;5297:33;5287:61;;5344:1;5341;5334:12;5287:61;5236:118;:::o;5360:135::-;5404:5;5442:6;5429:20;5420:29;;5458:31;5483:5;5458:31;:::i;:::-;5360:135;;;;:::o;5501:615::-;5576:6;5584;5592;5641:2;5629:9;5620:7;5616:23;5612:32;5609:119;;;5647:79;;:::i;:::-;5609:119;5767:1;5792:53;5837:7;5828:6;5817:9;5813:22;5792:53;:::i;:::-;5782:63;;5738:117;5894:2;5920:53;5965:7;5956:6;5945:9;5941:22;5920:53;:::i;:::-;5910:63;;5865:118;6022:2;6048:51;6091:7;6082:6;6071:9;6067:22;6048:51;:::i;:::-;6038:61;;5993:116;5501:615;;;;;:::o;6122:329::-;6181:6;6230:2;6218:9;6209:7;6205:23;6201:32;6198:119;;;6236:79;;:::i;:::-;6198:119;6356:1;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6327:117;6122:329;;;;:::o;6457:118::-;6544:24;6562:5;6544:24;:::i;:::-;6539:3;6532:37;6457:118;;:::o;6581:222::-;6674:4;6712:2;6701:9;6697:18;6689:26;;6725:71;6793:1;6782:9;6778:17;6769:6;6725:71;:::i;:::-;6581:222;;;;:::o;6809:470::-;6875:6;6883;6932:2;6920:9;6911:7;6907:23;6903:32;6900:119;;;6938:79;;:::i;:::-;6900:119;7058:1;7083:53;7128:7;7119:6;7108:9;7104:22;7083:53;:::i;:::-;7073:63;;7029:117;7185:2;7211:51;7254:7;7245:6;7234:9;7230:22;7211:51;:::i;:::-;7201:61;;7156:116;6809:470;;;;;:::o;7285:117::-;7394:1;7391;7384:12;7408:117;7517:1;7514;7507:12;7531:117;7640:1;7637;7630:12;7667:552;7724:8;7734:6;7784:3;7777:4;7769:6;7765:17;7761:27;7751:122;;7792:79;;:::i;:::-;7751:122;7905:6;7892:20;7882:30;;7935:18;7927:6;7924:30;7921:117;;;7957:79;;:::i;:::-;7921:117;8071:4;8063:6;8059:17;8047:29;;8125:3;8117:4;8109:6;8105:17;8095:8;8091:32;8088:41;8085:128;;;8132:79;;:::i;:::-;8085:128;7667:552;;;;;:::o;8225:672::-;8304:6;8312;8320;8369:2;8357:9;8348:7;8344:23;8340:32;8337:119;;;8375:79;;:::i;:::-;8337:119;8495:1;8520:53;8565:7;8556:6;8545:9;8541:22;8520:53;:::i;:::-;8510:63;;8466:117;8650:2;8639:9;8635:18;8622:32;8681:18;8673:6;8670:30;8667:117;;;8703:79;;:::i;:::-;8667:117;8816:64;8872:7;8863:6;8852:9;8848:22;8816:64;:::i;:::-;8798:82;;;;8593:297;8225:672;;;;;:::o;8903:474::-;8971:6;8979;9028:2;9016:9;9007:7;9003:23;8999:32;8996:119;;;9034:79;;:::i;:::-;8996:119;9154:1;9179:53;9224:7;9215:6;9204:9;9200:22;9179:53;:::i;:::-;9169:63;;9125:117;9281:2;9307:53;9352:7;9343:6;9332:9;9328:22;9307:53;:::i;:::-;9297:63;;9252:118;8903:474;;;;;:::o;9383:77::-;9420:7;9449:5;9438:16;;9383:77;;;:::o;9466:122::-;9539:24;9557:5;9539:24;:::i;:::-;9532:5;9529:35;9519:63;;9578:1;9575;9568:12;9519:63;9466:122;:::o;9594:139::-;9640:5;9678:6;9665:20;9656:29;;9694:33;9721:5;9694:33;:::i;:::-;9594:139;;;;:::o;9739:765::-;9825:6;9833;9841;9849;9898:3;9886:9;9877:7;9873:23;9869:33;9866:120;;;9905:79;;:::i;:::-;9866:120;10025:1;10050:53;10095:7;10086:6;10075:9;10071:22;10050:53;:::i;:::-;10040:63;;9996:117;10152:2;10178:53;10223:7;10214:6;10203:9;10199:22;10178:53;:::i;:::-;10168:63;;10123:118;10280:2;10306:53;10351:7;10342:6;10331:9;10327:22;10306:53;:::i;:::-;10296:63;;10251:118;10408:2;10434:53;10479:7;10470:6;10459:9;10455:22;10434:53;:::i;:::-;10424:63;;10379:118;9739:765;;;;;;;:::o;10510:166::-;10650:18;10646:1;10638:6;10634:14;10627:42;10510:166;:::o;10682:366::-;10824:3;10845:67;10909:2;10904:3;10845:67;:::i;:::-;10838:74;;10921:93;11010:3;10921:93;:::i;:::-;11039:2;11034:3;11030:12;11023:19;;10682:366;;;:::o;11054:419::-;11220:4;11258:2;11247:9;11243:18;11235:26;;11307:9;11301:4;11297:20;11293:1;11282:9;11278:17;11271:47;11335:131;11461:4;11335:131;:::i;:::-;11327:139;;11054:419;;;:::o;11479:182::-;11619:34;11615:1;11607:6;11603:14;11596:58;11479:182;:::o;11667:366::-;11809:3;11830:67;11894:2;11889:3;11830:67;:::i;:::-;11823:74;;11906:93;11995:3;11906:93;:::i;:::-;12024:2;12019:3;12015:12;12008:19;;11667:366;;;:::o;12039:419::-;12205:4;12243:2;12232:9;12228:18;12220:26;;12292:9;12286:4;12282:20;12278:1;12267:9;12263:17;12256:47;12320:131;12446:4;12320:131;:::i;:::-;12312:139;;12039:419;;;:::o;12464:181::-;12604:33;12600:1;12592:6;12588:14;12581:57;12464:181;:::o;12651:366::-;12793:3;12814:67;12878:2;12873:3;12814:67;:::i;:::-;12807:74;;12890:93;12979:3;12890:93;:::i;:::-;13008:2;13003:3;12999:12;12992:19;;12651:366;;;:::o;13023:419::-;13189:4;13227:2;13216:9;13212:18;13204:26;;13276:9;13270:4;13266:20;13262:1;13251:9;13247:17;13240:47;13304:131;13430:4;13304:131;:::i;:::-;13296:139;;13023:419;;;:::o;13448:180::-;13496:77;13493:1;13486:88;13593:4;13590:1;13583:15;13617:4;13614:1;13607:15;13634:235;13774:34;13770:1;13762:6;13758:14;13751:58;13843:18;13838:2;13830:6;13826:15;13819:43;13634:235;:::o;13875:366::-;14017:3;14038:67;14102:2;14097:3;14038:67;:::i;:::-;14031:74;;14114:93;14203:3;14114:93;:::i;:::-;14232:2;14227:3;14223:12;14216:19;;13875:366;;;:::o;14247:419::-;14413:4;14451:2;14440:9;14436:18;14428:26;;14500:9;14494:4;14490:20;14486:1;14475:9;14471:17;14464:47;14528:131;14654:4;14528:131;:::i;:::-;14520:139;;14247:419;;;:::o;14672:170::-;14812:22;14808:1;14800:6;14796:14;14789:46;14672:170;:::o;14848:366::-;14990:3;15011:67;15075:2;15070:3;15011:67;:::i;:::-;15004:74;;15087:93;15176:3;15087:93;:::i;:::-;15205:2;15200:3;15196:12;15189:19;;14848:366;;;:::o;15220:419::-;15386:4;15424:2;15413:9;15409:18;15401:26;;15473:9;15467:4;15463:20;15459:1;15448:9;15444:17;15437:47;15501:131;15627:4;15501:131;:::i;:::-;15493:139;;15220:419;;;:::o;15645:181::-;15785:33;15781:1;15773:6;15769:14;15762:57;15645:181;:::o;15832:366::-;15974:3;15995:67;16059:2;16054:3;15995:67;:::i;:::-;15988:74;;16071:93;16160:3;16071:93;:::i;:::-;16189:2;16184:3;16180:12;16173:19;;15832:366;;;:::o;16204:419::-;16370:4;16408:2;16397:9;16393:18;16385:26;;16457:9;16451:4;16447:20;16443:1;16432:9;16428:17;16421:47;16485:131;16611:4;16485:131;:::i;:::-;16477:139;;16204:419;;;:::o;16629:181::-;16769:33;16765:1;16757:6;16753:14;16746:57;16629:181;:::o;16816:366::-;16958:3;16979:67;17043:2;17038:3;16979:67;:::i;:::-;16972:74;;17055:93;17144:3;17055:93;:::i;:::-;17173:2;17168:3;17164:12;17157:19;;16816:366;;;:::o;17188:419::-;17354:4;17392:2;17381:9;17377:18;17369:26;;17441:9;17435:4;17431:20;17427:1;17416:9;17412:17;17405:47;17469:131;17595:4;17469:131;:::i;:::-;17461:139;;17188:419;;;:::o;17613:221::-;17753:34;17749:1;17741:6;17737:14;17730:58;17822:4;17817:2;17809:6;17805:15;17798:29;17613:221;:::o;17840:366::-;17982:3;18003:67;18067:2;18062:3;18003:67;:::i;:::-;17996:74;;18079:93;18168:3;18079:93;:::i;:::-;18197:2;18192:3;18188:12;18181:19;;17840:366;;;:::o;18212:419::-;18378:4;18416:2;18405:9;18401:18;18393:26;;18465:9;18459:4;18455:20;18451:1;18440:9;18436:17;18429:47;18493:131;18619:4;18493:131;:::i;:::-;18485:139;;18212:419;;;:::o;18637:221::-;18777:34;18773:1;18765:6;18761:14;18754:58;18846:4;18841:2;18833:6;18829:15;18822:29;18637:221;:::o;18864:366::-;19006:3;19027:67;19091:2;19086:3;19027:67;:::i;:::-;19020:74;;19103:93;19192:3;19103:93;:::i;:::-;19221:2;19216:3;19212:12;19205:19;;18864:366;;;:::o;19236:419::-;19402:4;19440:2;19429:9;19425:18;19417:26;;19489:9;19483:4;19479:20;19475:1;19464:9;19460:17;19453:47;19517:131;19643:4;19517:131;:::i;:::-;19509:139;;19236:419;;;:::o;19661:179::-;19801:31;19797:1;19789:6;19785:14;19778:55;19661:179;:::o;19846:366::-;19988:3;20009:67;20073:2;20068:3;20009:67;:::i;:::-;20002:74;;20085:93;20174:3;20085:93;:::i;:::-;20203:2;20198:3;20194:12;20187:19;;19846:366;;;:::o;20218:419::-;20384:4;20422:2;20411:9;20407:18;20399:26;;20471:9;20465:4;20461:20;20457:1;20446:9;20442:17;20435:47;20499:131;20625:4;20499:131;:::i;:::-;20491:139;;20218:419;;;:::o;20643:118::-;20730:24;20748:5;20730:24;:::i;:::-;20725:3;20718:37;20643:118;;:::o;20767:332::-;20888:4;20926:2;20915:9;20911:18;20903:26;;20939:71;21007:1;20996:9;20992:17;20983:6;20939:71;:::i;:::-;21020:72;21088:2;21077:9;21073:18;21064:6;21020:72;:::i;:::-;20767:332;;;;;:::o;21105:225::-;21245:34;21241:1;21233:6;21229:14;21222:58;21314:8;21309:2;21301:6;21297:15;21290:33;21105:225;:::o;21336:366::-;21478:3;21499:67;21563:2;21558:3;21499:67;:::i;:::-;21492:74;;21575:93;21664:3;21575:93;:::i;:::-;21693:2;21688:3;21684:12;21677:19;;21336:366;;;:::o;21708:419::-;21874:4;21912:2;21901:9;21897:18;21889:26;;21961:9;21955:4;21951:20;21947:1;21936:9;21932:17;21925:47;21989:131;22115:4;21989:131;:::i;:::-;21981:139;;21708:419;;;:::o;22133:223::-;22273:34;22269:1;22261:6;22257:14;22250:58;22342:6;22337:2;22329:6;22325:15;22318:31;22133:223;:::o;22362:366::-;22504:3;22525:67;22589:2;22584:3;22525:67;:::i;:::-;22518:74;;22601:93;22690:3;22601:93;:::i;:::-;22719:2;22714:3;22710:12;22703:19;;22362:366;;;:::o;22734:419::-;22900:4;22938:2;22927:9;22923:18;22915:26;;22987:9;22981:4;22977:20;22973:1;22962:9;22958:17;22951:47;23015:131;23141:4;23015:131;:::i;:::-;23007:139;;22734:419;;;:::o;23159:221::-;23299:34;23295:1;23287:6;23283:14;23276:58;23368:4;23363:2;23355:6;23351:15;23344:29;23159:221;:::o;23386:366::-;23528:3;23549:67;23613:2;23608:3;23549:67;:::i;:::-;23542:74;;23625:93;23714:3;23625:93;:::i;:::-;23743:2;23738:3;23734:12;23727:19;;23386:366;;;:::o;23758:419::-;23924:4;23962:2;23951:9;23947:18;23939:26;;24011:9;24005:4;24001:20;23997:1;23986:9;23982:17;23975:47;24039:131;24165:4;24039:131;:::i;:::-;24031:139;;23758:419;;;:::o;24183:224::-;24323:34;24319:1;24311:6;24307:14;24300:58;24392:7;24387:2;24379:6;24375:15;24368:32;24183:224;:::o;24413:366::-;24555:3;24576:67;24640:2;24635:3;24576:67;:::i;:::-;24569:74;;24652:93;24741:3;24652:93;:::i;:::-;24770:2;24765:3;24761:12;24754:19;;24413:366;;;:::o;24785:419::-;24951:4;24989:2;24978:9;24974:18;24966:26;;25038:9;25032:4;25028:20;25024:1;25013:9;25009:17;25002:47;25066:131;25192:4;25066:131;:::i;:::-;25058:139;;24785:419;;;:::o;25210:222::-;25350:34;25346:1;25338:6;25334:14;25327:58;25419:5;25414:2;25406:6;25402:15;25395:30;25210:222;:::o;25438:366::-;25580:3;25601:67;25665:2;25660:3;25601:67;:::i;:::-;25594:74;;25677:93;25766:3;25677:93;:::i;:::-;25795:2;25790:3;25786:12;25779:19;;25438:366;;;:::o;25810:419::-;25976:4;26014:2;26003:9;25999:18;25991:26;;26063:9;26057:4;26053:20;26049:1;26038:9;26034:17;26027:47;26091:131;26217:4;26091:131;:::i;:::-;26083:139;;25810:419;;;:::o;26235:171::-;26375:23;26371:1;26363:6;26359:14;26352:47;26235:171;:::o;26412:366::-;26554:3;26575:67;26639:2;26634:3;26575:67;:::i;:::-;26568:74;;26651:93;26740:3;26651:93;:::i;:::-;26769:2;26764:3;26760:12;26753:19;;26412:366;;;:::o;26784:419::-;26950:4;26988:2;26977:9;26973:18;26965:26;;27037:9;27031:4;27027:20;27023:1;27012:9;27008:17;27001:47;27065:131;27191:4;27065:131;:::i;:::-;27057:139;;26784:419;;;:::o;27209:180::-;27257:77;27254:1;27247:88;27354:4;27351:1;27344:15;27378:4;27375:1;27368:15;27395:305;27435:3;27454:20;27472:1;27454:20;:::i;:::-;27449:25;;27488:20;27506:1;27488:20;:::i;:::-;27483:25;;27642:1;27574:66;27570:74;27567:1;27564:81;27561:107;;;27648:18;;:::i;:::-;27561:107;27692:1;27689;27685:9;27678:16;;27395:305;;;;:::o;27706:180::-;27846:32;27842:1;27834:6;27830:14;27823:56;27706:180;:::o;27892:366::-;28034:3;28055:67;28119:2;28114:3;28055:67;:::i;:::-;28048:74;;28131:93;28220:3;28131:93;:::i;:::-;28249:2;28244:3;28240:12;28233:19;;27892:366;;;:::o;28264:419::-;28430:4;28468:2;28457:9;28453:18;28445:26;;28517:9;28511:4;28507:20;28503:1;28492:9;28488:17;28481:47;28545:131;28671:4;28545:131;:::i;:::-;28537:139;;28264:419;;;:::o;28689:191::-;28729:4;28749:20;28767:1;28749:20;:::i;:::-;28744:25;;28783:20;28801:1;28783:20;:::i;:::-;28778:25;;28822:1;28819;28816:8;28813:34;;;28827:18;;:::i;:::-;28813:34;28872:1;28869;28865:9;28857:17;;28689:191;;;;:::o;28886:177::-;29026:29;29022:1;29014:6;29010:14;29003:53;28886:177;:::o;29069:366::-;29211:3;29232:67;29296:2;29291:3;29232:67;:::i;:::-;29225:74;;29308:93;29397:3;29308:93;:::i;:::-;29426:2;29421:3;29417:12;29410:19;;29069:366;;;:::o;29441:419::-;29607:4;29645:2;29634:9;29630:18;29622:26;;29694:9;29688:4;29684:20;29680:1;29669:9;29665:17;29658:47;29722:131;29848:4;29722:131;:::i;:::-;29714:139;;29441:419;;;:::o;29866:220::-;30006:34;30002:1;29994:6;29990:14;29983:58;30075:3;30070:2;30062:6;30058:15;30051:28;29866:220;:::o;30092:366::-;30234:3;30255:67;30319:2;30314:3;30255:67;:::i;:::-;30248:74;;30331:93;30420:3;30331:93;:::i;:::-;30449:2;30444:3;30440:12;30433:19;;30092:366;;;:::o;30464:419::-;30630:4;30668:2;30657:9;30653:18;30645:26;;30717:9;30711:4;30707:20;30703:1;30692:9;30688:17;30681:47;30745:131;30871:4;30745:131;:::i;:::-;30737:139;;30464:419;;;:::o;30889:348::-;30929:7;30952:20;30970:1;30952:20;:::i;:::-;30947:25;;30986:20;31004:1;30986:20;:::i;:::-;30981:25;;31174:1;31106:66;31102:74;31099:1;31096:81;31091:1;31084:9;31077:17;31073:105;31070:131;;;31181:18;;:::i;:::-;31070:131;31229:1;31226;31222:9;31211:20;;30889:348;;;;:::o;31243:180::-;31291:77;31288:1;31281:88;31388:4;31385:1;31378:15;31412:4;31409:1;31402:15;31429:185;31469:1;31486:20;31504:1;31486:20;:::i;:::-;31481:25;;31520:20;31538:1;31520:20;:::i;:::-;31515:25;;31559:1;31549:35;;31564:18;;:::i;:::-;31549:35;31606:1;31603;31599:9;31594:14;;31429:185;;;;:::o;31620:220::-;31760:34;31756:1;31748:6;31744:14;31737:58;31829:3;31824:2;31816:6;31812:15;31805:28;31620:220;:::o;31846:366::-;31988:3;32009:67;32073:2;32068:3;32009:67;:::i;:::-;32002:74;;32085:93;32174:3;32085:93;:::i;:::-;32203:2;32198:3;32194:12;32187:19;;31846:366;;;:::o;32218:419::-;32384:4;32422:2;32411:9;32407:18;32399:26;;32471:9;32465:4;32461:20;32457:1;32446:9;32442:17;32435:47;32499:131;32625:4;32499:131;:::i;:::-;32491:139;;32218:419;;;:::o;32643:176::-;32783:28;32779:1;32771:6;32767:14;32760:52;32643:176;:::o;32825:366::-;32967:3;32988:67;33052:2;33047:3;32988:67;:::i;:::-;32981:74;;33064:93;33153:3;33064:93;:::i;:::-;33182:2;33177:3;33173:12;33166:19;;32825:366;;;:::o;33197:419::-;33363:4;33401:2;33390:9;33386:18;33378:26;;33450:9;33444:4;33440:20;33436:1;33425:9;33421:17;33414:47;33478:131;33604:4;33478:131;:::i;:::-;33470:139;;33197:419;;;:::o

Swarm Source

ipfs://f9784be2fd5eafbbf0c662b4923a79420ef3858f65b8d49ac738980f0ef16065
Loading