S Price: $0.853766 (-1.37%)

Contract

0xF042ba0b8135b0704A1f7f0C7f602f1B141C81dF

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Purchase80705672025-02-16 2:10:535 days ago1739671853IN
0xF042ba0b...B141C81dF
2,560 S0.0527998355
Purchase80647432025-02-16 0:59:585 days ago1739667598IN
0xF042ba0b...B141C81dF
2,560 S0.0677266155

Latest 8 internal transactions

Parent Transaction Hash Block From To
80705672025-02-16 2:10:535 days ago1739671853
0xF042ba0b...B141C81dF
640 S
80705672025-02-16 2:10:535 days ago1739671853
0xF042ba0b...B141C81dF
640 S
80705672025-02-16 2:10:535 days ago1739671853
0xF042ba0b...B141C81dF
640 S
80705672025-02-16 2:10:535 days ago1739671853
0xF042ba0b...B141C81dF
640 S
80647432025-02-16 0:59:585 days ago1739667598
0xF042ba0b...B141C81dF
640 S
80647432025-02-16 0:59:585 days ago1739667598
0xF042ba0b...B141C81dF
640 S
80647432025-02-16 0:59:585 days ago1739667598
0xF042ba0b...B141C81dF
640 S
80647432025-02-16 0:59:585 days ago1739667598
0xF042ba0b...B141C81dF
640 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VRMatrixSuite

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at SonicScan.org on 2025-02-13
*/

/**
 *Submitted for verification at SonicScan.org on 2024-12-21
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;
// Ownable contract to manage contract ownership
contract Ownable {
    address private _owner;

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

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

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

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

    function _transferOwnership(address newOwner) internal {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// ReentrancyGuard contract to prevent reentrancy attacks
contract ReentrancyGuard {
    uint256 private _status;
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

// Interface for the registration contract

interface IREG {
    function NumberOfUsers() external view returns (uint256);
    function AddressToCountId(address user) external view returns (uint256);
    function countIdToAddress(uint id) external view returns (address);
    function isRegistered(address user) external view returns (bool);
    function userUpline(address user) external view returns (address);
}

interface IVRMatrix {
    function userLevel(address user) external view returns (uint256);

}
contract VRMatrixSuite is Ownable , ReentrancyGuard {

  // public variables-
    uint public numberOfActiveUsers;
    uint public totalEarned ;
    IREG public regContract;
    address public lastUser;
    IVRMatrix public  vrMatrix;


    uint public TOTAL_LEVELS = 10;

    constructor() {
     regContract = IREG(0xbbcd14B04924F33c303627578708fd4f51d39383); 
     vrMatrix = IVRMatrix(0xa1C20AC67f805A4Aabf94cDe9C8Dc2903De78926);
     levelPrice[1] = 5 ether ;

      for (uint i = 2; i <= TOTAL_LEVELS ; i++ ) {
        levelPrice[i] = levelPrice[i - 1] * 2; // each price from 1 is 2X the last price

      }
     initOwner(); // initialize the constante variables and public variables with the values from the registry  
    }

       
       
    

     
    function initOwner() internal {
        address zeroAddress = address(0);
        lastUser = getFirstID();
        virtualUplineOf[lastUser] = zeroAddress ;
         
         users[lastUser] = User ({
         userAddress : lastUser,
         team_Id :  1 ,
         totalIncome : 0 ,
         totalVirtualIncome : 0 , 
         transactionCount : 0 , 
         totalDirect : 0 , 
         lastUpdate : block.timestamp ,
         currentUserLevel : TOTAL_LEVELS ,
         firstActivationDate : block.timestamp 

       }) ;


       userLevel[lastUser] = TOTAL_LEVELS ;
       virtualIds[lastUser] = numberOfActiveUsers;
       isActive[lastUser] = true ;
        numberOfActiveUsers = 1;
      
       emit ownerInit(lastUser);
    }

        
   mapping (address => address ) public virtualUplineOf;
   mapping (uint => uint ) public levelPrice;
   mapping (address => uint ) public userLevel;
   mapping (address => uint ) public totalVirtualDirect;
   mapping (address => address[] ) public virtualDirectsOf;
   mapping (uint => address ) public virtualAddresses;
   mapping (address => uint ) public virtualIds;
   mapping (address => bool ) public isActive;

   mapping (address => User ) public users;
   mapping (address => UserHistory [] ) public history;




 // user structure to save total informations
    struct User {
        address userAddress;
        uint team_Id ;
        uint totalIncome;
        uint totalVirtualIncome;
        uint transactionCount;
        uint totalDirect;
        uint lastUpdate;
        uint currentUserLevel ;
        uint firstActivationDate ;

    }

  // userHistory to track system activities
    struct UserHistory {
        string actionName;
        uint actionAmount;
        address actionFrom;
        uint actionDate;
    }
    // events to track contract activities 

    event TransferSent (address to, uint amount , uint timestamp);
    event virtualGainSent (address to , uint amount , uint timestamp);
    event RoyaltyGainSent(address to, uint amount , uint timestamp);
    event LevelPurchased (address from, uint amount , uint timestamp);
    event ownerInit (address owner) ;

  // get the fiirst id registered
   function getFirstID () internal view returns(address) {
    return regContract.countIdToAddress(1);
   }


   function purchase (uint level ) public nonReentrant payable {
   // the user must enter the correct level

        require(level > 0 && level < 11, "Level is out of range");

        // the user can't be the 0 address

        require(msg.sender != address(0), "Zero address is not allowed");

        // the user must be regsitered 

        require(regContract.isRegistered(msg.sender), "User is not registered");

        // the value to send must be equal to the price of the level
        require(msg.value == levelPrice[level], "not enougth opBNB");
        
        if (level  > 1 ) {
            // the user must have the previus level activated 
            require(vrMatrix.userLevel(msg.sender)  == level - 1 || userLevel[msg.sender] ==  level - 1, "Previous level not activated");
        }
        // handling user purchase

          if (level == 1) {

            
                 handlePurchase(level) ;

          } else {
              handlePurchaseFromVrData (level) ;
          }
        // after distribution handle updates

      address uplineOfUser = regContract.userUpline(msg.sender);
      uint totalDirect = totalVirtualDirect[uplineOfUser] ;

       if (users[msg.sender].userAddress == address(0) ) {
       // it's the user first time to buy the level ...

       users[msg.sender] = User ({
         userAddress : msg.sender,
         team_Id : totalDirect + 1 ,
         totalIncome : 0 ,
         totalVirtualIncome : 0 , 
         transactionCount : 0 , 
         totalDirect : 0 , 
         lastUpdate : block.timestamp ,
         currentUserLevel : level ,
         firstActivationDate : block.timestamp 

       }) ;


       totalVirtualDirect[uplineOfUser] ++ ;
       virtualDirectsOf[uplineOfUser].push(msg.sender) ;
       numberOfActiveUsers ++ ;
       virtualIds[msg.sender] = numberOfActiveUsers;
       isActive[msg.sender] = true ;
       virtualUplineOf[msg.sender] = uplineOfUser;

       }


userLevel[msg.sender] = level ;
lastUser  = msg.sender ;

totalEarned += msg.value ;

emit LevelPurchased(msg.sender , levelPrice[level], block.timestamp) ;


     
   }

   function purchase_sec_case (address user , uint level ) public nonReentrant onlyOwner  {
   // the user must enter the correct level

        require(level > 0 && level < 11, "Level is out of range");

        // the user can't be the 0 address

        require(user != address(0), "Zero address is not allowed");

        // the user must be regsitered 

        require(regContract.isRegistered(user), "User is not registered");

        
        // after distribution handle updates

      address uplineOfUser = regContract.userUpline(user);
      uint totalDirect = totalVirtualDirect[uplineOfUser] ;

       if (users[user].userAddress == address(0) ) {
       // it's the user first time to buy the level ...

       users[user] = User ({
         userAddress : user,
         team_Id : totalDirect + 1 ,
         totalIncome : 0 ,
         totalVirtualIncome : 0 , 
         transactionCount : 0 , 
         totalDirect : 0 , 
         lastUpdate : block.timestamp ,
         currentUserLevel : level ,
         firstActivationDate : block.timestamp 

       }) ;


       totalVirtualDirect[uplineOfUser] ++ ;
       virtualDirectsOf[uplineOfUser].push(user) ;
       numberOfActiveUsers ++ ;
       virtualIds[user] = numberOfActiveUsers;
       isActive[user] = true ;
       virtualUplineOf[user] = uplineOfUser;

       }
 userLevel[user] = level ;

emit LevelPurchased(user , levelPrice[level], block.timestamp) ;


     
   }


function handlePurchase (uint level) internal {
         address uplineOfUser = regContract.userUpline(msg.sender);
         address [4] memory uplines = getUPlinesArray(uplineOfUser);

        if (uplineOfUser != address(0)) {
            // we get the number of virtual downlines of the upline of this adress
            // and add 1 to get the position of the upcoming user 
            uint directNumber =  totalVirtualDirect[uplineOfUser] + 1;
            // if the upcoming user is odd
            if (directNumber % 2 != 0) {

                // the direct is odd
                // this function will distribute 90% to the direct upline
                // and 10% to the last user has Free income
                distributeDirectIncome ( level , uplines);

            } else {
                distributeToUplines (level , uplines) ;
            }

        } 
}

function getUPlinesArray (address uplineOne) internal view returns (address  [4] memory  ) {
    address [4] memory uplines ;
    uplines[0] = uplineOne;
     // we already have one upline , this function will return 4 uplines
     for (uint i = 1 ;  i < 4 ; i++ ) {
       uplines[i] = regContract.userUpline(uplines[i - 1]);
     }

  return uplines;

}

function distributeDirectIncome ( uint level , address [4] memory  uplines) internal returns(uint ) {
   address firstUpline = uplines[0];
   address currentUpline  ;
   address firstId = getFirstID();
   if (firstUpline == address(0)) {

    currentUpline = firstId;

  distributeFunds(level , currentUpline) ;
    return 0 ;

   }  

  for (uint i = 0 ; i < uplines.length; i ++)   {
    if (hasLevel(level, uplines[i])) {
        currentUpline = uplines[i] ;
        break ;
    }
    if (i == 3) {

        currentUpline = firstId;
    }
  }


  distributeFunds(level , currentUpline) ;
  return 0 ;

}


    function hasLevel (uint level ,address user) internal view returns (bool){

     return vrMatrix.userLevel(user) >= level || userLevel[user] >= level ;



}



// this function transfer the amount to the sponsor who is detecet by the function callert 

function distributeFunds(uint level, address user) internal {
    uint amount = levelPrice[level] ;

    if (user != address(0)) {
        (bool success , ) = user.call{value : amount}("") ;
        require(success, "Transfer to the user failed") ;

         UserHistory memory newHistory = UserHistory ({
         actionName : "Direct Gain" ,
         actionAmount :  amount ,
         actionFrom : msg.sender ,
         actionDate : block.timestamp 
            
         }) ;

       history[user].push(newHistory) ;


            // upldate user state
            users[user].totalIncome += amount ;
            users[user].transactionCount += 1 ;
            users[user].lastUpdate = block.timestamp ;
        

    } else {
        address firstSponsor = getFirstID();
        (bool success2 , ) = firstSponsor.call{value : amount}("");
        require(success2, "An error occured during direct transfer");
    }
    
   emit TransferSent(user, amount, block.timestamp);
        
     } 


// this function send   at the same time to 4 sponsor 25% of the investment if they are available
function distributeToUplines (uint level , address [4] memory uplines) internal {

    uint staticAmount = levelPrice[level] * 25 / 100;
    address initialUpline = getFirstID();

    for (uint i = 0 ; i < uplines.length ; i ++) {
        
          address currentUpline = uplines[i] ;
          address availableUpline;
        if (currentUpline == address(0) || !hasLevel(level, currentUpline)) {
          availableUpline = initialUpline ;
        } else {
          availableUpline = currentUpline ;

        }



        (bool success , ) = availableUpline.call{value :staticAmount }("");
        require(success, "the transfer to the current upline amoung 4 of them failed");
        

         UserHistory memory newHistory = UserHistory ({
         actionName : "Sponsor Gain" ,
         actionAmount :  staticAmount  ,
         actionFrom : msg.sender ,
         actionDate : block.timestamp 
            
         }) ;

       history[availableUpline].push(newHistory);


            // upldate user state
            users[availableUpline].totalIncome += staticAmount;
            users[availableUpline].transactionCount += 1 ;
            users[availableUpline].lastUpdate = block.timestamp ;
            users[availableUpline].totalVirtualIncome += staticAmount;
           emit TransferSent(availableUpline, staticAmount, block.timestamp);


    }
}


function handlePurchaseFromVrData (uint level) internal {

  uint team_idOfUser = users[msg.sender].team_Id ;
     address uplineOfUser = regContract.userUpline(msg.sender);
         address [4] memory uplines = getUPlinesArray(uplineOfUser);

  if (team_idOfUser % 2 != 0) {
    distributeDirectIncome (level , uplines) ;
  } else {
     distributeToUplines(level , uplines) ;
  }

}
 
function getvirtualTeamSize(address user) public view returns (uint256) {
    require(regContract.isRegistered(user), "User not registered");

    uint256 totalTeamSize = _getTotalTeamSize(user);
    return totalTeamSize;
}


function _getTotalTeamSize(address user) internal view returns (uint256) {
    uint256 teamSize = virtualDirectsOf[user].length;

    // Parcours récursif pour compter les downlines des downlines
    for (uint256 i = 0; i < virtualDirectsOf[user].length; i++) {
        teamSize += _getTotalTeamSize(virtualDirectsOf[user][i]);
    }

    return teamSize;
}
  function getStories (address user) external view returns (UserHistory[] memory) {
    return history[user];

   }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LevelPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RoyaltyGainSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TransferSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"ownerInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"virtualGainSent","type":"event"},{"inputs":[],"name":"TOTAL_LEVELS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getStories","outputs":[{"components":[{"internalType":"string","name":"actionName","type":"string"},{"internalType":"uint256","name":"actionAmount","type":"uint256"},{"internalType":"address","name":"actionFrom","type":"address"},{"internalType":"uint256","name":"actionDate","type":"uint256"}],"internalType":"struct VRMatrixSuite.UserHistory[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getvirtualTeamSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"history","outputs":[{"internalType":"string","name":"actionName","type":"string"},{"internalType":"uint256","name":"actionAmount","type":"uint256"},{"internalType":"address","name":"actionFrom","type":"address"},{"internalType":"uint256","name":"actionDate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"levelPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfActiveUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"level","type":"uint256"}],"name":"purchase_sec_case","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"regContract","outputs":[{"internalType":"contract IREG","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalVirtualDirect","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":"address","name":"","type":"address"}],"name":"userLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"team_Id","type":"uint256"},{"internalType":"uint256","name":"totalIncome","type":"uint256"},{"internalType":"uint256","name":"totalVirtualIncome","type":"uint256"},{"internalType":"uint256","name":"transactionCount","type":"uint256"},{"internalType":"uint256","name":"totalDirect","type":"uint256"},{"internalType":"uint256","name":"lastUpdate","type":"uint256"},{"internalType":"uint256","name":"currentUserLevel","type":"uint256"},{"internalType":"uint256","name":"firstActivationDate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"virtualAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"virtualDirectsOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"virtualIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"virtualUplineOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vrMatrix","outputs":[{"internalType":"contract IVRMatrix","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

6080604052600a6007553480156200001657600080fd5b5062000028336200017f60201b60201c565b6001808190555073bbcd14b04924f33c303627578708fd4f51d39383600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a1c20ac67f805a4aabf94cde9c8dc2903de78926600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550674563918244f400006009600060018152602001908152602001600020819055506000600290505b6007548111620001685760026009600060018462000120919062000819565b8152602001908152602001600020546200013b9190620007b8565b600960008381526020019081526020016000208190555080806200015f90620008a6565b91505062000101565b50620001796200024360201b60201c565b6200093d565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000620002556200066060201b60201c565b600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060086000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806101200160405280600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600181526020016000815260200160008152602001600081526020016000815260200142815260200160075481526020014281525060106000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155905050600754600a6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600254600e6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600f6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016002819055507f033adf756bd958e7e4607baacceb41f01f04f86bef905b925c3332140eb8e1d6600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200065591906200077e565b60405180910390a150565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639c28d9c060016040518263ffffffff1660e01b8152600401620006c091906200079b565b60206040518083038186803b158015620006d957600080fd5b505afa158015620006ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000714919062000730565b905090565b6000815190506200072a8162000923565b92915050565b6000602082840312156200074357600080fd5b6000620007538482850162000719565b91505092915050565b620007678162000854565b82525050565b620007788162000892565b82525050565b60006020820190506200079560008301846200075c565b92915050565b6000602082019050620007b260008301846200076d565b92915050565b6000620007c58262000888565b9150620007d28362000888565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200080e576200080d620008f4565b5b828202905092915050565b6000620008268262000888565b9150620008338362000888565b925082821015620008495762000848620008f4565b5b828203905092915050565b6000620008618262000868565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006200089f8262000888565b9050919050565b6000620008b38262000888565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620008e957620008e8620008f4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6200092e8162000854565b81146200093a57600080fd5b50565b614078806200094d6000396000f3fe6080604052600436106101355760003560e01c80638bcfa705116100ab578063aad049b31161006f578063aad049b3146104a7578063af1db4dd146104e4578063b0b95fa21461050f578063dc85fecf1461053a578063efef39a114610577578063f2fde38b1461059357610135565b80638bcfa705146103925780638da5cb5b146103bd5780639f8a13d7146103e8578063a87430ba14610425578063a8950aa41461046a57610135565b80635abe9a06116100fd5780635abe9a06146102455780635dd43796146102825780636c04cbfd146102bf5780636dfa8d99146102fc57806373416fc8146103275780637718f4ec1461035257610135565b80630eb7eb831461013a578063173ef9cb1461016557806322bbb957146101a2578063260f5fe9146101cb578063280e31cc14610208575b600080fd5b34801561014657600080fd5b5061014f6105bc565b60405161015c9190613c3d565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190613284565b6105c2565b6040516101999190613c3d565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c491906132d6565b6105da565b005b3480156101d757600080fd5b506101f260048036038101906101ed919061333b565b610df2565b6040516101ff9190613904565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190613284565b610e25565b60405161023c9190613c3d565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190613284565b610e3d565b6040516102799190613904565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190613284565b610e70565b6040516102b691906139e3565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613284565b61100a565b6040516102f39190613c3d565b60405180910390f35b34801561030857600080fd5b5061031161110c565b60405161031e9190613c3d565b60405180910390f35b34801561033357600080fd5b5061033c611112565b6040516103499190613a20565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906132d6565b611138565b6040516103899493929190613a71565b60405180910390f35b34801561039e57600080fd5b506103a761122d565b6040516103b49190613a3b565b60405180910390f35b3480156103c957600080fd5b506103d2611253565b6040516103df9190613904565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613284565b61127c565b60405161041c9190613a05565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190613284565b61129c565b60405161046199989796959493929190613956565b60405180910390f35b34801561047657600080fd5b50610491600480360381019061048c91906132d6565b61130a565b60405161049e9190613904565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c9919061333b565b611358565b6040516104db9190613c3d565b60405180910390f35b3480156104f057600080fd5b506104f9611370565b6040516105069190613c3d565b60405180910390f35b34801561051b57600080fd5b50610524611376565b6040516105319190613904565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613284565b61139c565b60405161056e9190613c3d565b60405180910390f35b610591600480360381019061058c919061333b565b6113b4565b005b34801561059f57600080fd5b506105ba60048036038101906105b59190613284565b611d64565b005b60075481565b600b6020528060005260406000206000915090505481565b60026001541415610620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061790613c1d565b60405180910390fd5b60026001819055503373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90613bfd565b60405180910390fd5b6000811180156106c65750600b81105b610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc90613b1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076c90613afd565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3c5a547836040518263ffffffff1660e01b81526004016107d09190613904565b60206040518083038186803b1580156107e857600080fd5b505afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190613312565b61085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085690613bbd565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d2c6150846040518263ffffffff1660e01b81526004016108bc9190613904565b60206040518083038186803b1580156108d457600080fd5b505afa1580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906132ad565b90506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff16601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d53576040518061012001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001600183610a1e9190613cc9565b81526020016000815260200160008152602001600081526020016000815260200142815260200184815260200142815250601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155905050600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610b7990613ee5565b9190505550600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060026000815480929190610c3190613ee5565b9190505550600254600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f9349c399944b26d64495956ed0f260c5f0384c3841350ddec39e90c8fbf9992b84600960008681526020019081526020016000205442604051610ddd9392919061391f565b60405180910390a15050600180819055505050565b600d6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610fff5783829060005260206000209060040201604051806080016040529081600082018054610f0490613eb3565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3090613eb3565b8015610f7d5780601f10610f5257610100808354040283529160200191610f7d565b820191906000526020600020905b815481529060010190602001808311610f6057829003601f168201915b50505050508152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505081526020019060010190610ed1565b505050509050919050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3c5a547836040518263ffffffff1660e01b81526004016110679190613904565b60206040518083038186803b15801561107f57600080fd5b505afa158015611093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b79190613312565b6110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90613b5d565b60405180910390fd5b600061110183611e6e565b905080915050919050565b60035481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6011602052816000526040600020818154811061115457600080fd5b90600052602060002090600402016000915091505080600001805461117890613eb3565b80601f01602080910402602001604051908101604052809291908181526020018280546111a490613eb3565b80156111f15780601f106111c6576101008083540402835291602001916111f1565b820191906000526020600020905b8154815290600101906020018083116111d457829003601f168201915b5050505050908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905084565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b60106020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b600c602052816000526040600020818154811061132657600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915090505481565b60025481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915090505481565b600260015414156113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f190613c1d565b60405180910390fd5b60026001819055506000811180156114125750600b81105b611451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144890613b1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890613afd565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3c5a547336040518263ffffffff1660e01b815260040161151c9190613904565b60206040518083038186803b15801561153457600080fd5b505afa158015611548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156c9190613312565b6115ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a290613bbd565b60405180910390fd5b60096000828152602001908152602001600020543414611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613b7d565b60405180910390fd5b6001811115611757576001816116169190613daa565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663280e31cc336040518263ffffffff1660e01b81526004016116719190613904565b60206040518083038186803b15801561168957600080fd5b505afa15801561169d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c19190613364565b148061171757506001816116d59190613daa565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174d90613add565b60405180910390fd5b5b600181141561176e5761176981611fd7565b611778565b6117778161214d565b5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d2c6150336040518263ffffffff1660e01b81526004016117d59190613904565b60206040518083038186803b1580156117ed57600080fd5b505afa158015611801573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182591906132ad565b90506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c6c576040518061012001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016001836119379190613cc9565b81526020016000815260200160008152602001600081526020016000815260200142815260200184815260200142815250601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155905050600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611a9290613ee5565b9190505550600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060026000815480929190611b4a90613ee5565b9190505550600254600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b82600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503460036000828254611d039190613cc9565b925050819055507f9349c399944b26d64495956ed0f260c5f0384c3841350ddec39e90c8fbf9992b33600960008681526020019081526020016000205442604051611d509392919061391f565b60405180910390a150506001808190555050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613bfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5990613b3d565b60405180910390fd5b611e6b81612285565b50565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060005b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611fcd57611fad600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611f7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e6e565b82611fb89190613cc9565b91508080611fc590613ee5565b915050611eb9565b5080915050919050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d2c6150336040518263ffffffff1660e01b81526004016120349190613904565b60206040518083038186803b15801561204c57600080fd5b505afa158015612060573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208491906132ad565b9050600061209182612349565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121485760006001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121159190613cc9565b905060006002826121269190613f2e565b1461213b57612135848361255c565b50612146565b61214584836126d1565b5b505b505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d2c6150336040518263ffffffff1660e01b81526004016121f19190613904565b60206040518083038186803b15801561220957600080fd5b505afa15801561221d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224191906132ad565b9050600061224e82612349565b9050600060028461225f9190613f2e565b146122745761226e848261255c565b5061227f565b61227e84826126d1565b5b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612351613156565b612359613156565b8281600060048110612394577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600190505b600481101561255257600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d2c6150836001846124279190613daa565b6004811061245e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201516040518263ffffffff1660e01b815260040161247f9190613904565b60206040518083038186803b15801561249757600080fd5b505afa1580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf91906132ad565b828260048110612508577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061254a90613ee5565b9150506123d2565b5080915050919050565b60008082600060048110612599577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015190506000806125ab612b5a565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125fb578091506125ef8683612c0d565b600093505050506126cb565b60005b60048110156126b85761264e87878360048110612644577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151613054565b156126985785816004811061268c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015192506126b8565b60038114156126a5578192505b80806126b090613ee5565b9150506125fe565b506126c38683612c0d565b600093505050505b92915050565b60006064601960096000868152602001908152602001600020546126f59190613d50565b6126ff9190613d1f565b9050600061270b612b5a565b905060005b6004811015612b53576000848260048110612754577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151905060008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061279e575061279c8783613054565b155b156127ab578390506127af565b8190505b60008173ffffffffffffffffffffffffffffffffffffffff16866040516127d5906138ef565b60006040518083038185875af1925050503d8060008114612812576040519150601f19603f3d011682016040523d82523d6000602084013e612817565b606091505b505090508061285b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285290613b9d565b60405180910390fd5b600060405180608001604052806040518060400160405280600c81526020017f53706f6e736f72204761696e000000000000000000000000000000000000000081525081526020018881526020013373ffffffffffffffffffffffffffffffffffffffff168152602001428152509050601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000019080519060200190612950929190613178565b506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030155505086601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016000828254612a009190613cc9565b925050819055506001601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004016000828254612a5a9190613cc9565b9250508190555042601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018190555086601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003016000828254612afa9190613cc9565b925050819055507f0f4335f2702b18df76961ea63280f8e4a2a2c5b6015553addeb2d97ac590d4c0838842604051612b349392919061391f565b60405180910390a1505050508080612b4b90613ee5565b915050612710565b5050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639c28d9c060016040518263ffffffff1660e01b8152600401612bb89190613a56565b60206040518083038186803b158015612bd057600080fd5b505afa158015612be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0891906132ad565b905090565b600060096000848152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f595760008273ffffffffffffffffffffffffffffffffffffffff1682604051612c7f906138ef565b60006040518083038185875af1925050503d8060008114612cbc576040519150601f19603f3d011682016040523d82523d6000602084013e612cc1565b606091505b5050905080612d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfc90613bdd565b60405180910390fd5b600060405180608001604052806040518060400160405280600b81526020017f446972656374204761696e00000000000000000000000000000000000000000081525081526020018481526020013373ffffffffffffffffffffffffffffffffffffffff168152602001428152509050601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000019080519060200190612dfa929190613178565b506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030155505082601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016000828254612eaa9190613cc9565b925050819055506001601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004016000828254612f049190613cc9565b9250508190555042601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505050613014565b6000612f63612b5a565b905060008173ffffffffffffffffffffffffffffffffffffffff1683604051612f8b906138ef565b60006040518083038185875af1925050503d8060008114612fc8576040519150601f19603f3d011682016040523d82523d6000602084013e612fcd565b606091505b5050905080613011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300890613abd565b60405180910390fd5b50505b7f0f4335f2702b18df76961ea63280f8e4a2a2c5b6015553addeb2d97ac590d4c08282426040516130479392919061391f565b60405180910390a1505050565b600082600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663280e31cc846040518263ffffffff1660e01b81526004016130b29190613904565b60206040518083038186803b1580156130ca57600080fd5b505afa1580156130de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131029190613364565b10158061314e575082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905092915050565b6040518060800160405280600490602082028036833780820191505090505090565b82805461318490613eb3565b90600052602060002090601f0160209004810192826131a657600085556131ed565b82601f106131bf57805160ff19168380011785556131ed565b828001600101855582156131ed579182015b828111156131ec5782518255916020019190600101906131d1565b5b5090506131fa91906131fe565b5090565b5b808211156132175760008160009055506001016131ff565b5090565b60008135905061322a81613ffd565b92915050565b60008151905061323f81613ffd565b92915050565b60008151905061325481614014565b92915050565b6000813590506132698161402b565b92915050565b60008151905061327e8161402b565b92915050565b60006020828403121561329657600080fd5b60006132a48482850161321b565b91505092915050565b6000602082840312156132bf57600080fd5b60006132cd84828501613230565b91505092915050565b600080604083850312156132e957600080fd5b60006132f78582860161321b565b92505060206133088582860161325a565b9150509250929050565b60006020828403121561332457600080fd5b600061333284828501613245565b91505092915050565b60006020828403121561334d57600080fd5b600061335b8482850161325a565b91505092915050565b60006020828403121561337657600080fd5b60006133848482850161326f565b91505092915050565b6000613399838361386e565b905092915050565b6133aa81613dde565b82525050565b6133b981613dde565b82525050565b60006133ca82613c68565b6133d48185613c8b565b9350836020820285016133e685613c58565b8060005b858110156134225784840389528151613403858261338d565b945061340e83613c7e565b925060208a019950506001810190506133ea565b50829750879550505050505092915050565b61343d81613df0565b82525050565b61344c81613e26565b82525050565b61345b81613e4a565b82525050565b61346a81613e6e565b82525050565b600061347b82613c73565b6134858185613ca7565b9350613495818560208601613e80565b61349e81613fec565b840191505092915050565b60006134b482613c73565b6134be8185613cb8565b93506134ce818560208601613e80565b6134d781613fec565b840191505092915050565b60006134ef602783613cb8565b91507f416e206572726f72206f63637572656420647572696e6720646972656374207460008301527f72616e73666572000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613555601c83613cb8565b91507f50726576696f7573206c6576656c206e6f7420616374697661746564000000006000830152602082019050919050565b6000613595601b83613cb8565b91507f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006000830152602082019050919050565b60006135d5601583613cb8565b91507f4c6576656c206973206f7574206f662072616e676500000000000000000000006000830152602082019050919050565b6000613615602683613cb8565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061367b601383613cb8565b91507f55736572206e6f742072656769737465726564000000000000000000000000006000830152602082019050919050565b60006136bb601183613cb8565b91507f6e6f7420656e6f75677468206f70424e420000000000000000000000000000006000830152602082019050919050565b60006136fb603a83613cb8565b91507f746865207472616e7366657220746f207468652063757272656e742075706c6960008301527f6e6520616d6f756e672034206f66207468656d206661696c65640000000000006020830152604082019050919050565b6000613761601683613cb8565b91507f55736572206973206e6f742072656769737465726564000000000000000000006000830152602082019050919050565b60006137a1601b83613cb8565b91507f5472616e7366657220746f207468652075736572206661696c656400000000006000830152602082019050919050565b60006137e1602083613cb8565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613821600083613c9c565b9150600082019050919050565b600061383b601f83613cb8565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000608083016000830151848203600086015261388b8282613470565b91505060208301516138a060208601826138d1565b5060408301516138b360408601826133a1565b5060608301516138c660608601826138d1565b508091505092915050565b6138da81613e1c565b82525050565b6138e981613e1c565b82525050565b60006138fa82613814565b9150819050919050565b600060208201905061391960008301846133b0565b92915050565b600060608201905061393460008301866133b0565b61394160208301856138e0565b61394e60408301846138e0565b949350505050565b60006101208201905061396c600083018c6133b0565b613979602083018b6138e0565b613986604083018a6138e0565b61399360608301896138e0565b6139a060808301886138e0565b6139ad60a08301876138e0565b6139ba60c08301866138e0565b6139c760e08301856138e0565b6139d56101008301846138e0565b9a9950505050505050505050565b600060208201905081810360008301526139fd81846133bf565b905092915050565b6000602082019050613a1a6000830184613434565b92915050565b6000602082019050613a356000830184613443565b92915050565b6000602082019050613a506000830184613452565b92915050565b6000602082019050613a6b6000830184613461565b92915050565b60006080820190508181036000830152613a8b81876134a9565b9050613a9a60208301866138e0565b613aa760408301856133b0565b613ab460608301846138e0565b95945050505050565b60006020820190508181036000830152613ad6816134e2565b9050919050565b60006020820190508181036000830152613af681613548565b9050919050565b60006020820190508181036000830152613b1681613588565b9050919050565b60006020820190508181036000830152613b36816135c8565b9050919050565b60006020820190508181036000830152613b5681613608565b9050919050565b60006020820190508181036000830152613b768161366e565b9050919050565b60006020820190508181036000830152613b96816136ae565b9050919050565b60006020820190508181036000830152613bb6816136ee565b9050919050565b60006020820190508181036000830152613bd681613754565b9050919050565b60006020820190508181036000830152613bf681613794565b9050919050565b60006020820190508181036000830152613c16816137d4565b9050919050565b60006020820190508181036000830152613c368161382e565b9050919050565b6000602082019050613c5260008301846138e0565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613cd482613e1c565b9150613cdf83613e1c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d1457613d13613f5f565b5b828201905092915050565b6000613d2a82613e1c565b9150613d3583613e1c565b925082613d4557613d44613f8e565b5b828204905092915050565b6000613d5b82613e1c565b9150613d6683613e1c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d9f57613d9e613f5f565b5b828202905092915050565b6000613db582613e1c565b9150613dc083613e1c565b925082821015613dd357613dd2613f5f565b5b828203905092915050565b6000613de982613dfc565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613e3182613e38565b9050919050565b6000613e4382613dfc565b9050919050565b6000613e5582613e5c565b9050919050565b6000613e6782613dfc565b9050919050565b6000613e7982613e1c565b9050919050565b60005b83811015613e9e578082015181840152602081019050613e83565b83811115613ead576000848401525b50505050565b60006002820490506001821680613ecb57607f821691505b60208210811415613edf57613ede613fbd565b5b50919050565b6000613ef082613e1c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f2357613f22613f5f565b5b600182019050919050565b6000613f3982613e1c565b9150613f4483613e1c565b925082613f5457613f53613f8e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61400681613dde565b811461401157600080fd5b50565b61401d81613df0565b811461402857600080fd5b50565b61403481613e1c565b811461403f57600080fd5b5056fea264697066735822122081a7256ee88c6f1eac8ee30db7c9be5fc6f2463cdc6cb32d36a223f6a568b83964736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101355760003560e01c80638bcfa705116100ab578063aad049b31161006f578063aad049b3146104a7578063af1db4dd146104e4578063b0b95fa21461050f578063dc85fecf1461053a578063efef39a114610577578063f2fde38b1461059357610135565b80638bcfa705146103925780638da5cb5b146103bd5780639f8a13d7146103e8578063a87430ba14610425578063a8950aa41461046a57610135565b80635abe9a06116100fd5780635abe9a06146102455780635dd43796146102825780636c04cbfd146102bf5780636dfa8d99146102fc57806373416fc8146103275780637718f4ec1461035257610135565b80630eb7eb831461013a578063173ef9cb1461016557806322bbb957146101a2578063260f5fe9146101cb578063280e31cc14610208575b600080fd5b34801561014657600080fd5b5061014f6105bc565b60405161015c9190613c3d565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190613284565b6105c2565b6040516101999190613c3d565b60405180910390f35b3480156101ae57600080fd5b506101c960048036038101906101c491906132d6565b6105da565b005b3480156101d757600080fd5b506101f260048036038101906101ed919061333b565b610df2565b6040516101ff9190613904565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190613284565b610e25565b60405161023c9190613c3d565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190613284565b610e3d565b6040516102799190613904565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190613284565b610e70565b6040516102b691906139e3565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613284565b61100a565b6040516102f39190613c3d565b60405180910390f35b34801561030857600080fd5b5061031161110c565b60405161031e9190613c3d565b60405180910390f35b34801561033357600080fd5b5061033c611112565b6040516103499190613a20565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906132d6565b611138565b6040516103899493929190613a71565b60405180910390f35b34801561039e57600080fd5b506103a761122d565b6040516103b49190613a3b565b60405180910390f35b3480156103c957600080fd5b506103d2611253565b6040516103df9190613904565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190613284565b61127c565b60405161041c9190613a05565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190613284565b61129c565b60405161046199989796959493929190613956565b60405180910390f35b34801561047657600080fd5b50610491600480360381019061048c91906132d6565b61130a565b60405161049e9190613904565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c9919061333b565b611358565b6040516104db9190613c3d565b60405180910390f35b3480156104f057600080fd5b506104f9611370565b6040516105069190613c3d565b60405180910390f35b34801561051b57600080fd5b50610524611376565b6040516105319190613904565b60405180910390f35b34801561054657600080fd5b50610561600480360381019061055c9190613284565b61139c565b60405161056e9190613c3d565b60405180910390f35b610591600480360381019061058c919061333b565b6113b4565b005b34801561059f57600080fd5b506105ba60048036038101906105b59190613284565b611d64565b005b60075481565b600b6020528060005260406000206000915090505481565b60026001541415610620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061790613c1d565b60405180910390fd5b60026001819055503373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90613bfd565b60405180910390fd5b6000811180156106c65750600b81105b610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc90613b1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076c90613afd565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3c5a547836040518263ffffffff1660e01b81526004016107d09190613904565b60206040518083038186803b1580156107e857600080fd5b505afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190613312565b61085f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085690613bbd565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d2c6150846040518263ffffffff1660e01b81526004016108bc9190613904565b60206040518083038186803b1580156108d457600080fd5b505afa1580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906132ad565b90506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff16601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d53576040518061012001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001600183610a1e9190613cc9565b81526020016000815260200160008152602001600081526020016000815260200142815260200184815260200142815250601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155905050600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610b7990613ee5565b9190505550600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060026000815480929190610c3190613ee5565b9190505550600254600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f9349c399944b26d64495956ed0f260c5f0384c3841350ddec39e90c8fbf9992b84600960008681526020019081526020016000205442604051610ddd9392919061391f565b60405180910390a15050600180819055505050565b600d6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a6020528060005260406000206000915090505481565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610fff5783829060005260206000209060040201604051806080016040529081600082018054610f0490613eb3565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3090613eb3565b8015610f7d5780601f10610f5257610100808354040283529160200191610f7d565b820191906000526020600020905b815481529060010190602001808311610f6057829003601f168201915b50505050508152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160038201548152505081526020019060010190610ed1565b505050509050919050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3c5a547836040518263ffffffff1660e01b81526004016110679190613904565b60206040518083038186803b15801561107f57600080fd5b505afa158015611093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b79190613312565b6110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90613b5d565b60405180910390fd5b600061110183611e6e565b905080915050919050565b60035481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6011602052816000526040600020818154811061115457600080fd5b90600052602060002090600402016000915091505080600001805461117890613eb3565b80601f01602080910402602001604051908101604052809291908181526020018280546111a490613eb3565b80156111f15780601f106111c6576101008083540402835291602001916111f1565b820191906000526020600020905b8154815290600101906020018083116111d457829003601f168201915b5050505050908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905084565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b60106020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b600c602052816000526040600020818154811061132657600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915090505481565b60025481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e6020528060005260406000206000915090505481565b600260015414156113fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f190613c1d565b60405180910390fd5b60026001819055506000811180156114125750600b81105b611451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144890613b1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b890613afd565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c3c5a547336040518263ffffffff1660e01b815260040161151c9190613904565b60206040518083038186803b15801561153457600080fd5b505afa158015611548573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156c9190613312565b6115ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a290613bbd565b60405180910390fd5b60096000828152602001908152602001600020543414611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613b7d565b60405180910390fd5b6001811115611757576001816116169190613daa565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663280e31cc336040518263ffffffff1660e01b81526004016116719190613904565b60206040518083038186803b15801561168957600080fd5b505afa15801561169d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c19190613364565b148061171757506001816116d59190613daa565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174d90613add565b60405180910390fd5b5b600181141561176e5761176981611fd7565b611778565b6117778161214d565b5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d2c6150336040518263ffffffff1660e01b81526004016117d59190613904565b60206040518083038186803b1580156117ed57600080fd5b505afa158015611801573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182591906132ad565b90506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c6c576040518061012001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020016001836119379190613cc9565b81526020016000815260200160008152602001600081526020016000815260200142815260200184815260200142815250601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155905050600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611a9290613ee5565b9190505550600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060026000815480929190611b4a90613ee5565b9190505550600254600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b82600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503460036000828254611d039190613cc9565b925050819055507f9349c399944b26d64495956ed0f260c5f0384c3841350ddec39e90c8fbf9992b33600960008681526020019081526020016000205442604051611d509392919061391f565b60405180910390a150506001808190555050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de990613bfd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5990613b3d565b60405180910390fd5b611e6b81612285565b50565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060005b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611fcd57611fad600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110611f7d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611e6e565b82611fb89190613cc9565b91508080611fc590613ee5565b915050611eb9565b5080915050919050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d2c6150336040518263ffffffff1660e01b81526004016120349190613904565b60206040518083038186803b15801561204c57600080fd5b505afa158015612060573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208491906132ad565b9050600061209182612349565b9050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121485760006001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121159190613cc9565b905060006002826121269190613f2e565b1461213b57612135848361255c565b50612146565b61214584836126d1565b5b505b505050565b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d2c6150336040518263ffffffff1660e01b81526004016121f19190613904565b60206040518083038186803b15801561220957600080fd5b505afa15801561221d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224191906132ad565b9050600061224e82612349565b9050600060028461225f9190613f2e565b146122745761226e848261255c565b5061227f565b61227e84826126d1565b5b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612351613156565b612359613156565b8281600060048110612394577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600190505b600481101561255257600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639d2c6150836001846124279190613daa565b6004811061245e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200201516040518263ffffffff1660e01b815260040161247f9190613904565b60206040518083038186803b15801561249757600080fd5b505afa1580156124ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124cf91906132ad565b828260048110612508577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808061254a90613ee5565b9150506123d2565b5080915050919050565b60008082600060048110612599577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015190506000806125ab612b5a565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125fb578091506125ef8683612c0d565b600093505050506126cb565b60005b60048110156126b85761264e87878360048110612644577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151613054565b156126985785816004811061268c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002015192506126b8565b60038114156126a5578192505b80806126b090613ee5565b9150506125fe565b506126c38683612c0d565b600093505050505b92915050565b60006064601960096000868152602001908152602001600020546126f59190613d50565b6126ff9190613d1f565b9050600061270b612b5a565b905060005b6004811015612b53576000848260048110612754577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020020151905060008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061279e575061279c8783613054565b155b156127ab578390506127af565b8190505b60008173ffffffffffffffffffffffffffffffffffffffff16866040516127d5906138ef565b60006040518083038185875af1925050503d8060008114612812576040519150601f19603f3d011682016040523d82523d6000602084013e612817565b606091505b505090508061285b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285290613b9d565b60405180910390fd5b600060405180608001604052806040518060400160405280600c81526020017f53706f6e736f72204761696e000000000000000000000000000000000000000081525081526020018881526020013373ffffffffffffffffffffffffffffffffffffffff168152602001428152509050601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000019080519060200190612950929190613178565b506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030155505086601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016000828254612a009190613cc9565b925050819055506001601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004016000828254612a5a9190613cc9565b9250508190555042601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018190555086601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003016000828254612afa9190613cc9565b925050819055507f0f4335f2702b18df76961ea63280f8e4a2a2c5b6015553addeb2d97ac590d4c0838842604051612b349392919061391f565b60405180910390a1505050508080612b4b90613ee5565b915050612710565b5050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639c28d9c060016040518263ffffffff1660e01b8152600401612bb89190613a56565b60206040518083038186803b158015612bd057600080fd5b505afa158015612be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0891906132ad565b905090565b600060096000848152602001908152602001600020549050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f595760008273ffffffffffffffffffffffffffffffffffffffff1682604051612c7f906138ef565b60006040518083038185875af1925050503d8060008114612cbc576040519150601f19603f3d011682016040523d82523d6000602084013e612cc1565b606091505b5050905080612d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfc90613bdd565b60405180910390fd5b600060405180608001604052806040518060400160405280600b81526020017f446972656374204761696e00000000000000000000000000000000000000000081525081526020018481526020013373ffffffffffffffffffffffffffffffffffffffff168152602001428152509050601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000019080519060200190612dfa929190613178565b506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030155505082601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016000828254612eaa9190613cc9565b925050819055506001601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004016000828254612f049190613cc9565b9250508190555042601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505050613014565b6000612f63612b5a565b905060008173ffffffffffffffffffffffffffffffffffffffff1683604051612f8b906138ef565b60006040518083038185875af1925050503d8060008114612fc8576040519150601f19603f3d011682016040523d82523d6000602084013e612fcd565b606091505b5050905080613011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300890613abd565b60405180910390fd5b50505b7f0f4335f2702b18df76961ea63280f8e4a2a2c5b6015553addeb2d97ac590d4c08282426040516130479392919061391f565b60405180910390a1505050565b600082600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663280e31cc846040518263ffffffff1660e01b81526004016130b29190613904565b60206040518083038186803b1580156130ca57600080fd5b505afa1580156130de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131029190613364565b10158061314e575082600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905092915050565b6040518060800160405280600490602082028036833780820191505090505090565b82805461318490613eb3565b90600052602060002090601f0160209004810192826131a657600085556131ed565b82601f106131bf57805160ff19168380011785556131ed565b828001600101855582156131ed579182015b828111156131ec5782518255916020019190600101906131d1565b5b5090506131fa91906131fe565b5090565b5b808211156132175760008160009055506001016131ff565b5090565b60008135905061322a81613ffd565b92915050565b60008151905061323f81613ffd565b92915050565b60008151905061325481614014565b92915050565b6000813590506132698161402b565b92915050565b60008151905061327e8161402b565b92915050565b60006020828403121561329657600080fd5b60006132a48482850161321b565b91505092915050565b6000602082840312156132bf57600080fd5b60006132cd84828501613230565b91505092915050565b600080604083850312156132e957600080fd5b60006132f78582860161321b565b92505060206133088582860161325a565b9150509250929050565b60006020828403121561332457600080fd5b600061333284828501613245565b91505092915050565b60006020828403121561334d57600080fd5b600061335b8482850161325a565b91505092915050565b60006020828403121561337657600080fd5b60006133848482850161326f565b91505092915050565b6000613399838361386e565b905092915050565b6133aa81613dde565b82525050565b6133b981613dde565b82525050565b60006133ca82613c68565b6133d48185613c8b565b9350836020820285016133e685613c58565b8060005b858110156134225784840389528151613403858261338d565b945061340e83613c7e565b925060208a019950506001810190506133ea565b50829750879550505050505092915050565b61343d81613df0565b82525050565b61344c81613e26565b82525050565b61345b81613e4a565b82525050565b61346a81613e6e565b82525050565b600061347b82613c73565b6134858185613ca7565b9350613495818560208601613e80565b61349e81613fec565b840191505092915050565b60006134b482613c73565b6134be8185613cb8565b93506134ce818560208601613e80565b6134d781613fec565b840191505092915050565b60006134ef602783613cb8565b91507f416e206572726f72206f63637572656420647572696e6720646972656374207460008301527f72616e73666572000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613555601c83613cb8565b91507f50726576696f7573206c6576656c206e6f7420616374697661746564000000006000830152602082019050919050565b6000613595601b83613cb8565b91507f5a65726f2061646472657373206973206e6f7420616c6c6f77656400000000006000830152602082019050919050565b60006135d5601583613cb8565b91507f4c6576656c206973206f7574206f662072616e676500000000000000000000006000830152602082019050919050565b6000613615602683613cb8565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061367b601383613cb8565b91507f55736572206e6f742072656769737465726564000000000000000000000000006000830152602082019050919050565b60006136bb601183613cb8565b91507f6e6f7420656e6f75677468206f70424e420000000000000000000000000000006000830152602082019050919050565b60006136fb603a83613cb8565b91507f746865207472616e7366657220746f207468652063757272656e742075706c6960008301527f6e6520616d6f756e672034206f66207468656d206661696c65640000000000006020830152604082019050919050565b6000613761601683613cb8565b91507f55736572206973206e6f742072656769737465726564000000000000000000006000830152602082019050919050565b60006137a1601b83613cb8565b91507f5472616e7366657220746f207468652075736572206661696c656400000000006000830152602082019050919050565b60006137e1602083613cb8565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613821600083613c9c565b9150600082019050919050565b600061383b601f83613cb8565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000608083016000830151848203600086015261388b8282613470565b91505060208301516138a060208601826138d1565b5060408301516138b360408601826133a1565b5060608301516138c660608601826138d1565b508091505092915050565b6138da81613e1c565b82525050565b6138e981613e1c565b82525050565b60006138fa82613814565b9150819050919050565b600060208201905061391960008301846133b0565b92915050565b600060608201905061393460008301866133b0565b61394160208301856138e0565b61394e60408301846138e0565b949350505050565b60006101208201905061396c600083018c6133b0565b613979602083018b6138e0565b613986604083018a6138e0565b61399360608301896138e0565b6139a060808301886138e0565b6139ad60a08301876138e0565b6139ba60c08301866138e0565b6139c760e08301856138e0565b6139d56101008301846138e0565b9a9950505050505050505050565b600060208201905081810360008301526139fd81846133bf565b905092915050565b6000602082019050613a1a6000830184613434565b92915050565b6000602082019050613a356000830184613443565b92915050565b6000602082019050613a506000830184613452565b92915050565b6000602082019050613a6b6000830184613461565b92915050565b60006080820190508181036000830152613a8b81876134a9565b9050613a9a60208301866138e0565b613aa760408301856133b0565b613ab460608301846138e0565b95945050505050565b60006020820190508181036000830152613ad6816134e2565b9050919050565b60006020820190508181036000830152613af681613548565b9050919050565b60006020820190508181036000830152613b1681613588565b9050919050565b60006020820190508181036000830152613b36816135c8565b9050919050565b60006020820190508181036000830152613b5681613608565b9050919050565b60006020820190508181036000830152613b768161366e565b9050919050565b60006020820190508181036000830152613b96816136ae565b9050919050565b60006020820190508181036000830152613bb6816136ee565b9050919050565b60006020820190508181036000830152613bd681613754565b9050919050565b60006020820190508181036000830152613bf681613794565b9050919050565b60006020820190508181036000830152613c16816137d4565b9050919050565b60006020820190508181036000830152613c368161382e565b9050919050565b6000602082019050613c5260008301846138e0565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613cd482613e1c565b9150613cdf83613e1c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d1457613d13613f5f565b5b828201905092915050565b6000613d2a82613e1c565b9150613d3583613e1c565b925082613d4557613d44613f8e565b5b828204905092915050565b6000613d5b82613e1c565b9150613d6683613e1c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613d9f57613d9e613f5f565b5b828202905092915050565b6000613db582613e1c565b9150613dc083613e1c565b925082821015613dd357613dd2613f5f565b5b828203905092915050565b6000613de982613dfc565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613e3182613e38565b9050919050565b6000613e4382613dfc565b9050919050565b6000613e5582613e5c565b9050919050565b6000613e6782613dfc565b9050919050565b6000613e7982613e1c565b9050919050565b60005b83811015613e9e578082015181840152602081019050613e83565b83811115613ead576000848401525b50505050565b60006002820490506001821680613ecb57607f821691505b60208210811415613edf57613ede613fbd565b5b50919050565b6000613ef082613e1c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f2357613f22613f5f565b5b600182019050919050565b6000613f3982613e1c565b9150613f4483613e1c565b925082613f5457613f53613f8e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b61400681613dde565b811461401157600080fd5b50565b61401d81613df0565b811461402857600080fd5b50565b61403481613e1c565b811461403f57600080fd5b5056fea264697066735822122081a7256ee88c6f1eac8ee30db7c9be5fc6f2463cdc6cb32d36a223f6a568b83964736f6c63430008000033

Deployed Bytecode Sourcemap

1990:12696:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2241:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3718:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7351:1490;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3837:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3669:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3564:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14567:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13962:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2113:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2144;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4038:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;2204:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;397:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3943:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3993:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;3776:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3622:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2075:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2174:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3893:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5158:2186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;609:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2241:29;;;;:::o;3718:52::-;;;;;;;;;;;;;;;;;:::o;7351:1490::-;1205:1;1321:7;;:19;;1313:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1205:1;1387:7;:18;;;;534:10:::1;524:20;;:6;::::0;::::1;;;;;;;;:20;;;516:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7512:1:::2;7504:5;:9;:23;;;;;7525:2;7517:5;:10;7504:23;7496:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;7636:1;7620:18;;:4;:18;;;;7612:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;7734:11;;;;;;;;;;;:24;;;7759:4;7734:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7726:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7860:20;7883:11;;;;;;;;;;;:22;;;7906:4;7883:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7860:51;;7920:16;7939:18;:32;7958:12;7939:32;;;;;;;;;;;;;;;;7920:51;;8023:1;7988:37;;:5;:11;7994:4;7988:11;;;;;;;;;;;;;;;:23;;;;;;;;;;;;:37;;;7984:744;;;8111:342;;;;;;;;8143:4;8111:342;;;;;;8183:1;8169:11;:15;;;;:::i;:::-;8111:342;;;;8211:1;8111:342;;;;8246:1;8111:342;;;;8280:1;8111:342;;;;8309:1;8111:342;;;;8337:15;8111:342;;;;8384:5;8111:342;;;;8424:15;8111:342;;::::0;8097:5:::2;:11;8103:4;8097:11;;;;;;;;;;;;;;;:356;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8468:18;:32;8487:12;8468:32;;;;;;;;;;;;;;;;:35;;;;;;;;;:::i;:::-;;;;;;8514:16;:30;8531:12;8514:30;;;;;;;;;;;;;;;8550:4;8514:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8566:19;;:22;;;;;;;;;:::i;:::-;;;;;;8618:19;;8599:10;:16;8610:4;8599:16;;;;;;;;;;;;;;;:38;;;;8664:4;8647:8;:14;8656:4;8647:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;8703:12;8679:15;:21;8695:4;8679:21;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;7984:744;8749:5;8731:9;:15;8741:4;8731:15;;;;;;;;;;;;;;;:23;;;;8765:57;8780:4;8787:10;:17;8798:5;8787:17;;;;;;;;;;;;8806:15;8765:57;;;;;;;;:::i;:::-;;;;;;;;592:1;;1161::::0;1428:7;:22;;;;7351:1490;;:::o;3837:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;3669:43::-;;;;;;;;;;;;;;;;;:::o;3564:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;14567:116::-;14625:20;14661:7;:13;14669:4;14661:13;;;;;;;;;;;;;;;14654:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14567:116;;;:::o;13962:228::-;14025:7;14049:11;;;;;;;;;;;:24;;;14074:4;14049:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14041:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;14112:21;14136:23;14154:4;14136:17;:23::i;:::-;14112:47;;14173:13;14166:20;;;13962:228;;;:::o;2113:23::-;;;;:::o;2144:::-;;;;;;;;;;;;;:::o;4038:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2204:26::-;;;;;;;;;;;;;:::o;397:79::-;435:7;462:6;;;;;;;;;;;455:13;;397:79;:::o;3943:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;3993:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3776:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3622:41::-;;;;;;;;;;;;;;;;;:::o;2075:31::-;;;;:::o;2174:23::-;;;;;;;;;;;;;:::o;3893:44::-;;;;;;;;;;;;;;;;;:::o;5158:2186::-;1205:1;1321:7;;:19;;1313:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1205:1;1387:7;:18;;;;5292:1:::1;5284:5;:9;:23;;;;;5305:2;5297:5;:10;5284:23;5276:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;5422:1;5400:24;;:10;:24;;;;5392:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;5520:11;;;;;;;;;;;:24;;;5545:10;5520:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5512:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5687:10;:17;5698:5;5687:17;;;;;;;;;;;;5674:9;:30;5666:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;5760:1;5751:5;:10;5747:232;;;5894:1;5886:5;:9;;;;:::i;:::-;5851:8;;;;;;;;;;;:18;;;5870:10;5851:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;:83;;;;5933:1;5925:5;:9;;;;:::i;:::-;5899;:21;5909:10;5899:21;;;;;;;;;;;;;;;;:35;5851:83;5843:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;5747:232;6041:1;6032:5;:10;6028:160;;;6080:21;6095:5;6080:14;:21::i;:::-;6028:160;;;6141:32;6167:5;6141:24;:32::i;:::-;6028:160;6244:20;6267:11;;;;;;;;;;;:22;;;6290:10;6267:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6244:57;;6310:16;6329:18;:32;6348:12;6329:32;;;;;;;;;;;;;;;;6310:51;;6419:1;6378:43;;:5;:17;6384:10;6378:17;;;;;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;6374:786;;;6513:348;;;;;;;;6545:10;6513:348;;;;;;6591:1;6577:11;:15;;;;:::i;:::-;6513:348;;;;6619:1;6513:348;;;;6654:1;6513:348;;;;6688:1;6513:348;;;;6717:1;6513:348;;;;6745:15;6513:348;;;;6792:5;6513:348;;;;6832:15;6513:348;;::::0;6493:5:::1;:17;6499:10;6493:17;;;;;;;;;;;;;;;:368;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6876:18;:32;6895:12;6876:32;;;;;;;;;;;;;;;;:35;;;;;;;;;:::i;:::-;;;;;;6922:16;:30;6939:12;6922:30;;;;;;;;;;;;;;;6958:10;6922:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6980:19;;:22;;;;;;;;;:::i;:::-;;;;;;7038:19;;7013:10;:22;7024:10;7013:22;;;;;;;;;;;;;;;:44;;;;7090:4;7067:8;:20;7076:10;7067:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;7135:12;7105:15;:27;7121:10;7105:27;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;6374:786;7190:5;7166:9;:21;7176:10;7166:21;;;;;;;;;;;;;;;:29;;;;7211:10;7199:8;;:22;;;;;;;;;;;;;;;;;;7242:9;7227:11;;:24;;;;;;;:::i;:::-;;;;;;;;7262:63;7277:10;7290;:17;7301:5;7290:17;;;;;;;;;;;;7309:15;7262:63;;;;;;;;:::i;:::-;;;;;;;;1416:1;;1161::::0;1428:7;:22;;;;5158:2186;:::o;609:193::-;534:10;524:20;;:6;;;;;;;;;;:20;;;516:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;710:1:::1;690:22;;:8;:22;;;;682:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;766:28;785:8;766:18;:28::i;:::-;609:193:::0;:::o;14196:367::-;14260:7;14276:16;14295;:22;14312:4;14295:22;;;;;;;;;;;;;;;:29;;;;14276:48;;14406:9;14401:135;14425:16;:22;14442:4;14425:22;;;;;;;;;;;;;;;:29;;;;14421:1;:33;14401:135;;;14484:44;14502:16;:22;14519:4;14502:22;;;;;;;;;;;;;;;14525:1;14502:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14484:17;:44::i;:::-;14472:56;;;;;:::i;:::-;;;14456:3;;;;;:::i;:::-;;;;14401:135;;;;14551:8;14544:15;;;14196:367;;;:::o;8847:890::-;8905:20;8928:11;;;;;;;;;;;:22;;;8951:10;8928:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8905:57;;8974:26;9003:29;9019:12;9003:15;:29::i;:::-;8974:58;;9073:1;9049:26;;:12;:26;;;9045:688;;9244:17;9300:1;9265:18;:32;9284:12;9265:32;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;9244:57;;9384:1;9379;9364:12;:16;;;;:::i;:::-;:21;9360:360;;9582:41;9607:5;9615:7;9582:22;:41::i;:::-;;9360:360;;;9666:37;9687:5;9695:7;9666:19;:37::i;:::-;9360:360;9045:688;;8847:890;;;:::o;13561:396::-;13624:18;13645:5;:17;13651:10;13645:17;;;;;;;;;;;;;;;:25;;;13624:46;;13679:20;13702:11;;;;;;;;;;;:22;;;13725:10;13702:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13679:57;;13748:26;13777:29;13793:12;13777:15;:29::i;:::-;13748:58;;13838:1;13833;13817:13;:17;;;;:::i;:::-;:22;13813:139;;13848:40;13872:5;13880:7;13848:22;:40::i;:::-;;13813:139;;;13909:36;13929:5;13937:7;13909:19;:36::i;:::-;13813:139;13561:396;;;;:::o;810:183::-;876:16;895:6;;;;;;;;;;;876:25;;921:8;912:6;;:17;;;;;;;;;;;;;;;;;;976:8;945:40;;966:8;945:40;;;;;;;;;;;;810:183;;:::o;9741:365::-;9809:19;;:::i;:::-;9839:26;;:::i;:::-;9886:9;9873:7;9881:1;9873:10;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;9982:6;9991:1;9982:10;;9977:103;10000:1;9996;:5;9977:103;;;10033:11;;;;;;;;;;;:22;;;10056:7;10068:1;10064;:5;;;;:::i;:::-;10056:14;;;;;;;;;;;;;;;;;;;10033:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10020:7;10028:1;10020:10;;;;;;;;;;;;;;;;;;:51;;;;;;;;;;;10004:3;;;;;:::i;:::-;;;;9977:103;;;;10093:7;10086:14;;;9741:365;;;:::o;10110:634::-;10203:4;10216:19;10238:7;10246:1;10238:10;;;;;;;;;;;;;;;;;;;10216:32;;10254:21;10283:15;10301:12;:10;:12::i;:::-;10283:30;;10346:1;10323:25;;:11;:25;;;10319:134;;;10375:7;10359:23;;10389:38;10405:5;10413:13;10389:15;:38::i;:::-;10442:1;10435:8;;;;;;;10319:134;10466:6;10461:216;10483:14;10479:1;:18;10461:216;;;10518:27;10527:5;10534:7;10542:1;10534:10;;;;;;;;;;;;;;;;;;;10518:8;:27::i;:::-;10514:96;;;10574:7;10582:1;10574:10;;;;;;;;;;;;;;;;;;;10558:26;;10596:5;;10514:96;10625:1;10620;:6;10616:56;;;10657:7;10641:23;;10616:56;10499:4;;;;;:::i;:::-;;;;10461:216;;;;10685:38;10701:5;10709:13;10685:15;:38::i;:::-;10736:1;10729:8;;;;;10110:634;;;;;:::o;12149:1406::-;12238:17;12283:3;12278:2;12258:10;:17;12269:5;12258:17;;;;;;;;;;;;:22;;;;:::i;:::-;:28;;;;:::i;:::-;12238:48;;12293:21;12317:12;:10;:12::i;:::-;12293:36;;12343:6;12338:1214;12360:14;12356:1;:18;12338:1214;;;12406:21;12430:7;12438:1;12430:10;;;;;;;;;;;;;;;;;;;12406:34;;12454:23;12517:1;12492:27;;:13;:27;;;:62;;;;12524:30;12533:5;12540:13;12524:8;:30::i;:::-;12523:31;12492:62;12488:190;;;12587:13;12569:31;;12488:190;;;12650:13;12632:31;;12488:190;12695:12;12714:15;:20;;12742:12;12714:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12694:66;;;12779:7;12771:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;12873:29;12905:199;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12986:12;12905:199;;;;13025:10;12905:199;;;;;;13061:15;12905:199;;;12873:231;;13117:7;:24;13125:15;13117:24;;;;;;;;;;;;;;;13147:10;13117:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13250:12;13212:5;:22;13218:15;13212:22;;;;;;;;;;;;;;;:34;;;:50;;;;;;;:::i;:::-;;;;;;;;13320:1;13277:5;:22;13283:15;13277:22;;;;;;;;;;;;;;;:39;;;:44;;;;;;;:::i;:::-;;;;;;;;13373:15;13337:5;:22;13343:15;13337:22;;;;;;;;;;;;;;;:33;;:51;;;;13449:12;13404:5;:22;13410:15;13404:22;;;;;;;;;;;;;;;:41;;;:57;;;;;;;:::i;:::-;;;;;;;;13480:60;13493:15;13510:12;13524:15;13480:60;;;;;;;;:::i;:::-;;;;;;;;12338:1214;;;;12377:4;;;;;:::i;:::-;;;;12338:1214;;;;12149:1406;;;;:::o;5043:106::-;5088:7;5111:11;;;;;;;;;;;:28;;;5140:1;5111:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5104:38;;5043:106;:::o;11019:1024::-;11086:11;11100:10;:17;11111:5;11100:17;;;;;;;;;;;;11086:31;;11147:1;11131:18;;:4;:18;;;11127:838;;11163:12;11182:4;:9;;11200:6;11182:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11162:49;;;11231:7;11223:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;11285:29;11317:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11397:6;11317:191;;;;11429:10;11317:191;;;;;;11465:15;11317:191;;;11285:223;;11521:7;:13;11529:4;11521:13;;;;;;;;;;;;;;;11540:10;11521:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11633:6;11606:5;:11;11612:4;11606:11;;;;;;;;;;;;;;;:23;;;:33;;;;;;;:::i;:::-;;;;;;;;11687:1;11655:5;:11;11661:4;11655:11;;;;;;;;;;;;;;;:28;;;:33;;;;;;;:::i;:::-;;;;;;;;11729:15;11704:5;:11;11710:4;11704:11;;;;;;;;;;;;;;;:22;;:40;;;;11127:838;;;;;11782:20;11805:12;:10;:12::i;:::-;11782:35;;11829:13;11849:12;:17;;11875:6;11849:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11828:58;;;11905:8;11897:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11127:838;;;11981:43;11994:4;12000:6;12008:15;11981:43;;;;;;;;:::i;:::-;;;;;;;;11019:1024;;;:::o;10754:162::-;10822:4;10872:5;10844:8;;;;;;;;;;;:18;;;10863:4;10844:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;:61;;;;10900:5;10881:9;:15;10891:4;10881:15;;;;;;;;;;;;;;;;:24;;10844:61;10837:68;;10754:162;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:137::-;;386:6;380:13;371:22;;402:30;426:5;402:30;:::i;:::-;361:77;;;;:::o;444:139::-;;528:6;515:20;506:29;;544:33;571:5;544:33;:::i;:::-;496:87;;;;:::o;589:143::-;;677:6;671:13;662:22;;693:33;720:5;693:33;:::i;:::-;652:80;;;;:::o;738:262::-;;846:2;834:9;825:7;821:23;817:32;814:2;;;862:1;859;852:12;814:2;905:1;930:53;975:7;966:6;955:9;951:22;930:53;:::i;:::-;920:63;;876:117;804:196;;;;:::o;1006:284::-;;1125:2;1113:9;1104:7;1100:23;1096:32;1093:2;;;1141:1;1138;1131:12;1093:2;1184:1;1209:64;1265:7;1256:6;1245:9;1241:22;1209:64;:::i;:::-;1199:74;;1155:128;1083:207;;;;:::o;1296:407::-;;;1421:2;1409:9;1400:7;1396:23;1392:32;1389:2;;;1437:1;1434;1427:12;1389:2;1480:1;1505:53;1550:7;1541:6;1530:9;1526:22;1505:53;:::i;:::-;1495:63;;1451:117;1607:2;1633:53;1678:7;1669:6;1658:9;1654:22;1633:53;:::i;:::-;1623:63;;1578:118;1379:324;;;;;:::o;1709:278::-;;1825:2;1813:9;1804:7;1800:23;1796:32;1793:2;;;1841:1;1838;1831:12;1793:2;1884:1;1909:61;1962:7;1953:6;1942:9;1938:22;1909:61;:::i;:::-;1899:71;;1855:125;1783:204;;;;:::o;1993:262::-;;2101:2;2089:9;2080:7;2076:23;2072:32;2069:2;;;2117:1;2114;2107:12;2069:2;2160:1;2185:53;2230:7;2221:6;2210:9;2206:22;2185:53;:::i;:::-;2175:63;;2131:117;2059:196;;;;:::o;2261:284::-;;2380:2;2368:9;2359:7;2355:23;2351:32;2348:2;;;2396:1;2393;2386:12;2348:2;2439:1;2464:64;2520:7;2511:6;2500:9;2496:22;2464:64;:::i;:::-;2454:74;;2410:128;2338:207;;;;:::o;2551:268::-;;2711:102;2809:3;2801:6;2711:102;:::i;:::-;2697:116;;2687:132;;;;:::o;2825:108::-;2902:24;2920:5;2902:24;:::i;:::-;2897:3;2890:37;2880:53;;:::o;2939:118::-;3026:24;3044:5;3026:24;:::i;:::-;3021:3;3014:37;3004:53;;:::o;3143:1135::-;;3347:82;3423:5;3347:82;:::i;:::-;3445:114;3552:6;3547:3;3445:114;:::i;:::-;3438:121;;3585:3;3630:4;3622:6;3618:17;3613:3;3609:27;3660:84;3738:5;3660:84;:::i;:::-;3767:7;3798:1;3783:450;3808:6;3805:1;3802:13;3783:450;;;3879:9;3873:4;3869:20;3864:3;3857:33;3930:6;3924:13;3958:120;4073:4;4058:13;3958:120;:::i;:::-;3950:128;;4101:88;4182:6;4101:88;:::i;:::-;4091:98;;4218:4;4213:3;4209:14;4202:21;;3843:390;3830:1;3827;3823:9;3818:14;;3783:450;;;3787:14;4249:4;4242:11;;4269:3;4262:10;;3323:955;;;;;;;;;:::o;4284:109::-;4365:21;4380:5;4365:21;:::i;:::-;4360:3;4353:34;4343:50;;:::o;4399:155::-;4498:49;4541:5;4498:49;:::i;:::-;4493:3;4486:62;4476:78;;:::o;4560:165::-;4664:54;4712:5;4664:54;:::i;:::-;4659:3;4652:67;4642:83;;:::o;4731:147::-;4826:45;4865:5;4826:45;:::i;:::-;4821:3;4814:58;4804:74;;:::o;4884:344::-;;4990:39;5023:5;4990:39;:::i;:::-;5045:61;5099:6;5094:3;5045:61;:::i;:::-;5038:68;;5115:52;5160:6;5155:3;5148:4;5141:5;5137:16;5115:52;:::i;:::-;5192:29;5214:6;5192:29;:::i;:::-;5187:3;5183:39;5176:46;;4966:262;;;;;:::o;5234:364::-;;5350:39;5383:5;5350:39;:::i;:::-;5405:71;5469:6;5464:3;5405:71;:::i;:::-;5398:78;;5485:52;5530:6;5525:3;5518:4;5511:5;5507:16;5485:52;:::i;:::-;5562:29;5584:6;5562:29;:::i;:::-;5557:3;5553:39;5546:46;;5326:272;;;;;:::o;5604:371::-;;5767:67;5831:2;5826:3;5767:67;:::i;:::-;5760:74;;5864:34;5860:1;5855:3;5851:11;5844:55;5930:9;5925:2;5920:3;5916:12;5909:31;5966:2;5961:3;5957:12;5950:19;;5750:225;;;:::o;5981:326::-;;6144:67;6208:2;6203:3;6144:67;:::i;:::-;6137:74;;6241:30;6237:1;6232:3;6228:11;6221:51;6298:2;6293:3;6289:12;6282:19;;6127:180;;;:::o;6313:325::-;;6476:67;6540:2;6535:3;6476:67;:::i;:::-;6469:74;;6573:29;6569:1;6564:3;6560:11;6553:50;6629:2;6624:3;6620:12;6613:19;;6459:179;;;:::o;6644:319::-;;6807:67;6871:2;6866:3;6807:67;:::i;:::-;6800:74;;6904:23;6900:1;6895:3;6891:11;6884:44;6954:2;6949:3;6945:12;6938:19;;6790:173;;;:::o;6969:370::-;;7132:67;7196:2;7191:3;7132:67;:::i;:::-;7125:74;;7229:34;7225:1;7220:3;7216:11;7209:55;7295:8;7290:2;7285:3;7281:12;7274:30;7330:2;7325:3;7321:12;7314:19;;7115:224;;;:::o;7345:317::-;;7508:67;7572:2;7567:3;7508:67;:::i;:::-;7501:74;;7605:21;7601:1;7596:3;7592:11;7585:42;7653:2;7648:3;7644:12;7637:19;;7491:171;;;:::o;7668:315::-;;7831:67;7895:2;7890:3;7831:67;:::i;:::-;7824:74;;7928:19;7924:1;7919:3;7915:11;7908:40;7974:2;7969:3;7965:12;7958:19;;7814:169;;;:::o;7989:390::-;;8152:67;8216:2;8211:3;8152:67;:::i;:::-;8145:74;;8249:34;8245:1;8240:3;8236:11;8229:55;8315:28;8310:2;8305:3;8301:12;8294:50;8370:2;8365:3;8361:12;8354:19;;8135:244;;;:::o;8385:320::-;;8548:67;8612:2;8607:3;8548:67;:::i;:::-;8541:74;;8645:24;8641:1;8636:3;8632:11;8625:45;8696:2;8691:3;8687:12;8680:19;;8531:174;;;:::o;8711:325::-;;8874:67;8938:2;8933:3;8874:67;:::i;:::-;8867:74;;8971:29;8967:1;8962:3;8958:11;8951:50;9027:2;9022:3;9018:12;9011:19;;8857:179;;;:::o;9042:330::-;;9205:67;9269:2;9264:3;9205:67;:::i;:::-;9198:74;;9302:34;9298:1;9293:3;9289:11;9282:55;9363:2;9358:3;9354:12;9347:19;;9188:184;;;:::o;9378:297::-;;9558:83;9639:1;9634:3;9558:83;:::i;:::-;9551:90;;9667:1;9662:3;9658:11;9651:18;;9541:134;;;:::o;9681:329::-;;9844:67;9908:2;9903:3;9844:67;:::i;:::-;9837:74;;9941:33;9937:1;9932:3;9928:11;9921:54;10001:2;9996:3;9992:12;9985:19;;9827:183;;;:::o;10092:976::-;;10243:4;10238:3;10234:14;10336:4;10329:5;10325:16;10319:23;10389:3;10383:4;10379:14;10372:4;10367:3;10363:14;10356:38;10415:73;10483:4;10469:12;10415:73;:::i;:::-;10407:81;;10258:241;10589:4;10582:5;10578:16;10572:23;10608:63;10665:4;10660:3;10656:14;10642:12;10608:63;:::i;:::-;10509:172;10769:4;10762:5;10758:16;10752:23;10788:63;10845:4;10840:3;10836:14;10822:12;10788:63;:::i;:::-;10691:170;10949:4;10942:5;10938:16;10932:23;10968:63;11025:4;11020:3;11016:14;11002:12;10968:63;:::i;:::-;10871:170;11058:4;11051:11;;10212:856;;;;;:::o;11074:108::-;11151:24;11169:5;11151:24;:::i;:::-;11146:3;11139:37;11129:53;;:::o;11188:118::-;11275:24;11293:5;11275:24;:::i;:::-;11270:3;11263:37;11253:53;;:::o;11312:379::-;;11518:147;11661:3;11518:147;:::i;:::-;11511:154;;11682:3;11675:10;;11500:191;;;:::o;11697:222::-;;11828:2;11817:9;11813:18;11805:26;;11841:71;11909:1;11898:9;11894:17;11885:6;11841:71;:::i;:::-;11795:124;;;;:::o;11925:442::-;;12112:2;12101:9;12097:18;12089:26;;12125:71;12193:1;12182:9;12178:17;12169:6;12125:71;:::i;:::-;12206:72;12274:2;12263:9;12259:18;12250:6;12206:72;:::i;:::-;12288;12356:2;12345:9;12341:18;12332:6;12288:72;:::i;:::-;12079:288;;;;;;:::o;12373:1108::-;;12728:3;12717:9;12713:19;12705:27;;12742:71;12810:1;12799:9;12795:17;12786:6;12742:71;:::i;:::-;12823:72;12891:2;12880:9;12876:18;12867:6;12823:72;:::i;:::-;12905;12973:2;12962:9;12958:18;12949:6;12905:72;:::i;:::-;12987;13055:2;13044:9;13040:18;13031:6;12987:72;:::i;:::-;13069:73;13137:3;13126:9;13122:19;13113:6;13069:73;:::i;:::-;13152;13220:3;13209:9;13205:19;13196:6;13152:73;:::i;:::-;13235;13303:3;13292:9;13288:19;13279:6;13235:73;:::i;:::-;13318;13386:3;13375:9;13371:19;13362:6;13318:73;:::i;:::-;13401;13469:3;13458:9;13454:19;13445:6;13401:73;:::i;:::-;12695:786;;;;;;;;;;;;:::o;13487:485::-;;13724:2;13713:9;13709:18;13701:26;;13773:9;13767:4;13763:20;13759:1;13748:9;13744:17;13737:47;13801:164;13960:4;13951:6;13801:164;:::i;:::-;13793:172;;13691:281;;;;:::o;13978:210::-;;14103:2;14092:9;14088:18;14080:26;;14116:65;14178:1;14167:9;14163:17;14154:6;14116:65;:::i;:::-;14070:118;;;;:::o;14194:246::-;;14337:2;14326:9;14322:18;14314:26;;14350:83;14430:1;14419:9;14415:17;14406:6;14350:83;:::i;:::-;14304:136;;;;:::o;14446:256::-;;14594:2;14583:9;14579:18;14571:26;;14607:88;14692:1;14681:9;14677:17;14668:6;14607:88;:::i;:::-;14561:141;;;;:::o;14708:238::-;;14847:2;14836:9;14832:18;14824:26;;14860:79;14936:1;14925:9;14921:17;14912:6;14860:79;:::i;:::-;14814:132;;;;:::o;14952:644::-;;15187:3;15176:9;15172:19;15164:27;;15237:9;15231:4;15227:20;15223:1;15212:9;15208:17;15201:47;15265:78;15338:4;15329:6;15265:78;:::i;:::-;15257:86;;15353:72;15421:2;15410:9;15406:18;15397:6;15353:72;:::i;:::-;15435;15503:2;15492:9;15488:18;15479:6;15435:72;:::i;:::-;15517;15585:2;15574:9;15570:18;15561:6;15517:72;:::i;:::-;15154:442;;;;;;;:::o;15602:419::-;;15806:2;15795:9;15791:18;15783:26;;15855:9;15849:4;15845:20;15841:1;15830:9;15826:17;15819:47;15883:131;16009:4;15883:131;:::i;:::-;15875:139;;15773:248;;;:::o;16027:419::-;;16231:2;16220:9;16216:18;16208:26;;16280:9;16274:4;16270:20;16266:1;16255:9;16251:17;16244:47;16308:131;16434:4;16308:131;:::i;:::-;16300:139;;16198:248;;;:::o;16452:419::-;;16656:2;16645:9;16641:18;16633:26;;16705:9;16699:4;16695:20;16691:1;16680:9;16676:17;16669:47;16733:131;16859:4;16733:131;:::i;:::-;16725:139;;16623:248;;;:::o;16877:419::-;;17081:2;17070:9;17066:18;17058:26;;17130:9;17124:4;17120:20;17116:1;17105:9;17101:17;17094:47;17158:131;17284:4;17158:131;:::i;:::-;17150:139;;17048:248;;;:::o;17302:419::-;;17506:2;17495:9;17491:18;17483:26;;17555:9;17549:4;17545:20;17541:1;17530:9;17526:17;17519:47;17583:131;17709:4;17583:131;:::i;:::-;17575:139;;17473:248;;;:::o;17727:419::-;;17931:2;17920:9;17916:18;17908:26;;17980:9;17974:4;17970:20;17966:1;17955:9;17951:17;17944:47;18008:131;18134:4;18008:131;:::i;:::-;18000:139;;17898:248;;;:::o;18152:419::-;;18356:2;18345:9;18341:18;18333:26;;18405:9;18399:4;18395:20;18391:1;18380:9;18376:17;18369:47;18433:131;18559:4;18433:131;:::i;:::-;18425:139;;18323:248;;;:::o;18577:419::-;;18781:2;18770:9;18766:18;18758:26;;18830:9;18824:4;18820:20;18816:1;18805:9;18801:17;18794:47;18858:131;18984:4;18858:131;:::i;:::-;18850:139;;18748:248;;;:::o;19002:419::-;;19206:2;19195:9;19191:18;19183:26;;19255:9;19249:4;19245:20;19241:1;19230:9;19226:17;19219:47;19283:131;19409:4;19283:131;:::i;:::-;19275:139;;19173:248;;;:::o;19427:419::-;;19631:2;19620:9;19616:18;19608:26;;19680:9;19674:4;19670:20;19666:1;19655:9;19651:17;19644:47;19708:131;19834:4;19708:131;:::i;:::-;19700:139;;19598:248;;;:::o;19852:419::-;;20056:2;20045:9;20041:18;20033:26;;20105:9;20099:4;20095:20;20091:1;20080:9;20076:17;20069:47;20133:131;20259:4;20133:131;:::i;:::-;20125:139;;20023:248;;;:::o;20277:419::-;;20481:2;20470:9;20466:18;20458:26;;20530:9;20524:4;20520:20;20516:1;20505:9;20501:17;20494:47;20558:131;20684:4;20558:131;:::i;:::-;20550:139;;20448:248;;;:::o;20702:222::-;;20833:2;20822:9;20818:18;20810:26;;20846:71;20914:1;20903:9;20899:17;20890:6;20846:71;:::i;:::-;20800:124;;;;:::o;20930:160::-;;21048:3;21040:11;;21078:4;21073:3;21069:14;21061:22;;21030:60;;;:::o;21096:142::-;;21225:5;21219:12;21209:22;;21198:40;;;:::o;21244:99::-;;21330:5;21324:12;21314:22;;21303:40;;;:::o;21349:141::-;;21479:4;21474:3;21470:14;21462:22;;21452:38;;;:::o;21496:212::-;;21657:6;21652:3;21645:19;21697:4;21692:3;21688:14;21673:29;;21635:73;;;;:::o;21714:147::-;;21852:3;21837:18;;21827:34;;;;:::o;21867:159::-;;21975:6;21970:3;21963:19;22015:4;22010:3;22006:14;21991:29;;21953:73;;;;:::o;22032:169::-;;22150:6;22145:3;22138:19;22190:4;22185:3;22181:14;22166:29;;22128:73;;;;:::o;22207:305::-;;22266:20;22284:1;22266:20;:::i;:::-;22261:25;;22300:20;22318:1;22300:20;:::i;:::-;22295:25;;22454:1;22386:66;22382:74;22379:1;22376:81;22373:2;;;22460:18;;:::i;:::-;22373:2;22504:1;22501;22497:9;22490:16;;22251:261;;;;:::o;22518:185::-;;22575:20;22593:1;22575:20;:::i;:::-;22570:25;;22609:20;22627:1;22609:20;:::i;:::-;22604:25;;22648:1;22638:2;;22653:18;;:::i;:::-;22638:2;22695:1;22692;22688:9;22683:14;;22560:143;;;;:::o;22709:348::-;;22772:20;22790:1;22772:20;:::i;:::-;22767:25;;22806:20;22824:1;22806:20;:::i;:::-;22801:25;;22994:1;22926:66;22922:74;22919:1;22916:81;22911:1;22904:9;22897:17;22893:105;22890:2;;;23001:18;;:::i;:::-;22890:2;23049:1;23046;23042:9;23031:20;;22757:300;;;;:::o;23063:191::-;;23123:20;23141:1;23123:20;:::i;:::-;23118:25;;23157:20;23175:1;23157:20;:::i;:::-;23152:25;;23196:1;23193;23190:8;23187:2;;;23201:18;;:::i;:::-;23187:2;23246:1;23243;23239:9;23231:17;;23108:146;;;;:::o;23260:96::-;;23326:24;23344:5;23326:24;:::i;:::-;23315:35;;23305:51;;;:::o;23362:90::-;;23439:5;23432:13;23425:21;23414:32;;23404:48;;;:::o;23458:126::-;;23535:42;23528:5;23524:54;23513:65;;23503:81;;;:::o;23590:77::-;;23656:5;23645:16;;23635:32;;;:::o;23673:150::-;;23768:49;23811:5;23768:49;:::i;:::-;23755:62;;23745:78;;;:::o;23829:125::-;;23924:24;23942:5;23924:24;:::i;:::-;23911:37;;23901:53;;;:::o;23960:160::-;;24060:54;24108:5;24060:54;:::i;:::-;24047:67;;24037:83;;;:::o;24126:130::-;;24226:24;24244:5;24226:24;:::i;:::-;24213:37;;24203:53;;;:::o;24262:121::-;;24353:24;24371:5;24353:24;:::i;:::-;24340:37;;24330:53;;;:::o;24389:307::-;24457:1;24467:113;24481:6;24478:1;24475:13;24467:113;;;24566:1;24561:3;24557:11;24551:18;24547:1;24542:3;24538:11;24531:39;24503:2;24500:1;24496:10;24491:15;;24467:113;;;24598:6;24595:1;24592:13;24589:2;;;24678:1;24669:6;24664:3;24660:16;24653:27;24589:2;24438:258;;;;:::o;24702:320::-;;24783:1;24777:4;24773:12;24763:22;;24830:1;24824:4;24820:12;24851:18;24841:2;;24907:4;24899:6;24895:17;24885:27;;24841:2;24969;24961:6;24958:14;24938:18;24935:38;24932:2;;;24988:18;;:::i;:::-;24932:2;24753:269;;;;:::o;25028:233::-;;25090:24;25108:5;25090:24;:::i;:::-;25081:33;;25136:66;25129:5;25126:77;25123:2;;;25206:18;;:::i;:::-;25123:2;25253:1;25246:5;25242:13;25235:20;;25071:190;;;:::o;25267:176::-;;25316:20;25334:1;25316:20;:::i;:::-;25311:25;;25350:20;25368:1;25350:20;:::i;:::-;25345:25;;25389:1;25379:2;;25394:18;;:::i;:::-;25379:2;25435:1;25432;25428:9;25423:14;;25301:142;;;;:::o;25449:180::-;25497:77;25494:1;25487:88;25594:4;25591:1;25584:15;25618:4;25615:1;25608:15;25635:180;25683:77;25680:1;25673:88;25780:4;25777:1;25770:15;25804:4;25801:1;25794:15;25821:180;25869:77;25866:1;25859:88;25966:4;25963:1;25956:15;25990:4;25987:1;25980:15;26007:102;;26099:2;26095:7;26090:2;26083:5;26079:14;26075:28;26065:38;;26055:54;;;:::o;26115:122::-;26188:24;26206:5;26188:24;:::i;:::-;26181:5;26178:35;26168:2;;26227:1;26224;26217:12;26168:2;26158:79;:::o;26243:116::-;26313:21;26328:5;26313:21;:::i;:::-;26306:5;26303:32;26293:2;;26349:1;26346;26339:12;26293:2;26283:76;:::o;26365:122::-;26438:24;26456:5;26438:24;:::i;:::-;26431:5;26428:35;26418:2;;26477:1;26474;26467:12;26418:2;26408:79;:::o

Swarm Source

ipfs://81a7256ee88c6f1eac8ee30db7c9be5fc6f2463cdc6cb32d36a223f6a568b839

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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