Contract 0xF44fB43066F7ECC91058E3A614Fb8A15A2735276 3

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcaeb9a737c0704866637df9952fb9153f9cd3e7a8c762f44b44a82c799ed847dMint336666272022-09-28 9:50:2051 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003057450001 33.00000002
0x6db87d50cd192818514a0d431c8563cbaa7556a01b2f72054638201e7307e264Mint Tokens Arra...336631682022-09-28 7:51:202 hrs 50 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.006848599969 43.999999803
0xc1790abd9e051bf285b56f152275c2377b1026a7229288ced1ebbe28a23a6943Mint336596242022-09-28 5:49:234 hrs 52 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003057450326 33.000003526
0x6c4bb25982e0eea099c80534c751a56f095467b739e5b16fd35b743f1cdb6f3cMint Tokens Same...336562502022-09-28 3:51:086 hrs 50 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003869085001 33.000000014
0x6000c40f45bc8fc9cdd0c931ab40b50a3dd1ff9e10a5423304df7119ac861f9cMint336528582022-09-28 1:54:288 hrs 47 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003057450001 33.000000021
0xe4f8dfbe32e5e9895a9d402b692ed76851afb99504ede05bfe4c698efcd8e4e7Mint Tokens Arra...336493582022-09-27 23:52:0410 hrs 49 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.006158342016 33.077000011
0x075b13c7ada81acaa15df01dcfa3b860113b6553f93f5982f9242acbd79dc777Mint336460042022-09-27 21:54:2012 hrs 47 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003082184554 33.266967664
0xc0ae1895364b4c8a19e033a3dca308d5eef4012fba025e8e22bfbe3ad03ab3baMint Tokens Same...336426622022-09-27 19:54:4914 hrs 46 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003869481007 33.000000066
0x3b6dbfe867574ef525ec673584256dda461104d92e18b539f33f2ed9c6885b22Mint336391172022-09-27 17:52:2516 hrs 49 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003063728078 33.067761232
0x9205a51a39e9b01217492517e87d5afd38bdba96e1fb3a4d46fa5be00b8cf5ebMint Tokens Arra...336356432022-09-27 15:50:4618 hrs 50 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.005136055309 33.000008415
0x852d7e63d7c5230b2bff9da660346571224d718d9cce4e9bee11758a96af95e9Mint336321062022-09-27 13:44:4020 hrs 56 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.007759476042 83.761264736
0x6d3747e11f3c69f30741fb90301e0cf2511fa05a73111e3bb9d8975f632ae32dMint Tokens Same...336290942022-09-27 11:47:2922 hrs 54 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003878509849 33.07700052
0xbf42b5978b90923db25285f07fb2fa52236d63c5b11fb0241916800ba2bdd6c7Mint336261762022-09-27 9:51:001 day 50 mins ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003057846002 33.000000023
0xf8af7833e00e2fe732a2ca7d5a172f3e882cf513d7cf5ee3592251f42891b611Mint Tokens Arra...336228912022-09-27 7:51:321 day 2 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.005136846003 33.000000022
0xb94a4af9b5b6dfc66b0668de3f2c2f99e686ee49b838a83d82a37c794359c571Mint336194662022-09-27 5:51:371 day 4 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003057054001 33.000000015
0x28ae9cc3826b4b18b7db39b40382b9abf850f1f16aad5e66ecf159c595c02c18Mint Tokens Same...336159932022-09-27 3:49:551 day 6 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003869085004 33.000000035
0xd96440c58a84b3da13ac9c5ca1ba30eb7c1dc4868511ccd55140ae0d64c90455Mint336126392022-09-27 1:50:031 day 8 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003057450001 33.000000018
0xcf5c19bf9cf5edb72bd531c3ead915022a46ade9a42d2fd172e3c160eb07d803Mint Tokens Arra...336092502022-09-26 23:53:331 day 10 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.005307664999 34.099999997
0x350c2b33b15180fc5b539cfce07d36ee124aa9140eab16d3d88468c2cfa46e23Mint336058972022-09-26 21:55:591 day 12 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003057450001 33.000000014
0xf3e1ad5d8871d9fb4b1102d983553d976575b1f87f751ab04f2770428dea1db4Mint Tokens Same...336025012022-09-26 19:54:581 day 14 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003883116885 33.119680029
0x7a5c78cd97934d9dbf7a654f3e278e3659ab41aed6df7e509824b4fed7e4ace6Mint335991602022-09-26 17:57:551 day 16 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003057450001 33.000000014
0xf1857f0e3f3c404ae66b6c89ff1d94cf6bfbef757f80ec3930f07321d16b7dc6Mint Tokens Arra...335958192022-09-26 16:00:541 day 18 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.005136452192 33.000014086
0xecab992b9155ac805caf7f89a604f8e13bc5ead7becc9b43d5c06491365e76baTransfer335948712022-09-26 15:28:181 day 19 hrs ago0xb3787aef40a0c4884f4803b2337a0e96896f4410 IN  Forge: Fge Token0 MATIC0.000892892143 30.000072014
0x4819893480ec7053e55e733d57c2212d207dfeb52341af7c1de16f95b82bce4aMint335924042022-09-26 14:01:221 day 20 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003060110504 33.028715645
0x734672639b725724765e5ba3737e4ce3c7ebf92ecc4ca52ff3451485783c7e72Mint Tokens Same...335890832022-09-26 12:04:441 day 22 hrs ago0xdfd18d5374df275a8ede107f981f78b1e60f63e4 IN  Forge: Fge Token0 MATIC0.003869481003 33.000000028
[ Download CSV Export 

OVERVIEW

A 100% decentralized token that distributes using Proof of Work, Proof of Auction, and Proof of Staking contracts.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Forge

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-02-12
*/

// Forge - Contract
//
// Distrubtion of Forge Token is as follows:
// 25% of Forge Token is Auctioned in the ForgeAuctions Contract which distributes tokens to users who use 0xBitcoin to buy tokens in fair price. Each auction lasts ~3 days. Using the Auctions contract
// +
// 25% of Forge Token is distributed as Liquidiy Pool rewards in the ForgeRewards Contract which distributes tokens to users who deposit the SpiritSwap Liquidity Pool tokens into the LPRewards contract.
// +
// 50% of Forge Token is distributed using Forge Contract(this Contract) which distributes tokens to users by using Proof of work. Computers solve a complicated problem to gain tokens!
//
// = 100% Of the Token is distributed to the users! No dev fee or premine!
//
// All distributions happen fairly using Bitcoins model of distribution using reward halvings and difficulty adjustments.  Distribution happens over 100 years!  
// 100%  on-chain, decentralized, trustless, ownerless contracts*!
//   The harder it is mined the less tokens that are awarded.
// Network: Polygon Chain 
// ChainID = 89
//
//
// Name: Forge
// Symbol: Fge
// Decimals: 18 
//
// Total supply: 42,000,001.000000000000000000
//   =
// 21,000,000 Mined over 100+ years using Bitcoins Distrubtion halvings every 4 years. Uses Proof-oF-Work to distribute the tokens. Public Miner is available.  Uses this contract.
//   +
// 10,500,000 Auctioned over 100+ years into 4 day auctions split fairly among all buyers. ALL 0xBitcoin proceeds go into THIS contract which it fairly distributes to miners.  Uses the ForgeAuctions contract
//   +
// 10,500,000 tokens goes to Liquidity Providers of the token over 100+ year using Bitcoins distribution!  Helps prevent LP losses!  Uses the ForgeRewards Contract
//
//  =
//
// 42,000,001 Tokens is the max Supply
//      
// 66% of the 0xBitcoin Token from this contract goes to the Miner to pay for the transaction cost and if the token grows enough earn 0xBitcoin per mint!!
// 33% of the 0xBitcoin TOken from this contract goes to the Liquidity Providers via ForgeRewards Contract.  Helps prevent Impermant Loss! Larger Liquidity!
//
// No premine, dev cut, or advantage taken at launch. Public miner available at launch.  100% of the token is given away fairly over 100+ years using Bitcoins model!
//
// Send this contract any ERC20 token and it will become instantly mineable and able to distribute using proof-of-work for 1 year!!!!
//
//Viva la Mineables!!! Send this contract any ERC20 complient token (Wrapped NFTs incoming!) and we will fairly to miners and Holders(
//  Each Mint prints (1/10000) of any ERC20.
//pThirdDifficulty allows for the difficulty to be cut in a third.  So difficulty 10,000 becomes 3,333.  Costs 333 Fantom  Makes mining 3x easier
//* 1 tokens in LP are burned to create the LP pool.
//
// Credits: 0xBitcoin, Vether, Synethix
//* Except for Staking Rewards additional cryptocurrencies


pragma solidity ^0.8.11;

contract Ownable {
    address public owner;

    event TransferOwnership(address _from, address _to);

    constructor() public {
        owner = msg.sender;
        emit TransferOwnership(address(0), msg.sender);
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "only owner");
        _;
    }

    function setOwner(address _owner) internal onlyOwner {
        emit TransferOwnership(owner, _owner);
        owner = _owner;
    }
}




library IsContract {
    function isContract(address _addr) internal view returns (bool) {
        bytes32 codehash;
        /* solium-disable-next-line */
        assembly { codehash := extcodehash(_addr) }
        return codehash != bytes32(0) && codehash != bytes32(0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470);
    }
}

// File: contracts/utils/SafeMath.sol

library SafeMath2 {
    function add(uint256 x, uint256 y) internal pure returns (uint256) {
        uint256 z = x + y;
        require(z >= x, "Add overflow");
        return z;
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256) {
        require(x >= y, "Sub underflow");
        return x - y;
    }

    function mult(uint256 x, uint256 y) internal pure returns (uint256) {
        if (x == 0) {
            return 0;
        }

        uint256 z = x * y;
        require(z / x == y, "Mult overflow");
        return z;
    }

    function div(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        return x / y;
    }

    function divRound(uint256 x, uint256 y) internal pure returns (uint256) {
        require(y != 0, "Div by zero");
        uint256 r = x / y;
        if (x % y != 0) {
            r = r + 1;
        }

        return r;
    }
}

// File: contracts/utils/Math.sol

library ExtendedMath2 {


    //return the smaller of the two inputs (a or b)
    function limitLessThan(uint a, uint b) internal pure returns (uint c) {

        if(a > b) return b;

        return a;

    }
}

// File: contracts/interfaces/IERC20.sol

interface IERC20 {
	function totalSupply() external view returns (uint256);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
    function transfer(address _to, uint _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
    function allowance(address _owner, address _spender) external view returns (uint256 remaining);
    function approve(address _spender, uint256 _value) external returns (bool success);
    function balanceOf(address _owner) external view returns (uint256 balance);
    
}


// File: contracts/commons/AddressMinHeap.sol



abstract contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes memory data) virtual public;
}


//Main contract

contract Forge is Ownable, IERC20, ApproveAndCallFallBack {
	uint constant public targetTime = 60 * 48;
    uint public multipler = 0;
// SUPPORTING CONTRACTS
    address public AddressAuction;
    address public AddressLPReward;
    address public AddressZeroXBTC;
//Events
    using SafeMath2 for uint256;
    using ExtendedMath2 for uint;
    event Mint(address indexed from, uint reward_amount, uint epochCount, bytes32 newChallengeNumber);
    event MegaMint(address indexed from, uint epochCount, bytes32 newChallengeNumber, uint NumberOfTokensMinted, uint256 TokenMultipler);

// Managment events
    uint256 override public totalSupply = 42000001000000000000000000;
    bytes32 private constant BALANCE_KEY = keccak256("balance");

    //BITCOIN INITALIZE Start
	
    uint _totalSupply = 21000000000000000000000000;
    uint public latestDifficultyPeriodStarted2 = block.timestamp;
    uint public epochCount = 0;//number of 'blocks' mined

    uint public _BLOCKS_PER_READJUSTMENT = 256;

    //a little number
    uint public  _MINIMUM_TARGET = 2**16;
    
    uint public  _MAXIMUM_TARGET = 2**234;
    uint public miningTarget = _MAXIMUM_TARGET.div(200000000000*25);  //1000 million difficulty to start until i enable mining
    
    bytes32 public challengeNumber = blockhash(block.number - 1);   //generate a new one when a new reward is minted
    uint public rewardEra = 0;
    uint public maxSupplyForEra = (_totalSupply - _totalSupply.div( 2**(rewardEra + 1)));
    uint public reward_amount = 0;
    
    //Stuff for Functions
    uint oldecount = 0;
    uint public previousBlockTime  =  block.timestamp;
    uint oneEthUnit =    1000000000000000000;
    uint one8unit   =              100000000;
    uint public Token2Per=           1000000;
    uint Token2Min=                       88;
    uint public tokensMinted;
    mapping(address => uint) balances;
    mapping(address => mapping(address => uint)) allowed;
    uint give0xBTC = 0;
    uint give = 1;
    // metadata
    string public name = "Forge";
    string public constant symbol = "Fge";
    uint8 public constant decimals = 18;

    uint256 lastrun = block.timestamp;
    uint public latestDifficultyPeriodStarted = block.number;
    bool initeds = false;
    
    // mint 1 token to setup LPs
	    constructor() public {
    balances[msg.sender] = 1000000000000000000;
    emit Transfer(address(0), msg.sender, 1000000000000000000);
	}

    function zinit(address AuctionAddress2, address LPGuild2, address _ZeroXBTCAddress) public onlyOwner{
        uint x = 21000000000000000000000000; 
        // Only init once
        assert(!initeds);
        initeds = true;
	    previousBlockTime = block.timestamp;
	    reward_amount = (100 * 10**uint(decimals) ).div( 2**rewardEra );
    	rewardEra = 0;
	    tokensMinted = 0;
	    epochCount = 0;
    	miningTarget = _MAXIMUM_TARGET.div(1); //5000000 = 31gh/s @ 7 min for FPGA mining
        latestDifficultyPeriodStarted2 = block.timestamp;
    	_startNewMiningEpoch();
        // Init contract variables and mint
        balances[AuctionAddress2] = x/2;
	
        emit Transfer(address(0), AuctionAddress2, x/2);
	
    	AddressAuction = AuctionAddress2;
        AddressLPReward = payable(LPGuild2);
        AddressZeroXBTC = _ZeroXBTCAddress;
	
        oldecount = epochCount;
	
		setOwner(address(0));
     
    }



	///
	// Managment
	///

	function ARewardSender() public {
		//runs every _BLOCKS_PER_READJUSTMENT / 4

		uint256 runs = block.timestamp - lastrun;

		uint256 epochsPast = epochCount - oldecount; //actually epoch
		uint256 runsperepoch = runs / epochsPast;

		reward_amount = (100 * 10**uint(decimals)).div( 2**rewardEra );
		uint256 x = (runsperepoch * 888).divRound(targetTime);
		uint256 ratio = x * 100 / 888;
		uint256 totalOwed;
		
		 if(ratio < 200){
			totalOwed = (61001200 * (x ** 2 )).div(888**2) + (40861500 * x).div(888) ;
		 }else {
			totalOwed = (340000000);
		} 

		if(IERC20(AddressZeroXBTC).balanceOf(address(this)) > (30 * 2 * (Token2Per * _BLOCKS_PER_READJUSTMENT)/4)){  // at least enough blocks to rerun this function for both LPRewards and Users
			IERC20(AddressZeroXBTC).transfer(AddressLPReward, ((epochsPast) * totalOwed * Token2Per * give0xBTC).div(2 * 100000000));
			give0xBTC = 1 * give;
		}else{
			give0xBTC = 0;
		}
		oldecount = epochCount; //actually epoch

		lastrun = block.timestamp;
	}


	//comability function
	function mint(uint256 nonce, bytes32 challenge_digest) public returns (bool success) {
		mintTo(nonce, challenge_digest, msg.sender);
	}


	function mintTo(uint256 nonce, bytes32 challenge_digest,  address mintTo) public returns (uint256 owed) {

		bytes32 digest =  keccak256(abi.encodePacked(challengeNumber, msg.sender, nonce));

		//the challenge digest must match the expected
		require(digest == challenge_digest, "Old challenge_digest or wrong challenge_digest");

		//the digest must be smaller than the target
		require(uint256(digest) < miningTarget, "Digest must be smaller than miningTarget");
		_startNewMiningEpoch();

		require(block.timestamp > previousBlockTime, "No same second solves");

		//uint diff = block.timestamp - previousBlockTime;
		uint256 x = ((block.timestamp - previousBlockTime) * 888) / targetTime;
		uint ratio = x * 100 / 888;
		uint totalOwed = 0;
		if(ratio < 314){
			totalOwed = (61001200 * (x ** 2 )).div(888 ** 2)+ (40861500 * x).div(888);
		}else {
			totalOwed = (x * 100000000).div(888) + (350000000);
		} 


		balances[mintTo] = balances[mintTo].add((reward_amount * totalOwed).div(100000000));
		balances[AddressLPReward] = balances[AddressLPReward].add((reward_amount * totalOwed).div(100000000 * 2));
				
		tokensMinted = tokensMinted.add((reward_amount * totalOwed).div(100000000));
		previousBlockTime = block.timestamp;

		if(give0xBTC > 0){
			if(ratio < 200){
				IERC20(AddressZeroXBTC).transfer(mintTo, (totalOwed * Token2Per * give0xBTC).div(100000000));
			}else{
				IERC20(AddressZeroXBTC).transfer(mintTo, (34 * Token2Per * give0xBTC).div(10));
			}
		}

		emit Mint(msg.sender, (reward_amount * totalOwed).div(100000000), epochCount, challengeNumber );

		return totalOwed;

	}


	function mintTokensArrayTo(uint256 nonce, bytes32 challenge_digest, address[] memory ExtraFunds, address[] memory MintTo) public returns (uint256 owed) {
		uint256 totalOd = mintTo(nonce,challenge_digest, MintTo[0]);
		require(totalOd > 0, "mint issue");

		require(MintTo.length == ExtraFunds.length + 1,"MintTo has to have an extra address compared to ExtraFunds");
		uint xy=0;
		for(xy = 0; xy< ExtraFunds.length; xy++)
		{
			if(epochCount % (2**(xy+1)) != 0){
				break;
			}
			require(ExtraFunds[xy] != address(this) && ExtraFunds[xy] != AddressZeroXBTC, "No base printing of tokens");
			for(uint y=xy+1; y< ExtraFunds.length; y++){
				require(ExtraFunds[y] != ExtraFunds[xy], "No printing The same tokens");
			}
		}
		
		uint256 totalOwed = 0;
		uint256 TotalOwned = 0;
		for(uint x=0; x<xy; x++)
		{
			//epoch count must evenly dividable by 2^n in order to get extra mints. 
			//ex. epoch 2 = 1 extramint, epoch 4 = 2 extra, epoch 8 = 3 extra mints, epoch 16 = 4 extra mints w/ a divRound for the 4th mint(allows small balance token minting aka NFTs)
			if(epochCount % (2**(x+1)) == 0){
				TotalOwned = IERC20(ExtraFunds[x]).balanceOf(address(this));
				if(TotalOwned != 0){
					if( x % 3 == 0 && x != 0){
						totalOwed = (TotalOwned * totalOd).divRound(100000000 * 2500);
					}else{
						totalOwed = (TotalOwned * totalOd).div(100000000 * 2500 );
					}
				}
			    IERC20(ExtraFunds[x]).transfer(MintTo[x+1], totalOwed);
			}
        }
        	
		emit MegaMint(msg.sender, epochCount, challengeNumber, xy, totalOd );

		return totalOd;

    }


	function mintTokensSameAddress(uint256 nonce, bytes32 challenge_digest, address[] memory ExtraFunds, address MintTo) public returns (bool success) {
		address[] memory dd = new address[](ExtraFunds.length + 1); 

		for(uint x=0; x< (ExtraFunds.length + 1); x++)
		{
			dd[x] = MintTo;
		}
		
		mintTokensArrayTo(nonce, challenge_digest, ExtraFunds, dd);

		return true;
	}


	function empty_mintTo(uint256 nonce, bytes32 challenge_digest, address[] memory ExtraFunds, address[] memory MintTo) public returns (uint256 owed) {
		bytes32 digest =  keccak256(abi.encodePacked(challengeNumber, msg.sender, nonce));

		//the challenge digest must match the expected
		require(digest == challenge_digest, "Old challenge_digest or wrong challenge_digest");

		//the digest must be smaller than the target
		require(uint256(digest) < miningTarget, "Digest must be smaller than miningTarget");
		_startNewMiningEpoch();

		require(block.timestamp > previousBlockTime, "No same second solves");
		require(MintTo.length == ExtraFunds.length,"MintTo has to have same number of addressses as ExtraFunds");
		uint xy=0;
		for(xy = 0; xy< ExtraFunds.length; xy++)
		{
			if(epochCount % (2**(xy+1)) != 0){
				break;
			}
			require(ExtraFunds[xy] != address(this) && ExtraFunds[xy] != AddressZeroXBTC, "No base printing of tokens");
			for(uint y=xy+1; y< ExtraFunds.length; y++){
				require(ExtraFunds[y] != ExtraFunds[xy], "No printing The same tokens");
			}
		}

		uint256 x = ((block.timestamp - previousBlockTime) * 888) / targetTime;
		uint ratio = x * 100 / 888;
		uint totalIN = 0;
		if(ratio < 314){
			totalIN = (61001200 * (x ** 2 )).div(888 ** 2)+ (40861500 * x).div(888);
		}else {
			totalIN = (x * 100000000).div(888) + (350000000);
		} 
		require(totalIN > 0, "mint issue");
		uint256 totalOwed;
		uint256 TotalOwned;
		for(uint x=0; x<xy; x++)
		{
			//epoch count must evenly dividable by 2^n in order to get extra mints. 
			//ex. epoch 2 = 1 extramint, epoch 4 = 2 extra, epoch 8 = 3 extra mints, epoch 16 = 4 extra mints w/ a divRound for the 4th mint(allows small balance token minting aka NFTs)
			if(epochCount % (2**(x+1)) == 0){
				TotalOwned = IERC20(ExtraFunds[x]).balanceOf(address(this));
				if(TotalOwned != 0){
					if( x % 3 == 0 && x != 0){
						totalOwed = (TotalOwned * totalIN).divRound(100000000 * 2500);
					}else{
						totalOwed = (TotalOwned * totalIN).div(100000000 * 2500 );
				    }
			    IERC20(ExtraFunds[x]).transfer(MintTo[x], totalOwed);
			    }
            }
        }

		previousBlockTime = block.timestamp;
		return totalIN;   
	}



	function _startNewMiningEpoch() internal {


		//if max supply for the era will be exceeded next reward round then enter the new era before that happens
		//59 is the final reward era, almost all tokens minted
		if( tokensMinted.add(reward_amount) > maxSupplyForEra && rewardEra < 60)
		{
			rewardEra = rewardEra + 1;
			maxSupplyForEra = _totalSupply - _totalSupply.div( 2**(rewardEra + 1));
		}

		//set the next minted supply at which the era will change
		// total supply of MINED tokens is 21000000000000000000000000  because of 16 decimal places

		epochCount = epochCount.add(1);

		//every so often, readjust difficulty. Dont readjust when deploying
		if((epochCount) % (_BLOCKS_PER_READJUSTMENT / 4) == 0)
		{
			ARewardSender();
			maxSupplyForEra = _totalSupply - _totalSupply.div( 2**(rewardEra + 1));

			if((epochCount % _BLOCKS_PER_READJUSTMENT== 0))
			{
				multipler = (IERC20(AddressZeroXBTC).balanceOf(address(this)) / (2000 * 10 ** 8));
				if(( IERC20(AddressZeroXBTC).balanceOf(address(this)) / Token2Per) <= (10000 + 10000*(multipler))) //chosen to give keep 250 days payouts in reserve at current payout
				{
					if(Token2Per.div(2) > Token2Min)
					{
						Token2Per = Token2Per.div(2);
					}
				}else{
					Token2Per = Token2Per.mult(3);
				}
				_reAdjustDifficulty();
			}
		}

		challengeNumber = blockhash(block.number - 1);
	}


	function _reAdjustDifficulty() internal {
		uint256 blktimestamp = block.timestamp;
		uint TimeSinceLastDifficultyPeriod2 = blktimestamp - latestDifficultyPeriodStarted2;

		uint adjusDiffTargetTime = targetTime *  _BLOCKS_PER_READJUSTMENT; //36 min per block 60 sec * 12

		//if there were less eth blocks passed in time than expected
		if( TimeSinceLastDifficultyPeriod2 < adjusDiffTargetTime )
		{
			uint excess_block_pct = (adjusDiffTargetTime.mult(100)).div( TimeSinceLastDifficultyPeriod2 );
			give = 1;
			uint excess_block_pct_extra = excess_block_pct.sub(100).limitLessThan(1000);
			//make it harder 
			miningTarget = miningTarget.sub(miningTarget.div(2000).mult(excess_block_pct_extra));   //by up to 50 %
		}else{
			uint shortage_block_pct = (TimeSinceLastDifficultyPeriod2.mult(100)).div( adjusDiffTargetTime );
			give = 2;
			uint shortage_block_pct_extra = shortage_block_pct.sub(100).limitLessThan(1000); //always between 0 and 1000
			//make it easier
			miningTarget = miningTarget.add(miningTarget.div(500).mult(shortage_block_pct_extra));   //by up to 200 %
		}

		latestDifficultyPeriodStarted2 = blktimestamp;
		latestDifficultyPeriodStarted = block.number;
		if(miningTarget < _MINIMUM_TARGET) //very difficult
		{
			miningTarget = _MINIMUM_TARGET;
		}
		if(miningTarget > _MAXIMUM_TARGET) //very easy
		{
			miningTarget = _MAXIMUM_TARGET;
		}
		
	}


		//42 m coins total
		// = 
		//21 million proof of work
		// + 
		//10.5 million proof of burn
		// +
		//10.5 million rewards for Liquidity Providers


	//help debug mining software
	function checkMintSolution(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number, uint testTarget) public view returns (bool success) {
		bytes32 digest = bytes32(keccak256(abi.encodePacked(challenge_number,msg.sender,nonce)));
		if(uint256(digest) > testTarget) revert();

		return (digest == challenge_digest);
	}


	//this is a recent ethereum block hash, used to prevent pre-mining future blocks
	function getChallengeNumber() public view returns (bytes32) {

		return challengeNumber;

	}


	//the number of zeroes the digest of the PoW solution requires.  Auto adjusts
	function getMiningDifficulty() public view returns (uint) {

		return _MAXIMUM_TARGET.div(miningTarget);
	}


	function getMiningTarget() public view returns (uint) {

		return miningTarget;

	}


	function getMiningMinted() public view returns (uint) {

		return tokensMinted;

	}


	//21m coins total
	//reward begins at 150 and is cut in half every reward era (as tokens are mined)
	function getMiningReward() public view returns (uint) {
		//once we get half way thru the coins, only get 25 per block
		//every reward era, the reward amount halves.

		return (100 * 10**uint(decimals) ).div( 2**rewardEra ) ;

		}


	function getEpoch() public view returns (uint) {

		return epochCount ;

	}


	//help debug mining software
	function getMintDigest(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number) public view returns (bytes32 digesttest) {

		bytes32 digest =  keccak256(abi.encodePacked(challengeNumber, msg.sender, nonce));

		return digest;

	}


		// ------------------------------------------------------------------------

		// Get the token balance for account `tokenOwner`

		// ------------------------------------------------------------------------

	function balanceOf(address tokenOwner) public override view returns (uint balance) {

		return balances[tokenOwner];

	}


		// ------------------------------------------------------------------------

		// Transfer the balance from token owner's account to `to` account

		// - Owner's account must have sufficient balance to transfer

		// - 0 value transfers are allowed

		// ------------------------------------------------------------------------


	function transfer(address to, uint tokens) public override returns (bool success) {

		balances[msg.sender] = balances[msg.sender].sub(tokens);
		balances[to] = balances[to].add(tokens);

		emit Transfer(msg.sender, to, tokens);

		return true;

	}


		// ------------------------------------------------------------------------

		// Token owner can approve for `spender` to transferFrom(...) `tokens`

		// from the token owner's account

		//

		// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md

		// recommends that there are no checks for the approval double-spend attack

		// as this should be implemented in user interfaces

		// ------------------------------------------------------------------------


	function approve(address spender, uint tokens) public override returns (bool success) {

		allowed[msg.sender][spender] = tokens;

		emit Approval(msg.sender, spender, tokens);

		return true;

	}


		// ------------------------------------------------------------------------

		// Transfer `tokens` from the `from` account to the `to` account

		//

		// The calling account must already have sufficient tokens approve(...)-d

		// for spending from the `from` account and

		// - From account must have sufficient balance to transfer

		// - Spender must have sufficient allowance to transfer

		// - 0 value transfers are allowed

		// ------------------------------------------------------------------------


	function transferFrom(address from, address to, uint tokens) public override returns (bool success) {

		balances[from] = balances[from].sub(tokens);
		allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
		balances[to] = balances[to].add(tokens);

		emit Transfer(from, to, tokens);

		return true;

	}


		// ------------------------------------------------------------------------

		// Returns the amount of tokens approved by the owner that can be

		// transferred to the spender's account

		// ------------------------------------------------------------------------


	function allowance(address tokenOwner, address spender) public override view returns (uint remaining) {

		return allowed[tokenOwner][spender];

	}


		// ------------------------------------------------------------------------

		// Token owner can approve for `spender` to transferFrom(...) `tokens`

		// from the token owner's account. The `spender` contract function

		// `receiveApproval(...)` is then executed

		// ------------------------------------------------------------------------


	function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public override{

		require(token == address(this));
		IERC20(address(this)).transfer(from, tokens);  
	}


	  //Do not allow ETH to enter
	receive() external payable {

		revert();
	}


	fallback() external payable {

		revert();
	}
}

/*
*
* MIT License
* ===========
*
* Copyright (c) 2022 Forge
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.   
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"epochCount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"newChallengeNumber","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"NumberOfTokensMinted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TokenMultipler","type":"uint256"}],"name":"MegaMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epochCount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"newChallengeNumber","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"}],"name":"TransferOwnership","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"ARewardSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AddressAuction","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AddressLPReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AddressZeroXBTC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Token2Per","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_BLOCKS_PER_READJUSTMENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_MAXIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_MINIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"challengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"bytes32","name":"challenge_number","type":"bytes32"},{"internalType":"uint256","name":"testTarget","type":"uint256"}],"name":"checkMintSolution","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"address[]","name":"ExtraFunds","type":"address[]"},{"internalType":"address[]","name":"MintTo","type":"address[]"}],"name":"empty_mintTo","outputs":[{"internalType":"uint256","name":"owed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epochCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChallengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningDifficulty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"bytes32","name":"challenge_number","type":"bytes32"}],"name":"getMintDigest","outputs":[{"internalType":"bytes32","name":"digesttest","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestDifficultyPeriodStarted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestDifficultyPeriodStarted2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyForEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"address","name":"mintTo","type":"address"}],"name":"mintTo","outputs":[{"internalType":"uint256","name":"owed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"address[]","name":"ExtraFunds","type":"address[]"},{"internalType":"address[]","name":"MintTo","type":"address[]"}],"name":"mintTokensArrayTo","outputs":[{"internalType":"uint256","name":"owed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes32","name":"challenge_digest","type":"bytes32"},{"internalType":"address[]","name":"ExtraFunds","type":"address[]"},{"internalType":"address","name":"MintTo","type":"address"}],"name":"mintTokensSameAddress","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"multipler","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"address","name":"token","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"receiveApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reward_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"targetTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"AuctionAddress2","type":"address"},{"internalType":"address","name":"LPGuild2","type":"address"},{"internalType":"address","name":"_ZeroXBTCAddress","type":"address"}],"name":"zinit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006001556a22bdd89dce55b0116400006005556a115eec47f6cf7e3500000060065542600755600060085561010060095562010000600a55600160ea1b600b556200006765048c27395000600b54620001f560201b620026fc1790919060201c565b600c556200007760014362000308565b40600d556000600e55620000b9600e54600162000095919062000322565b620000a29060026200043a565b600654620001f560201b620026fc1790919060201c565b600654620000c8919062000308565b600f5560006010819055601181905542601255670de0b6b3a76400006013556305f5e100601455620f42406015556058601655601a556001601b5560408051808201909152600580825264466f72676560d81b60209092019182526200013191601c916200024c565b5042601d5543601e55601f805460ff191690553480156200015157600080fd5b50600080546001600160a01b0319163390811782556040805192835260208301919091527f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c910160405180910390a1336000818152601860209081526040808320670de0b6b3a76400009081905590519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620004a8565b600081620002375760405162461bcd60e51b815260206004820152600b60248201526a446976206279207a65726f60a81b604482015260640160405180910390fd5b62000243828462000448565b90505b92915050565b8280546200025a906200046b565b90600052602060002090601f0160209004810192826200027e5760008555620002c9565b82601f106200029957805160ff1916838001178555620002c9565b82800160010185558215620002c9579182015b82811115620002c9578251825591602001919060010190620002ac565b50620002d7929150620002db565b5090565b5b80821115620002d75760008155600101620002dc565b634e487b7160e01b600052601160045260246000fd5b6000828210156200031d576200031d620002f2565b500390565b60008219821115620003385762000338620002f2565b500190565b600181815b808511156200037e578160001904821115620003625762000362620002f2565b808516156200037057918102915b93841c939080029062000342565b509250929050565b600082620003975750600162000246565b81620003a65750600062000246565b8160018114620003bf5760028114620003ca57620003ea565b600191505062000246565b60ff841115620003de57620003de620002f2565b50506001821b62000246565b5060208310610133831016604e8410600b84101617156200040f575081810a62000246565b6200041b83836200033d565b8060001904821115620004325762000432620002f2565b029392505050565b600062000243838362000386565b6000826200046657634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806200048057607f821691505b60208210811415620004a257634e487b7160e01b600052602260045260246000fd5b50919050565b61370a80620004b86000396000f3fe6080604052600436106102f65760003560e01c806381269a561161018f578063a68eb88e116100e1578063d0856d161161008a578063ddfbd8dd11610064578063ddfbd8dd146108b9578063e932012b146108d9578063f7a5f155146108ef57600080fd5b8063d0856d161461083b578063dc6e9cf914610850578063dd62ed3e1461086657600080fd5b8063c0abebe0116100bb578063c0abebe0146107f0578063c8a1465c14610805578063cb9ae7071461082557600080fd5b8063a68eb88e146107a4578063a9059cbb146107ba578063b5ade81b146107da57600080fd5b80638da5cb5b1161014357806395d89b411161011d57806395d89b41146106ce57806397566aa01461071757806399f584b31461078e57600080fd5b80638da5cb5b146106545780638f4ffcb11461068157806394b939ef146106a157600080fd5b806387a2a9d61161017457806387a2a9d6146106125780638a769d35146106285780638ae0368b1461063e57600080fd5b806381269a56146105dc578063829965cc146105fc57600080fd5b8063313ce567116102485780634fa972e1116101fc5780636de9f32b116101d65780636de9f32b1461056e57806370a0823114610584578063757991a8146105c757600080fd5b80634fa972e114610509578063510de0941461051f57806364e467261461054c57600080fd5b806345d8a2321161022d57806345d8a232146104c9578063490203a7146104df5780634ef37628146104f457600080fd5b8063313ce5671461048d57806332e99708146104b457600080fd5b806318160ddd116102aa57806323b872dd1161028457806323b872dd146104055780632d38bf7a146104255780632f104e0c1461043b57600080fd5b806318160ddd146103b95780631fccb33c146103cf5780632381a60e146103ef57600080fd5b806310294317116102db578063102943171461036057806317da485f146103845780631801fbe51461039957600080fd5b806306fdde0314610305578063095ea7b31461033057600080fd5b3661030057600080fd5b600080fd5b34801561031157600080fd5b5061031a61090f565b6040516103279190612e87565b60405180910390f35b34801561033c57600080fd5b5061035061034b366004612f23565b61099d565b6040519015158152602001610327565b34801561036c57600080fd5b5061037660125481565b604051908152602001610327565b34801561039057600080fd5b50610376610a17565b3480156103a557600080fd5b506103506103b4366004612f4d565b610a35565b3480156103c557600080fd5b5061037660055481565b3480156103db57600080fd5b506103506103ea366004613074565b610a49565b3480156103fb57600080fd5b5061037660105481565b34801561041157600080fd5b506103506104203660046130d5565b610b19565b34801561043157600080fd5b50610376600e5481565b34801561044757600080fd5b506003546104689073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610327565b34801561049957600080fd5b506104a2601281565b60405160ff9091168152602001610327565b3480156104c057600080fd5b50600c54610376565b3480156104d557600080fd5b50610376610b4081565b3480156104eb57600080fd5b50610376610c4b565b34801561050057600080fd5b50600d54610376565b34801561051557600080fd5b50610376600f5481565b34801561052b57600080fd5b506004546104689073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055857600080fd5b5061056c610567366004613111565b610c7c565b005b34801561057a57600080fd5b5061037660175481565b34801561059057600080fd5b5061037661059f366004613154565b73ffffffffffffffffffffffffffffffffffffffff1660009081526018602052604090205490565b3480156105d357600080fd5b50600854610376565b3480156105e857600080fd5b506103506105f736600461316f565b610e7c565b34801561060857600080fd5b5061037660085481565b34801561061e57600080fd5b50610376600b5481565b34801561063457600080fd5b50610376600c5481565b34801561064a57600080fd5b50610376600d5481565b34801561066057600080fd5b506000546104689073ffffffffffffffffffffffffffffffffffffffff1681565b34801561068d57600080fd5b5061056c61069c3660046131a1565b610eec565b3480156106ad57600080fd5b506002546104689073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106da57600080fd5b5061031a6040518060400160405280600381526020017f466765000000000000000000000000000000000000000000000000000000000081525081565b34801561072357600080fd5b5061037661073236600461327f565b5050600d54604080516020808201939093523360601b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001681830152605480820194909452815180820390940184526074019052815191012090565b34801561079a57600080fd5b5061037660015481565b3480156107b057600080fd5b5061037660155481565b3480156107c657600080fd5b506103506107d5366004612f23565b610fac565b3480156107e657600080fd5b5061037660095481565b3480156107fc57600080fd5b50601754610376565b34801561081157600080fd5b506103766108203660046132ab565b61105d565b34801561083157600080fd5b50610376601e5481565b34801561084757600080fd5b5061056c61165d565b34801561085c57600080fd5b50610376600a5481565b34801561087257600080fd5b50610376610881366004613322565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260196020908152604080832093909416825291909152205490565b3480156108c557600080fd5b506103766108d4366004613355565b611908565b3480156108e557600080fd5b5061037660075481565b3480156108fb57600080fd5b5061037661090a3660046132ab565b611eeb565b601c805461091c90613381565b80601f016020809104026020016040519081016040528092919081815260200182805461094890613381565b80156109955780601f1061096a57610100808354040283529160200191610995565b820191906000526020600020905b81548152906001019060200180831161097857829003601f168201915b505050505081565b33600081815260196020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a059086815260200190565b60405180910390a35060015b92915050565b6000610a30600c54600b546126fc90919063ffffffff16565b905090565b6000610a42838333611908565b5092915050565b60008083516001610a5a9190613404565b67ffffffffffffffff811115610a7257610a72612f6f565b604051908082528060200260200182016040528015610a9b578160200160208202803683370190505b50905060005b8451610aae906001613404565b811015610aff5783828281518110610ac857610ac861341c565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015280610af78161344b565b915050610aa1565b50610b0c8686868461105d565b5060019695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260186020526040812054610b499083612776565b73ffffffffffffffffffffffffffffffffffffffff85166000908152601860209081526040808320939093556019815282822033835290522054610b8d9083612776565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152601960209081526040808320338452825280832094909455918616815260189091522054610bd890836127ec565b73ffffffffffffffffffffffffffffffffffffffff80851660008181526018602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c399086815260200190565b60405180910390a35060019392505050565b6000610a30600e546002610c5f91906135a4565b610c6b6012600a6135a4565b610c769060646135b0565b906126fc565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e65720000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b601f546a115eec47f6cf7e350000009060ff1615610d2257610d226135ed565b601f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905542601255600e54610d6390610c5f9060026135a4565b6010556000600e8190556017819055600855600b54610d839060016126fc565b600c5542600755610d92612865565b610d9d60028261364b565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260186020526040812092909255907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610df360028561364b565b60405190815260200160405180910390a36002805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255600380548684169083161790556004805492851692909116919091179055600854601155610e766000612b02565b50505050565b6040805160208082018590523360601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016828401526054808301889052835180840390910181526074909201909252805191012060009082811115610ee157600080fd5b909314949350505050565b73ffffffffffffffffffffffffffffffffffffffff82163014610f0e57600080fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101849052309063a9059cbb906044016020604051808303816000875af1158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa5919061365f565b5050505050565b33600090815260186020526040812054610fc69083612776565b336000908152601860205260408082209290925573ffffffffffffffffffffffffffffffffffffffff851681522054610fff90836127ec565b73ffffffffffffffffffffffffffffffffffffffff84166000818152601860205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610a059086815260200190565b6000806110858686856000815181106110785761107861341c565b6020026020010151611908565b9050600081116110f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6d696e74206973737565000000000000000000000000000000000000000000006044820152606401610cf9565b83516110fe906001613404565b83511461118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d696e74546f2068617320746f206861766520616e206578747261206164647260448201527f65737320636f6d706172656420746f20457874726146756e64730000000000006064820152608401610cf9565b60005b84518110156113d3576111a4816001613404565b6111af9060026135a4565b6008546111bc9190613681565b156111c6576113d3565b3073ffffffffffffffffffffffffffffffffffffffff168582815181106111ef576111ef61341c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156112675750600454855173ffffffffffffffffffffffffffffffffffffffff909116908690839081106112465761124661341c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b6112cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f2062617365207072696e74696e67206f6620746f6b656e730000000000006044820152606401610cf9565b60006112da826001613404565b90505b85518110156113c0578582815181106112f8576112f861341c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168682815181106113285761132861341c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156113ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4e6f207072696e74696e67205468652073616d6520746f6b656e7300000000006044820152606401610cf9565b806113b88161344b565b9150506112dd565b50806113cb8161344b565b915050611190565b60008060005b838110156115ff576113ec816001613404565b6113f79060026135a4565b6008546114049190613681565b6115ed5787818151811061141a5761141a61341c565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015611490573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b49190613695565b9150811561150e576114c7600382613681565b1580156114d357508015155b156114f8576114f1643a352944006114eb87856135b0565b90612c1e565b925061150e565b61150b643a35294400610c7687856135b0565b92505b8781815181106115205761152061341c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb888360016115519190613404565b815181106115615761156161341c565b6020026020010151856040518363ffffffff1660e01b81526004016115a892919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020604051808303816000875af11580156115c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115eb919061365f565b505b806115f78161344b565b9150506113d9565b50600854600d5460408051928352602083019190915281018490526060810185905233907f87e5a7775b8ac2ead741e32752431bffeff76ec5f347cc202a6bad454653930b9060800160405180910390a25091979650505050505050565b6000601d544261166d91906136ae565b9050600060115460085461168191906136ae565b9050600061168f828461364b565b90506116a3600e546002610c5f91906135a4565b60105560006116ba610b406114eb846103786135b0565b905060006103786116cc8360646135b0565b6116d6919061364b565b9050600060c8821015611728576116f7610378610c768563026f7f3c6135b0565b611717620c08406117096002876136c5565b610c76906303a2cdf06135b0565b6117219190613404565b905061172f565b50631443fd005b600460095460155461174191906135b0565b61174c90603c6135b0565b611756919061364b565b600480546040517f70a08231000000000000000000000000000000000000000000000000000000008152309281019290925273ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156117c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e99190613695565b11156118f057600454600354601a5460155473ffffffffffffffffffffffffffffffffffffffff9384169363a9059cbb93169161184591630bebc2009190611831888d6135b0565b61183b91906135b0565b610c7691906135b0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156118b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d9919061365f565b50601b546118e89060016135b0565b601a556118f6565b6000601a555b5050600854601155505042601d555050565b600d546040805160208101929092527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b16908201526054810184905260009081906074016040516020818303038152906040528051906020012090508381146119f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f6c64206368616c6c656e67655f646967657374206f722077726f6e6720636860448201527f616c6c656e67655f6469676573740000000000000000000000000000000000006064820152608401610cf9565b600c548110611a88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f446967657374206d75737420626520736d616c6c6572207468616e206d696e6960448201527f6e675461726765740000000000000000000000000000000000000000000000006064820152608401610cf9565b611a90612865565b6012544211611afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f2073616d65207365636f6e6420736f6c76657300000000000000000000006044820152606401610cf9565b6000610b4060125442611b0e91906136ae565b611b1a906103786135b0565b611b24919061364b565b90506000610378611b368360646135b0565b611b40919061364b565b9050600061013a821015611b8557611b62610378610c768563026f7f3c6135b0565b611b74620c08406117096002876136c5565b611b7e9190613404565b9050611baa565b611b99610378610c76856305f5e1006135b0565b611ba7906314dc9380613404565b90505b611bef611bc36305f5e10083601054610c7691906135b0565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260186020526040902054906127ec565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260186020526040902055601054611c5f90611c3190630bebc20090610c769085906135b0565b60035473ffffffffffffffffffffffffffffffffffffffff16600090815260186020526040902054906127ec565b60035473ffffffffffffffffffffffffffffffffffffffff16600090815260186020526040902055601054611cac90611ca3906305f5e10090610c769085906135b0565b601754906127ec565b60175542601255601a5415611e6e5760c8821015611d9c57600454601a5460155473ffffffffffffffffffffffffffffffffffffffff9092169163a9059cbb918991611d02916305f5e1009161183b90886135b0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015611d72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d96919061365f565b50611e6e565b600454601a5460155473ffffffffffffffffffffffffffffffffffffffff9092169163a9059cbb918991611dd891600a9161183b9060226135b0565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af1158015611e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6c919061365f565b505b3373ffffffffffffffffffffffffffffffffffffffff167fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d611ebc6305f5e10084601054610c7691906135b0565b600854600d546040805193845260208401929092529082015260600160405180910390a2979650505050505050565b600d546040805160208101929092527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1690820152605481018590526000908190607401604051602081830303815290604052805190602001209050848114611fda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f6c64206368616c6c656e67655f646967657374206f722077726f6e6720636860448201527f616c6c656e67655f6469676573740000000000000000000000000000000000006064820152608401610cf9565b600c54811061206b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f446967657374206d75737420626520736d616c6c6572207468616e206d696e6960448201527f6e675461726765740000000000000000000000000000000000000000000000006064820152608401610cf9565b612073612865565b60125442116120de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f2073616d65207365636f6e6420736f6c76657300000000000000000000006044820152606401610cf9565b835183511461216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d696e74546f2068617320746f20686176652073616d65206e756d626572206f60448201527f66206164647265737373657320617320457874726146756e64730000000000006064820152608401610cf9565b60005b84518110156123b557612186816001613404565b6121919060026135a4565b60085461219e9190613681565b156121a8576123b5565b3073ffffffffffffffffffffffffffffffffffffffff168582815181106121d1576121d161341c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141580156122495750600454855173ffffffffffffffffffffffffffffffffffffffff909116908690839081106122285761222861341c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b6122af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f2062617365207072696e74696e67206f6620746f6b656e730000000000006044820152606401610cf9565b60006122bc826001613404565b90505b85518110156123a2578582815181106122da576122da61341c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1686828151811061230a5761230a61341c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4e6f207072696e74696e67205468652073616d6520746f6b656e7300000000006044820152606401610cf9565b8061239a8161344b565b9150506122bf565b50806123ad8161344b565b915050612172565b6000610b40601254426123c891906136ae565b6123d4906103786135b0565b6123de919061364b565b905060006103786123f08360646135b0565b6123fa919061364b565b9050600061013a82101561243f5761241c610378610c768563026f7f3c6135b0565b61242e620c08406117096002876136c5565b6124389190613404565b9050612464565b612453610378610c76856305f5e1006135b0565b612461906314dc9380613404565b90505b600081116124ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6d696e74206973737565000000000000000000000000000000000000000000006044820152606401610cf9565b60008060005b868110156126e8576124e7816001613404565b6124f29060026135a4565b6008546124ff9190613681565b6126d6578a81815181106125155761251561341c565b60209081029190910101516040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa15801561258b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125af9190613695565b915081156126d6576125c2600382613681565b1580156125ce57508015155b156125ed576125e6643a352944006114eb86856135b0565b9250612603565b612600643a35294400610c7686856135b0565b92505b8a81815181106126155761261561341c565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8b838151811061264a5761264a61341c565b6020026020010151856040518363ffffffff1660e01b815260040161269192919073ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b6020604051808303816000875af11580156126b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d4919061365f565b505b806126e08161344b565b9150506124d4565b505042601255509998505050505050505050565b600081612765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f446976206279207a65726f0000000000000000000000000000000000000000006044820152606401610cf9565b61276f828461364b565b9392505050565b6000818310156127e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f53756220756e646572666c6f77000000000000000000000000000000000000006044820152606401610cf9565b61276f82846136ae565b6000806127f98385613404565b90508381101561276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f416464206f766572666c6f7700000000000000000000000000000000000000006044820152606401610cf9565b600f54601054601754612877916127ec565b1180156128865750603c600e54105b156128d257600e54612899906001613404565b600e8190556128c1906128ad906001613404565b6128b89060026135a4565b600654906126fc565b6006546128ce91906136ae565b600f555b6008546128e09060016127ec565b6008556009546128f29060049061364b565b6008546128ff9190613681565b612af15761290b61165d565b61291d600e5460016128ad9190613404565b60065461292a91906136ae565b600f5560095460085461293d9190613681565b612af157600480546040517f70a082310000000000000000000000000000000000000000000000000000000081523092810192909252642e90edd0009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156129b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129dd9190613695565b6129e7919061364b565b60018190556129f8906127106135b0565b612a0490612710613404565b601554600480546040517f70a08231000000000000000000000000000000000000000000000000000000008152309281019290925273ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612a76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9a9190613695565b612aa4919061364b565b11612ad757601654601554612aba9060026126fc565b1115612ad257601554612ace9060026126fc565b6015555b612ae9565b601554612ae5906003612cb7565b6015555b612af1612d46565b612afc6001436136ae565b40600d55565b60005473ffffffffffffffffffffffffffffffffffffffff163314612b83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e6572000000000000000000000000000000000000000000006044820152606401610cf9565b6000546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527f5c486528ec3e3f0ea91181cff8116f02bfa350e03b8b6f12e00765adbb5af85c910160405180910390a1600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081612c87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f446976206279207a65726f0000000000000000000000000000000000000000006044820152606401610cf9565b6000612c93838561364b565b9050612c9f8385613681565b1561276f57612caf816001613404565b949350505050565b600082612cc657506000610a11565b6000612cd283856135b0565b905082612cdf858361364b565b1461276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d756c74206f766572666c6f77000000000000000000000000000000000000006044820152606401610cf9565b6007544290600090612d5890836136ae565b90506000600954610b40612d6c91906135b0565b905080821015612de1576000612d8783610c76846064612cb7565b6001601b5590506000612da76103e8612da1846064612776565b90612e6f565b9050612dd6612dcd82612dc76107d0600c546126fc90919063ffffffff16565b90612cb7565b600c5490612776565b600c5550612e3b9050565b6000612df282610c76856064612cb7565b6002601b5590506000612e0c6103e8612da1846064612776565b9050612e35612e2c82612dc76101f4600c546126fc90919063ffffffff16565b600c54906127ec565b600c5550505b600783905543601e55600a54600c541015612e5757600a54600c555b600b54600c541115612e6a57600b54600c555b505050565b600081831115612e80575080610a11565b5090919050565b600060208083528351808285015260005b81811015612eb457858101830151858201604001528201612e98565b81811115612ec6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612f1e57600080fd5b919050565b60008060408385031215612f3657600080fd5b612f3f83612efa565b946020939093013593505050565b60008060408385031215612f6057600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612fe557612fe5612f6f565b604052919050565b600082601f830112612ffe57600080fd5b8135602067ffffffffffffffff82111561301a5761301a612f6f565b8160051b613029828201612f9e565b928352848101820192828101908785111561304357600080fd5b83870192505b848310156130695761305a83612efa565b82529183019190830190613049565b979650505050505050565b6000806000806080858703121561308a57600080fd5b8435935060208501359250604085013567ffffffffffffffff8111156130af57600080fd5b6130bb87828801612fed565b9250506130ca60608601612efa565b905092959194509250565b6000806000606084860312156130ea57600080fd5b6130f384612efa565b925061310160208501612efa565b9150604084013590509250925092565b60008060006060848603121561312657600080fd5b61312f84612efa565b925061313d60208501612efa565b915061314b60408501612efa565b90509250925092565b60006020828403121561316657600080fd5b61276f82612efa565b6000806000806080858703121561318557600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080608085870312156131b757600080fd5b6131c085612efa565b935060208086013593506131d660408701612efa565b9250606086013567ffffffffffffffff808211156131f357600080fd5b818801915088601f83011261320757600080fd5b81358181111561321957613219612f6f565b613249847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612f9e565b9150808252898482850101111561325f57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060006060848603121561329457600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156132c157600080fd5b8435935060208501359250604085013567ffffffffffffffff808211156132e757600080fd5b6132f388838901612fed565b9350606087013591508082111561330957600080fd5b5061331687828801612fed565b91505092959194509250565b6000806040838503121561333557600080fd5b61333e83612efa565b915061334c60208401612efa565b90509250929050565b60008060006060848603121561336a57600080fd5b833592506020840135915061314b60408501612efa565b600181811c9082168061339557607f821691505b602082108114156133cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115613417576134176133d5565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561347d5761347d6133d5565b5060010190565b600181815b808511156134dd57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156134c3576134c36133d5565b808516156134d057918102915b93841c9390800290613489565b509250929050565b6000826134f457506001610a11565b8161350157506000610a11565b816001811461351757600281146135215761353d565b6001915050610a11565b60ff841115613532576135326133d5565b50506001821b610a11565b5060208310610133831016604e8410600b8410161715613560575081810a610a11565b61356a8383613484565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561359c5761359c6133d5565b029392505050565b600061276f83836134e5565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156135e8576135e86133d5565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261365a5761365a61361c565b500490565b60006020828403121561367157600080fd5b8151801515811461276f57600080fd5b6000826136905761369061361c565b500690565b6000602082840312156136a757600080fd5b5051919050565b6000828210156136c0576136c06133d5565b500390565b600061276f60ff8416836134e556fea2646970667358221220bb03436d9d65562d4e1d802ec17043fb29bc5e7165ef1bc37d740d60a44194e764736f6c634300080b0033

Deployed ByteCode Sourcemap

6107:18933:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;;;;;;;;;;;25024:8;;;6107:18933;;;;;;;;;;;25024:8;;;6107:18933;;;;24969:8;;;6107:18933;25024:8;;;8155:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22820:204;;;;;;;;;;-1:-1:-1;22820:204:0;;;;;:::i;:::-;;:::i;:::-;;;1300:14:1;;1293:22;1275:41;;1263:2;1248:18;22820:204:0;1135:187:1;7719:49:0;;;;;;;;;;;;;;;;;;;1473:25:1;;;1461:2;1446:18;7719:49:0;1327:177:1;20335:110:0;;;;;;;;;;;;;:::i;10640:138::-;;;;;;;;;;-1:-1:-1;10640:138:0;;;;;:::i;:::-;;:::i;6729:64::-;;;;;;;;;;;;;;;;14051:383;;;;;;;;;;-1:-1:-1;14051:383:0;;;;;:::i;:::-;;:::i;7625:29::-;;;;;;;;;;;;;;;;23566:327;;;;;;;;;;-1:-1:-1;23566:327:0;;;;;:::i;:::-;;:::i;7502:25::-;;;;;;;;;;;;;;;;6310:30;;;;;;;;;;-1:-1:-1;6310:30:0;;;;;;;;;;;4086:42:1;4074:55;;;4056:74;;4044:2;4029:18;6310:30:0;3910:226:1;8234:35:0;;;;;;;;;;;;8267:2;8234:35;;;;;4313:4:1;4301:17;;;4283:36;;4271:2;4256:18;8234:35:0;4141:184:1;20452:87:0;;;;;;;;;;-1:-1:-1;20520:12:0;;20452:87;;6169:41;;;;;;;;;;;;6203:7;6169:41;;20743:237;;;;;;;;;;;;;:::i;20152:96::-;;;;;;;;;;-1:-1:-1;20226:15:0;;20152:96;;7534:84;;;;;;;;;;;;;;;;6347:30;;;;;;;;;;-1:-1:-1;6347:30:0;;;;;;;;8597:945;;;;;;;;;;-1:-1:-1;8597:945:0;;;;;:::i;:::-;;:::i;:::-;;7963:24;;;;;;;;;;;;;;;;21574:124;;;;;;;;;;-1:-1:-1;21574:124:0;;;;;:::i;:::-;21671:20;;21643:12;21671:20;;;:8;:20;;;;;;;21574:124;20987:79;;;;;;;;;;-1:-1:-1;21048:10:0;;20987:79;;19730:332;;;;;;;;;;-1:-1:-1;19730:332:0;;;;;:::i;:::-;;:::i;7022:26::-;;;;;;;;;;;;;;;;7206:37;;;;;;;;;;;;;;;;7250:63;;;;;;;;;;;;;;;;7384:60;;;;;;;;;;;;;;;;3025:20;;;;;;;;;;-1:-1:-1;3025:20:0;;;;;;;;24698:198;;;;;;;;;;-1:-1:-1;24698:198:0;;;;;:::i;:::-;;:::i;6274:29::-;;;;;;;;;;-1:-1:-1;6274:29:0;;;;;;;;8190:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21104:246;;;;;;;;;;-1:-1:-1;21104:246:0;;;;;:::i;:::-;-1:-1:-1;;21287:15:0;;21270:52;;;;;;;12033:19:1;;;;21304:10:0;12090:2:1;12086:15;12103:66;12082:88;12068:12;;;12061:110;12187:12;;;;12180:28;;;;21270:52:0;;;;;;;;;;12224:12:1;;21270:52:0;;21260:63;;;;;;21104:246;6217:25;;;;;;;;;;;;;;;;7869:40;;;;;;;;;;;;;;;;22048:257;;;;;;;;;;-1:-1:-1;22048:257:0;;;;;:::i;:::-;;:::i;7083:42::-;;;;;;;;;;;;;;;;20546:87;;;;;;;;;;-1:-1:-1;20614:12:0;;20546:87;;12435:1609;;;;;;;;;;-1:-1:-1;12435:1609:0;;;;;:::i;:::-;;:::i;8318:56::-;;;;;;;;;;;;;;;;9580:1029;;;;;;;;;;;;;:::i;7157:36::-;;;;;;;;;;;;;;;;24180:151;;;;;;;;;;-1:-1:-1;24180:151:0;;;;;:::i;:::-;24296:19;;;;24266:14;24296:19;;;:7;:19;;;;;;;;:28;;;;;;;;;;;;;24180:151;10785:1643;;;;;;;;;;-1:-1:-1;10785:1643:0;;;;;:::i;:::-;;:::i;6955:60::-;;;;;;;;;;;;;;;;14441:2255;;;;;;;;;;-1:-1:-1;14441:2255:0;;;;;:::i;:::-;;:::i;8155:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22820:204::-;22921:10;22892:12;22913:19;;;:7;:19;;;;;;;;;:28;;;;;;;;;;:37;;;22962;22892:12;;22913:28;;22962:37;;;;22944:6;1473:25:1;;1461:2;1446:18;;1327:177;22962:37:0;;;;;;;;-1:-1:-1;23013:4:0;22820:204;;;;;:::o;20335:110::-;20387:4;20407:33;20427:12;;20407:15;;:19;;:33;;;;:::i;:::-;20400:40;;20335:110;:::o;10640:138::-;10711:12;10730:43;10737:5;10744:16;10762:10;10730:6;:43::i;:::-;;10640:138;;;;:::o;14051:383::-;14184:12;14203:19;14239:10;:17;14259:1;14239:21;;;;:::i;:::-;14225:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14225:36:0;;14203:58;;14273:6;14269:76;14287:17;;:21;;14307:1;14287:21;:::i;:::-;14283:1;:26;14269:76;;;14333:6;14325:2;14328:1;14325:5;;;;;;;;:::i;:::-;:14;;;;:5;;;;;;;;;;;:14;14311:3;;;;:::i;:::-;;;;14269:76;;;;14353:58;14371:5;14378:16;14396:10;14408:2;14353:17;:58::i;:::-;-1:-1:-1;14425:4:0;;14051:383;-1:-1:-1;;;;;;14051:383:0:o;23566:327::-;23690:14;;;23652:12;23690:14;;;:8;:14;;;;;;:26;;23709:6;23690:18;:26::i;:::-;23673:14;;;;;;;:8;:14;;;;;;;;:43;;;;23749:7;:13;;;;;23763:10;23749:25;;;;;;:37;;23779:6;23749:29;:37::i;:::-;23721:13;;;;;;;;:7;:13;;;;;;;;23735:10;23721:25;;;;;;;:65;;;;23806:12;;;;;:8;:12;;;;;:24;;23823:6;23806:16;:24::i;:::-;23791:12;;;;;;;;:8;:12;;;;;;;:39;;;;23842:26;;;;;;;;;;23861:6;1473:25:1;;1461:2;1446:18;;1327:177;23842:26:0;;;;;;;;-1:-1:-1;23882:4:0;23566:327;;;;;:::o;20743:237::-;20791:4;20924:47;20960:9;;20957:1;:12;;;;:::i;:::-;20931:18;8267:2;20931;:18;:::i;:::-;20925:24;;:3;:24;:::i;:::-;20924:31;;:47::i;8597:945::-;3291:5;;;;3277:10;:19;3269:42;;;;;;;11208:2:1;3269:42:0;;;11190:21:1;11247:2;11227:18;;;11220:30;11286:12;11266:18;;;11259:40;11316:18;;3269:42:0;;;;;;;;;8790:7:::1;::::0;8717:26:::1;::::0;8790:7:::1;;8789:8;8782:16;;;;:::i;:::-;8809:7;:14:::0;;;::::1;8819:4;8809:14;::::0;;8851:15:::1;8831:17;:35:::0;8926:9:::1;::::0;8890:47:::1;::::0;8923:12:::1;::::0;:1:::1;:12;:::i;8890:47::-;8874:13;:63:::0;8957:1:::1;8945:9;:13:::0;;;8966:12:::1;:16:::0;;;8990:10:::1;:14:::0;9027:15:::1;::::0;:22:::1;::::0;9047:1:::1;9027:19;:22::i;:::-;9012:12;:37:::0;9136:15:::1;9103:30;:48:::0;9159:22:::1;:20;:22::i;:::-;9265:3;9267:1;9265::::0;:3:::1;:::i;:::-;9237:25;::::0;::::1;;::::0;;;:8:::1;:25;::::0;;;;:31;;;;:25;9287:42:::1;9325:3;9327:1;9325::::0;:3:::1;:::i;:::-;9287:42;::::0;1473:25:1;;;1461:2;1446:18;9287:42:0::1;;;;;;;9340:14;:32:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;9383:15:::1;:35:::0;;;;::::1;::::0;;::::1;;::::0;;9429:15:::1;:34:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;9489:10:::1;::::0;9477:9:::1;:22:::0;9507:20:::1;9340:14;9507:8;:20::i;:::-;8697:845;8597:945:::0;;;:::o;19730:332::-;19916:51;;;;;;;12033:19:1;;;19950:10:0;12090:2:1;12086:15;12103:66;12082:88;12068:12;;;12061:110;12187:12;;;;12180:28;;;19916:51:0;;;;;;;;;;12224:12:1;;;;19916:51:0;;;19906:62;;;;;-1:-1:-1;;19977:28:0;;;19974:41;;;20007:8;;;19974:41;20030:26;;;;19730:332;-1:-1:-1;;;;19730:332:0:o;24698:198::-;24817:22;;;24834:4;24817:22;24809:31;;;;;;24845:44;;;;;12451:42:1;12439:55;;24845:44:0;;;12421:74:1;12511:18;;;12504:34;;;24860:4:0;;24845:30;;12394:18:1;;24845:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24698:198;;;;:::o;22048:257::-;22169:10;22116:12;22160:20;;;:8;:20;;;;;;:32;;22185:6;22160:24;:32::i;:::-;22146:10;22137:20;;;;:8;:20;;;;;;:55;;;;:20;22212:12;;;;;;:24;;22229:6;22212:16;:24::i;:::-;22197:12;;;;;;;:8;:12;;;;;;;:39;;;;22248:32;;22257:10;;22248:32;;;;22273:6;1473:25:1;;1461:2;1446:18;;1327:177;12435:1609:0;12573:12;12592:15;12610:41;12617:5;12623:16;12641:6;12648:1;12641:9;;;;;;;;:::i;:::-;;;;;;;12610:6;:41::i;:::-;12592:59;;12674:1;12664:7;:11;12656:34;;;;;;;13033:2:1;12656:34:0;;;13015:21:1;13072:2;13052:18;;;13045:30;13111:12;13091:18;;;13084:40;13141:18;;12656:34:0;12831:334:1;12656:34:0;12722:17;;:21;;12742:1;12722:21;:::i;:::-;12705:6;:13;:38;12697:108;;;;;;;13372:2:1;12697:108:0;;;13354:21:1;13411:2;13391:18;;;13384:30;13450:34;13430:18;;;13423:62;13521:28;13501:18;;;13494:56;13567:19;;12697:108:0;13170:422:1;12697:108:0;12810:7;12824:353;12840:10;:17;12836:2;:21;12824:353;;;12895:4;:2;12898:1;12895:4;:::i;:::-;12891:9;;:1;:9;:::i;:::-;12877:10;;:24;;;;:::i;:::-;:29;12874:52;;12914:5;;12874:52;12965:4;12939:31;;:10;12950:2;12939:14;;;;;;;;:::i;:::-;;;;;;;:31;;;;:68;;;;-1:-1:-1;12992:15:0;;12974:14;;12992:15;;;;;12974:10;;12985:2;;12974:14;;;;;;:::i;:::-;;;;;;;:33;;;;12939:68;12931:107;;;;;;;13916:2:1;12931:107:0;;;13898:21:1;13955:2;13935:18;;;13928:30;13994:28;13974:18;;;13967:56;14040:18;;12931:107:0;13714:350:1;12931:107:0;13048:6;13055:4;:2;13058:1;13055:4;:::i;:::-;13048:11;;13044:128;13064:10;:17;13061:1;:20;13044:128;;;13119:10;13130:2;13119:14;;;;;;;;:::i;:::-;;;;;;;13102:31;;:10;13113:1;13102:13;;;;;;;;:::i;:::-;;;;;;;:31;;;;13094:71;;;;;;;14271:2:1;13094:71:0;;;14253:21:1;14310:2;14290:18;;;14283:30;14349:29;14329:18;;;14322:57;14396:18;;13094:71:0;14069:351:1;13094:71:0;13083:3;;;;:::i;:::-;;;;13044:128;;;-1:-1:-1;12859:4:0;;;;:::i;:::-;;;;12824:353;;;13185:17;13211:18;13242:6;13238:692;13254:2;13252:1;:4;13238:692;;;13548:3;:1;13550;13548:3;:::i;:::-;13544:8;;:1;:8;:::i;:::-;13530:10;;:23;;;;:::i;:::-;13527:392;;13586:10;13597:1;13586:13;;;;;;;;:::i;:::-;;;;;;;;;;;13579:46;;;;;13619:4;13579:46;;;4056:74:1;13579:31:0;;;;;;;4029:18:1;;13579:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13566:59;-1:-1:-1;13635:15:0;;13632:217;;13663:5;13667:1;13663;:5;:::i;:::-;:10;:20;;;;-1:-1:-1;13677:6:0;;;13663:20;13659:183;;;13705:49;13737:16;13706:20;13719:7;13706:10;:20;:::i;:::-;13705:31;;:49::i;:::-;13693:61;;13659:183;;;13788:45;13815:16;13789:20;13802:7;13789:10;:20;:::i;13788:45::-;13776:57;;13659:183;13865:10;13876:1;13865:13;;;;;;;;:::i;:::-;;;;;;;13858:30;;;13889:6;13896:1;13898;13896:3;;;;:::i;:::-;13889:11;;;;;;;;:::i;:::-;;;;;;;13902:9;13858:54;;;;;;;;;;;;;;;12451:42:1;12439:55;;;;12421:74;;12526:2;12511:18;;12504:34;12409:2;12394:18;;12247:297;13858:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13527:392;13258:3;;;;:::i;:::-;;;;13238:692;;;-1:-1:-1;13971:10:0;;13983:15;;13950:63;;;14845:25:1;;;14901:2;14886:18;;14879:34;;;;14929:18;;14922:34;;;14987:2;14972:18;;14965:34;;;13959:10:0;;13950:63;;14832:3:1;14817:19;13950:63:0;;;;;;;-1:-1:-1;14027:7:0;;12435:1609;-1:-1:-1;;;;;;;12435:1609:0:o;9580:1029::-;9664:12;9697:7;;9679:15;:25;;;;:::i;:::-;9664:40;;9711:18;9745:9;;9732:10;;:22;;;;:::i;:::-;9711:43;-1:-1:-1;9776:20:0;9799:17;9711:43;9799:4;:17;:::i;:::-;9776:40;;9839:46;9874:9;;9871:1;:12;;;;:::i;9839:46::-;9823:13;:62;9890:9;9902:41;6203:7;9903:18;:12;9918:3;9903:18;:::i;9902:41::-;9890:53;-1:-1:-1;9948:13:0;9974:3;9964:7;9890:53;9968:3;9964:7;:::i;:::-;:13;;;;:::i;:::-;9948:29;;9982:17;10020:3;10012:5;:11;10009:141;;;10079:23;10098:3;10080:12;10091:1;10080:8;:12;:::i;10079:23::-;10042:34;10069:6;10055;10060:1;10055;:6;:::i;:::-;10043:20;;:8;:20;:::i;10042:34::-;:60;;;;:::i;:::-;10030:72;;10009:141;;;-1:-1:-1;10134:9:0;10009:141;10260:1;10234:24;;10222:9;;:36;;;;:::i;:::-;10212:47;;:6;:47;:::i;:::-;:49;;;;:::i;:::-;10167:15;;;10160:48;;;;;10202:4;10160:48;;;4056:74:1;;;;10167:15:0;;;10160:33;;4029:18:1;;10160:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:102;10157:372;;;10355:15;;10381;;10438:9;;10426;;10355:15;;;;;10348:32;;10381:15;;10398:69;;10453:13;;10438:9;10399:24;10414:9;10400:10;10399:24;:::i;:::-;:36;;;;:::i;:::-;:48;;;;:::i;10398:69::-;10348:120;;;;;;;;;;12451:42:1;12439:55;;;10348:120:0;;;12421:74:1;12511:18;;;12504:34;12394:18;;10348:120:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;10490:4:0;;10486:8;;:1;:8;:::i;:::-;10474:9;:20;10157:372;;;10522:1;10510:9;:13;10157:372;-1:-1:-1;;10545:10:0;;10533:9;:22;-1:-1:-1;;10589:15:0;10579:7;:25;-1:-1:-1;;9580:1029:0:o;10785:1643::-;10941:15;;10924:52;;;;;;12033:19:1;;;;12103:66;10958:10:0;12090:2:1;12086:15;12082:88;12068:12;;;12061:110;12187:12;;;12180:28;;;10875:12:0;;;;12224::1;;10924:52:0;;;;;;;;;;;;10914:63;;;;;;10896:81;;11052:16;11042:6;:26;11034:85;;;;;;;15487:2:1;11034:85:0;;;15469:21:1;15526:2;15506:18;;;15499:30;15565:34;15545:18;;;15538:62;15636:16;15616:18;;;15609:44;15670:19;;11034:85:0;15285:410:1;11034:85:0;11200:12;;11182:30;;11174:83;;;;;;;15902:2:1;11174:83:0;;;15884:21:1;15941:2;15921:18;;;15914:30;15980:34;15960:18;;;15953:62;16051:10;16031:18;;;16024:38;16079:19;;11174:83:0;15700:404:1;11174:83:0;11262:22;:20;:22::i;:::-;11317:17;;11299:15;:35;11291:69;;;;;;;16311:2:1;11291:69:0;;;16293:21:1;16350:2;16330:18;;;16323:30;16389:23;16369:18;;;16362:51;16430:18;;11291:69:0;16109:345:1;11291:69:0;11421:9;6203:7;11453:17;;11435:15;:35;;;;:::i;:::-;11434:43;;11474:3;11434:43;:::i;:::-;11433:58;;;;:::i;:::-;11421:70;-1:-1:-1;11496:10:0;11519:3;11509:7;11421:70;11513:3;11509:7;:::i;:::-;:13;;;;:::i;:::-;11496:26;;11527:14;11561:3;11553:5;:11;11550:167;;;11621:23;11640:3;11622:12;11633:1;11622:8;:12;:::i;11621:23::-;11583:36;11610:8;11596:6;11601:1;11596;:6;:::i;11583:36::-;:61;;;;:::i;:::-;11571:73;;11550:167;;;11673:24;11693:3;11674:13;:1;11678:9;11674:13;:::i;11673:24::-;:38;;11701:9;11673:38;:::i;:::-;11661:50;;11550:167;11745:64;11766:42;11798:9;11783;11767:13;;:25;;;;:::i;11766:42::-;11745:16;;;;;;;:8;:16;;;;;;;:20;:64::i;:::-;11726:16;;;;;;;:8;:16;;;;;:83;11873:13;;11842:77;;11872:46;;11904:13;;11873:25;;11889:9;;11873:25;:::i;11872:46::-;11851:15;;;;11842:25;;;;:8;:25;;;;;;;:29;:77::i;:::-;11823:15;;;;11814:25;;;;:8;:25;;;;;:105;11963:13;;11945:60;;11962:42;;11994:9;;11963:25;;11979:9;;11963:25;:::i;11962:42::-;11945:12;;;:16;:60::i;:::-;11930:12;:75;12030:15;12010:17;:35;12055:9;;:13;12052:245;;12086:3;12078:5;:11;12075:217;;;12104:15;;12163:9;;12151;;12104:15;;;;;12097:32;;12130:6;;12138:50;;12178:9;;12139:21;;:9;:21;:::i;12138:50::-;12097:92;;;;;;;;;;12451:42:1;12439:55;;;12097:92:0;;;12421:74:1;12511:18;;;12504:34;12394:18;;12097:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12075:217;;;12214:15;;12266:9;;12254;;12214:15;;;;;12207:32;;12240:6;;12248:36;;12281:2;;12249:14;;:2;:14;:::i;12248:36::-;12207:78;;;;;;;;;;12451:42:1;12439:55;;;12207:78:0;;;12421:74:1;12511:18;;;12504:34;12394:18;;12207:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12075:217;12313:10;12308:90;;;12325:42;12357:9;12342;12326:13;;:25;;;;:::i;12325:42::-;12369:10;;12381:15;;12308:90;;;16661:25:1;;;16717:2;16702:18;;16695:34;;;;16745:18;;;16738:34;16649:2;16634:18;12308:90:0;;;;;;;12412:9;10785:1643;-1:-1:-1;;;;;;;10785:1643:0:o;14441:2255::-;14638:15;;14621:52;;;;;;12033:19:1;;;;12103:66;14655:10:0;12090:2:1;12086:15;12082:88;12068:12;;;12061:110;12187:12;;;12180:28;;;14574:12:0;;;;12224::1;;14621:52:0;;;;;;;;;;;;14611:63;;;;;;14593:81;;14749:16;14739:6;:26;14731:85;;;;;;;15487:2:1;14731:85:0;;;15469:21:1;15526:2;15506:18;;;15499:30;15565:34;15545:18;;;15538:62;15636:16;15616:18;;;15609:44;15670:19;;14731:85:0;15285:410:1;14731:85:0;14897:12;;14879:30;;14871:83;;;;;;;15902:2:1;14871:83:0;;;15884:21:1;15941:2;15921:18;;;15914:30;15980:34;15960:18;;;15953:62;16051:10;16031:18;;;16024:38;16079:19;;14871:83:0;15700:404:1;14871:83:0;14959:22;:20;:22::i;:::-;15014:17;;14996:15;:35;14988:69;;;;;;;16311:2:1;14988:69:0;;;16293:21:1;16350:2;16330:18;;;16323:30;16389:23;16369:18;;;16362:51;16430:18;;14988:69:0;16109:345:1;14988:69:0;15087:10;:17;15070:6;:13;:34;15062:104;;;;;;;16985:2:1;15062:104:0;;;16967:21:1;17024:2;17004:18;;;16997:30;17063:34;17043:18;;;17036:62;17134:28;17114:18;;;17107:56;17180:19;;15062:104:0;16783:422:1;15062:104:0;15171:7;15185:353;15201:10;:17;15197:2;:21;15185:353;;;15256:4;:2;15259:1;15256:4;:::i;:::-;15252:9;;:1;:9;:::i;:::-;15238:10;;:24;;;;:::i;:::-;:29;15235:52;;15275:5;;15235:52;15326:4;15300:31;;:10;15311:2;15300:14;;;;;;;;:::i;:::-;;;;;;;:31;;;;:68;;;;-1:-1:-1;15353:15:0;;15335:14;;15353:15;;;;;15335:10;;15346:2;;15335:14;;;;;;:::i;:::-;;;;;;;:33;;;;15300:68;15292:107;;;;;;;13916:2:1;15292:107:0;;;13898:21:1;13955:2;13935:18;;;13928:30;13994:28;13974:18;;;13967:56;14040:18;;15292:107:0;13714:350:1;15292:107:0;15409:6;15416:4;:2;15419:1;15416:4;:::i;:::-;15409:11;;15405:128;15425:10;:17;15422:1;:20;15405:128;;;15480:10;15491:2;15480:14;;;;;;;;:::i;:::-;;;;;;;15463:31;;:10;15474:1;15463:13;;;;;;;;:::i;:::-;;;;;;;:31;;;;15455:71;;;;;;;14271:2:1;15455:71:0;;;14253:21:1;14310:2;14290:18;;;14283:30;14349:29;14329:18;;;14322:57;14396:18;;15455:71:0;14069:351:1;15455:71:0;15444:3;;;;:::i;:::-;;;;15405:128;;;-1:-1:-1;15220:4:0;;;;:::i;:::-;;;;15185:353;;;15544:9;6203:7;15576:17;;15558:15;:35;;;;:::i;:::-;15557:43;;15597:3;15557:43;:::i;:::-;15556:58;;;;:::i;:::-;15544:70;-1:-1:-1;15619:10:0;15642:3;15632:7;15544:70;15636:3;15632:7;:::i;:::-;:13;;;;:::i;:::-;15619:26;;15650:12;15682:3;15674:5;:11;15671:163;;;15740:23;15759:3;15741:12;15752:1;15741:8;:12;:::i;15740:23::-;15702:36;15729:8;15715:6;15720:1;15715;:6;:::i;15702:36::-;:61;;;;:::i;:::-;15692:71;;15671:163;;;15790:24;15810:3;15791:13;:1;15795:9;15791:13;:::i;15790:24::-;:38;;15818:9;15790:38;:::i;:::-;15780:48;;15671:163;15857:1;15847:7;:11;15839:34;;;;;;;13033:2:1;15839:34:0;;;13015:21:1;13072:2;13052:18;;;13045:30;13111:12;13091:18;;;13084:40;13141:18;;15839:34:0;12831:334:1;15839:34:0;15878:17;15900:18;15927:6;15923:705;15939:2;15937:1;:4;15923:705;;;16233:3;:1;16235;16233:3;:::i;:::-;16229:8;;:1;:8;:::i;:::-;16215:10;;:23;;;;:::i;:::-;16212:405;;16271:10;16282:1;16271:13;;;;;;;;:::i;:::-;;;;;;;;;;;16264:46;;;;;16304:4;16264:46;;;4056:74:1;16264:31:0;;;;;;;4029:18:1;;16264:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16251:59;-1:-1:-1;16320:15:0;;16317:285;;16348:5;16352:1;16348;:5;:::i;:::-;:10;:20;;;;-1:-1:-1;16362:6:0;;;16348:20;16344:186;;;16390:49;16422:16;16391:20;16404:7;16391:10;:20;:::i;16390:49::-;16378:61;;16344:186;;;16473:45;16500:16;16474:20;16487:7;16474:10;:20;:::i;16473:45::-;16461:57;;16344:186;16546:10;16557:1;16546:13;;;;;;;;:::i;:::-;;;;;;;16539:30;;;16570:6;16577:1;16570:9;;;;;;;;:::i;:::-;;;;;;;16581;16539:52;;;;;;;;;;;;;;;12451:42:1;12439:55;;;;12421:74;;12526:2;12511:18;;12504:34;12409:2;12394:18;;12247:297;16539:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16317:285;15943:3;;;;:::i;:::-;;;;15923:705;;;-1:-1:-1;;16654:15:0;16634:17;:35;-1:-1:-1;16681:7:0;14441:2255;-1:-1:-1;;;;;;;;;14441:2255:0:o;4466:139::-;4524:7;4552:6;4544:30;;;;;;;17412:2:1;4544:30:0;;;17394:21:1;17451:2;17431:18;;;17424:30;17490:13;17470:18;;;17463:41;17521:18;;4544:30:0;17210:335:1;4544:30:0;4592:5;4596:1;4592;:5;:::i;:::-;4585:12;4466:139;-1:-1:-1;;;4466:139:0:o;4080:141::-;4138:7;4171:1;4166;:6;;4158:32;;;;;;;17752:2:1;4158:32:0;;;17734:21:1;17791:2;17771:18;;;17764:30;17830:15;17810:18;;;17803:43;17863:18;;4158:32:0;17550:337:1;4158:32:0;4208:5;4212:1;4208;:5;:::i;3908:164::-;3966:7;;3998:5;4002:1;3998;:5;:::i;:::-;3986:17;;4027:1;4022;:6;;4014:31;;;;;;;18094:2:1;4014:31:0;;;18076:21:1;18133:2;18113:18;;;18106:30;18172:14;18152:18;;;18145:42;18204:18;;4014:31:0;17892:336:1;16705:1404:0;16960:15;;16943:13;;16926:12;;:31;;:16;:31::i;:::-;:49;:67;;;;;16991:2;16979:9;;:14;16926:67;16922:189;;;17016:9;;:13;;17028:1;17016:13;:::i;:::-;17004:9;:25;;;17068:37;;17090:13;;17102:1;17090:13;:::i;:::-;17086:18;;:1;:18;:::i;:::-;17068:12;;;:16;:37::i;:::-;17053:12;;:52;;;;:::i;:::-;17035:15;:70;16922:189;17288:10;;:17;;17303:1;17288:14;:17::i;:::-;17275:10;:30;17402:24;;:28;;17429:1;;17402:28;:::i;:::-;17387:10;;17386:45;;;;:::i;:::-;17383:670;;17447:15;:13;:15::i;:::-;17501:37;17523:9;;17535:1;17523:13;;;;:::i;17501:37::-;17486:12;;:52;;;;:::i;:::-;17468:15;:70;17563:24;;17550:10;;:37;;17563:24;17550:37;:::i;:::-;17546:502;;17625:15;;;17618:48;;;;;17660:4;17618:48;;;4056:74:1;;;;17670:14:0;;17625:15;;;;;17618:33;;4029:18:1;;17618:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;17605:9;:81;;;17772:17;;:5;:17;:::i;:::-;17764:25;;:5;:25;:::i;:::-;17749:9;;17705:15;;;17698:48;;;;;17740:4;17698:48;;;4056:74:1;;;;17705:15:0;;;17698:33;;4029:18:1;;17698:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;:::-;17696:94;17693:321;;17895:9;;17876;;:16;;17890:1;17876:13;:16::i;:::-;:28;17873:85;;;17933:9;;:16;;17947:1;17933:13;:16::i;:::-;17921:9;:28;17873:85;17693:321;;;17989:9;;:17;;18004:1;17989:14;:17::i;:::-;17977:9;:29;17693:321;18020:21;:19;:21::i;:::-;18087:16;18102:1;18087:12;:16;:::i;:::-;18077:27;18059:15;:45;16705:1404::o;3339:134::-;3291:5;;;;3277:10;:19;3269:42;;;;;;;11208:2:1;3269:42:0;;;11190:21:1;11247:2;11227:18;;;11220:30;11286:12;11266:18;;;11259:40;11316:18;;3269:42:0;11006:334:1;3269:42:0;3426:5:::1;::::0;3408:32:::1;::::0;;3426:5:::1;::::0;;::::1;18468:34:1::0;;18538:15;;;18533:2;18518:18;;18511:43;3408:32:0::1;::::0;18380:18:1;3408:32:0::1;;;;;;;3451:5;:14:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;3339:134::o;4613:232::-;4676:7;4704:6;4696:30;;;;;;;17412:2:1;4696:30:0;;;17394:21:1;17451:2;17431:18;;;17424:30;17490:13;17470:18;;;17463:41;17521:18;;4696:30:0;17210:335:1;4696:30:0;4737:9;4749:5;4753:1;4749;:5;:::i;:::-;4737:17;-1:-1:-1;4769:5:0;4773:1;4769;:5;:::i;:::-;:10;4765:52;;4800:5;:1;4804;4800:5;:::i;:::-;4796:9;4613:232;-1:-1:-1;;;;4613:232:0:o;4229:229::-;4288:7;4312:6;4308:47;;-1:-1:-1;4342:1:0;4335:8;;4308:47;4367:9;4379:5;4383:1;4379;:5;:::i;:::-;4367:17;-1:-1:-1;4412:1:0;4403:5;4407:1;4367:17;4403:5;:::i;:::-;:10;4395:36;;;;;;;18767:2:1;4395:36:0;;;18749:21:1;18806:2;18786:18;;;18779:30;18845:15;18825:18;;;18818:43;18878:18;;4395:36:0;18565:337:1;18116:1412:0;18257:30;;18184:15;;18161:20;;18242:45;;18184:15;18242:45;:::i;:::-;18204:83;;18294:24;18335;;6203:7;18321:38;;;;:::i;:::-;18294:65;;18498:19;18465:30;:52;18461:761;;;18529:21;18553:69;18590:30;18554:29;:19;18579:3;18554:24;:29::i;18553:69::-;18635:1;18628:4;:8;18529:93;-1:-1:-1;18642:27:0;18672:45;18712:4;18672:25;18529:93;18693:3;18672:20;:25::i;:::-;:39;;:45::i;:::-;18642:75;;18760:69;18777:51;18805:22;18777;18794:4;18777:12;;:16;;:22;;;;:::i;:::-;:27;;:51::i;:::-;18760:12;;;:16;:69::i;:::-;18745:12;:84;-1:-1:-1;18461:761:0;;-1:-1:-1;18461:761:0;;18863:23;18889:69;18937:19;18890:40;:30;18926:3;18890:35;:40::i;18889:69::-;18971:1;18964:4;:8;18863:95;-1:-1:-1;18978:29:0;19010:47;19052:4;19010:27;18863:95;19033:3;19010:22;:27::i;:47::-;18978:79;;19127:70;19144:52;19171:24;19144:21;19161:3;19144:12;;:16;;:21;;;;:::i;:52::-;19127:12;;;:16;:70::i;:::-;19112:12;:85;-1:-1:-1;;18461:761:0;19228:30;:45;;;19310:12;19278:29;:44;19345:15;;19330:12;;:30;19327:97;;;19403:15;;19388:12;:30;19327:97;19446:15;;19431:12;;:30;19428:92;;;19499:15;;19484:12;:30;19428:92;18156:1372;;;18116:1412::o;4975:132::-;5037:6;5065:1;5061;:5;5058:18;;;-1:-1:-1;5075:1:0;5068:8;;5058:18;-1:-1:-1;5096:1:0;;4975:132;-1:-1:-1;4975:132:0:o;14:656:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;586:2:1;574:15;591:66;570:88;555:104;;;;661:2;551:113;;14:656;-1:-1:-1;;;14:656:1:o;675:196::-;743:20;;803:42;792:54;;782:65;;772:93;;861:1;858;851:12;772:93;675:196;;;:::o;876:254::-;944:6;952;1005:2;993:9;984:7;980:23;976:32;973:52;;;1021:1;1018;1011:12;973:52;1044:29;1063:9;1044:29;:::i;:::-;1034:39;1120:2;1105:18;;;;1092:32;;-1:-1:-1;;;876:254:1:o;1509:248::-;1577:6;1585;1638:2;1626:9;1617:7;1613:23;1609:32;1606:52;;;1654:1;1651;1644:12;1606:52;-1:-1:-1;;1677:23:1;;;1747:2;1732:18;;;1719:32;;-1:-1:-1;1509:248:1:o;1762:184::-;1814:77;1811:1;1804:88;1911:4;1908:1;1901:15;1935:4;1932:1;1925:15;1951:334;2022:2;2016:9;2078:2;2068:13;;2083:66;2064:86;2052:99;;2181:18;2166:34;;2202:22;;;2163:62;2160:88;;;2228:18;;:::i;:::-;2264:2;2257:22;1951:334;;-1:-1:-1;1951:334:1:o;2290:718::-;2344:5;2397:3;2390:4;2382:6;2378:17;2374:27;2364:55;;2415:1;2412;2405:12;2364:55;2451:6;2438:20;2477:4;2500:18;2496:2;2493:26;2490:52;;;2522:18;;:::i;:::-;2568:2;2565:1;2561:10;2591:28;2615:2;2611;2607:11;2591:28;:::i;:::-;2653:15;;;2723;;;2719:24;;;2684:12;;;;2755:15;;;2752:35;;;2783:1;2780;2773:12;2752:35;2819:2;2811:6;2807:15;2796:26;;2831:148;2847:6;2842:3;2839:15;2831:148;;;2913:23;2932:3;2913:23;:::i;:::-;2901:36;;2864:12;;;;2957;;;;2831:148;;;2997:5;2290:718;-1:-1:-1;;;;;;;2290:718:1:o;3013:559::-;3124:6;3132;3140;3148;3201:3;3189:9;3180:7;3176:23;3172:33;3169:53;;;3218:1;3215;3208:12;3169:53;3254:9;3241:23;3231:33;;3311:2;3300:9;3296:18;3283:32;3273:42;;3366:2;3355:9;3351:18;3338:32;3393:18;3385:6;3382:30;3379:50;;;3425:1;3422;3415:12;3379:50;3448:61;3501:7;3492:6;3481:9;3477:22;3448:61;:::i;:::-;3438:71;;;3528:38;3562:2;3551:9;3547:18;3528:38;:::i;:::-;3518:48;;3013:559;;;;;;;:::o;3577:328::-;3654:6;3662;3670;3723:2;3711:9;3702:7;3698:23;3694:32;3691:52;;;3739:1;3736;3729:12;3691:52;3762:29;3781:9;3762:29;:::i;:::-;3752:39;;3810:38;3844:2;3833:9;3829:18;3810:38;:::i;:::-;3800:48;;3895:2;3884:9;3880:18;3867:32;3857:42;;3577:328;;;;;:::o;4512:334::-;4589:6;4597;4605;4658:2;4646:9;4637:7;4633:23;4629:32;4626:52;;;4674:1;4671;4664:12;4626:52;4697:29;4716:9;4697:29;:::i;:::-;4687:39;;4745:38;4779:2;4768:9;4764:18;4745:38;:::i;:::-;4735:48;;4802:38;4836:2;4825:9;4821:18;4802:38;:::i;:::-;4792:48;;4512:334;;;;;:::o;4851:186::-;4910:6;4963:2;4951:9;4942:7;4938:23;4934:32;4931:52;;;4979:1;4976;4969:12;4931:52;5002:29;5021:9;5002:29;:::i;5042:385::-;5128:6;5136;5144;5152;5205:3;5193:9;5184:7;5180:23;5176:33;5173:53;;;5222:1;5219;5212:12;5173:53;-1:-1:-1;;5245:23:1;;;5315:2;5300:18;;5287:32;;-1:-1:-1;5366:2:1;5351:18;;5338:32;;5417:2;5402:18;5389:32;;-1:-1:-1;5042:385:1;-1:-1:-1;5042:385:1:o;5432:1039::-;5527:6;5535;5543;5551;5604:3;5592:9;5583:7;5579:23;5575:33;5572:53;;;5621:1;5618;5611:12;5572:53;5644:29;5663:9;5644:29;:::i;:::-;5634:39;;5692:2;5741;5730:9;5726:18;5713:32;5703:42;;5764:38;5798:2;5787:9;5783:18;5764:38;:::i;:::-;5754:48;;5853:2;5842:9;5838:18;5825:32;5876:18;5917:2;5909:6;5906:14;5903:34;;;5933:1;5930;5923:12;5903:34;5971:6;5960:9;5956:22;5946:32;;6016:7;6009:4;6005:2;6001:13;5997:27;5987:55;;6038:1;6035;6028:12;5987:55;6074:2;6061:16;6096:2;6092;6089:10;6086:36;;;6102:18;;:::i;:::-;6144:112;6252:2;6183:66;6176:4;6172:2;6168:13;6164:86;6160:95;6144:112;:::i;:::-;6131:125;;6279:2;6272:5;6265:17;6319:7;6314:2;6309;6305;6301:11;6297:20;6294:33;6291:53;;;6340:1;6337;6330:12;6291:53;6395:2;6390;6386;6382:11;6377:2;6370:5;6366:14;6353:45;6439:1;6434:2;6429;6422:5;6418:14;6414:23;6407:34;;6460:5;6450:15;;;;;5432:1039;;;;;;;:::o;6476:316::-;6553:6;6561;6569;6622:2;6610:9;6601:7;6597:23;6593:32;6590:52;;;6638:1;6635;6628:12;6590:52;-1:-1:-1;;6661:23:1;;;6731:2;6716:18;;6703:32;;-1:-1:-1;6782:2:1;6767:18;;;6754:32;;6476:316;-1:-1:-1;6476:316:1:o;6797:732::-;6933:6;6941;6949;6957;7010:3;6998:9;6989:7;6985:23;6981:33;6978:53;;;7027:1;7024;7017:12;6978:53;7063:9;7050:23;7040:33;;7120:2;7109:9;7105:18;7092:32;7082:42;;7175:2;7164:9;7160:18;7147:32;7198:18;7239:2;7231:6;7228:14;7225:34;;;7255:1;7252;7245:12;7225:34;7278:61;7331:7;7322:6;7311:9;7307:22;7278:61;:::i;:::-;7268:71;;7392:2;7381:9;7377:18;7364:32;7348:48;;7421:2;7411:8;7408:16;7405:36;;;7437:1;7434;7427:12;7405:36;;7460:63;7515:7;7504:8;7493:9;7489:24;7460:63;:::i;:::-;7450:73;;;6797:732;;;;;;;:::o;7534:260::-;7602:6;7610;7663:2;7651:9;7642:7;7638:23;7634:32;7631:52;;;7679:1;7676;7669:12;7631:52;7702:29;7721:9;7702:29;:::i;:::-;7692:39;;7750:38;7784:2;7773:9;7769:18;7750:38;:::i;:::-;7740:48;;7534:260;;;;;:::o;7799:322::-;7876:6;7884;7892;7945:2;7933:9;7924:7;7920:23;7916:32;7913:52;;;7961:1;7958;7951:12;7913:52;7997:9;7984:23;7974:33;;8054:2;8043:9;8039:18;8026:32;8016:42;;8077:38;8111:2;8100:9;8096:18;8077:38;:::i;8126:437::-;8205:1;8201:12;;;;8248;;;8269:61;;8323:4;8315:6;8311:17;8301:27;;8269:61;8376:2;8368:6;8365:14;8345:18;8342:38;8339:218;;;8413:77;8410:1;8403:88;8514:4;8511:1;8504:15;8542:4;8539:1;8532:15;8339:218;;8126:437;;;:::o;8568:184::-;8620:77;8617:1;8610:88;8717:4;8714:1;8707:15;8741:4;8738:1;8731:15;8757:128;8797:3;8828:1;8824:6;8821:1;8818:13;8815:39;;;8834:18;;:::i;:::-;-1:-1:-1;8870:9:1;;8757:128::o;8890:184::-;8942:77;8939:1;8932:88;9039:4;9036:1;9029:15;9063:4;9060:1;9053:15;9079:195;9118:3;9149:66;9142:5;9139:77;9136:103;;;9219:18;;:::i;:::-;-1:-1:-1;9266:1:1;9255:13;;9079:195::o;9279:482::-;9368:1;9411:5;9368:1;9425:330;9446:7;9436:8;9433:21;9425:330;;;9565:4;9497:66;9493:77;9487:4;9484:87;9481:113;;;9574:18;;:::i;:::-;9624:7;9614:8;9610:22;9607:55;;;9644:16;;;;9607:55;9723:22;;;;9683:15;;;;9425:330;;;9429:3;9279:482;;;;;:::o;9766:866::-;9815:5;9845:8;9835:80;;-1:-1:-1;9886:1:1;9900:5;;9835:80;9934:4;9924:76;;-1:-1:-1;9971:1:1;9985:5;;9924:76;10016:4;10034:1;10029:59;;;;10102:1;10097:130;;;;10009:218;;10029:59;10059:1;10050:10;;10073:5;;;10097:130;10134:3;10124:8;10121:17;10118:43;;;10141:18;;:::i;:::-;-1:-1:-1;;10197:1:1;10183:16;;10212:5;;10009:218;;10311:2;10301:8;10298:16;10292:3;10286:4;10283:13;10279:36;10273:2;10263:8;10260:16;10255:2;10249:4;10246:12;10242:35;10239:77;10236:159;;;-1:-1:-1;10348:19:1;;;10380:5;;10236:159;10427:34;10452:8;10446:4;10427:34;:::i;:::-;10557:6;10489:66;10485:79;10476:7;10473:92;10470:118;;;10568:18;;:::i;:::-;10606:20;;9766:866;-1:-1:-1;;;9766:866:1:o;10637:131::-;10697:5;10726:36;10753:8;10747:4;10726:36;:::i;10773:228::-;10813:7;10939:1;10871:66;10867:74;10864:1;10861:81;10856:1;10849:9;10842:17;10838:105;10835:131;;;10946:18;;:::i;:::-;-1:-1:-1;10986:9:1;;10773:228::o;11345:184::-;11397:77;11394:1;11387:88;11494:4;11491:1;11484:15;11518:4;11515:1;11508:15;11534:184;11586:77;11583:1;11576:88;11683:4;11680:1;11673:15;11707:4;11704:1;11697:15;11723:120;11763:1;11789;11779:35;;11794:18;;:::i;:::-;-1:-1:-1;11828:9:1;;11723:120::o;12549:277::-;12616:6;12669:2;12657:9;12648:7;12644:23;12640:32;12637:52;;;12685:1;12682;12675:12;12637:52;12717:9;12711:16;12770:5;12763:13;12756:21;12749:5;12746:32;12736:60;;12792:1;12789;12782:12;13597:112;13629:1;13655;13645:35;;13660:18;;:::i;:::-;-1:-1:-1;13694:9:1;;13597:112::o;14425:184::-;14495:6;14548:2;14536:9;14527:7;14523:23;14519:32;14516:52;;;14564:1;14561;14554:12;14516:52;-1:-1:-1;14587:16:1;;14425:184;-1:-1:-1;14425:184:1:o;15010:125::-;15050:4;15078:1;15075;15072:8;15069:34;;;15083:18;;:::i;:::-;-1:-1:-1;15120:9:1;;15010:125::o;15140:140::-;15198:5;15227:47;15268:4;15258:8;15254:19;15248:4;15227:47;:::i

Swarm Source

ipfs://bb03436d9d65562d4e1d802ec17043fb29bc5e7165ef1bc37d740d60a44194e7
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.