Contract 0xbCA23d091AF20516814f4431cF75ac590d17BCCE

 
 
Txn Hash
Method
Block
From
To
Value
0xcf81f33eb56949cb398c2bfbed607be9017f4727557c9f10f45ab3b556897063Claim Reward And...119377842021-02-27 6:36:17648 days 4 hrs ago0x4d7b2be9d33cd50f83112ebd761304d83ee4d017 IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0018731275
0xc9df0ce904184e38a389d85b898ebff93a480017b03f9157b867e6b799b377edClaim Reward And...119377842021-02-27 6:36:17648 days 4 hrs ago0x4d7b2be9d33cd50f83112ebd761304d83ee4d017 IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0092525275
0x63cd6a83f0e38542c6b26acdc68916c7dc971b9f345331ad17948fe50cea9d34Claim Reward And...117209852021-01-24 22:15:04681 days 13 hrs ago0xb07bfdc0f7ac6f2c59eb0e78e04e0917b88c855e IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0065020260
0x9436a80b289ca98742f475266b7f71b6de4c5be25b84e6bc375a374a49c177e5Claim Reward And...117206222021-01-24 20:58:11681 days 14 hrs ago0xb07bfdc0f7ac6f2c59eb0e78e04e0917b88c855e IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0065008260
0xb1df657211622edc4cc6b379176409896c203bd2ded5905840e35b7827506878Claim Reward And...117206082021-01-24 20:56:18681 days 14 hrs ago0xb07bfdc0f7ac6f2c59eb0e78e04e0917b88c855e IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0065020260
0x3decf5532c037ea2b62a8cf07e840bfff25143defd78843f6b69b95f5dcefe05Claim Reward And...116243572021-01-10 2:27:43696 days 8 hrs ago0x8bd5ac2540bee49be8a42163c9fd3369df980eab IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0059601855
0x2836c91a2b76d83cd300f842be53e82f1200d31ab4e888cda0b68ce224a7439fClaim Reward And...116241522021-01-10 1:41:11696 days 9 hrs ago0x3a070d228001313407c9fb39bfef540f20210b65 IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0074759469
0xabf142193a38e30cbbf08ff0f4af052e7d3b1523609bffea1b7d4dce11106336Claim Reward And...116176852021-01-09 1:37:43697 days 9 hrs ago0xcfc7aba3c693e6277a88b63ed0e9bfa1a703fa1f IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0015109860.5
0x76da2171c4de47c9f8f8839af3ad5c041975c5253b244ad76034c19c7219d31dClaim Reward And...116176852021-01-09 1:37:43697 days 9 hrs ago0xcfc7aba3c693e6277a88b63ed0e9bfa1a703fa1f IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0067187562
0xa8f5bb4923251501a895c2ca6804de2dc014473bf276234fe63bf18e8c071170Claim Reward And...116028342021-01-06 19:03:31699 days 16 hrs ago0x6e6b3fdd05265ead4a8718d11c506464ed440c37 IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0075856970
0x0442cab51ab17613c73caf2a964769a628aad852571985445f85aefc59153817Select Winner116013442021-01-06 13:41:50699 days 21 hrs ago0xcd3da849c8074a316310abb70efe295a15cfb63d IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.01450783120.36000148
0xd93b5acbbc671374d48602ecec95c19e32bb5ec9a36a7828d5e6cb073a54c7d6Fetch Last Day P...116013332021-01-06 13:38:25699 days 21 hrs ago0xcd3da849c8074a316310abb70efe295a15cfb63d IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.03439204118.00000145
0xbfa7131436f6a71d57d60948dc460f6d06d18b93565ffa7f48242e510f95879cBuy Tickets115947792021-01-05 13:28:00700 days 21 hrs ago0x25e4a89a6017616d1910e7c5da93937cd4a2fd9d IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0051317567.67
0x1e4c8b01fd9fa23f574681c0ef914c012fdbcc9a003517336170460abd310b8eBuy Tickets115941562021-01-05 11:11:03701 days 7 mins ago0x25e4a89a6017616d1910e7c5da93937cd4a2fd9d IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0110052100
0x2be5badf02d7813cf57de466ca09c81ac0c2b34c164558b57ae407fb32e249f1Buy Tickets115935142021-01-05 8:44:37701 days 2 hrs ago0xcd3da849c8074a316310abb70efe295a15cfb63d IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.009879179
0x089e28303e48ee4152a2bc3b1a3abf02142cd1e5fa7c6ff6260d953a3fa9d89bClaim Reward And...115929642021-01-05 6:44:29701 days 4 hrs ago0x24a7eaad0d7f13d1999206d8c22f926980a12ca6 IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.01441015133
0xe72273ba90765627734dc025c5bd67a8cb3d3935908931fc89e943fa1c76fc65Claim Reward And...115928282021-01-05 6:12:44701 days 5 hrs ago0x840b7a7e3825366ac5fe2186cbe9d9cc4460917d IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0107283399
0x864a98c293786efb9f42511725df4d7ae90ca2533765880fcf872317ed8bbe61Buy Tickets115925332021-01-05 5:15:36701 days 6 hrs ago0x6e6b3fdd05265ead4a8718d11c506464ed440c37 IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0093796575
0x6883f2bb6280202dcd05d54070bddfa1c9c1fe1f8260b3dd06d6f5e560183519Select Winner115888902021-01-04 15:47:25701 days 19 hrs ago0xcd3da849c8074a316310abb70efe295a15cfb63d IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.01217423101.00000145
0x34b9a3bb0525d3a2cafa6c6db0db13f13d382c39e4af7bc61c59df74be3e0504Fetch Last Day P...115888642021-01-04 15:41:27701 days 19 hrs ago0xcd3da849c8074a316310abb70efe295a15cfb63d IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.02946634101.00000145
0x0586489e9631d890fb1226e98319fabcfca57b3a93195beda10211a53048ebaaStart War115882672021-01-04 13:34:45701 days 21 hrs ago0xcd3da849c8074a316310abb70efe295a15cfb63d IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.137567250
0x929fb0070da9591bb9055702712e5e4ee995acd11b26ae5cdbc59d0ca0790577Switch House115754542021-01-02 14:06:49703 days 21 hrs ago0xcd3da849c8074a316310abb70efe295a15cfb63d IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.01195352132.00000156
0x61dea15d467df307482012ee72a4d498cfcfd98a40fdda29a8ba3fc11a0ca3c1Buy Tickets115745522021-01-02 10:47:55704 days 30 mins ago0x8bd5ac2540bee49be8a42163c9fd3369df980eab IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0044034440
0x99cd67945cebd52f070c6ce370309b57c9ef205e12d5e78c2768b34bde456a0aBuy Tickets115744922021-01-02 10:34:32704 days 44 mins ago0xb54ba39b05858ae49dff6d7ea7f30d9c85edcdad IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0040719237
0x3955e079df02499918b3506c7c878107e4e211712dc4355fa5c3c48651e36f0bBuy Tickets115744282021-01-02 10:19:02704 days 59 mins ago0x1786b3e4d7a892d1e102b62972dbbd46e94ce5ea IN  0xbca23d091af20516814f4431cf75ac590d17bcce0 Ether0.0040719237
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DoTxGameContract

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-11
*/

pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;


interface IDotTokenContract{
  function balanceOf(address account) external view returns (uint256);
  function totalSupply() external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  function allowance(address owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

interface IDoTxLib{
    function queryChainLinkPrice(string calldata _fsym, string calldata _fsymId, int256 _multiplicator, bytes4 _selector) external;
    function fetchFirstDayPrices(string calldata firstHouseTicker, string calldata secondHouseTicker, string calldata firstHouseId, string calldata secondHouseId, int256 multiplicator, uint256 warIndex) external;
    function fetchLastDayPrices(string calldata firstHouseTicker, string calldata currentSecondHouseTicker, string calldata firstHouseId, string calldata secondHouseId, int256 multiplicator, uint256 warIndex) external;
    function setDoTxGame(address gameAddress) external;
    function calculateHousePerf(int256 open, int256 close, int256 precision) external pure returns(int256);
    function calculatePercentage(uint256 amount, uint256 percentage, uint256 selecteWinnerPrecision) external pure returns(uint256);
    function calculateReward(uint256 dotxUserBalance, uint256 totalDoTxWinningHouse, uint256 totalDoTxLosingHouse) external view returns(uint256);
    function getWarIndex() external view returns(uint256);
}

contract Context {
    constructor () internal { }

    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; 
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;
    address private _owner2;
    address public dotxLibAddress;

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

    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }
    
    function owner2() public view returns (address) {
        return _owner2;
    }
    
    function setOwner2(address ownerAddress) public onlyOwner {
        _owner2 = ownerAddress;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender() || _owner2 == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    modifier onlyOwnerOrDoTxLib() {
        require(_owner == _msgSender() || dotxLibAddress == _msgSender() || _owner2 == _msgSender(), "Ownable: caller is not the owner or the lib");
        _;
    }
    
    modifier onlyDoTxLib() {
        require(dotxLibAddress == _msgSender(), "Ownable: caller is not the owner or the lib");
        _;
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @title DeFi Of Thrones Game Contract
 * @author Maxime Reynders - DefiOfThrones (https://github.com/DefiOfThrones/DOTTokenContract)
 */
contract DoTxGameContract is Ownable {
    using SafeMath for uint256;
    //Burn x% of the losing house tickets to Vitalik Address
    address constant public BURN_ADDRESS = 0x0000000000000000000000000000000000000001;

    //War struct, for each war a War variable will be created 
    struct War {
        uint256 startTime;
        uint256 duration;
        uint256 ticketPrice;
        uint256 purchasePeriod;
        bytes32 winningHouse;
        uint256 warFeesPercent;
        int256 multiplicator;
        uint256 burnPercentage;
        uint256 stakingPercentage;
        House firstHouse;
        House secondHouse;
        mapping(address => User) users;
    }
    //House struct, each war contains an map of 2 houses
    struct House {
        bytes32 houseTicker;
        bytes32 houseId;
        uint256 openPrice;
        uint256 closePrice;
        uint256 ticketsBought;
    }
    //User struct, each war contains a map of users
    //Each user can pledge allegiance to a house, buy tickets and switch house by paying fees (x% of its bought tickets)
    struct User {
        bytes32 houseTicker;
        uint256 ticketsBought;
        bool rewardClaimed;
    }
    
    //BURN STAKING INFORMATION
    struct BurnStake {
        uint256 firstHouseBurnDoTx;
        uint256 firstHouseStakingDoTx;
        uint256 secondHouseBurnDoTx;
        uint256 secondHouseStakingDoTx;
    }
    
    struct WarHouses {
        uint256 index;
        bytes32 firstHouse;
        bytes32 secondHouse;
        uint256 startTime;
        uint256 duration;
    }
    
    //DOTX Token Contract Address
    IDotTokenContract private dotxToken;
    //DOTX Game lib
    IDoTxLib private dotxLib;
    //x% of the losing house tickets are sent to the throne vault
    address stakingAddress = address(0x1c2206f3115CaC3750acCb899d18d50b774C2f21);
    
    //Map of Wars 
    mapping(uint256 => War) public wars;
    
    //GENERAL VARS
    //Total fees paid by users
    uint256 public totalFees;
    //Precision for the select winner calculation
    uint256 public selecteWinnerPrecision = 100000;
    
    uint256 public burnPercentage = 5;
    uint256 public stakingPercentage = 5;
    int256 public multiplicator = 10000;
    
    //EVENTS
    event WarStarted(uint256 warIndex);
    event TicketBought(uint256 warIndex, string house, uint256 valueInDoTx, address sender, string txType);
    event ClaimReward(uint256 warIndex, uint256 reward, uint256 balance, address sender, string txType);
    event SwitchHouse(uint256 warIndex, string from, string to, address sender, uint256 valueInDoTx);
    event openPriceFetched(uint256 warIndex);
    event closePriceFetched(uint256 warIndex);
    event StakeBurn(uint256 warIndex, uint256 burnValue, uint256 stakeValue);

    //MODIFIERS
    modifier onlyIfCurrentWarFinished(uint256 warIndex) {
        require(wars[warIndex].startTime.add(wars[warIndex].duration) <= now || warIndex == 0, "Current war not finished");
        _;
    }
    
    modifier onlyIfCurrentWarNotFinished(uint256 warIndex) {
        require(wars[warIndex].startTime.add(wars[warIndex].duration) > now, "Current war finished");
        _;
    }
    
    modifier onlyIfTicketsPurchasable(uint256 warIndex) {
        require(now.sub(wars[warIndex].startTime) < wars[warIndex].purchasePeriod,
        "Purchase tickets period ended");
        _;
    }
    
    modifier onlyIfPricesFetched(uint256 warIndex){
        require(wars[warIndex].firstHouse.openPrice != 0 && wars[warIndex].secondHouse.openPrice != 0, "Open prices not fetched");
        require(wars[warIndex].firstHouse.closePrice != 0 && wars[warIndex].secondHouse.closePrice != 0, "Close prices not fetched");
        _;
    }
    
    /**
     * Game contract constructor
     * Just pass the DoTx token contract address in parameter
     **/
    constructor(address dotxTokenAddress, address dotxLibAddr, bool setupAddressInLib) public {
        //Implement DoTx contract interface by providing address
        dotxToken = IDotTokenContract(dotxTokenAddress);
        
        setDoTxLib(dotxLibAddr, setupAddressInLib);
    }
    
    /**************************
            WAR METHODS
    ***************************/
    
    /**
     * Start a war only if the previous is finished
     * Parameters :
     * _firstHouseTicker First house ticker 
     * _secondHouseTicker Second house ticker 
     * _duration Duration of the war in seconds 
     * _ticketPrice Ticket price : Number of DoTx needed to buy a ticket (in wei precision)
     * purchasePeriod Number of seconds where the users can buy tickets from the starting date
     * _warFeesPercent How many % fees it will cost to user to switch house 
     * _warIndex Index of the war in mapping
     **/
    function startWar(string memory _firstHouseTicker, string memory _secondHouseTicker, string memory _firstHouseId, string memory _secondHouseId, 
    uint256 _duration, uint256 _ticketPrice, uint256 _purchasePeriod, uint256 _warFeesPercent, uint256 _warIndex) 
    public onlyOwner returns(bool) {
        //Just prevent to replace a war
        require(_warIndex > dotxLib.getWarIndex(), "War index already exists");
        
        //Create war  
        wars[_warIndex] = War(now, _duration, _ticketPrice, _purchasePeriod, 0, _warFeesPercent, multiplicator, burnPercentage, stakingPercentage, 
        House(stringToBytes32(_firstHouseTicker), stringToBytes32(_firstHouseId), 0, 0, 0),
        House(stringToBytes32(_secondHouseTicker), stringToBytes32(_secondHouseId), 0, 0, 0));
        
        emit WarStarted(_warIndex);
        
        fetchFirstDayPrices(_warIndex);
        
        return true;
    }
    
     /**
     * Buy ticket(s) for the current war - only if tickets are purchasable -> purchasePeriod
     * Parameters :
     * _houseTicker House ticker 
     * _numberOfTicket The number of tickets the user wants to buy
     **/
    function buyTickets(string memory _houseTicker, uint _numberOfTicket, uint256 warIndex) public onlyIfTicketsPurchasable(warIndex) {
        bytes32 houseTicker = stringToBytes32(_houseTicker);
        //Get house storage
        House storage userHouse = getHouseStg(houseTicker, warIndex);
        
        //Allow user to only buy tickets for one single House and the one passed in parameter
        bytes32 userHouseTicker = wars[warIndex].users[msg.sender].houseTicker;
        require(userHouse.houseTicker == houseTicker && (userHouseTicker == houseTicker || userHouseTicker == 0), "You can not buy tickets for the other house");

        wars[warIndex].users[msg.sender].houseTicker = userHouse.houseTicker;

        //Update user tickets
        wars[warIndex].users[msg.sender].ticketsBought = wars[warIndex].users[msg.sender].ticketsBought.add(_numberOfTicket);
        
        //Increase tickets bought for the house
        userHouse.ticketsBought = userHouse.ticketsBought.add(_numberOfTicket);
        
        uint256 valueInDoTx = wars[warIndex].ticketPrice.mul(_numberOfTicket);
        
        //Propagate TicketBought event
        emit TicketBought(warIndex, _houseTicker, valueInDoTx, msg.sender, "BOUGHT");
        
        //Transfer DoTx
        dotxToken.transferFrom(msg.sender, address(this), valueInDoTx);
    }
    
    /**
     * Switch house for the user - only if tickets are purchasable -> purchasePeriod
     * Parameters :
     * _fromHouseTicker Current house user pledged allegiance 
     * _toHouseTicker the house user wants to join
     **/
    function switchHouse(string memory _fromHouseTicker, string memory _toHouseTicker, uint256 warIndex) public onlyIfTicketsPurchasable(warIndex) {

        bytes32 fromHouseTicker = stringToBytes32(_fromHouseTicker);
        bytes32 toHouseTicker = stringToBytes32(_toHouseTicker);
        
        //Check if toHouse is in competition && different of fromHouse
        require(checkIfHouseInCompetition(toHouseTicker, warIndex) && fromHouseTicker != toHouseTicker, "House not in competition");
        //Check if user belongs to _fromHouse 
        require(wars[warIndex].users[msg.sender].houseTicker == fromHouseTicker, "User doesn't belong to fromHouse");
        
        House storage fromHouse = getHouseStg(fromHouseTicker, warIndex);
        House storage toHouse = getHouseStg(toHouseTicker, warIndex);
        
        //Switch house for user
        wars[warIndex].users[msg.sender].houseTicker = toHouseTicker;
        
        //Update fromHouse tickets
        uint256 ticketsBoughtByUser = wars[warIndex].users[msg.sender].ticketsBought;
        fromHouse.ticketsBought = fromHouse.ticketsBought.sub(ticketsBoughtByUser);
        
        //Update toHouse tickets
        toHouse.ticketsBought = toHouse.ticketsBought.add(ticketsBoughtByUser);
        
        //Get fees
        uint256 feesToBePaid = getFeesForSwitchHouse(msg.sender, warIndex);
        //Update total fees
        totalFees = totalFees.add(feesToBePaid);
        
        emit SwitchHouse(warIndex, _fromHouseTicker, _toHouseTicker, msg.sender, feesToBePaid);
        
        //Get fees from user wallet
        dotxToken.transferFrom(msg.sender, address(this), feesToBePaid);
    }
    
    /**
     * Allow users who pledged allegiance to the winning house to claim bought tickets + reward
     * Parameters :
     **/
    function claimRewardAndTickets(uint256 warIndex) public onlyIfCurrentWarFinished(warIndex) returns(bool) {
        //Only claim reward one times
        require(wars[warIndex].users[msg.sender].rewardClaimed == false, "You already claimed your reward");
        
        //Check if user belongs to winning house
        require(wars[warIndex].users[msg.sender].ticketsBought > 0 && wars[warIndex].users[msg.sender].houseTicker == wars[warIndex].winningHouse, "User doesn't belong to winning house");
        
        //Set rewardClaimed to true
        wars[warIndex].users[msg.sender].rewardClaimed = true;
        
        //DoTx in user balance (tickets bought) & reward
        uint256 reward = getCurrentReward(wars[warIndex].winningHouse, msg.sender, warIndex);
        uint256 balance = getUserDoTxInBalance(warIndex, msg.sender);
        
        dotxToken.transfer(msg.sender, reward.add(balance));
        
        emit ClaimReward(warIndex, reward, balance, msg.sender, "CLAIM");
    }

    
    /*****************************
            PRICES METHODS
    ******************************/
    
    /**
     * Fetch the prices for the 2 houses the first day for the current war
     **/
    function fetchFirstDayPrices(uint256 warIndex) public onlyOwner {
        require(wars[warIndex].firstHouse.openPrice == 0 && wars[warIndex].secondHouse.openPrice == 0, "Open prices already fetched");
        
        string memory firstHouse = bytes32ToString(wars[warIndex].firstHouse.houseTicker);
        string memory secondHouse = bytes32ToString(wars[warIndex].secondHouse.houseTicker);
        
        dotxLib.fetchFirstDayPrices(firstHouse, secondHouse, bytes32ToString(wars[warIndex].firstHouse.houseId), bytes32ToString(wars[warIndex].secondHouse.houseId), wars[warIndex].multiplicator, warIndex);
    }

    /**
     * Fetch the prices for the 2 houses the last day for the current war
     **/
    function fetchLastDayPrices(uint256 warIndex) public onlyOwner onlyIfCurrentWarFinished(warIndex) {
        require(wars[warIndex].firstHouse.closePrice == 0 && wars[warIndex].secondHouse.closePrice == 0, "Close prices already fetched");
        
        string memory firstHouse = bytes32ToString(wars[warIndex].firstHouse.houseTicker);
        string memory secondHouse = bytes32ToString(wars[warIndex].secondHouse.houseTicker);
        
        dotxLib.fetchLastDayPrices(firstHouse, secondHouse, bytes32ToString(wars[warIndex].firstHouse.houseId), bytes32ToString(wars[warIndex].secondHouse.houseId), wars[warIndex].multiplicator, warIndex);
    }
    
    /**
     * Elect the winner based on open prices & close prices
     **/
    function selectWinner(uint256 warIndex) public onlyOwner onlyIfCurrentWarFinished(warIndex) onlyIfPricesFetched(warIndex) {
        require(wars[warIndex].winningHouse == 0, "Winner already selected");
        
        int256 precision = int256(selecteWinnerPrecision);
        
        int256 firstHousePerf =  dotxLib.calculateHousePerf(int256(wars[warIndex].firstHouse.openPrice), int256(wars[warIndex].firstHouse.closePrice), precision);
        int256 secondHousePerf = dotxLib.calculateHousePerf(int256(wars[warIndex].secondHouse.openPrice), int256(wars[warIndex].secondHouse.closePrice), precision);
        
        //Set winner house
        wars[warIndex].winningHouse = (firstHousePerf > secondHousePerf ? wars[warIndex].firstHouse : wars[warIndex].secondHouse).houseTicker;
        House memory losingHouse = (firstHousePerf > secondHousePerf ? wars[warIndex].secondHouse : wars[warIndex].firstHouse);
        
        /*
        BURN X% OF LOSING HOUSE'S DOTX
        */
        uint256 burnValue = calculateBurnStaking(losingHouse, true, warIndex);
        dotxToken.transfer(BURN_ADDRESS, burnValue);
        
        /*
        SEND X% OF LOSING HOUSE'S DOTX TO STAKING ADDRESS
        */
        uint256 stakingValue = calculateBurnStaking(losingHouse, true, warIndex);
        dotxToken.transfer(stakingAddress, stakingValue);
        
        emit StakeBurn(warIndex, burnValue, stakingValue);
    }

    
    /*******************************
            CHAINLINK METHODS
    ********************************/
    
    /**
     * Handler method called by Chainlink for the first house open price 
     **/
    function firstHouseOpen(uint256 _price, uint256 warIndex) external onlyDoTxLib {
        wars[warIndex].firstHouse.openPrice = _price;
        openPriceEvent(warIndex);
    }
    /**
     * Handler method called by Chainlink for the second house open price 
     **/
    function secondHouseOpen(uint256 _price, uint256 warIndex) external onlyDoTxLib {
        wars[warIndex].secondHouse.openPrice = _price;
        openPriceEvent(warIndex);
    }
    /**
     * Handler method called by Chainlink for the first house close price 
     **/
    function firstHouseClose(uint256 _price, uint256 warIndex) external onlyDoTxLib {
        wars[warIndex].firstHouse.closePrice = _price;
        closePriceEvent(warIndex);
    }
    /**
     * Handler method called by Chainlink for the second house close price 
     **/
    function secondHouseClose(uint256 _price, uint256 warIndex) external onlyDoTxLib {
        wars[warIndex].secondHouse.closePrice = _price;
        closePriceEvent(warIndex);
    }
    /**
     * Emit openPriceFetched event if needed
     **/
    function openPriceEvent(uint256 warIndex) private {
        if(wars[warIndex].firstHouse.openPrice != 0 && wars[warIndex].secondHouse.openPrice != 0){
            emit openPriceFetched(warIndex);
        }
    }
    /**
     * Emit closePriceFetched event if needed
     **/
    function closePriceEvent(uint256 warIndex) private {
        if(wars[warIndex].firstHouse.closePrice != 0 && wars[warIndex].secondHouse.closePrice != 0){
            emit closePriceFetched(warIndex);
        }
    }
    
    /*****************************
            GETTER METHODS
    ******************************/
    
    /**
     * Get user (ticketsBought * ticketPrice) - user fees
     **/
    function getUserDoTxInBalance(uint256 _warIndex, address userAddress) public view returns(uint256){
        return wars[_warIndex].users[userAddress].ticketsBought.mul(wars[_warIndex].ticketPrice);
    }
    
    
    function getFeesForSwitchHouse(address userAddress, uint256 warIndex) public view returns(uint256){
        return (getUserDoTxInBalance(warIndex, userAddress).mul(wars[warIndex].warFeesPercent)).div(100);
    }
    
    /**
     * Returns the current user
     **/
    function getUser(uint256 _warIndex, address userAddress) public view returns(User memory){
        return wars[_warIndex].users[userAddress];
    }
    
    /**
     * Return house for a specific war
     **/
    function getHouse(uint256 _warIndex, string memory houseTicker) public view returns(House memory){
        bytes32 ticker = stringToBytes32(houseTicker);
        return wars[_warIndex].firstHouse.houseTicker == ticker ? wars[_warIndex].firstHouse : wars[_warIndex].secondHouse;
    }
    /**
     * Return burn stake information
     **/
    function getBurnStake(uint256 warIndex) public view returns(BurnStake memory){
        return BurnStake(calculateBurnStaking(wars[warIndex].firstHouse, true, warIndex), calculateBurnStaking(wars[warIndex].firstHouse, false, warIndex),
        calculateBurnStaking(wars[warIndex].secondHouse, true, warIndex), calculateBurnStaking(wars[warIndex].secondHouse, false, warIndex));
    }
    
    function getWarsHouses(uint256 min, uint256 max) public view returns (WarHouses[20] memory){
        WarHouses[20] memory houses;
        uint256 i = min;
        uint256 index = 0;
        while(index < 20 && i <= (max - min) + 1){
            houses[index] = (WarHouses(i, wars[i].firstHouse.houseTicker, wars[i].secondHouse.houseTicker, wars[i].startTime, wars[i].duration));
            i++;
            index++;
        }
        return houses;
    }
    /*****************************
            ADMIN METHODS
    ******************************/
    
    /**
     * Set the select winner precision used for calculate the best house's performance
     **/
    function setSelectWinnerPrecision(uint256 _precision) public onlyOwner{
        selecteWinnerPrecision = _precision;
    }

     /**
     * Set staking % of the losing house's DoTx to send for the currentWar
     **/
    function setStakingBurnPercentageWar(uint256 _burnPercentage, uint256 _stakingPercentage, uint256 warIndex) public onlyOwner{
        wars[warIndex].burnPercentage = _burnPercentage;
        wars[warIndex].stakingPercentage = _stakingPercentage;
    }
    
    /**
     * Set staking % of the losing house's DoTx to send
     **/
    function setStakingBurnPercentage(uint256 _burnPercentage, uint256 _stakingPercentage) public onlyOwner{
        burnPercentage = _burnPercentage;
        stakingPercentage = _stakingPercentage;
    }
    
    /**
     * Precision of the prices receive from WS
     **/
    function setMultiplicatorWar(int256 _multiplicator, uint256 warIndex) public onlyOwner{
        wars[warIndex].multiplicator = _multiplicator;
    }
    
    /**
     * Precision of the prices receive from WS
     **/
    function setMultiplicator(int256 _multiplicator) public onlyOwner{
        multiplicator = _multiplicator;
    }
    
    /**
     * Let owner withdraw DoTx fees (in particular to pay the costs generated by Chainlink)
     **/
    function withdrawFees() public onlyOwner {
        //Fees from switch house
        dotxToken.transfer(owner(), totalFees);
        
        totalFees = 0;
    }
    
    /**
     * Let owner set the DoTxLib address
     **/
    function setDoTxLib(address dotxLibAddr, bool setupAddressInLib) public onlyOwner {
        //DOTX lib mainly uses for Chainlink
        dotxLibAddress = dotxLibAddr;
        dotxLib = IDoTxLib(dotxLibAddress);
        if(setupAddressInLib){
            dotxLib.setDoTxGame(address(this));
        }
    }
    
    /**
     * Let owner update stakingAddress
     **/
    function setStakingAddress(address stakingAdr) public onlyOwner {
        stakingAddress = stakingAdr;
    }

    /****************************
            UTILS METHODS
    *****************************/
    
    function getHouseStg(bytes32 ticker, uint256 warIndex) private view returns(House storage){
        return wars[warIndex].firstHouse.houseTicker == ticker ? wars[warIndex].firstHouse : wars[warIndex].secondHouse;
    }
    
    /**
     * Check if the house passed in parameter is in the current war
     **/
    function checkIfHouseInCompetition(bytes32 _houseTicker, uint256 warIndex) private view returns(bool){
        return wars[warIndex].firstHouse.houseTicker == _houseTicker || wars[warIndex].secondHouse.houseTicker == _houseTicker;
    }
    
    /**
     * Calculate the reward for the current user
     **/
    function getCurrentRewardString(string memory _winningHouse, address userAddress, uint256 warIndex) public view returns(uint256){
        bytes32 winningHouseTicker = stringToBytes32(_winningHouse);
        return getCurrentReward(winningHouseTicker, userAddress, warIndex);
    } 
    
    function getCurrentReward(bytes32 _winningHouse, address userAddress, uint256 warIndex) public view returns(uint256){
        //Losing house
        House memory losingHouse = wars[warIndex].firstHouse.houseTicker == _winningHouse ? wars[warIndex].secondHouse : wars[warIndex].firstHouse;
        
        //Total DoTx in house's balance
        uint256 totalDoTxWinningHouse = getHouseStg(_winningHouse, warIndex).ticketsBought.mul(wars[warIndex].ticketPrice);
        uint256 totalDoTxLosingHouse = losingHouse.ticketsBought.mul(wars[warIndex].ticketPrice).sub(calculateBurnStaking(losingHouse, true, warIndex)).sub(calculateBurnStaking(losingHouse, false, warIndex));
        
        return dotxLib.calculateReward(getUserDoTxInBalance(warIndex, userAddress), totalDoTxWinningHouse, totalDoTxLosingHouse);
    }
    
    function calculateBurnStaking(House memory house, bool isBurn, uint256 warIndex) public view returns(uint256){
        uint256 ticketsBoughtValueDoTx = house.ticketsBought.mul(wars[warIndex].ticketPrice);
        uint256 percentage =  isBurn ? wars[warIndex].burnPercentage : wars[warIndex].stakingPercentage;
        //Calculate tickets remaining after burn
        return dotxLib.calculatePercentage(ticketsBoughtValueDoTx, percentage, selecteWinnerPrecision);
    }
    
    /**
     * Convert string to bytes32
     **/
    function stringToBytes32(string memory source) public pure returns (bytes32 result) {
        bytes memory tempEmptyStringTest = bytes(source);
        if (tempEmptyStringTest.length == 0) {
            return 0x0;
        }
    
        assembly {
            result := mload(add(source, 32))
        }
    }
    
    /**
     * Convert bytes32 to string
     **/
    function bytes32ToString(bytes32 x) public pure returns (string memory) {
        bytes memory bytesString = new bytes(32);
        uint charCount = 0;
        for (uint j = 0; j < 32; j++) {
            byte char = byte(bytes32(uint(x) * 2 ** (8 * j)));
            if (char != 0) {
                bytesString[charCount] = char;
                charCount++;
            }
        }
        bytes memory bytesStringTrimmed = new bytes(charCount);
        for (uint256 j = 0; j < charCount; j++) {
            bytesStringTrimmed[j] = bytesString[j];
        }
        return string(bytesStringTrimmed);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dotxTokenAddress","type":"address"},{"internalType":"address","name":"dotxLibAddr","type":"address"},{"internalType":"bool","name":"setupAddressInLib","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"txType","type":"string"}],"name":"ClaimReward","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":"uint256","name":"warIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeValue","type":"uint256"}],"name":"StakeBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"},{"indexed":false,"internalType":"string","name":"from","type":"string"},{"indexed":false,"internalType":"string","name":"to","type":"string"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"valueInDoTx","type":"uint256"}],"name":"SwitchHouse","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"},{"indexed":false,"internalType":"string","name":"house","type":"string"},{"indexed":false,"internalType":"uint256","name":"valueInDoTx","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"string","name":"txType","type":"string"}],"name":"TicketBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"WarStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"closePriceFetched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"openPriceFetched","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_houseTicker","type":"string"},{"internalType":"uint256","name":"_numberOfTicket","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"buyTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"x","type":"bytes32"}],"name":"bytes32ToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"houseTicker","type":"bytes32"},{"internalType":"bytes32","name":"houseId","type":"bytes32"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"closePrice","type":"uint256"},{"internalType":"uint256","name":"ticketsBought","type":"uint256"}],"internalType":"struct DoTxGameContract.House","name":"house","type":"tuple"},{"internalType":"bool","name":"isBurn","type":"bool"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"calculateBurnStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"claimRewardAndTickets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dotxLibAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"fetchFirstDayPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"fetchLastDayPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"firstHouseClose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"firstHouseOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"getBurnStake","outputs":[{"components":[{"internalType":"uint256","name":"firstHouseBurnDoTx","type":"uint256"},{"internalType":"uint256","name":"firstHouseStakingDoTx","type":"uint256"},{"internalType":"uint256","name":"secondHouseBurnDoTx","type":"uint256"},{"internalType":"uint256","name":"secondHouseStakingDoTx","type":"uint256"}],"internalType":"struct DoTxGameContract.BurnStake","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_winningHouse","type":"bytes32"},{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"getCurrentReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_winningHouse","type":"string"},{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"getCurrentRewardString","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"getFeesForSwitchHouse","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_warIndex","type":"uint256"},{"internalType":"string","name":"houseTicker","type":"string"}],"name":"getHouse","outputs":[{"components":[{"internalType":"bytes32","name":"houseTicker","type":"bytes32"},{"internalType":"bytes32","name":"houseId","type":"bytes32"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"closePrice","type":"uint256"},{"internalType":"uint256","name":"ticketsBought","type":"uint256"}],"internalType":"struct DoTxGameContract.House","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_warIndex","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUser","outputs":[{"components":[{"internalType":"bytes32","name":"houseTicker","type":"bytes32"},{"internalType":"uint256","name":"ticketsBought","type":"uint256"},{"internalType":"bool","name":"rewardClaimed","type":"bool"}],"internalType":"struct DoTxGameContract.User","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_warIndex","type":"uint256"},{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserDoTxInBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"getWarsHouses","outputs":[{"components":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes32","name":"firstHouse","type":"bytes32"},{"internalType":"bytes32","name":"secondHouse","type":"bytes32"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"internalType":"struct DoTxGameContract.WarHouses[20]","name":"","type":"tuple[20]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"multiplicator","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"secondHouseClose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"secondHouseOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"selectWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"selecteWinnerPrecision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dotxLibAddr","type":"address"},{"internalType":"bool","name":"setupAddressInLib","type":"bool"}],"name":"setDoTxLib","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"_multiplicator","type":"int256"}],"name":"setMultiplicator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"_multiplicator","type":"int256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"setMultiplicatorWar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"name":"setOwner2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_precision","type":"uint256"}],"name":"setSelectWinnerPrecision","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"stakingAdr","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnPercentage","type":"uint256"},{"internalType":"uint256","name":"_stakingPercentage","type":"uint256"}],"name":"setStakingBurnPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnPercentage","type":"uint256"},{"internalType":"uint256","name":"_stakingPercentage","type":"uint256"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"setStakingBurnPercentageWar","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_firstHouseTicker","type":"string"},{"internalType":"string","name":"_secondHouseTicker","type":"string"},{"internalType":"string","name":"_firstHouseId","type":"string"},{"internalType":"string","name":"_secondHouseId","type":"string"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"uint256","name":"_ticketPrice","type":"uint256"},{"internalType":"uint256","name":"_purchasePeriod","type":"uint256"},{"internalType":"uint256","name":"_warFeesPercent","type":"uint256"},{"internalType":"uint256","name":"_warIndex","type":"uint256"}],"name":"startWar","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"source","type":"string"}],"name":"stringToBytes32","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"_fromHouseTicker","type":"string"},{"internalType":"string","name":"_toHouseTicker","type":"string"},{"internalType":"uint256","name":"warIndex","type":"uint256"}],"name":"switchHouse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"wars","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"ticketPrice","type":"uint256"},{"internalType":"uint256","name":"purchasePeriod","type":"uint256"},{"internalType":"bytes32","name":"winningHouse","type":"bytes32"},{"internalType":"uint256","name":"warFeesPercent","type":"uint256"},{"internalType":"int256","name":"multiplicator","type":"int256"},{"internalType":"uint256","name":"burnPercentage","type":"uint256"},{"internalType":"uint256","name":"stakingPercentage","type":"uint256"},{"components":[{"internalType":"bytes32","name":"houseTicker","type":"bytes32"},{"internalType":"bytes32","name":"houseId","type":"bytes32"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"closePrice","type":"uint256"},{"internalType":"uint256","name":"ticketsBought","type":"uint256"}],"internalType":"struct DoTxGameContract.House","name":"firstHouse","type":"tuple"},{"components":[{"internalType":"bytes32","name":"houseTicker","type":"bytes32"},{"internalType":"bytes32","name":"houseId","type":"bytes32"},{"internalType":"uint256","name":"openPrice","type":"uint256"},{"internalType":"uint256","name":"closePrice","type":"uint256"},{"internalType":"uint256","name":"ticketsBought","type":"uint256"}],"internalType":"struct DoTxGameContract.House","name":"secondHouse","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052731c2206f3115cac3750accb899d18d50b774c2f21600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620186a060085560056009556005600a55612710600b553480156200007d57600080fd5b5060405162006418380380620064188339818101604052810190620000a391906200042e565b6000620000b5620001af60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001a68282620001b760201b60201c565b5050506200059b565b600033905090565b620001c7620001af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806200027d57506200022c620001af60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b620002bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b690620004f4565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015620003fc57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639748ddaa306040518263ffffffff1660e01b8152600401620003c79190620004d7565b600060405180830381600087803b158015620003e257600080fd5b505af1158015620003f7573d6000803e3d6000fd5b505050505b5050565b600081519050620004118162000567565b92915050565b600081519050620004288162000581565b92915050565b6000806000606084860312156200044457600080fd5b6000620004548682870162000400565b9350506020620004678682870162000400565b92505060406200047a8682870162000417565b9150509250925092565b6200048f8162000527565b82525050565b6000620004a460208362000516565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000602082019050620004ee600083018462000484565b92915050565b600060208201905081810360008301526200050f8162000495565b9050919050565b600082825260208201905092915050565b6000620005348262000547565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620005728162000527565b81146200057e57600080fd5b50565b6200058c816200053b565b81146200059857600080fd5b50565b615e6d80620005ab6000396000f3fe608060405234801561001057600080fd5b506004361061025d5760003560e01c80639f6c08ca11610146578063dcd80d30116100c3578063f4e0d9ac11610087578063f4e0d9ac1461075e578063f537191f1461077a578063f606b9f1146107aa578063f8fa62cd146107c6578063faf026de146107e2578063fccc2813146107fe5761025d565b8063dcd80d30146106bc578063e01a6c3f146106d8578063f01f20df146106f4578063f2fde38b14610712578063f33a73061461072e5761025d565b8063be8e3d131161010a578063be8e3d1314610606578063bfaf3eec14610624578063c1fc13bd14610654578063c8e634b214610670578063cfb519281461068c5761025d565b80639f6c08ca146105525780639ff9a6f01461056e578063a2eb19ad1461059e578063a9ea0c90146105ce578063b74ec35a146105ea5761025d565b806349da4fea116101df578063714690d9116101a3578063714690d91461049257806381e1ccba146104ae5780638da5cb5b146104cc5780639182fd77146104ea5780639201de551461050657806392fc6e14146105365761025d565b806349da4fea146103f05780634c524be41461040c57806352709725146104285780635825884f1461044657806368f53fde146104625761025d565b8063257664a411610226578063257664a414610338578063444378c914610368578063453201e714610398578063458a34b2146103b6578063476343ee146103e65761025d565b8062fa081a146102625780630473dffe1461028057806311c2c37d146102b057806313114a9d146102e0578063228702fd146102fe575b600080fd5b61026a61081c565b60405161027791906156a6565b60405180910390f35b61029a60048036038101906102959190614cd1565b610822565b6040516102a79190615654565b60405180910390f35b6102ca60048036038101906102c59190614c7d565b61090e565b6040516102d791906159f2565b60405180910390f35b6102e86109bb565b6040516102f59190615a28565b60405180910390f35b61031860048036038101906103139190614bef565b6109c1565b60405161032f9b9a99989796959493929190615b92565b60405180910390f35b610352600480360381019061034d9190614c41565b610a93565b60405161035f9190615a0d565b60405180910390f35b610382600480360381019061037d919061492d565b610b30565b60405161038f9190615a28565b60405180910390f35b6103a0610b53565b6040516103ad91906155b0565b60405180910390f35b6103d060048036038101906103cb9190614c41565b610b79565b6040516103dd9190615a28565b60405180910390f35b6103ee610c02565b005b61040a60048036038101906104059190614cd1565b610db9565b005b61042660048036038101906104219190614bef565b610ebf565b005b610430611633565b60405161043d91906155b0565b60405180910390f35b610460600480360381019061045b919061471c565b61165d565b005b61047c60048036038101906104779190614ba0565b611795565b6040516104899190615a28565b60405180910390f35b6104ac60048036038101906104a79190614bef565b6118c0565b005b6104b6611b75565b6040516104c39190615a28565b60405180910390f35b6104d4611b7b565b6040516104e191906155b0565b60405180910390f35b61050460048036038101906104ff919061485e565b611ba4565b005b610520600480360381019061051b91906147e6565b611ca2565b60405161052d91906156f8565b60405180910390f35b610550600480360381019061054b9190614cd1565b611e59565b005b61056c60048036038101906105679190614cd1565b611f1b565b005b61058860048036038101906105839190614bef565b611fdd565b60405161059591906159d7565b60405180910390f35b6105b860048036038101906105b39190614781565b612181565b6040516105c59190615a28565b60405180910390f35b6105e860048036038101906105e39190614b39565b6121d0565b005b61060460048036038101906105ff9190614aba565b61258c565b005b61060e61294a565b60405161061b9190615a28565b60405180910390f35b61063e6004803603810190610639919061480f565b612950565b60405161064b9190615a28565b60405180910390f35b61066e600480360381019061066991906148b0565b612b54565b005b61068a60048036038101906106859190614cd1565b612c67565b005b6106a660048036038101906106a191906148ec565b612d29565b6040516106b3919061568b565b60405180910390f35b6106d660048036038101906106d19190614745565b612d54565b005b6106f260048036038101906106ed9190614bef565b612f84565b005b6106fc613082565b6040516107099190615a28565b60405180910390f35b61072c6004803603810190610727919061471c565b613088565b005b61074860048036038101906107439190614bef565b6132a9565b6040516107559190615670565b60405180910390f35b6107786004803603810190610773919061471c565b61369b565b005b610794600480360381019061078f9190614994565b6137d3565b6040516107a19190615670565b60405180910390f35b6107c460048036038101906107bf9190614d0d565b613baf565b005b6107e060048036038101906107db9190614bef565b613cde565b005b6107fc60048036038101906107f79190614cd1565b614021565b005b6108066140e3565b60405161081391906155b0565b60405180910390f35b600b5481565b61082a6144b2565b6108326144b2565b600084905060005b60148110801561084f57506001868603018211155b15610902576040518060a001604052808381526020016006600085815260200190815260200160002060090160000154815260200160066000858152602001908152602001600020600e016000015481526020016006600085815260200190815260200160002060000154815260200160066000858152602001908152602001600020600101548152508382601481106108e557fe5b60200201819052508180600101925050808060010191505061083a565b82935050505092915050565b6109166144e0565b600061092183612d29565b90508060066000868152602001908152602001600020600901600001541461095e5760066000858152602001908152602001600020600e01610975565b600660008581526020019081526020016000206009015b6040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505091505092915050565b60075481565b6006602052806000526040600020600091509050806000015490806001015490806002015490806003015490806004015490806005015490806006015490806007015490806008015490806009016040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250509080600e016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090508b565b610a9b614515565b6006600084815260200190815260200160002060130160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff161515151581525050905092915050565b600080610b3c85612d29565b9050610b49818585612950565b9150509392505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610bfa60066000858152602001908152602001600020600201546006600086815260200190815260200160002060130160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546140e890919063ffffffff16565b905092915050565b610c0a614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610cb75750610c66614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced906158f7565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610d3c611b7b565b6007546040518363ffffffff1660e01b8152600401610d5c92919061562b565b602060405180830381600087803b158015610d7657600080fd5b505af1158015610d8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dae91906147bd565b506000600781905550565b610dc1614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610e6e5750610e1d614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea4906158f7565b60405180910390fd5b8160098190555080600a819055505050565b610ec7614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610f745750610f23614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa906158f7565b60405180910390fd5b8042610ff46006600084815260200190815260200160002060010154600660008581526020019081526020016000206000015461416090919063ffffffff16565b1115806110015750600081145b611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790615937565b60405180910390fd5b8160006006600083815260200190815260200160002060090160020154141580156110855750600060066000838152602001908152602001600020600e016002015414155b6110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb906157b7565b60405180910390fd5b60006006600083815260200190815260200160002060090160030154141580156111085750600060066000838152602001908152602001600020600e016003015414155b611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e90615877565b60405180910390fd5b6000801b6006600085815260200190815260200160002060040154146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990615817565b60405180910390fd5b600060085490506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634517f24860066000888152602001908152602001600020600901600201546006600089815260200190815260200160002060090160030154856040518463ffffffff1660e01b815260040161123c939291906156c1565b60206040518083038186803b15801561125457600080fd5b505afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c9190614887565b90506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634517f24860066000898152602001908152602001600020600e0160020154600660008a8152602001908152602001600020600e0160030154866040518463ffffffff1660e01b8152600401611321939291906156c1565b60206040518083038186803b15801561133957600080fd5b505afa15801561134d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113719190614887565b90508082136113955760066000878152602001908152602001600020600e016113ac565b600660008781526020019081526020016000206009015b6000015460066000888152602001908152602001600020600401819055506113d26144e0565b8183136113f4576006600088815260200190815260200160002060090161140b565b60066000888152602001908152602001600020600e015b6040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060006114588260018a611795565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6001836040518363ffffffff1660e01b81526004016114b892919061562b565b602060405180830381600087803b1580156114d257600080fd5b505af11580156114e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150a91906147bd565b5060006115198360018b611795565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161159a92919061562b565b602060405180830381600087803b1580156115b457600080fd5b505af11580156115c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ec91906147bd565b507fe43c1d18e02c7393f6160e7258bca88538b1a522dc53998c38337cb57d44420889838360405161162093929190615b03565b60405180910390a1505050505050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611665614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061171257506116c1614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611751576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611748906158f7565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806117c5600660008581526020019081526020016000206002015486608001516140e890919063ffffffff16565b90506000846117ea576006600085815260200190815260200160002060080154611802565b60066000858152602001908152602001600020600701545b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633275a7b683836008546040518463ffffffff1660e01b815260040161186593929190615b03565b60206040518083038186803b15801561187d57600080fd5b505afa158015611891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b59190614c18565b925050509392505050565b6118c8614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806119755750611924614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab906158f7565b60405180910390fd5b600060066000838152602001908152602001600020600901600201541480156119f65750600060066000838152602001908152602001600020600e0160020154145b611a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2c90615797565b60405180910390fd5b6060611a596006600084815260200190815260200160002060090160000154611ca2565b90506060611a7f60066000858152602001908152602001600020600e0160000154611ca2565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330e577318383611ae36006600089815260200190815260200160002060090160010154611ca2565b611b05600660008a8152602001908152602001600020600e0160010154611ca2565b600660008a815260200190815260200160002060060154896040518763ffffffff1660e01b8152600401611b3e9695949392919061571a565b600060405180830381600087803b158015611b5857600080fd5b505af1158015611b6c573d6000803e3d6000fd5b50505050505050565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bac614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611c595750611c08614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8f906158f7565b60405180910390fd5b80600b8190555050565b606080602067ffffffffffffffff81118015611cbd57600080fd5b506040519080825280601f01601f191660200182016040528015611cf05781602001600182028036833780820191505090505b5090506000805b6020811015611d935760008160080260020a8660001c0260001b9050600060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611d855780848481518110611d4d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082806001019350505b508080600101915050611cf7565b5060608167ffffffffffffffff81118015611dad57600080fd5b506040519080825280601f01601f191660200182016040528015611de05781602001600182028036833780820191505090505b50905060005b82811015611e4d57838181518110611dfa57fe5b602001015160f81c60f81b828281518110611e1157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611de6565b50809350505050919050565b611e61614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790615857565b60405180910390fd5b816006600083815260200190815260200160002060090160030181905550611f17816141b5565b5050565b611f23614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa990615857565b60405180910390fd5b8160066000838152602001908152602001600020600e0160030181905550611fd9816141b5565b5050565b611fe561453b565b604051806080016040528061204e600660008681526020019081526020016000206009016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600186611795565b81526020016120b1600660008681526020019081526020016000206009016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600086611795565b815260200161211460066000868152602001908152602001600020600e016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600186611795565b815260200161217760066000868152602001908152602001600020600e016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050600086611795565b8152509050919050565b60006121c860646121ba60066000868152602001908152602001600020600501546121ac8688610b79565b6140e890919063ffffffff16565b61423990919063ffffffff16565b905092915050565b80600660008281526020019081526020016000206003015461221160066000848152602001908152602001600020600001544261428390919063ffffffff16565b10612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890615977565b60405180910390fd5b600061225c85612d29565b9050600061226a82856142cd565b905060006006600086815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490508282600001541480156122e65750828114806122e557506000801b81145b5b612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c906159b7565b60405180910390fd5b81600001546006600087815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506123ed866006600088815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461416090919063ffffffff16565b6006600087815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061245e86836004015461416090919063ffffffff16565b826004018190555060006124918760066000898152602001908152602001600020600201546140e890919063ffffffff16565b90507f27238bafe4942fdab575b632a51f3ab494e0c42bca4f50edbcba0c43b9b4eeea868983336040516124c89493929190615aa4565b60405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161252f939291906155cb565b602060405180830381600087803b15801561254957600080fd5b505af115801561255d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258191906147bd565b505050505050505050565b8060066000828152602001908152602001600020600301546125cd60066000848152602001908152602001600020600001544261428390919063ffffffff16565b1061260d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260490615977565b60405180910390fd5b600061261885612d29565b9050600061262585612d29565b90506126318185614329565b801561263d5750808214155b61267c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267390615957565b60405180910390fd5b816006600086815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90615917565b60405180910390fd5b600061272083866142cd565b9050600061272e83876142cd565b9050826006600088815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555060006006600088815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506127fd81846004015461428390919063ffffffff16565b836004018190555061281c81836004015461416090919063ffffffff16565b826004018190555060006128303389612181565b90506128478160075461416090919063ffffffff16565b6007819055507fd55789e69f821b8125cb322e83b696583c560834a44c3e6b7e0a0698eec87ab5888b8b3385604051612884959493929190615a43565b60405180910390a1600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016128eb939291906155cb565b602060405180830381600087803b15801561290557600080fd5b505af1158015612919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061293d91906147bd565b5050505050505050505050565b60085481565b600061295a6144e0565b8460066000858152602001908152602001600020600901600001541461299557600660008481526020019081526020016000206009016129ac565b60066000848152602001908152602001600020600e015b6040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505090506000612a236006600086815260200190815260200160002060020154612a1188876142cd565b600401546140e890919063ffffffff16565b90506000612a8e612a3684600088611795565b612a80612a458660018a611795565b612a72600660008b81526020019081526020016000206002015488608001516140e890919063ffffffff16565b61428390919063ffffffff16565b61428390919063ffffffff16565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8e62b97612ad88789610b79565b84846040518463ffffffff1660e01b8152600401612af893929190615b03565b60206040518083038186803b158015612b1057600080fd5b505afa158015612b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b489190614c18565b93505050509392505050565b612b5c614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612c095750612bb8614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3f906158f7565b60405180910390fd5b8160066000838152602001908152602001600020600601819055505050565b612c6f614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf590615857565b60405180910390fd5b8160066000838152602001908152602001600020600e0160020181905550612d2581614372565b5050565b60006060829050600081511415612d46576000801b915050612d4f565b60208301519150505b919050565b612d5c614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612e095750612db8614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b612e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3f906158f7565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015612f8057600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639748ddaa306040518263ffffffff1660e01b8152600401612f4d91906155b0565b600060405180830381600087803b158015612f6757600080fd5b505af1158015612f7b573d6000803e3d6000fd5b505050505b5050565b612f8c614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806130395750612fe8614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306f906158f7565b60405180910390fd5b8060088190555050565b60095481565b613090614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061313d57506130ec614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61317c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613173906158f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156131ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e3906157f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081426132ec6006600084815260200190815260200160002060010154600660008581526020019081526020016000206000015461416090919063ffffffff16565b1115806132f95750600081145b613338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332f90615937565b60405180910390fd5b600015156006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515146133e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d9906157d7565b60405180910390fd5b60006006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541180156134b3575060066000848152602001908152602001600020600401546006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b6134f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e990615997565b60405180910390fd5b60016006600085815260200190815260200160002060130160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600061358460066000868152602001908152602001600020600401543386612950565b905060006135928533610b79565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336135e6848661416090919063ffffffff16565b6040518363ffffffff1660e01b8152600401613603929190615602565b602060405180830381600087803b15801561361d57600080fd5b505af1158015613631573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365591906147bd565b507fbc53bf1be302bd318289a0e26b4d335ea1f62ea08ab40edf320b72af937d03058583833360405161368b9493929190615b3a565b60405180910390a1505050919050565b6136a3614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061375057506136ff614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61378f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613786906158f7565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006137dd614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061388a5750613839614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6138c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138c0906158f7565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636ae613b66040518163ffffffff1660e01b815260040160206040518083038186803b15801561393157600080fd5b505afa158015613945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139699190614c18565b82116139aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a190615897565b60405180910390fd5b6040518061016001604052804281526020018781526020018681526020018581526020016000801b8152602001848152602001600b5481526020016009548152602001600a5481526020016040518060a00160405280613a098e612d29565b8152602001613a178c612d29565b81526020016000815260200160008152602001600081525081526020016040518060a00160405280613a488d612d29565b8152602001613a568b612d29565b81526020016000815260200160008152602001600081525081525060066000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009016000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505061014082015181600e01600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015550509050507f32fc6bdba77976df88c26bbbdea972fce5c17afbaf8ec10a595569c0b8125f5582604051613b8d9190615a28565b60405180910390a1613b9e826118c0565b600190509998505050505050505050565b613bb7614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480613c645750613c13614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9a906158f7565b60405180910390fd5b826006600083815260200190815260200160002060070181905550816006600083815260200190815260200160002060080181905550505050565b613ce6614158565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480613d935750613d42614158565b73ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b613dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dc9906158f7565b60405180910390fd5b8042613e136006600084815260200190815260200160002060010154600660008581526020019081526020016000206000015461416090919063ffffffff16565b111580613e205750600081145b613e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e5690615937565b60405180910390fd5b60006006600084815260200190815260200160002060090160030154148015613ea15750600060066000848152602001908152602001600020600e0160030154145b613ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ed7906158d7565b60405180910390fd5b6060613f046006600085815260200190815260200160002060090160000154611ca2565b90506060613f2a60066000868152602001908152602001600020600e0160000154611ca2565b9050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b558a35f8383613f8e600660008a815260200190815260200160002060090160010154611ca2565b613fb0600660008b8152602001908152602001600020600e0160010154611ca2565b600660008b8152602001908152602001600020600601548a6040518763ffffffff1660e01b8152600401613fe99695949392919061571a565b600060405180830381600087803b15801561400357600080fd5b505af1158015614017573d6000803e3d6000fd5b5050505050505050565b614029614158565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016140af90615857565b60405180910390fd5b8160066000838152602001908152602001600020600901600201819055506140df81614372565b5050565b600181565b6000808314156140fb5760009050614152565b600082840290508284828161410c57fe5b041461414d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614144906158b7565b60405180910390fd5b809150505b92915050565b600033905090565b6000808284019050838110156141ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141a290615837565b60405180910390fd5b8091505092915050565b60006006600083815260200190815260200160002060090160030154141580156141f95750600060066000838152602001908152602001600020600e016003015414155b15614236577f8eb944520f5e4e44b0e829a774d6c084b4f6a4b397d9a4f27df1942e13d8321a8160405161422d9190615a28565b60405180910390a15b50565b600061427b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506143f6565b905092915050565b60006142c583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614457565b905092915050565b60008260066000848152602001908152602001600020600901600001541461430a5760066000838152602001908152602001600020600e01614321565b600660008381526020019081526020016000206009015b905092915050565b6000826006600084815260200190815260200160002060090160000154148061436a57508260066000848152602001908152602001600020600e0160000154145b905092915050565b60006006600083815260200190815260200160002060090160020154141580156143b65750600060066000838152602001908152602001600020600e016002015414155b156143f3577f7b23af8b7a1623b2d8dba9353b737cde209b8b0e24dddbb911acee9f5c724a40816040516143ea9190615a28565b60405180910390a15b50565b6000808311829061443d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161443491906156f8565b60405180910390fd5b50600083858161444957fe5b049050809150509392505050565b600083831115829061449f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161449691906156f8565b60405180910390fd5b5060008385039050809150509392505050565b6040518061028001604052806014905b6144ca614563565b8152602001906001900390816144c25790505090565b6040518060a0016040528060008019168152602001600080191681526020016000815260200160008152602001600081525090565b604051806060016040528060008019168152602001600081526020016000151581525090565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600080191681526020016000801916815260200160008152602001600081525090565b6000813590506145a781615dc4565b92915050565b6000813590506145bc81615ddb565b92915050565b6000815190506145d181615ddb565b92915050565b6000813590506145e681615df2565b92915050565b6000813590506145fb81615e09565b92915050565b60008151905061461081615e09565b92915050565b600082601f83011261462757600080fd5b813561463a61463582615c6a565b615c3d565b9150808252602083016020830185838301111561465657600080fd5b614661838284615d71565b50505092915050565b600060a0828403121561467c57600080fd5b61468660a0615c3d565b90506000614696848285016145d7565b60008301525060206146aa848285016145d7565b60208301525060406146be848285016146f2565b60408301525060606146d2848285016146f2565b60608301525060806146e6848285016146f2565b60808301525092915050565b60008135905061470181615e20565b92915050565b60008151905061471681615e20565b92915050565b60006020828403121561472e57600080fd5b600061473c84828501614598565b91505092915050565b6000806040838503121561475857600080fd5b600061476685828601614598565b9250506020614777858286016145ad565b9150509250929050565b6000806040838503121561479457600080fd5b60006147a285828601614598565b92505060206147b3858286016146f2565b9150509250929050565b6000602082840312156147cf57600080fd5b60006147dd848285016145c2565b91505092915050565b6000602082840312156147f857600080fd5b6000614806848285016145d7565b91505092915050565b60008060006060848603121561482457600080fd5b6000614832868287016145d7565b935050602061484386828701614598565b9250506040614854868287016146f2565b9150509250925092565b60006020828403121561487057600080fd5b600061487e848285016145ec565b91505092915050565b60006020828403121561489957600080fd5b60006148a784828501614601565b91505092915050565b600080604083850312156148c357600080fd5b60006148d1858286016145ec565b92505060206148e2858286016146f2565b9150509250929050565b6000602082840312156148fe57600080fd5b600082013567ffffffffffffffff81111561491857600080fd5b61492484828501614616565b91505092915050565b60008060006060848603121561494257600080fd5b600084013567ffffffffffffffff81111561495c57600080fd5b61496886828701614616565b935050602061497986828701614598565b925050604061498a868287016146f2565b9150509250925092565b60008060008060008060008060006101208a8c0312156149b357600080fd5b60008a013567ffffffffffffffff8111156149cd57600080fd5b6149d98c828d01614616565b99505060208a013567ffffffffffffffff8111156149f657600080fd5b614a028c828d01614616565b98505060408a013567ffffffffffffffff811115614a1f57600080fd5b614a2b8c828d01614616565b97505060608a013567ffffffffffffffff811115614a4857600080fd5b614a548c828d01614616565b9650506080614a658c828d016146f2565b95505060a0614a768c828d016146f2565b94505060c0614a878c828d016146f2565b93505060e0614a988c828d016146f2565b925050610100614aaa8c828d016146f2565b9150509295985092959850929598565b600080600060608486031215614acf57600080fd5b600084013567ffffffffffffffff811115614ae957600080fd5b614af586828701614616565b935050602084013567ffffffffffffffff811115614b1257600080fd5b614b1e86828701614616565b9250506040614b2f868287016146f2565b9150509250925092565b600080600060608486031215614b4e57600080fd5b600084013567ffffffffffffffff811115614b6857600080fd5b614b7486828701614616565b9350506020614b85868287016146f2565b9250506040614b96868287016146f2565b9150509250925092565b600080600060e08486031215614bb557600080fd5b6000614bc38682870161466a565b93505060a0614bd4868287016145ad565b92505060c0614be5868287016146f2565b9150509250925092565b600060208284031215614c0157600080fd5b6000614c0f848285016146f2565b91505092915050565b600060208284031215614c2a57600080fd5b6000614c3884828501614707565b91505092915050565b60008060408385031215614c5457600080fd5b6000614c62858286016146f2565b9250506020614c7385828601614598565b9150509250929050565b60008060408385031215614c9057600080fd5b6000614c9e858286016146f2565b925050602083013567ffffffffffffffff811115614cbb57600080fd5b614cc785828601614616565b9150509250929050565b60008060408385031215614ce457600080fd5b6000614cf2858286016146f2565b9250506020614d03858286016146f2565b9150509250929050565b600080600060608486031215614d2257600080fd5b6000614d30868287016146f2565b9350506020614d41868287016146f2565b9250506040614d52868287016146f2565b9150509250925092565b6000614d68838361552a565b60a08301905092915050565b614d7d81615d3b565b82525050565b614d8c81615cdf565b82525050565b614d9b81615ca0565b614da58184615cc3565b9250614db082615c96565b8060005b83811015614de1578151614dc88782614d5c565b9650614dd383615cb6565b925050600181019050614db4565b505050505050565b614df281615cf1565b82525050565b614e0181615cf1565b82525050565b614e1081615cfd565b82525050565b614e1f81615cfd565b82525050565b614e2e81615d07565b82525050565b6000614e3f82615cab565b614e498185615cce565b9350614e59818560208601615d80565b614e6281615db3565b840191505092915050565b6000614e7a601b83615cce565b91507f4f70656e2070726963657320616c7265616479206665746368656400000000006000830152602082019050919050565b6000614eba601783615cce565b91507f4f70656e20707269636573206e6f7420666574636865640000000000000000006000830152602082019050919050565b6000614efa601f83615cce565b91507f596f7520616c726561647920636c61696d656420796f757220726577617264006000830152602082019050919050565b6000614f3a602683615cce565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fa0601783615cce565b91507f57696e6e657220616c72656164792073656c65637465640000000000000000006000830152602082019050919050565b6000614fe0600683615cce565b91507f424f5547485400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000615020601b83615cce565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000615060602b83615cce565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260008301527f206f7220746865206c69620000000000000000000000000000000000000000006020830152604082019050919050565b60006150c6601883615cce565b91507f436c6f736520707269636573206e6f74206665746368656400000000000000006000830152602082019050919050565b6000615106601883615cce565b91507f57617220696e64657820616c72656164792065786973747300000000000000006000830152602082019050919050565b6000615146602183615cce565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006151ac601c83615cce565b91507f436c6f73652070726963657320616c72656164792066657463686564000000006000830152602082019050919050565b60006151ec602083615cce565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061522c602083615cce565b91507f5573657220646f65736e27742062656c6f6e6720746f2066726f6d486f7573656000830152602082019050919050565b600061526c601883615cce565b91507f43757272656e7420776172206e6f742066696e697368656400000000000000006000830152602082019050919050565b60006152ac601883615cce565b91507f486f757365206e6f7420696e20636f6d7065746974696f6e00000000000000006000830152602082019050919050565b60006152ec600583615cce565b91507f434c41494d0000000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061532c601d83615cce565b91507f5075726368617365207469636b65747320706572696f6420656e6465640000006000830152602082019050919050565b600061536c602483615cce565b91507f5573657220646f65736e27742062656c6f6e6720746f2077696e6e696e67206860008301527f6f757365000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006153d2602b83615cce565b91507f596f752063616e206e6f7420627579207469636b65747320666f72207468652060008301527f6f7468657220686f7573650000000000000000000000000000000000000000006020830152604082019050919050565b6080820160008201516154416000850182615592565b5060208201516154546020850182615592565b5060408201516154676040850182615592565b50606082015161547a6060850182615592565b50505050565b60a0820160008201516154966000850182614e07565b5060208201516154a96020850182614e07565b5060408201516154bc6040850182615592565b5060608201516154cf6060850182615592565b5060808201516154e26080850182615592565b50505050565b6060820160008201516154fe6000850182614e07565b5060208201516155116020850182615592565b5060408201516155246040850182614de9565b50505050565b60a0820160008201516155406000850182615592565b5060208201516155536020850182614e07565b5060408201516155666040850182614e07565b5060608201516155796060850182615592565b50608082015161558c6080850182615592565b50505050565b61559b81615d31565b82525050565b6155aa81615d31565b82525050565b60006020820190506155c56000830184614d83565b92915050565b60006060820190506155e06000830186614d74565b6155ed6020830185614d83565b6155fa60408301846155a1565b949350505050565b60006040820190506156176000830185614d74565b61562460208301846155a1565b9392505050565b60006040820190506156406000830185614d83565b61564d60208301846155a1565b9392505050565b6000610c808201905061566a6000830184614d92565b92915050565b60006020820190506156856000830184614df8565b92915050565b60006020820190506156a06000830184614e16565b92915050565b60006020820190506156bb6000830184614e25565b92915050565b60006060820190506156d66000830186614e25565b6156e36020830185614e25565b6156f06040830184614e25565b949350505050565b600060208201905081810360008301526157128184614e34565b905092915050565b600060c08201905081810360008301526157348189614e34565b905081810360208301526157488188614e34565b9050818103604083015261575c8187614e34565b905081810360608301526157708186614e34565b905061577f6080830185614e25565b61578c60a08301846155a1565b979650505050505050565b600060208201905081810360008301526157b081614e6d565b9050919050565b600060208201905081810360008301526157d081614ead565b9050919050565b600060208201905081810360008301526157f081614eed565b9050919050565b6000602082019050818103600083015261581081614f2d565b9050919050565b6000602082019050818103600083015261583081614f93565b9050919050565b6000602082019050818103600083015261585081615013565b9050919050565b6000602082019050818103600083015261587081615053565b9050919050565b60006020820190508181036000830152615890816150b9565b9050919050565b600060208201905081810360008301526158b0816150f9565b9050919050565b600060208201905081810360008301526158d081615139565b9050919050565b600060208201905081810360008301526158f08161519f565b9050919050565b60006020820190508181036000830152615910816151df565b9050919050565b600060208201905081810360008301526159308161521f565b9050919050565b600060208201905081810360008301526159508161525f565b9050919050565b600060208201905081810360008301526159708161529f565b9050919050565b600060208201905081810360008301526159908161531f565b9050919050565b600060208201905081810360008301526159b08161535f565b9050919050565b600060208201905081810360008301526159d0816153c5565b9050919050565b60006080820190506159ec600083018461542b565b92915050565b600060a082019050615a076000830184615480565b92915050565b6000606082019050615a2260008301846154e8565b92915050565b6000602082019050615a3d60008301846155a1565b92915050565b600060a082019050615a5860008301886155a1565b8181036020830152615a6a8187614e34565b90508181036040830152615a7e8186614e34565b9050615a8d6060830185614d74565b615a9a60808301846155a1565b9695505050505050565b600060a082019050615ab960008301876155a1565b8181036020830152615acb8186614e34565b9050615ada60408301856155a1565b615ae76060830184614d74565b8181036080830152615af881614fd3565b905095945050505050565b6000606082019050615b1860008301866155a1565b615b2560208301856155a1565b615b3260408301846155a1565b949350505050565b600060a082019050615b4f60008301876155a1565b615b5c60208301866155a1565b615b6960408301856155a1565b615b766060830184614d74565b8181036080830152615b87816152df565b905095945050505050565b600061026082019050615ba8600083018e6155a1565b615bb5602083018d6155a1565b615bc2604083018c6155a1565b615bcf606083018b6155a1565b615bdc608083018a614e16565b615be960a08301896155a1565b615bf660c0830188614e25565b615c0360e08301876155a1565b615c116101008301866155a1565b615c1f610120830185615480565b615c2d6101c0830184615480565b9c9b505050505050505050505050565b6000604051905081810181811067ffffffffffffffff82111715615c6057600080fd5b8060405250919050565b600067ffffffffffffffff821115615c8157600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b600060149050919050565b600081519050919050565b6000602082019050919050565b600081905092915050565b600082825260208201905092915050565b6000615cea82615d11565b9050919050565b60008115159050919050565b6000819050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615d4682615d4d565b9050919050565b6000615d5882615d5f565b9050919050565b6000615d6a82615d11565b9050919050565b82818337600083830152505050565b60005b83811015615d9e578082015181840152602081019050615d83565b83811115615dad576000848401525b50505050565b6000601f19601f8301169050919050565b615dcd81615cdf565b8114615dd857600080fd5b50565b615de481615cf1565b8114615def57600080fd5b50565b615dfb81615cfd565b8114615e0657600080fd5b50565b615e1281615d07565b8114615e1d57600080fd5b50565b615e2981615d31565b8114615e3457600080fd5b5056fea26469706673582212202711d3bc1719ec47fe71282d53e7b55d1c02400b02b50396f1b256df67a8c48464736f6c634300060c0033000000000000000000000000fab5a05c933f1a2463e334e011992e897d56ef0a000000000000000000000000ee302900ab9792c42a1d19990520fc2a541d98f70000000000000000000000000000000000000000000000000000000000000001

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000fab5a05c933f1a2463e334e011992e897d56ef0a000000000000000000000000ee302900ab9792c42a1d19990520fc2a541d98f70000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : dotxTokenAddress (address): 0xFAb5a05C933f1A2463E334E011992E897D56eF0a
Arg [1] : dotxLibAddr (address): 0xee302900aB9792c42A1D19990520fC2A541D98f7
Arg [2] : setupAddressInLib (bool): True

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000fab5a05c933f1a2463e334e011992e897d56ef0a
Arg [1] : 000000000000000000000000ee302900ab9792c42a1d19990520fc2a541d98f7
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed ByteCode Sourcemap

8875:23324:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11128:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26034:465;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25288:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10904:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10804:35;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;25068:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29520:283;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7367:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24568:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28037:166;;;:::i;:::-;;27288:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21107:1443;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7759:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7852:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30652:473;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19633:622;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11085:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7668:79;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27799:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31573:623;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23330:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23612:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25637:385;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24791:213;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14937:1365;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16556:1699;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10986:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29816:824;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27570:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23050:179;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31190:318;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28276:312;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26718:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11045:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8477:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18404:1013;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28659:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13758:929;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26946:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20357:658;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22772:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9014:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11128:35;;;;:::o;26034:465::-;26104:20;;:::i;:::-;26136:27;;:::i;:::-;26174:9;26186:3;26174:15;;26200:13;26228:240;26242:2;26234:5;:10;:34;;;;;26267:1;26260:3;26254;:9;26253:15;26248:1;:20;;26234:34;26228:240;;;26301:114;;;;;;;;26311:1;26301:114;;;;26314:4;:7;26319:1;26314:7;;;;;;;;;;;:18;;:30;;;26301:114;;;;26346:4;:7;26351:1;26346:7;;;;;;;;;;;:19;;:31;;;26301:114;;;;26379:4;:7;26384:1;26379:7;;;;;;;;;;;:17;;;26301:114;;;;26398:4;:7;26403:1;26398:7;;;;;;;;;;;:16;;;26301:114;;;26284:6;26291:5;26284:13;;;;;;;;;;:132;;;;26431:3;;;;;;;26449:7;;;;;;;26228:240;;;26485:6;26478:13;;;;;26034:465;;;;:::o;25288:286::-;25372:12;;:::i;:::-;25396:14;25413:28;25429:11;25413:15;:28::i;:::-;25396:45;;25501:6;25459:4;:15;25464:9;25459:15;;;;;;;;;;;:26;;:38;;;:48;:107;;25539:4;:15;25544:9;25539:15;;;;;;;;;;;:27;;25459:107;;;25510:4;:15;25515:9;25510:15;;;;;;;;;;;:26;;25459:107;25452:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25288:286;;;;:::o;10904:24::-;;;;:::o;10804:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25068:149::-;25145:11;;:::i;:::-;25175:4;:15;25180:9;25175:15;;;;;;;;;;;:21;;:34;25197:11;25175:34;;;;;;;;;;;;;;;25168:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25068:149;;;;:::o;29520:283::-;29640:7;29659:26;29688:30;29704:13;29688:15;:30::i;:::-;29659:59;;29736;29753:18;29773:11;29786:8;29736:16;:59::i;:::-;29729:66;;;29520:283;;;;;:::o;7367:29::-;;;;;;;;;;;;;:::o;24568:205::-;24658:7;24684:81;24737:4;:15;24742:9;24737:15;;;;;;;;;;;:27;;;24684:4;:15;24689:9;24684:15;;;;;;;;;;;:21;;:34;24706:11;24684:34;;;;;;;;;;;;;;;:48;;;:52;;:81;;;;:::i;:::-;24677:88;;24568:205;;;;:::o;28037:166::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;28123:9:::1;;;;;;;;;;;:18;;;28142:7;:5;:7::i;:::-;28151:9;;28123:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28194:1;28182:9;:13;;;;28037:166::o:0;27288:203::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;27419:15:::1;27402:14;:32;;;;27465:18;27445:17;:38;;;;27288:203:::0;;:::o;21107:1443::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;21189:8:::1;11870:3;11813:53;11842:4;:14;11847:8;11842:14;;;;;;;;;;;:23;;;11813:4;:14;11818:8;11813:14;;;;;;;;;;;:24;;;:28;;:53;;;;:::i;:::-;:60;;:77;;;;11889:1;11877:8;:13;11813:77;11805:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;21219:8:::2;12456:1;12417:4;:14;12422:8;12417:14;;;;;;;;;;;:25;;:35;;;:40;;:85;;;;;12501:1;12461:4;:14;12466:8;12461:14;;;;;;;;;;;:26;;:36;;;:41;;12417:85;12409:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;12589:1;12549:4;:14;12554:8;12549:14;;;;;;;;;;;:25;;:36;;;:41;;:87;;;;;12635:1;12594:4;:14;12599:8;12594:14;;;;;;;;;;;:26;;:37;;;:42;;12549:87;12541:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;21279:1:::3;21248:32:::0;::::3;:4;:14;21253:8;21248:14;;;;;;;;;;;:27;;;:32;21240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21329:16;21355:22;;21329:49;;21399:21;21424:7;;;;;;;;;;;:26;;;21458:4;:14;21463:8;21458:14;;;;;;;;;;;:25;;:35;;;21503:4;:14;21508:8;21503:14;;;;;;;;;;;:25;;:36;;;21542:9;21424:128;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21399:153;;21563:22;21588:7;;;;;;;;;;;:26;;;21622:4;:14;21627:8;21622:14;;;;;;;;;;;:26;;:36;;;21668:4;:14;21673:8;21668:14;;;;;;;;;;;:26;;:37;;;21708:9;21588:130;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21563:155;;21815:15;21798:14;:32;:89;;21861:4;:14;21866:8;21861:14;;;;;;;;;;;:26;;21798:89;;;21833:4;:14;21838:8;21833:14;;;;;;;;;;;:25;;21798:89;21797:103;;;21767:4;:14;21772:8;21767:14;;;;;;;;;;;:27;;:133;;;;21911:24;;:::i;:::-;21956:15;21939:14;:32;:89;;22003:4;:14;22008:8;22003:14;;;;;;;;;;;:25;;21939:89;;;21974:4;:14;21979:8;21974:14;;;;;;;;;;;:26;;21939:89;21911:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;22114:17;22134:49;22155:11;22168:4;22174:8;22134:20;:49::i;:::-;22114:69;;22194:9;;;;;;;;;;;:18;;;9053:42;22227:9;22194:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22341:20;22364:49;22385:11;22398:4;22404:8;22364:20;:49::i;:::-;22341:72;;22424:9;;;;;;;;;;;:18;;;22443:14;;;;;;;;;;;22459:12;22424:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22498:44;22508:8;22518:9;22529:12;22498:44;;;;;;;;:::i;:::-;;;;;;;;12676:1;;;;;;11930::::2;8096::::1;21107:1443:::0;:::o;7759:81::-;7798:7;7825;;;;;;;;;;;7818:14;;7759:81;:::o;7852:99::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;7931:12:::1;7921:7;;:22;;;;;;;;;;;;;;;;;;7852:99:::0;:::o;30652:473::-;30753:7;30772:30;30805:51;30829:4;:14;30834:8;30829:14;;;;;;;;;;;:26;;;30805:5;:19;;;:23;;:51;;;;:::i;:::-;30772:84;;30867:18;30889:6;:73;;30930:4;:14;30935:8;30930:14;;;;;;;;;;;:32;;;30889:73;;;30898:4;:14;30903:8;30898:14;;;;;;;;;;;:29;;;30889:73;30867:95;;31030:7;;;;;;;;;;;:27;;;31058:22;31082:10;31094:22;;31030:87;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31023:94;;;;30652:473;;;;;:::o;19633:622::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;19755:1:::1;19716:4;:14;19721:8;19716:14;;;;;;;;;;;:25;;:35;;;:40;:85;;;;;19800:1;19760:4;:14;19765:8;19760:14;;;;;;;;;;;:26;;:36;;;:41;19716:85;19708:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;19854:24;19881:54;19897:4;:14;19902:8;19897:14;;;;;;;;;;;:25;;:37;;;19881:15;:54::i;:::-;19854:81;;19946:25;19974:55;19990:4;:14;19995:8;19990:14;;;;;;;;;;;:26;;:38;;;19974:15;:55::i;:::-;19946:83;;20050:7;;;;;;;;;;;:27;;;20078:10;20090:11;20103:50;20119:4;:14;20124:8;20119:14;;;;;;;;;;;:25;;:33;;;20103:15;:50::i;:::-;20155:51;20171:4;:14;20176:8;20171:14;;;;;;;;;;;:26;;:34;;;20155:15;:51::i;:::-;20208:4;:14;20213:8;20208:14;;;;;;;;;;;:28;;;20238:8;20050:197;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8096:1;;19633:622:::0;:::o;11085:36::-;;;;:::o;7668:79::-;7706:7;7733:6;;;;;;;;;;;7726:13;;7668:79;:::o;27799:114::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;27891:14:::1;27875:13;:30;;;;27799:114:::0;:::o;31573:623::-;31630:13;31656:24;31693:2;31683:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31656:40;;31707:14;31741:6;31736:229;31757:2;31753:1;:6;31736:229;;;31781:9;31826:1;31822;:5;31816:1;:12;31811:1;31806:7;;:22;31798:31;;31781:49;;31857:1;31849:9;;:4;:9;;;;31845:109;;31904:4;31879:11;31891:9;31879:22;;;;;;;;;;;:29;;;;;;;;;;;31927:11;;;;;;;31845:109;31736:229;31761:3;;;;;;;31736:229;;;;31975:31;32019:9;32009:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31975:54;;32045:9;32040:105;32064:9;32060:1;:13;32040:105;;;32119:11;32131:1;32119:14;;;;;;;;;;;;;;;;32095:18;32114:1;32095:21;;;;;;;;;;;:38;;;;;;;;;;;32075:3;;;;;;;32040:105;;;;32169:18;32155:33;;;;;31573:623;;;:::o;23330:180::-;8389:12;:10;:12::i;:::-;8371:30;;:14;;;;;;;;;;;:30;;;8363:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;23460:6:::1;23421:4;:14;23426:8;23421:14;;;;;;;;;;;:25;;:36;;:45;;;;23477:25;23493:8;23477:15;:25::i;:::-;23330:180:::0;;:::o;23612:182::-;8389:12;:10;:12::i;:::-;8371:30;;:14;;;;;;;;;;;:30;;;8363:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;23744:6:::1;23704:4;:14;23709:8;23704:14;;;;;;;;;;;:26;;:37;;:46;;;;23761:25;23777:8;23761:15;:25::i;:::-;23612:182:::0;;:::o;25637:385::-;25697:16;;:::i;:::-;25732:282;;;;;;;;25742:63;25763:4;:14;25768:8;25763:14;;;;;;;;;;;:25;;25742:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25790:4;25796:8;25742:20;:63::i;:::-;25732:282;;;;25807:64;25828:4;:14;25833:8;25828:14;;;;;;;;;;;:25;;25807:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25855:5;25862:8;25807:20;:64::i;:::-;25732:282;;;;25882:64;25903:4;:14;25908:8;25903:14;;;;;;;;;;;:26;;25882:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25931:4;25937:8;25882:20;:64::i;:::-;25732:282;;;;25948:65;25969:4;:14;25974:8;25969:14;;;;;;;;;;;:26;;25948:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25997:5;26004:8;25948:20;:65::i;:::-;25732:282;;;25725:289;;25637:385;;;:::o;24791:213::-;24881:7;24907:89;24992:3;24908:78;24956:4;:14;24961:8;24956:14;;;;;;;;;;;:29;;;24908:43;24929:8;24939:11;24908:20;:43::i;:::-;:47;;:78;;;;:::i;:::-;24907:84;;:89;;;;:::i;:::-;24900:96;;24791:213;;;;:::o;14937:1365::-;15057:8;12248:4;:14;12253:8;12248:14;;;;;;;;;;;:29;;;12212:33;12220:4;:14;12225:8;12220:14;;;;;;;;;;;:24;;;12212:3;:7;;:33;;;;:::i;:::-;:65;12204:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;15078:19:::1;15100:29;15116:12;15100:15;:29::i;:::-;15078:51;;15169:23;15195:34;15207:11;15220:8;15195:11;:34::i;:::-;15169:60;;15345:23;15371:4;:14;15376:8;15371:14;;;;;;;;;;;:20;;:32;15392:10;15371:32;;;;;;;;;;;;;;;:44;;;15345:70;;15459:11;15434:9;:21;;;:36;:96;;;;;15494:11;15475:15;:30;:54;;;;15528:1;15509:20:::0;::::1;:15;:20;15475:54;15434:96;15426:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;15638:9;:21;;;15591:4;:14;15596:8;15591:14;;;;;;;;;;;:20;;:32;15612:10;15591:32;;;;;;;;;;;;;;;:44;;:68;;;;15752:67;15803:15;15752:4;:14;15757:8;15752:14;;;;;;;;;;;:20;;:32;15773:10;15752:32;;;;;;;;;;;;;;;:46;;;:50;;:67;;;;:::i;:::-;15703:4;:14;15708:8;15703:14;;;;;;;;;;;:20;;:32;15724:10;15703:32;;;;;;;;;;;;;;;:46;;:116;;;;15915:44;15943:15;15915:9;:23;;;:27;;:44;;;;:::i;:::-;15889:9;:23;;:70;;;;15980:19;16002:47;16033:15;16002:4;:14;16007:8;16002:14;;;;;;;;;;;:26;;;:30;;:47;;;;:::i;:::-;15980:69;;16115:71;16128:8;16138:12;16152:11;16165:10;16115:71;;;;;;;;;:::i;:::-;;;;;;;;16232:9;;;;;;;;;;;:22;;;16255:10;16275:4;16282:11;16232:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12331:1;;;;14937:1365:::0;;;;:::o;16556:1699::-;16689:8;12248:4;:14;12253:8;12248:14;;;;;;;;;;;:29;;;12212:33;12220:4;:14;12225:8;12220:14;;;;;;;;;;;:24;;;12212:3;:7;;:33;;;;:::i;:::-;:65;12204:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;16712:23:::1;16738:33;16754:16;16738:15;:33::i;:::-;16712:59;;16782:21;16806:31;16822:14;16806:15;:31::i;:::-;16782:55;;16938:50;16964:13;16979:8;16938:25;:50::i;:::-;:86;;;;;17011:13;16992:15;:32;;16938:86;16930:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;17168:15;17120:4;:14;17125:8;17120:14;;;;;;;;;;;:20;;:32;17141:10;17120:32;;;;;;;;;;;;;;;:44;;;:63;17112:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;17241:23;17267:38;17279:15;17296:8;17267:11;:38::i;:::-;17241:64;;17316:21;17340:36;17352:13;17367:8;17340:11;:36::i;:::-;17316:60;;17477:13;17430:4;:14;17435:8;17430:14;;;;;;;;;;;:20;;:32;17451:10;17430:32;;;;;;;;;;;;;;;:44;;:60;;;;17547:27;17577:4;:14;17582:8;17577:14;;;;;;;;;;;:20;;:32;17598:10;17577:32;;;;;;;;;;;;;;;:46;;;17547:76;;17660:48;17688:19;17660:9;:23;;;:27;;:48;;;;:::i;:::-;17634:9;:23;;:74;;;;17787:46;17813:19;17787:7;:21;;;:25;;:46;;;;:::i;:::-;17763:7;:21;;:70;;;;17874:20;17897:43;17919:10;17931:8;17897:21;:43::i;:::-;17874:66;;17992:27;18006:12;17992:9;;:13;;:27;;;;:::i;:::-;17980:9;:39;;;;18045:81;18057:8;18067:16;18085:14;18101:10;18113:12;18045:81;;;;;;;;;;:::i;:::-;;;;;;;;18184:9;;;;;;;;;;;:22;;;18207:10;18227:4;18234:12;18184:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12331:1;;;;;;16556:1699:::0;;;;:::o;10986:46::-;;;;:::o;29816:824::-;29924:7;29967:24;;:::i;:::-;30035:13;29994:4;:14;29999:8;29994:14;;;;;;;;;;;:25;;:37;;;:54;:111;;30080:4;:14;30085:8;30080:14;;;;;;;;;;;:25;;29994:111;;;30051:4;:14;30056:8;30051:14;;;;;;;;;;;:26;;29994:111;29967:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30167:29;30199:82;30254:4;:14;30259:8;30254:14;;;;;;;;;;;:26;;;30199:36;30211:13;30226:8;30199:11;:36::i;:::-;:50;;;:54;;:82;;;;:::i;:::-;30167:114;;30292:28;30323:168;30440:50;30461:11;30474:5;30481:8;30440:20;:50::i;:::-;30323:112;30385:49;30406:11;30419:4;30425:8;30385:20;:49::i;:::-;30323:57;30353:4;:14;30358:8;30353:14;;;;;;;;;;;:26;;;30323:11;:25;;;:29;;:57;;;;:::i;:::-;:61;;:112;;;;:::i;:::-;:116;;:168;;;;:::i;:::-;30292:199;;30519:7;;;;;;;;;;;:23;;;30543:43;30564:8;30574:11;30543:20;:43::i;:::-;30588:21;30611:20;30519:113;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30512:120;;;;;29816:824;;;;;:::o;27570:150::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;27698:14:::1;27667:4;:14;27672:8;27667:14;;;;;;;;;;;:28;;:45;;;;27570:150:::0;;:::o;23050:179::-;8389:12;:10;:12::i;:::-;8371:30;;:14;;;;;;;;;;;:30;;;8363:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;23180:6:::1;23141:4;:14;23146:8;23141:14;;;;;;;;;;;:26;;:36;;:45;;;;23197:24;23212:8;23197:14;:24::i;:::-;23050:179:::0;;:::o;31190:318::-;31258:14;31285:32;31326:6;31285:48;;31378:1;31348:19;:26;:31;31344:74;;;31403:3;31396:10;;;;;;;31344:74;31486:2;31478:6;31474:15;31468:22;31458:32;;31443:58;;;;;:::o;28276:312::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;28432:11:::1;28415:14;;:28;;;;;;;;;;;;;;;;;;28473:14;;;;;;;;;;;28454:7;;:34;;;;;;;;;;;;;;;;;;28502:17;28499:82;;;28535:7;;;;;;;;;;;:19;;;28563:4;28535:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28499:82;28276:312:::0;;:::o;26718:124::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;26824:10:::1;26799:22;:35;;;;26718:124:::0;:::o;11045:33::-;;;;:::o;8477:244::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;8586:1:::1;8566:22;;:8;:22;;;;8558:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8676:8;8647:38;;8668:6;::::0;::::1;;;;;;;;8647:38;;;;;;;;;;;;8705:8;8696:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;8477:244:::0;:::o;18404:1013::-;18503:4;18485:8;11870:3;11813:53;11842:4;:14;11847:8;11842:14;;;;;;;;;;;:23;;;11813:4;:14;11818:8;11813:14;;;;;;;;;;;:24;;;:28;;:53;;;;:::i;:::-;:60;;:77;;;;11889:1;11877:8;:13;11813:77;11805:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;18617:5:::1;18567:55;;:4;:14;18572:8;18567:14;;;;;;;;;;;:20;;:32;18588:10;18567:32;;;;;;;;;;;;;;;:46;;;;;;;;;;;;:55;;;18559:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;18786:1;18737:4;:14;18742:8;18737:14;;;;;;;;;;;:20;;:32;18758:10;18737:32;;;;;;;;;;;;;;;:46;;;:50;:129;;;;;18839:4;:14;18844:8;18839:14;;;;;;;;;;;:27;;;18791:4;:14;18796:8;18791:14;;;;;;;;;;;:20;;:32;18812:10;18791:32;;;;;;;;;;;;;;;:44;;;:75;18737:129;18729:178;;;;;;;;;;;;:::i;:::-;;;;;;;;;19014:4;18965;:14;18970:8;18965:14;;;;;;;;;;;:20;;:32;18986:10;18965:32;;;;;;;;;;;;;;;:46;;;:53;;;;;;;;;;;;;;;;;;19097:14;19114:67;19131:4;:14;19136:8;19131:14;;;;;;;;;;;:27;;;19160:10;19172:8;19114:16;:67::i;:::-;19097:84;;19192:15;19210:42;19231:8;19241:10;19210:20;:42::i;:::-;19192:60;;19273:9;;;;;;;;;;;:18;;;19292:10;19304:19;19315:7;19304:6;:10;;:19;;;;:::i;:::-;19273:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19350:59;19362:8;19372:6;19380:7;19389:10;19350:59;;;;;;;;;:::i;:::-;;;;;;;;11930:1;;18404:1013:::0;;;;:::o;28659:110::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;28751:10:::1;28734:14;;:27;;;;;;;;;;;;;;;;;;28659:110:::0;:::o;13758:929::-;14049:4;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;14127:7:::1;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14115:9;:33;14107:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14240:309;;;;;;;;14244:3;14240:309;;;;14249:9;14240:309;;;;14260:12;14240:309;;;;14274:15;14240:309;;;;14291:1;14240:309:::0;::::1;;;;;14294:15;14240:309;;;;14311:13;;14240:309;;;;14326:14;;14240:309;;;;14342:17;;14240:309;;;;14371:82;;;;;;;;14377:34;14393:17;14377:15;:34::i;:::-;14371:82;;;;14413:30;14429:13;14413:15;:30::i;:::-;14371:82;;;;14445:1;14371:82;;;;14448:1;14371:82;;;;14451:1;14371:82;;::::0;14240:309:::1;;;;14464:84;;;;;;;;14470:35;14486:18;14470:15;:35::i;:::-;14464:84;;;;14507:31;14523:14;14507:15;:31::i;:::-;14464:84;;;;14540:1;14464:84;;;;14543:1;14464:84;;;;14546:1;14464:84;;::::0;14240:309:::1;;::::0;14222:4:::1;:15;14227:9;14222:15;;;;;;;;;;;:327;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14575:21;14586:9;14575:21;;;;;;:::i;:::-;;;;;;;;14617:30;14637:9;14617:19;:30::i;:::-;14675:4;14668:11;;13758:929:::0;;;;;;;;;;;:::o;26946:254::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;27113:15:::1;27081:4;:14;27086:8;27081:14;;;;;;;;;;;:29;;:47;;;;27174:18;27139:4;:14;27144:8;27139:14;;;;;;;;;;;:32;;:53;;;;26946:254:::0;;;:::o;20357:658::-;8009:12;:10;:12::i;:::-;7999:22;;:6;;;;;;;;;;:22;;;:49;;;;8036:12;:10;:12::i;:::-;8025:23;;:7;;;;;;;;;;;:23;;;7999:49;7991:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;20445:8:::1;11870:3;11813:53;11842:4;:14;11847:8;11842:14;;;;;;;;;;;:23;;;11813:4;:14;11818:8;11813:14;;;;;;;;;;;:24;;;:28;;:53;;;;:::i;:::-;:60;;:77;;;;11889:1;11877:8;:13;11813:77;11805:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;20514:1:::2;20474:4;:14;20479:8;20474:14;;;;;;;;;;;:25;;:36;;;:41;:87;;;;;20560:1;20519:4;:14;20524:8;20519:14;;;;;;;;;;;:26;;:37;;;:42;20474:87;20466:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;20615:24;20642:54;20658:4;:14;20663:8;20658:14;;;;;;;;;;;:25;;:37;;;20642:15;:54::i;:::-;20615:81;;20707:25;20735:55;20751:4;:14;20756:8;20751:14;;;;;;;;;;;:26;;:38;;;20735:15;:55::i;:::-;20707:83;;20811:7;;;;;;;;;;;:26;;;20838:10;20850:11;20863:50;20879:4;:14;20884:8;20879:14;;;;;;;;;;;:25;;:33;;;20863:15;:50::i;:::-;20915:51;20931:4;:14;20936:8;20931:14;;;;;;;;;;;:26;;:34;;;20915:15;:51::i;:::-;20968:4;:14;20973:8;20968:14;;;;;;;;;;;:28;;;20998:8;20811:196;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;11930:1;;8096::::1;20357:658:::0;:::o;22772:177::-;8389:12;:10;:12::i;:::-;8371:30;;:14;;;;;;;;;;;:30;;;8363:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;22900:6:::1;22862:4;:14;22867:8;22862:14;;;;;;;;;;;:25;;:35;;:44;;;;22917:24;22932:8;22917:14;:24::i;:::-;22772:177:::0;;:::o;9014:81::-;9053:42;9014:81;:::o;2771:471::-;2829:7;3079:1;3074;:6;3070:47;;;3104:1;3097:8;;;;3070:47;3129:9;3145:1;3141;:5;3129:17;;3174:1;3169;3165;:5;;;;;;:10;3157:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3233:1;3226:8;;;2771:471;;;;;:::o;7037:106::-;7090:15;7125:10;7118:17;;7037:106;:::o;1417:181::-;1475:7;1495:9;1511:1;1507;:5;1495:17;;1536:1;1531;:6;;1523:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1589:1;1582:8;;;1417:181;;;;:::o;24152:219::-;24257:1;24217:4;:14;24222:8;24217:14;;;;;;;;;;;:25;;:36;;;:41;;:87;;;;;24303:1;24262:4;:14;24267:8;24262:14;;;;;;;;;;;:26;;:37;;;:42;;24217:87;24214:150;;;24325:27;24343:8;24325:27;;;;;;:::i;:::-;;;;;;;;24214:150;24152:219;:::o;3718:132::-;3776:7;3803:39;3807:1;3810;3803:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3796:46;;3718:132;;;;:::o;1881:136::-;1939:7;1966:43;1970:1;1973;1966:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1959:50;;1881:136;;;;:::o;28881:220::-;28957:13;29030:6;28989:4;:14;28994:8;28989:14;;;;;;;;;;;:25;;:37;;;:47;:104;;29067:4;:14;29072:8;29067:14;;;;;;;;;;;:26;;28989:104;;;29039:4;:14;29044:8;29039:14;;;;;;;;;;;:25;;28989:104;28982:111;;28881:220;;;;:::o;29201:238::-;29297:4;29361:12;29320:4;:14;29325:8;29320:14;;;;;;;;;;;:25;;:37;;;:53;:111;;;;29419:12;29377:4;:14;29382:8;29377:14;;;;;;;;;;;:26;;:38;;;:54;29320:111;29313:118;;29201:238;;;;:::o;23865:215::-;23968:1;23929:4;:14;23934:8;23929:14;;;;;;;;;;;:25;;:35;;;:40;;:85;;;;;24013:1;23973:4;:14;23978:8;23973:14;;;;;;;;;;;:26;;:36;;;:41;;23929:85;23926:147;;;24035:26;24052:8;24035:26;;;;;;:::i;:::-;;;;;;;;23926:147;23865:215;:::o;4346:278::-;4432:7;4464:1;4460;:5;4467:12;4452:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4491:9;4507:1;4503;:5;;;;;;4491:17;;4615:1;4608:8;;;4346:278;;;;;:::o;2320:192::-;2406:7;2439:1;2434;:6;;2442:12;2426:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2466:9;2482:1;2478;:5;2466:17;;2503:1;2496:8;;;2320:192;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;:::i;:::-;57:78;;;;:::o;142:124::-;;219:6;206:20;197:29;;231:30;255:5;231:30;:::i;:::-;191:75;;;;:::o;273:128::-;;354:6;348:13;339:22;;366:30;390:5;366:30;:::i;:::-;333:68;;;;:::o;408:130::-;;488:6;475:20;466:29;;500:33;527:5;500:33;:::i;:::-;460:78;;;;:::o;545:128::-;;624:6;611:20;602:29;;636:32;662:5;636:32;:::i;:::-;596:77;;;;:::o;680:132::-;;763:6;757:13;748:22;;775:32;801:5;775:32;:::i;:::-;742:70;;;;:::o;820:442::-;;922:3;915:4;907:6;903:17;899:27;889:2;;940:1;937;930:12;889:2;977:6;964:20;999:65;1014:49;1056:6;1014:49;:::i;:::-;999:65;:::i;:::-;990:74;;1084:6;1077:5;1070:21;1120:4;1112:6;1108:17;1153:4;1146:5;1142:16;1188:3;1179:6;1174:3;1170:16;1167:25;1164:2;;;1205:1;1202;1195:12;1164:2;1215:41;1249:6;1244:3;1239;1215:41;:::i;:::-;882:380;;;;;;;:::o;1306:927::-;;1417:4;1405:9;1400:3;1396:19;1392:30;1389:2;;;1435:1;1432;1425:12;1389:2;1453:20;1468:4;1453:20;:::i;:::-;1444:29;;1530:1;1562:49;1607:3;1598:6;1587:9;1583:22;1562:49;:::i;:::-;1555:4;1548:5;1544:16;1537:75;1483:140;1676:2;1709:49;1754:3;1745:6;1734:9;1730:22;1709:49;:::i;:::-;1702:4;1695:5;1691:16;1684:75;1633:137;1825:2;1858:49;1903:3;1894:6;1883:9;1879:22;1858:49;:::i;:::-;1851:4;1844:5;1840:16;1833:75;1780:139;1975:2;2008:49;2053:3;2044:6;2033:9;2029:22;2008:49;:::i;:::-;2001:4;1994:5;1990:16;1983:75;1929:140;2128:3;2162:49;2207:3;2198:6;2187:9;2183:22;2162:49;:::i;:::-;2155:4;2148:5;2144:16;2137:75;2079:144;1383:850;;;;:::o;2240:130::-;;2320:6;2307:20;2298:29;;2332:33;2359:5;2332:33;:::i;:::-;2292:78;;;;:::o;2377:134::-;;2461:6;2455:13;2446:22;;2473:33;2500:5;2473:33;:::i;:::-;2440:71;;;;:::o;2518:241::-;;2622:2;2610:9;2601:7;2597:23;2593:32;2590:2;;;2638:1;2635;2628:12;2590:2;2673:1;2690:53;2735:7;2726:6;2715:9;2711:22;2690:53;:::i;:::-;2680:63;;2652:97;2584:175;;;;:::o;2766:360::-;;;2884:2;2872:9;2863:7;2859:23;2855:32;2852:2;;;2900:1;2897;2890:12;2852:2;2935:1;2952:53;2997:7;2988:6;2977:9;2973:22;2952:53;:::i;:::-;2942:63;;2914:97;3042:2;3060:50;3102:7;3093:6;3082:9;3078:22;3060:50;:::i;:::-;3050:60;;3021:95;2846:280;;;;;:::o;3133:366::-;;;3254:2;3242:9;3233:7;3229:23;3225:32;3222:2;;;3270:1;3267;3260:12;3222:2;3305:1;3322:53;3367:7;3358:6;3347:9;3343:22;3322:53;:::i;:::-;3312:63;;3284:97;3412:2;3430:53;3475:7;3466:6;3455:9;3451:22;3430:53;:::i;:::-;3420:63;;3391:98;3216:283;;;;;:::o;3506:257::-;;3618:2;3606:9;3597:7;3593:23;3589:32;3586:2;;;3634:1;3631;3624:12;3586:2;3669:1;3686:61;3739:7;3730:6;3719:9;3715:22;3686:61;:::i;:::-;3676:71;;3648:105;3580:183;;;;:::o;3770:241::-;;3874:2;3862:9;3853:7;3849:23;3845:32;3842:2;;;3890:1;3887;3880:12;3842:2;3925:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3904:97;3836:175;;;;:::o;4018:491::-;;;;4156:2;4144:9;4135:7;4131:23;4127:32;4124:2;;;4172:1;4169;4162:12;4124:2;4207:1;4224:53;4269:7;4260:6;4249:9;4245:22;4224:53;:::i;:::-;4214:63;;4186:97;4314:2;4332:53;4377:7;4368:6;4357:9;4353:22;4332:53;:::i;:::-;4322:63;;4293:98;4422:2;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4401:98;4118:391;;;;;:::o;4516:239::-;;4619:2;4607:9;4598:7;4594:23;4590:32;4587:2;;;4635:1;4632;4625:12;4587:2;4670:1;4687:52;4731:7;4722:6;4711:9;4707:22;4687:52;:::i;:::-;4677:62;;4649:96;4581:174;;;;:::o;4762:261::-;;4876:2;4864:9;4855:7;4851:23;4847:32;4844:2;;;4892:1;4889;4882:12;4844:2;4927:1;4944:63;4999:7;4990:6;4979:9;4975:22;4944:63;:::i;:::-;4934:73;;4906:107;4838:185;;;;:::o;5030:364::-;;;5150:2;5138:9;5129:7;5125:23;5121:32;5118:2;;;5166:1;5163;5156:12;5118:2;5201:1;5218:52;5262:7;5253:6;5242:9;5238:22;5218:52;:::i;:::-;5208:62;;5180:96;5307:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5286:98;5112:282;;;;;:::o;5401:347::-;;5515:2;5503:9;5494:7;5490:23;5486:32;5483:2;;;5531:1;5528;5521:12;5483:2;5594:1;5583:9;5579:17;5566:31;5617:18;5609:6;5606:30;5603:2;;;5649:1;5646;5639:12;5603:2;5669:63;5724:7;5715:6;5704:9;5700:22;5669:63;:::i;:::-;5659:73;;5545:193;5477:271;;;;:::o;5755:597::-;;;;5903:2;5891:9;5882:7;5878:23;5874:32;5871:2;;;5919:1;5916;5909:12;5871:2;5982:1;5971:9;5967:17;5954:31;6005:18;5997:6;5994:30;5991:2;;;6037:1;6034;6027:12;5991:2;6057:63;6112:7;6103:6;6092:9;6088:22;6057:63;:::i;:::-;6047:73;;5933:193;6157:2;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6136:98;6265:2;6283:53;6328:7;6319:6;6308:9;6304:22;6283:53;:::i;:::-;6273:63;;6244:98;5865:487;;;;;:::o;6359:1671::-;;;;;;;;;;6639:3;6627:9;6618:7;6614:23;6610:33;6607:2;;;6656:1;6653;6646:12;6607:2;6719:1;6708:9;6704:17;6691:31;6742:18;6734:6;6731:30;6728:2;;;6774:1;6771;6764:12;6728:2;6794:63;6849:7;6840:6;6829:9;6825:22;6794:63;:::i;:::-;6784:73;;6670:193;6922:2;6911:9;6907:18;6894:32;6946:18;6938:6;6935:30;6932:2;;;6978:1;6975;6968:12;6932:2;6998:63;7053:7;7044:6;7033:9;7029:22;6998:63;:::i;:::-;6988:73;;6873:194;7126:2;7115:9;7111:18;7098:32;7150:18;7142:6;7139:30;7136:2;;;7182:1;7179;7172:12;7136:2;7202:63;7257:7;7248:6;7237:9;7233:22;7202:63;:::i;:::-;7192:73;;7077:194;7330:2;7319:9;7315:18;7302:32;7354:18;7346:6;7343:30;7340:2;;;7386:1;7383;7376:12;7340:2;7406:63;7461:7;7452:6;7441:9;7437:22;7406:63;:::i;:::-;7396:73;;7281:194;7506:3;7525:53;7570:7;7561:6;7550:9;7546:22;7525:53;:::i;:::-;7515:63;;7485:99;7615:3;7634:53;7679:7;7670:6;7659:9;7655:22;7634:53;:::i;:::-;7624:63;;7594:99;7724:3;7743:53;7788:7;7779:6;7768:9;7764:22;7743:53;:::i;:::-;7733:63;;7703:99;7833:3;7852:53;7897:7;7888:6;7877:9;7873:22;7852:53;:::i;:::-;7842:63;;7812:99;7942:3;7961:53;8006:7;7997:6;7986:9;7982:22;7961:53;:::i;:::-;7951:63;;7921:99;6601:1429;;;;;;;;;;;:::o;8037:703::-;;;;8195:2;8183:9;8174:7;8170:23;8166:32;8163:2;;;8211:1;8208;8201:12;8163:2;8274:1;8263:9;8259:17;8246:31;8297:18;8289:6;8286:30;8283:2;;;8329:1;8326;8319:12;8283:2;8349:63;8404:7;8395:6;8384:9;8380:22;8349:63;:::i;:::-;8339:73;;8225:193;8477:2;8466:9;8462:18;8449:32;8501:18;8493:6;8490:30;8487:2;;;8533:1;8530;8523:12;8487:2;8553:63;8608:7;8599:6;8588:9;8584:22;8553:63;:::i;:::-;8543:73;;8428:194;8653:2;8671:53;8716:7;8707:6;8696:9;8692:22;8671:53;:::i;:::-;8661:63;;8632:98;8157:583;;;;;:::o;8747:597::-;;;;8895:2;8883:9;8874:7;8870:23;8866:32;8863:2;;;8911:1;8908;8901:12;8863:2;8974:1;8963:9;8959:17;8946:31;8997:18;8989:6;8986:30;8983:2;;;9029:1;9026;9019:12;8983:2;9049:63;9104:7;9095:6;9084:9;9080:22;9049:63;:::i;:::-;9039:73;;8925:193;9149:2;9167:53;9212:7;9203:6;9192:9;9188:22;9167:53;:::i;:::-;9157:63;;9128:98;9257:2;9275:53;9320:7;9311:6;9300:9;9296:22;9275:53;:::i;:::-;9265:63;;9236:98;8857:487;;;;;:::o;9351:532::-;;;;9508:3;9496:9;9487:7;9483:23;9479:33;9476:2;;;9525:1;9522;9515:12;9476:2;9560:1;9577:75;9644:7;9635:6;9624:9;9620:22;9577:75;:::i;:::-;9567:85;;9539:119;9689:3;9708:50;9750:7;9741:6;9730:9;9726:22;9708:50;:::i;:::-;9698:60;;9668:96;9795:3;9814:53;9859:7;9850:6;9839:9;9835:22;9814:53;:::i;:::-;9804:63;;9774:99;9470:413;;;;;:::o;9890:241::-;;9994:2;9982:9;9973:7;9969:23;9965:32;9962:2;;;10010:1;10007;10000:12;9962:2;10045:1;10062:53;10107:7;10098:6;10087:9;10083:22;10062:53;:::i;:::-;10052:63;;10024:97;9956:175;;;;:::o;10138:263::-;;10253:2;10241:9;10232:7;10228:23;10224:32;10221:2;;;10269:1;10266;10259:12;10221:2;10304:1;10321:64;10377:7;10368:6;10357:9;10353:22;10321:64;:::i;:::-;10311:74;;10283:108;10215:186;;;;:::o;10408:366::-;;;10529:2;10517:9;10508:7;10504:23;10500:32;10497:2;;;10545:1;10542;10535:12;10497:2;10580:1;10597:53;10642:7;10633:6;10622:9;10618:22;10597:53;:::i;:::-;10587:63;;10559:97;10687:2;10705:53;10750:7;10741:6;10730:9;10726:22;10705:53;:::i;:::-;10695:63;;10666:98;10491:283;;;;;:::o;10781:472::-;;;10912:2;10900:9;10891:7;10887:23;10883:32;10880:2;;;10928:1;10925;10918:12;10880:2;10963:1;10980:53;11025:7;11016:6;11005:9;11001:22;10980:53;:::i;:::-;10970:63;;10942:97;11098:2;11087:9;11083:18;11070:32;11122:18;11114:6;11111:30;11108:2;;;11154:1;11151;11144:12;11108:2;11174:63;11229:7;11220:6;11209:9;11205:22;11174:63;:::i;:::-;11164:73;;11049:194;10874:379;;;;;:::o;11260:366::-;;;11381:2;11369:9;11360:7;11356:23;11352:32;11349:2;;;11397:1;11394;11387:12;11349:2;11432:1;11449:53;11494:7;11485:6;11474:9;11470:22;11449:53;:::i;:::-;11439:63;;11411:97;11539:2;11557:53;11602:7;11593:6;11582:9;11578:22;11557:53;:::i;:::-;11547:63;;11518:98;11343:283;;;;;:::o;11633:491::-;;;;11771:2;11759:9;11750:7;11746:23;11742:32;11739:2;;;11787:1;11784;11777:12;11739:2;11822:1;11839:53;11884:7;11875:6;11864:9;11860:22;11839:53;:::i;:::-;11829:63;;11801:97;11929:2;11947:53;11992:7;11983:6;11972:9;11968:22;11947:53;:::i;:::-;11937:63;;11908:98;12037:2;12055:53;12100:7;12091:6;12080:9;12076:22;12055:53;:::i;:::-;12045:63;;12016:98;11733:391;;;;;:::o;12132:277::-;;12271:98;12365:3;12357:6;12271:98;:::i;:::-;12398:4;12393:3;12389:14;12375:28;;12264:145;;;;:::o;12417:142::-;12508:45;12547:5;12508:45;:::i;:::-;12503:3;12496:58;12490:69;;:::o;12566:113::-;12649:24;12667:5;12649:24;:::i;:::-;12644:3;12637:37;12631:48;;:::o;12773:874::-;12960:79;13033:5;12960:79;:::i;:::-;13052:111;13156:6;13151:3;13052:111;:::i;:::-;13045:118;;13184:81;13259:5;13184:81;:::i;:::-;13285:7;13313:1;13298:337;13323:6;13320:1;13317:13;13298:337;;;13390:6;13384:13;13411:115;13522:3;13507:13;13411:115;:::i;:::-;13404:122;;13543:85;13621:6;13543:85;:::i;:::-;13533:95;;13355:280;13345:1;13342;13338:9;13333:14;;13298:337;;;13302:14;12939:708;;;;;:::o;13655:94::-;13722:21;13737:5;13722:21;:::i;:::-;13717:3;13710:34;13704:45;;:::o;13756:104::-;13833:21;13848:5;13833:21;:::i;:::-;13828:3;13821:34;13815:45;;:::o;13867:103::-;13940:24;13958:5;13940:24;:::i;:::-;13935:3;13928:37;13922:48;;:::o;13977:113::-;14060:24;14078:5;14060:24;:::i;:::-;14055:3;14048:37;14042:48;;:::o;14097:110::-;14178:23;14195:5;14178:23;:::i;:::-;14173:3;14166:36;14160:47;;:::o;14214:347::-;;14326:39;14359:5;14326:39;:::i;:::-;14377:71;14441:6;14436:3;14377:71;:::i;:::-;14370:78;;14453:52;14498:6;14493:3;14486:4;14479:5;14475:16;14453:52;:::i;:::-;14526:29;14548:6;14526:29;:::i;:::-;14521:3;14517:39;14510:46;;14306:255;;;;;:::o;14569:327::-;;14729:67;14793:2;14788:3;14729:67;:::i;:::-;14722:74;;14829:29;14825:1;14820:3;14816:11;14809:50;14887:2;14882:3;14878:12;14871:19;;14715:181;;;:::o;14905:323::-;;15065:67;15129:2;15124:3;15065:67;:::i;:::-;15058:74;;15165:25;15161:1;15156:3;15152:11;15145:46;15219:2;15214:3;15210:12;15203:19;;15051:177;;;:::o;15237:331::-;;15397:67;15461:2;15456:3;15397:67;:::i;:::-;15390:74;;15497:33;15493:1;15488:3;15484:11;15477:54;15559:2;15554:3;15550:12;15543:19;;15383:185;;;:::o;15577:375::-;;15737:67;15801:2;15796:3;15737:67;:::i;:::-;15730:74;;15837:34;15833:1;15828:3;15824:11;15817:55;15906:8;15901:2;15896:3;15892:12;15885:30;15943:2;15938:3;15934:12;15927:19;;15723:229;;;:::o;15961:323::-;;16121:67;16185:2;16180:3;16121:67;:::i;:::-;16114:74;;16221:25;16217:1;16212:3;16208:11;16201:46;16275:2;16270:3;16266:12;16259:19;;16107:177;;;:::o;16293:305::-;;16453:66;16517:1;16512:3;16453:66;:::i;:::-;16446:73;;16552:8;16548:1;16543:3;16539:11;16532:29;16589:2;16584:3;16580:12;16573:19;;16439:159;;;:::o;16607:327::-;;16767:67;16831:2;16826:3;16767:67;:::i;:::-;16760:74;;16867:29;16863:1;16858:3;16854:11;16847:50;16925:2;16920:3;16916:12;16909:19;;16753:181;;;:::o;16943:380::-;;17103:67;17167:2;17162:3;17103:67;:::i;:::-;17096:74;;17203:34;17199:1;17194:3;17190:11;17183:55;17272:13;17267:2;17262:3;17258:12;17251:35;17314:2;17309:3;17305:12;17298:19;;17089:234;;;:::o;17332:324::-;;17492:67;17556:2;17551:3;17492:67;:::i;:::-;17485:74;;17592:26;17588:1;17583:3;17579:11;17572:47;17647:2;17642:3;17638:12;17631:19;;17478:178;;;:::o;17665:324::-;;17825:67;17889:2;17884:3;17825:67;:::i;:::-;17818:74;;17925:26;17921:1;17916:3;17912:11;17905:47;17980:2;17975:3;17971:12;17964:19;;17811:178;;;:::o;17998:370::-;;18158:67;18222:2;18217:3;18158:67;:::i;:::-;18151:74;;18258:34;18254:1;18249:3;18245:11;18238:55;18327:3;18322:2;18317:3;18313:12;18306:25;18359:2;18354:3;18350:12;18343:19;;18144:224;;;:::o;18377:328::-;;18537:67;18601:2;18596:3;18537:67;:::i;:::-;18530:74;;18637:30;18633:1;18628:3;18624:11;18617:51;18696:2;18691:3;18687:12;18680:19;;18523:182;;;:::o;18714:332::-;;18874:67;18938:2;18933:3;18874:67;:::i;:::-;18867:74;;18974:34;18970:1;18965:3;18961:11;18954:55;19037:2;19032:3;19028:12;19021:19;;18860:186;;;:::o;19055:332::-;;19215:67;19279:2;19274:3;19215:67;:::i;:::-;19208:74;;19315:34;19311:1;19306:3;19302:11;19295:55;19378:2;19373:3;19369:12;19362:19;;19201:186;;;:::o;19396:324::-;;19556:67;19620:2;19615:3;19556:67;:::i;:::-;19549:74;;19656:26;19652:1;19647:3;19643:11;19636:47;19711:2;19706:3;19702:12;19695:19;;19542:178;;;:::o;19729:324::-;;19889:67;19953:2;19948:3;19889:67;:::i;:::-;19882:74;;19989:26;19985:1;19980:3;19976:11;19969:47;20044:2;20039:3;20035:12;20028:19;;19875:178;;;:::o;20062:304::-;;20222:66;20286:1;20281:3;20222:66;:::i;:::-;20215:73;;20321:7;20317:1;20312:3;20308:11;20301:28;20357:2;20352:3;20348:12;20341:19;;20208:158;;;:::o;20375:329::-;;20535:67;20599:2;20594:3;20535:67;:::i;:::-;20528:74;;20635:31;20631:1;20626:3;20622:11;20615:52;20695:2;20690:3;20686:12;20679:19;;20521:183;;;:::o;20713:373::-;;20873:67;20937:2;20932:3;20873:67;:::i;:::-;20866:74;;20973:34;20969:1;20964:3;20960:11;20953:55;21042:6;21037:2;21032:3;21028:12;21021:28;21077:2;21072:3;21068:12;21061:19;;20859:227;;;:::o;21095:380::-;;21255:67;21319:2;21314:3;21255:67;:::i;:::-;21248:74;;21355:34;21351:1;21346:3;21342:11;21335:55;21424:13;21419:2;21414:3;21410:12;21403:35;21466:2;21461:3;21457:12;21450:19;;21241:234;;;:::o;21560:850::-;21705:4;21700:3;21696:14;21802:4;21795:5;21791:16;21785:23;21814:63;21871:4;21866:3;21862:14;21848:12;21814:63;:::i;:::-;21725:158;21973:4;21966:5;21962:16;21956:23;21985:63;22042:4;22037:3;22033:14;22019:12;21985:63;:::i;:::-;21893:161;22142:4;22135:5;22131:16;22125:23;22154:63;22211:4;22206:3;22202:14;22188:12;22154:63;:::i;:::-;22064:159;22314:4;22307:5;22303:16;22297:23;22326:63;22383:4;22378:3;22374:14;22360:12;22326:63;:::i;:::-;22233:162;21678:732;;;:::o;22486:962::-;22623:4;22618:3;22614:14;22713:4;22706:5;22702:16;22696:23;22725:63;22782:4;22777:3;22773:14;22759:12;22725:63;:::i;:::-;22643:151;22870:4;22863:5;22859:16;22853:23;22882:63;22939:4;22934:3;22930:14;22916:12;22882:63;:::i;:::-;22804:147;23029:4;23022:5;23018:16;23012:23;23041:63;23098:4;23093:3;23089:14;23075:12;23041:63;:::i;:::-;22961:149;23189:4;23182:5;23178:16;23172:23;23201:63;23258:4;23253:3;23249:14;23235:12;23201:63;:::i;:::-;23120:150;23352:4;23345:5;23341:16;23335:23;23364:63;23421:4;23416:3;23412:14;23398:12;23364:63;:::i;:::-;23280:153;22596:852;;;:::o;23522:641::-;23657:4;23652:3;23648:14;23747:4;23740:5;23736:16;23730:23;23759:63;23816:4;23811:3;23807:14;23793:12;23759:63;:::i;:::-;23677:151;23910:4;23903:5;23899:16;23893:23;23922:63;23979:4;23974:3;23970:14;23956:12;23922:63;:::i;:::-;23838:153;24073:4;24066:5;24062:16;24056:23;24085:57;24136:4;24131:3;24127:14;24113:12;24085:57;:::i;:::-;24001:147;23630:533;;;:::o;24247:953::-;24382:4;24377:3;24373:14;24466:4;24459:5;24455:16;24449:23;24478:63;24535:4;24530:3;24526:14;24512:12;24478:63;:::i;:::-;24402:145;24626:4;24619:5;24615:16;24609:23;24638:63;24695:4;24690:3;24686:14;24672:12;24638:63;:::i;:::-;24557:150;24787:4;24780:5;24776:16;24770:23;24799:63;24856:4;24851:3;24847:14;24833:12;24799:63;:::i;:::-;24717:151;24946:4;24939:5;24935:16;24929:23;24958:63;25015:4;25010:3;25006:14;24992:12;24958:63;:::i;:::-;24878:149;25104:4;25097:5;25093:16;25087:23;25116:63;25173:4;25168:3;25164:14;25150:12;25116:63;:::i;:::-;25037:148;24355:845;;;:::o;25207:103::-;25280:24;25298:5;25280:24;:::i;:::-;25275:3;25268:37;25262:48;;:::o;25317:113::-;25400:24;25418:5;25400:24;:::i;:::-;25395:3;25388:37;25382:48;;:::o;25437:222::-;;25564:2;25553:9;25549:18;25541:26;;25578:71;25646:1;25635:9;25631:17;25622:6;25578:71;:::i;:::-;25535:124;;;;:::o;25666:460::-;;25857:2;25846:9;25842:18;25834:26;;25871:79;25947:1;25936:9;25932:17;25923:6;25871:79;:::i;:::-;25961:72;26029:2;26018:9;26014:18;26005:6;25961:72;:::i;:::-;26044;26112:2;26101:9;26097:18;26088:6;26044:72;:::i;:::-;25828:298;;;;;;:::o;26133:349::-;;26296:2;26285:9;26281:18;26273:26;;26310:79;26386:1;26375:9;26371:17;26362:6;26310:79;:::i;:::-;26400:72;26468:2;26457:9;26453:18;26444:6;26400:72;:::i;:::-;26267:215;;;;;:::o;26489:333::-;;26644:2;26633:9;26629:18;26621:26;;26658:71;26726:1;26715:9;26711:17;26702:6;26658:71;:::i;:::-;26740:72;26808:2;26797:9;26793:18;26784:6;26740:72;:::i;:::-;26615:207;;;;;:::o;26829:424::-;;27056:4;27045:9;27041:20;27033:28;;27072:171;27240:1;27229:9;27225:17;27216:6;27072:171;:::i;:::-;27027:226;;;;:::o;27260:210::-;;27381:2;27370:9;27366:18;27358:26;;27395:65;27457:1;27446:9;27442:17;27433:6;27395:65;:::i;:::-;27352:118;;;;:::o;27477:222::-;;27604:2;27593:9;27589:18;27581:26;;27618:71;27686:1;27675:9;27671:17;27662:6;27618:71;:::i;:::-;27575:124;;;;:::o;27706:218::-;;27831:2;27820:9;27816:18;27808:26;;27845:69;27911:1;27900:9;27896:17;27887:6;27845:69;:::i;:::-;27802:122;;;;:::o;27931:432::-;;28108:2;28097:9;28093:18;28085:26;;28122:69;28188:1;28177:9;28173:17;28164:6;28122:69;:::i;:::-;28202:70;28268:2;28257:9;28253:18;28244:6;28202:70;:::i;:::-;28283;28349:2;28338:9;28334:18;28325:6;28283:70;:::i;:::-;28079:284;;;;;;:::o;28370:310::-;;28517:2;28506:9;28502:18;28494:26;;28567:9;28561:4;28557:20;28553:1;28542:9;28538:17;28531:47;28592:78;28665:4;28656:6;28592:78;:::i;:::-;28584:86;;28488:192;;;;:::o;28687:1128::-;;29032:3;29021:9;29017:19;29009:27;;29083:9;29077:4;29073:20;29069:1;29058:9;29054:17;29047:47;29108:78;29181:4;29172:6;29108:78;:::i;:::-;29100:86;;29234:9;29228:4;29224:20;29219:2;29208:9;29204:18;29197:48;29259:78;29332:4;29323:6;29259:78;:::i;:::-;29251:86;;29385:9;29379:4;29375:20;29370:2;29359:9;29355:18;29348:48;29410:78;29483:4;29474:6;29410:78;:::i;:::-;29402:86;;29536:9;29530:4;29526:20;29521:2;29510:9;29506:18;29499:48;29561:78;29634:4;29625:6;29561:78;:::i;:::-;29553:86;;29650:71;29716:3;29705:9;29701:19;29692:6;29650:71;:::i;:::-;29732:73;29800:3;29789:9;29785:19;29776:6;29732:73;:::i;:::-;29003:812;;;;;;;;;:::o;29822:416::-;;30022:2;30011:9;30007:18;29999:26;;30072:9;30066:4;30062:20;30058:1;30047:9;30043:17;30036:47;30097:131;30223:4;30097:131;:::i;:::-;30089:139;;29993:245;;;:::o;30245:416::-;;30445:2;30434:9;30430:18;30422:26;;30495:9;30489:4;30485:20;30481:1;30470:9;30466:17;30459:47;30520:131;30646:4;30520:131;:::i;:::-;30512:139;;30416:245;;;:::o;30668:416::-;;30868:2;30857:9;30853:18;30845:26;;30918:9;30912:4;30908:20;30904:1;30893:9;30889:17;30882:47;30943:131;31069:4;30943:131;:::i;:::-;30935:139;;30839:245;;;:::o;31091:416::-;;31291:2;31280:9;31276:18;31268:26;;31341:9;31335:4;31331:20;31327:1;31316:9;31312:17;31305:47;31366:131;31492:4;31366:131;:::i;:::-;31358:139;;31262:245;;;:::o;31514:416::-;;31714:2;31703:9;31699:18;31691:26;;31764:9;31758:4;31754:20;31750:1;31739:9;31735:17;31728:47;31789:131;31915:4;31789:131;:::i;:::-;31781:139;;31685:245;;;:::o;31937:416::-;;32137:2;32126:9;32122:18;32114:26;;32187:9;32181:4;32177:20;32173:1;32162:9;32158:17;32151:47;32212:131;32338:4;32212:131;:::i;:::-;32204:139;;32108:245;;;:::o;32360:416::-;;32560:2;32549:9;32545:18;32537:26;;32610:9;32604:4;32600:20;32596:1;32585:9;32581:17;32574:47;32635:131;32761:4;32635:131;:::i;:::-;32627:139;;32531:245;;;:::o;32783:416::-;;32983:2;32972:9;32968:18;32960:26;;33033:9;33027:4;33023:20;33019:1;33008:9;33004:17;32997:47;33058:131;33184:4;33058:131;:::i;:::-;33050:139;;32954:245;;;:::o;33206:416::-;;33406:2;33395:9;33391:18;33383:26;;33456:9;33450:4;33446:20;33442:1;33431:9;33427:17;33420:47;33481:131;33607:4;33481:131;:::i;:::-;33473:139;;33377:245;;;:::o;33629:416::-;;33829:2;33818:9;33814:18;33806:26;;33879:9;33873:4;33869:20;33865:1;33854:9;33850:17;33843:47;33904:131;34030:4;33904:131;:::i;:::-;33896:139;;33800:245;;;:::o;34052:416::-;;34252:2;34241:9;34237:18;34229:26;;34302:9;34296:4;34292:20;34288:1;34277:9;34273:17;34266:47;34327:131;34453:4;34327:131;:::i;:::-;34319:139;;34223:245;;;:::o;34475:416::-;;34675:2;34664:9;34660:18;34652:26;;34725:9;34719:4;34715:20;34711:1;34700:9;34696:17;34689:47;34750:131;34876:4;34750:131;:::i;:::-;34742:139;;34646:245;;;:::o;34898:416::-;;35098:2;35087:9;35083:18;35075:26;;35148:9;35142:4;35138:20;35134:1;35123:9;35119:17;35112:47;35173:131;35299:4;35173:131;:::i;:::-;35165:139;;35069:245;;;:::o;35321:416::-;;35521:2;35510:9;35506:18;35498:26;;35571:9;35565:4;35561:20;35557:1;35546:9;35542:17;35535:47;35596:131;35722:4;35596:131;:::i;:::-;35588:139;;35492:245;;;:::o;35744:416::-;;35944:2;35933:9;35929:18;35921:26;;35994:9;35988:4;35984:20;35980:1;35969:9;35965:17;35958:47;36019:131;36145:4;36019:131;:::i;:::-;36011:139;;35915:245;;;:::o;36167:416::-;;36367:2;36356:9;36352:18;36344:26;;36417:9;36411:4;36407:20;36403:1;36392:9;36388:17;36381:47;36442:131;36568:4;36442:131;:::i;:::-;36434:139;;36338:245;;;:::o;36590:416::-;;36790:2;36779:9;36775:18;36767:26;;36840:9;36834:4;36830:20;36826:1;36815:9;36811:17;36804:47;36865:131;36991:4;36865:131;:::i;:::-;36857:139;;36761:245;;;:::o;37013:416::-;;37213:2;37202:9;37198:18;37190:26;;37263:9;37257:4;37253:20;37249:1;37238:9;37234:17;37227:47;37288:131;37414:4;37288:131;:::i;:::-;37280:139;;37184:245;;;:::o;37436:327::-;;37615:3;37604:9;37600:19;37592:27;;37630:123;37750:1;37739:9;37735:17;37726:6;37630:123;:::i;:::-;37586:177;;;;:::o;37770:311::-;;37941:3;37930:9;37926:19;37918:27;;37956:115;38068:1;38057:9;38053:17;38044:6;37956:115;:::i;:::-;37912:169;;;;:::o;38088:306::-;;38257:2;38246:9;38242:18;38234:26;;38271:113;38381:1;38370:9;38366:17;38357:6;38271:113;:::i;:::-;38228:166;;;;:::o;38401:222::-;;38528:2;38517:9;38513:18;38505:26;;38542:71;38610:1;38599:9;38595:17;38586:6;38542:71;:::i;:::-;38499:124;;;;:::o;38630:860::-;;38917:3;38906:9;38902:19;38894:27;;38932:71;39000:1;38989:9;38985:17;38976:6;38932:71;:::i;:::-;39051:9;39045:4;39041:20;39036:2;39025:9;39021:18;39014:48;39076:78;39149:4;39140:6;39076:78;:::i;:::-;39068:86;;39202:9;39196:4;39192:20;39187:2;39176:9;39172:18;39165:48;39227:78;39300:4;39291:6;39227:78;:::i;:::-;39219:86;;39316:80;39392:2;39381:9;39377:18;39368:6;39316:80;:::i;:::-;39407:73;39475:3;39464:9;39460:19;39451:6;39407:73;:::i;:::-;38888:602;;;;;;;;:::o;39497:966::-;;39837:3;39826:9;39822:19;39814:27;;39852:71;39920:1;39909:9;39905:17;39896:6;39852:71;:::i;:::-;39971:9;39965:4;39961:20;39956:2;39945:9;39941:18;39934:48;39996:78;40069:4;40060:6;39996:78;:::i;:::-;39988:86;;40085:72;40153:2;40142:9;40138:18;40129:6;40085:72;:::i;:::-;40168:80;40244:2;40233:9;40229:18;40220:6;40168:80;:::i;:::-;40297:9;40291:4;40287:20;40281:3;40270:9;40266:19;40259:49;40322:131;40448:4;40322:131;:::i;:::-;40314:139;;39808:655;;;;;;;:::o;40470:444::-;;40653:2;40642:9;40638:18;40630:26;;40667:71;40735:1;40724:9;40720:17;40711:6;40667:71;:::i;:::-;40749:72;40817:2;40806:9;40802:18;40793:6;40749:72;:::i;:::-;40832;40900:2;40889:9;40885:18;40876:6;40832:72;:::i;:::-;40624:290;;;;;;:::o;40921:878::-;;41241:3;41230:9;41226:19;41218:27;;41256:71;41324:1;41313:9;41309:17;41300:6;41256:71;:::i;:::-;41338:72;41406:2;41395:9;41391:18;41382:6;41338:72;:::i;:::-;41421;41489:2;41478:9;41474:18;41465:6;41421:72;:::i;:::-;41504:80;41580:2;41569:9;41565:18;41556:6;41504:80;:::i;:::-;41633:9;41627:4;41623:20;41617:3;41606:9;41602:19;41595:49;41658:131;41784:4;41658:131;:::i;:::-;41650:139;;41212:587;;;;;;;:::o;41806:1514::-;;42300:3;42289:9;42285:19;42277:27;;42315:71;42383:1;42372:9;42368:17;42359:6;42315:71;:::i;:::-;42397:72;42465:2;42454:9;42450:18;42441:6;42397:72;:::i;:::-;42480;42548:2;42537:9;42533:18;42524:6;42480:72;:::i;:::-;42563;42631:2;42620:9;42616:18;42607:6;42563:72;:::i;:::-;42646:73;42714:3;42703:9;42699:19;42690:6;42646:73;:::i;:::-;42730;42798:3;42787:9;42783:19;42774:6;42730:73;:::i;:::-;42814:71;42880:3;42869:9;42865:19;42856:6;42814:71;:::i;:::-;42896:73;42964:3;42953:9;42949:19;42940:6;42896:73;:::i;:::-;42980;43048:3;43037:9;43033:19;43024:6;42980:73;:::i;:::-;43064:117;43176:3;43165:9;43161:19;43152:6;43064:117;:::i;:::-;43192:118;43305:3;43294:9;43290:19;43280:7;43192:118;:::i;:::-;42271:1049;;;;;;;;;;;;;;:::o;43327:256::-;;43389:2;43383:9;43373:19;;43427:4;43419:6;43415:17;43526:6;43514:10;43511:22;43490:18;43478:10;43475:34;43472:62;43469:2;;;43547:1;43544;43537:12;43469:2;43567:10;43563:2;43556:22;43367:216;;;;:::o;43590:322::-;;43734:18;43726:6;43723:30;43720:2;;;43766:1;43763;43756:12;43720:2;43833:4;43829:9;43822:4;43814:6;43810:17;43806:33;43798:41;;43897:4;43891;43887:15;43879:23;;43657:255;;;:::o;43919:124::-;;44030:3;44022:11;;44016:27;;;:::o;44050:135::-;;44171:4;44161:14;;44149:36;;;:::o;44192:122::-;;44286:5;44280:12;44270:22;;44251:63;;;:::o;44321:133::-;;44444:4;44439:3;44435:14;44427:22;;44421:33;;;:::o;44462:167::-;;44620:3;44605:18;;44598:31;;;;:::o;44638:163::-;;44753:6;44748:3;44741:19;44790:4;44785:3;44781:14;44766:29;;44734:67;;;;:::o;44809:91::-;;44871:24;44889:5;44871:24;:::i;:::-;44860:35;;44854:46;;;:::o;44907:85::-;;44980:5;44973:13;44966:21;44955:32;;44949:43;;;:::o;44999:72::-;;45061:5;45050:16;;45044:27;;;:::o;45078:71::-;;45139:5;45128:16;;45122:27;;;:::o;45156:121::-;;45229:42;45222:5;45218:54;45207:65;;45201:76;;;:::o;45284:72::-;;45346:5;45335:16;;45329:27;;;:::o;45363:129::-;;45450:37;45481:5;45450:37;:::i;:::-;45437:50;;45431:61;;;:::o;45499:121::-;;45578:37;45609:5;45578:37;:::i;:::-;45565:50;;45559:61;;;:::o;45627:108::-;;45706:24;45724:5;45706:24;:::i;:::-;45693:37;;45687:48;;;:::o;45743:145::-;45824:6;45819:3;45814;45801:30;45880:1;45871:6;45866:3;45862:16;45855:27;45794:94;;;:::o;45897:268::-;45962:1;45969:101;45983:6;45980:1;45977:13;45969:101;;;46059:1;46054:3;46050:11;46044:18;46040:1;46035:3;46031:11;46024:39;46005:2;46002:1;45998:10;45993:15;;45969:101;;;46085:6;46082:1;46079:13;46076:2;;;46150:1;46141:6;46136:3;46132:16;46125:27;46076:2;45946:219;;;;:::o;46173:97::-;;46261:2;46257:7;46252:2;46245:5;46241:14;46237:28;46227:38;;46221:49;;;:::o;46278:117::-;46347:24;46365:5;46347:24;:::i;:::-;46340:5;46337:35;46327:2;;46386:1;46383;46376:12;46327:2;46321:74;:::o;46402:111::-;46468:21;46483:5;46468:21;:::i;:::-;46461:5;46458:32;46448:2;;46504:1;46501;46494:12;46448:2;46442:71;:::o;46520:117::-;46589:24;46607:5;46589:24;:::i;:::-;46582:5;46579:35;46569:2;;46628:1;46625;46618:12;46569:2;46563:74;:::o;46644:115::-;46712:23;46729:5;46712:23;:::i;:::-;46705:5;46702:34;46692:2;;46750:1;46747;46740:12;46692:2;46686:73;:::o;46766:117::-;46835:24;46853:5;46835:24;:::i;:::-;46828:5;46825:35;46815:2;;46874:1;46871;46864:12;46815:2;46809:74;:::o

Swarm Source

ipfs://2711d3bc1719ec47fe71282d53e7b55d1c02400b02b50396f1b256df67a8c484
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.