ETH Price: $3,341.79 (-1.77%)
 

Overview

ETH Balance

0.02519999400006 ETH

Eth Value

$84.21 (@ $3,341.79/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Assert Candidate130133402021-08-12 23:28:141237 days ago1628810894IN
0xa5dD37C9...86E78Fd56
0 ETH0.0022884355.95867777
Assert Candidate130133332021-08-12 23:26:441237 days ago1628810804IN
0xa5dD37C9...86E78Fd56
0 ETH0.0117222660
Pull All The Way129762732021-08-07 6:26:031243 days ago1628317563IN
0xa5dD37C9...86E78Fd56
0 ETH0.0079427935.33804636
Option Vote129696042021-08-06 5:46:091244 days ago1628228769IN
0xa5dD37C9...86E78Fd56
0 ETH0.0035882434.76610757
Option Vote129695892021-08-06 5:41:361244 days ago1628228496IN
0xa5dD37C9...86E78Fd56
0 ETH0.0033987830.19906961
Cashout129667112021-08-05 19:00:131244 days ago1628190013IN
0xa5dD37C9...86E78Fd56
0 ETH0.0058763548.50475597
Finalize Request...129656652021-08-05 15:05:161245 days ago1628175916IN
0xa5dD37C9...86E78Fd56
0 ETH0.0229064361.44231674
Reveal Vote129635262021-08-05 6:57:201245 days ago1628146640IN
0xa5dD37C9...86E78Fd56
0 ETH0.003962436.45000072
Reveal Vote129634382021-08-05 6:37:371245 days ago1628145457IN
0xa5dD37C9...86E78Fd56
0 ETH0.004130938
Commit Vote129631602021-08-05 5:34:581245 days ago1628141698IN
0xa5dD37C9...86E78Fd56
0 ETH0.0034997647
Commit Vote129631542021-08-05 5:32:211245 days ago1628141541IN
0xa5dD37C9...86E78Fd56
0 ETH0.0037976151
Option Vote129626002021-08-05 3:25:201245 days ago1628133920IN
0xa5dD37C9...86E78Fd56
0 ETH0.0034480239
Option Vote129625882021-08-05 3:21:431245 days ago1628133703IN
0xa5dD37C9...86E78Fd56
0 ETH0.0049692639
Update Round Tab...129606512021-08-04 19:56:281245 days ago1628106988IN
0xa5dD37C9...86E78Fd56
0 ETH0.001394950.00000145
Assert Candidate129605972021-08-04 19:44:361245 days ago1628106276IN
0xa5dD37C9...86E78Fd56
0 ETH0.0101858457
Option Vote129605822021-08-04 19:40:471245 days ago1628106047IN
0xa5dD37C9...86E78Fd56
0 ETH0.004685948
Assert Candidate129605492021-08-04 19:34:581245 days ago1628105698IN
0xa5dD37C9...86E78Fd56
0 ETH0.0022083354
Assert Candidate129605492021-08-04 19:34:581245 days ago1628105698IN
0xa5dD37C9...86E78Fd56
0 ETH0.0096494754
Option Vote129605452021-08-04 19:33:451245 days ago1628105625IN
0xa5dD37C9...86E78Fd56
0 ETH0.0100705252
Assert Candidate129583522021-08-04 11:26:331246 days ago1628076393IN
0xa5dD37C9...86E78Fd56
0 ETH0.0048248727
Assert Candidate129583452021-08-04 11:25:071246 days ago1628076307IN
0xa5dD37C9...86E78Fd56
0 ETH0.0052108327.00000145
Option Vote129583362021-08-04 11:23:271246 days ago1628076207IN
0xa5dD37C9...86E78Fd56
0 ETH0.0119739728

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
129667112021-08-05 19:00:131244 days ago1628190013
0xa5dD37C9...86E78Fd56
0.007 ETH
129626112021-08-05 3:29:241245 days ago1628134164
0xa5dD37C9...86E78Fd56
0.0322 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Oracle

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-02
*/

// SPDX-License-Identifier: MIT
pragma solidity ^ 0.8.6;

contract Oracle{
	address ORACLE = address(0);
	address address0 = address(0);

	struct RequestTicket{
		uint ID;
		address sender;
		uint timeRequested;
		uint timeWindow;
		bool finalized;
		uint serviceFee;
		bool subjective;

		mapping(address => mapping(address => bool)) attacks;
		mapping(address => bool) damaged;

		uint8 dataType; // uint, address

		//commit
		mapping(address => bool) committed;
		mapping(address => bytes32) commitHash;

		//reveal
		mapping(address => bool) revealed;
		mapping(address => bool) rejected;
		mapping(address => bool) voted;

		mapping(address => int) intVotes;
		mapping(address => address) addressVotes;

		//RESULTS
		bool ticketRejected;
		uint numberOfOptions;
		
		//results
		mapping(uint => uint) weightOfResults;
		mapping(uint => int) resolvedInts;
		mapping(uint => address) resolvedAddresses;
	}

	//oracle configs
	uint constant ROUNDTABLE_SEATS = 0;
	uint constant RESPONSE_TIME_WINDOW = 1;
	uint constant DELEGATE_REWARDSHARE = 2;
	uint constant FREEZE_TIMEOUT = 3;
	uint constant SERVICE_FEE = 4;
	uint constant TX_FEE_PER = 5;
	uint constant CONFIGS = 6;

	uint[] public oracleConfigurations = new uint[](CONFIGS);
	mapping(uint/*configID*/ => mapping(uint => uint) ) public totalVotes_forEach_configOption;
	mapping(uint/*configID*/ => mapping(address => uint) ) public individualsSelectedOption;
	
	mapping(address => uint) resolveWeight;
	mapping(address => uint) weightLocked;
	
	mapping(uint => RequestTicket) requestTickets;
	uint requestTicketCount;
	//ROUND TABLE & Candidates
	mapping(uint => address) public chairsCandidate; // only looks at the first X indexes
	mapping(address => uint) candidatesChair;
	mapping(address => uint) timeSeated; // watchers aren't responsible for requestTickets that came in before them
	mapping(address => bool) frozen;
	mapping(address => bool) isWatcher;
	mapping(address => uint) latestPunishment;
	mapping(address => uint) timeWhenThawedOut;
	uint chairs;
	uint public hotSeats;

	uint256 constant scaleFactor = 0x10000000000000000;
	//PAYROLL
	mapping(address => uint) earnings;
	mapping(address => uint) totalShares;
    mapping(address => mapping(address => uint256)) public shares;
    mapping(address => mapping(address => uint256)) payouts;
    mapping(address => uint) earningsPerShare;

    //Tx Coverage fee
    uint earningsPerWatcher;
	uint public totalWatchers;
	mapping(address => uint256) watcherPayouts;


    //lazy UI data
    mapping(address => address[]) public yourBacking;
    mapping(address => mapping(address => bool)) public alreadyBacking;
    
	ResolveToken public resolveToken;
	address payable pineapples;
	Pyramid public pyramid = Pyramid(0x91683899ed812C1AC49590779cb72DA6BF7971fE);
	uint genesis;
	
	constructor(){
		resolveToken = pyramid.resolveToken();
		genesis = _now();
		pineapples = payable(msg.sender);
	}

	function _now()internal view returns(uint){
		return block.timestamp;
	}

	function addShares(address pool, address account, uint amount) internal{
		update(pool, account);
		totalShares[pool] += amount;
		shares[pool][account] += amount;

		if(pool == ORACLE){
			updateWatcherTxEarnings(account,false);
			if (account != address0){
				totalWatchers += 1;
				isWatcher[account] = true;
			}
		}
	}

	function removeShares(address pool, address account, uint amount) internal{
		update(pool, account);
		totalShares[pool] -= amount;
		shares[pool][account] -= amount;

		if(pool == ORACLE){
			updateWatcherTxEarnings(account,true);
			if (account != address0){
				isWatcher[account] = false;

				uint emptiedSeat = candidatesChair[account];

				address tail = chairsCandidate[totalWatchers-1];
				chairsCandidate[ emptiedSeat ] = tail;
				candidatesChair[tail] = emptiedSeat;

				totalWatchers -= 1;
			}
		}
	}

	function dividendsOf(address pool, address account) public view returns(uint){
		uint owedPerShare = earningsPerShare[pool] - payouts[pool][account];
		if(pool == ORACLE && !isWatcher[account] )
			return 0;
		return shares[pool][account] * owedPerShare / scaleFactor;
	}
	
	
	event WatcherPayroll(address watcher, uint paidOut);	
	function update(address pool, address account) internal {
		uint newMoney = dividendsOf(pool, account);
        payouts[pool][account] = earningsPerShare[pool];

		if(pool == ORACLE){
			uint eth4Watcher = newMoney * oracleConfigurations[DELEGATE_REWARDSHARE] / (1e20);
			earnings[account] += eth4Watcher;

			uint newDivs;
			if(totalShares[account]>0){
				newDivs = (newMoney - eth4Watcher) * scaleFactor / totalShares[account];
			}else{
				newDivs = 0;
			}

			earningsPerShare[account/*this is what the watcher has to distribute to its electorates*/] += newDivs;
		}else{
			earnings[account] += newMoney;
		}
    }

	event TxCashout(address watcher, uint amount);
	function updateWatcherTxEarnings(address watcher, bool paying) internal {
		uint owed = earningsPerWatcher - watcherPayouts[watcher];
		watcherPayouts[watcher] = earningsPerWatcher;
		if(paying) earnings[watcher] += owed;
		emit TxCashout(watcher, owed);
    }

    mapping(address => bool) notNew;
	event StakeResolves( address indexed addr, uint256 amountStaked, bytes _data );
	function tokenFallback(address from, uint value, bytes calldata _data) external{
		if( msg.sender == address(resolveToken) ){
			if(from == address(pyramid)){
				return;// if the pyramid is sending resolve tokens back to this contract, then do nothing.
			}
			resolveWeight[from] += value;
			//update option totals
			uint option;
			if(notNew[from]){
				for(uint8 config = 0; config<CONFIGS; config+=1){
					option = individualsSelectedOption[config][from];
					totalVotes_forEach_configOption[config][option] += value;
					assertOption(config, option);
				}
			}else{
				notNew[from] = true;
				for(uint8 config = 0; config<CONFIGS; config+=1){
					option = oracleConfigurations[config];
					individualsSelectedOption[config][from] = option;
					totalVotes_forEach_configOption[config][option] += value;
					assertOption(config, option);
				}
			}

			emit StakeResolves(from, value, _data);
			
			address backImmediately = bytesToAddress( _data );

			if( backImmediately != address0){
				backCandidate(from, backImmediately, value);
			}

			resolveToken.transfer( address(pyramid), value);
		}else{
			revert();
		}
	}

	event UnstakeResolves(address sender, uint amount);
	function unstakeResolves(uint amount) public{
		address sender = msg.sender;
		if( amount <= ( resolveWeight[sender] - weightLocked[sender] ) ){
			resolveWeight[sender] -= amount;
			for(uint config = 0; config<CONFIGS; config+=1){
				totalVotes_forEach_configOption[config][individualsSelectedOption[config][sender]] -= amount;
			}

			emit UnstakeResolves(sender, amount);
			pyramid.pullResolves(amount);

			resolveToken.transfer(sender, amount);
		}else{
			revert();
		}
	}

	event BackCandidate(address sender,address candidate, uint amount);
	function stakeCandidate(address candidate, uint amount) public{ backCandidate(msg.sender, candidate, amount); }
	function backCandidate(address sender, address candidate, uint amount) internal{
		require(candidate!=ORACLE);
		if( amount <= ( resolveWeight[sender] - weightLocked[sender] ) && !frozen[candidate] && !isWatcher[candidate] ){
			weightLocked[sender] += amount;
			addShares(candidate, sender, amount);

			emit BackCandidate(sender, candidate, amount);
			//LAZY U.I.
			if(!alreadyBacking[sender][candidate]){
				yourBacking[sender].push(candidate);
				alreadyBacking[sender][candidate] = true;
			}
		}else{
			revert();
		}	
	}
	
	event PullBacking(address sender, address candidate, uint amount);
	function pullBacking( address candidate, uint amount ) public{
		address sender = msg.sender;
		if( amount <= shares[candidate][sender] && !frozen[candidate] && !isWatcher[candidate] ){
			weightLocked[sender] -= amount;
			removeShares(candidate, sender, amount);
			emit PullBacking(sender, candidate, amount);
		}else{
			revert();
		}
	}

	function pullAllTheWay(address candidate, uint amount) public{
		pullBacking(candidate, amount);
		unstakeResolves(amount);
	}
	

	event AssertCandidate(address candidate, bool successfulAssert, address replacedWatcher, uint newSeat);
	function assertCandidate() public returns(bool success){
		address candidate = msg.sender;
		uint weakestChair;
		bool nullSeat;
		require( !frozen[candidate] && hotSeats > 0);
		address thisWatcher;

		if(hotSeats == totalWatchers){
			for(uint i; i<hotSeats; i+=1){
				thisWatcher = chairsCandidate[i];
				if( totalShares[ thisWatcher ] < totalShares[ chairsCandidate[weakestChair] ] ){
					weakestChair = i;
				}
			}
		}else{
			nullSeat = true;
			weakestChair = totalWatchers;
		}

		if( (totalShares[candidate] > totalShares[ chairsCandidate[weakestChair] ] || nullSeat ) && !isWatcher[candidate] ){
			address targetCandidate = chairsCandidate[weakestChair];

			if(!nullSeat){
				removeShares(ORACLE, targetCandidate, totalShares[targetCandidate]);
			}else{
				targetCandidate = address0;
			}

			addShares(ORACLE, candidate, totalShares[candidate]);
			timeSeated[candidate] = _now();

			chairsCandidate[weakestChair] = candidate; 
			candidatesChair[candidate] = weakestChair;

			emit AssertCandidate(candidate, true, targetCandidate, weakestChair);
			return true;
		}

		emit AssertCandidate(candidate, false, address0, weakestChair);
		return false;
	}

	event OptionVote(address sender, uint config, uint option, uint weight);
	function optionVote(bool[] memory isModifying, uint[] memory modifiedOptions) public{
		address sender = msg.sender;
		uint config;
		uint modifiedOption;
		notNew[sender] = true;
		for(config = 0; config<CONFIGS; config+=1){
			if(isModifying[config]){
				modifiedOption = modifiedOptions[config];
				totalVotes_forEach_configOption[config][ individualsSelectedOption[config][sender] ] -= resolveWeight[sender];
				individualsSelectedOption[config][sender] = modifiedOption;
				totalVotes_forEach_configOption[config][ modifiedOption ] += resolveWeight[sender];
				emit OptionVote(sender, config, modifiedOption, resolveWeight[sender]);
				assertOption( config, modifiedOption );
			}
		}
	}

	event AssertOption(uint config, uint option);
	function assertOption(uint config, uint option) public{
		if( totalVotes_forEach_configOption[config][option] > totalVotes_forEach_configOption[config][ oracleConfigurations[config] ] ){
			if(config == RESPONSE_TIME_WINDOW){ option = option>180?option:180; }
			if(config == ROUNDTABLE_SEATS){
			 option = option>7?option:7;
			}
			if(config == DELEGATE_REWARDSHARE){ option = option>1e20?1e20:option; }

			oracleConfigurations[config] = option;

			if(config == ROUNDTABLE_SEATS){
				if(hotSeats<oracleConfigurations[ROUNDTABLE_SEATS]){
					hotSeats = oracleConfigurations[ROUNDTABLE_SEATS];
				}
			}

			emit AssertOption(config, option);
		}
	}

	function getFee() public view returns(uint txCoverageFee, uint serviceFee){
		return ( oracleConfigurations[TX_FEE_PER]*hotSeats, oracleConfigurations[SERVICE_FEE] );
	}

	uint public devFunds;
	function updatePines(address addr) public{
		require(msg.sender == pineapples);
		pineapples = payable(addr);
	}

	Greenpoint greenpoint = Greenpoint(0x8dB802D64f97dC6BDE4eE9e8C1aecC64d3E7c028);
	bool acreLock;
	function updateACRE(address addr, bool lock) public{
		require(msg.sender == pineapples && !acreLock);
		greenpoint = Greenpoint(addr);
		acreLock = lock;
	}

	function devPull() public{
		require(msg.sender == pineapples);
		uint money = devFunds;
		devFunds = 0;
		greenpoint.payEthToAcreStakers{value: money/2 }();
		payable(msg.sender).transfer( money-money/2 );
	}

	//------------------------------ Request Ticket Life Cycle
	event FileRequestTicket(address sender, uint ticketID, uint8 dataType, bool subjective, uint timeRequested, uint responseTimeWindow, uint feePaid);
	function fileRequestTicket( uint8 returnType, bool subjective) external payable returns(uint ticketID){
		uint ETH = msg.value;
		(uint txCoverageFee, uint serviceFee) = getFee();
		
		uint devFee = ( (block.timestamp - genesis) < 86400*365 )?(serviceFee/20):0;

		require(returnType == 1 || returnType == 0);

		if(ETH >= txCoverageFee + serviceFee + devFee){

			ticketID = requestTicketCount;
			RequestTicket storage ticket = requestTickets[requestTicketCount];
			requestTicketCount++;

			ticket.dataType = returnType;
			ticket.timeRequested = _now();
			ticket.timeWindow = oracleConfigurations[RESPONSE_TIME_WINDOW];
			ticket.ID = ticketID;
			ticket.sender = msg.sender;
			ticket.subjective = subjective;
			ticket.serviceFee = ETH - devFee - txCoverageFee;
			devFunds += devFee;
			earningsPerWatcher += txCoverageFee / totalWatchers;

			emit FileRequestTicket(msg.sender, ticketID, returnType, subjective, _now(), ticket.timeWindow, ETH);
		}else{
			revert();
		}
	}

	event CommitVote(address voter, uint ticketID, bytes32 hash);
	function commitVote(uint[] memory tickets, bytes32[] memory voteHashes) external{
		address sender = msg.sender;
		RequestTicket storage ticket;
		for(uint R; R<tickets.length; R+=1 ){
			ticket = requestTickets[ tickets[R] ];
			if( _now() <= ticket.timeRequested + ticket.timeWindow ){
				ticket.committed[sender] = true;
				ticket.commitHash[sender] = voteHashes[R];
				emit CommitVote(sender, tickets[R], voteHashes[R]);
			}else{
				revert();//outside of timewindow
			}
		}
	}
	
	event RevealVote(address voter, uint ticketID, bool rejected, int intVote, address addressVote);
	function revealVote(uint[] memory tickets, bool[] memory rejected, int[] memory intVotes, address[] memory addressVotes, uint[] memory passwords) external{
		address sender = msg.sender;
		RequestTicket storage ticket;
		bytes memory abiEncodePacked;
		for(uint R; R<tickets.length; R+=1 ){
			ticket = requestTickets[ tickets[R] ];
			if( ticket.committed[sender] ){
				if(_now() > ticket.timeRequested + ticket.timeWindow && _now() <= ticket.timeRequested + ticket.timeWindow*2 ){
					if(ticket.dataType == 1){
						abiEncodePacked = abi.encodePacked( rejected[R], intVotes[R], passwords[R] );
					}else if(ticket.dataType == 0){
						abiEncodePacked = abi.encodePacked( rejected[R], addressVotes[R], passwords[R] );
					}

					if( compareBytes( keccak256(abiEncodePacked), requestTickets[ tickets[R] ].commitHash[sender]) ){

						requestTickets[ tickets[R] ].revealed[sender] = true;
						if(rejected[R]){
							requestTickets[ tickets[R] ].rejected[sender] = true;
						}else{
							requestTickets[ tickets[R] ].voted[sender] = true;
							if(ticket.dataType == 1){
								requestTickets[ tickets[R] ].intVotes[sender] = intVotes[R];
							}else if(ticket.dataType == 0){
								requestTickets[ tickets[R] ].addressVotes[sender] = addressVotes[R];
							}	
						}
						emit RevealVote(sender, tickets[R], rejected[R], intVotes[R], addressVotes[R]);
					}else{
						revert();//not a match
					}
				}else{
					revert();//outside of timewindow
				}
			}
		}
	}

	event SubjectiveStance(address voter, uint ticketID, address defender, bool stance);
	function subjectiveStance(uint[] memory tickets, address[] memory defenders, bool[] memory stances) external{
		address sender = msg.sender;
		RequestTicket storage ticket;
		for(uint R; R<tickets.length; R+=1 ){
			ticket = requestTickets[ tickets[R] ];
			if(timeSeated[sender] <= ticket.timeRequested){
				if( timeSeated[defenders[R]] <= ticket.timeRequested && _now() > ticket.timeRequested + ticket.timeWindow*2 && _now() <= ticket.timeRequested + ticket.timeWindow*3 ){
					ticket.attacks[sender][defenders[R]] = stances[R];
					emit SubjectiveStance(sender, tickets[R], defenders[R], stances[R]);
				}else{
					revert();//outside timewindow
				}
			}else{
				revert();//you just got here homie, whatcha takin' shots for?
			}
		}
	}

	function calculateDamage( uint ticketID ) internal view returns(uint combatWeight, uint[] memory damage){
		RequestTicket storage ticket = requestTickets[ticketID];
		address offensiveWatcher;
		address defender;
		uint Y;
		uint X;
		damage = new uint[](hotSeats);
		if(ticket.subjective){
			for(X = 0; X < hotSeats; X+=1){
				offensiveWatcher = chairsCandidate[X];
				if( isWatcher[offensiveWatcher] && timeSeated[offensiveWatcher] <= ticket.timeRequested ){
					combatWeight += totalShares[offensiveWatcher];
					for(Y = 0; Y < hotSeats; Y+=1){
						defender = chairsCandidate[Y];
						if( isWatcher[defender] && timeSeated[defender] <= ticket.timeRequested){
							if(ticket.attacks[offensiveWatcher][defender]){
								damage[Y] += totalShares[offensiveWatcher];
							}
						}
					}	
				}
			}
		}
	}

	event FinalizedRequest(uint ticketID, address[] watchers);
	function finalizeRequests(uint[] memory tickets) external{
		for(uint R; R<tickets.length; R+=1 ){
			finalizeRequest( tickets[R] );
		}
	}
	
	function finalizeRequest(uint ticketID) public{
		// if response time window is over or all delegates have voted,
		// anyone can finalize the request to trigger the event
		RequestTicket storage ticket = requestTickets[ticketID];
		if(!ticket.finalized){
			
			address watcher;
			
			int[] memory intOptions = new int[](hotSeats);
			address[] memory addressOptions = new address[](hotSeats);
			uint[] memory optionWeights = new uint[](hotSeats);

			address[] memory watchers = new address[](hotSeats);// lazy UI data

			uint[] memory UINTs = new uint[](7);//0= weight of votes, 1=top Option, 2= number of options, 3=top Option, 4 =total eligible weight, 5 = combat weight, 6  = loop for saving subjectives to storage

			uint opt;
			uint[] memory damage;
			(UINTs[5]/*combatWeight*/, damage) = calculateDamage(ticketID);
			for(uint chair = 0; chair < hotSeats; chair+=1){
				watcher = chairsCandidate[chair];
				watchers[chair] = watcher;
				if(damage[chair]<=UINTs[5]/*combatWeight*//2){
					if( watcher!=address0 && isWatcher[watcher] && timeSeated[watcher] <= ticket.timeRequested && ticket.revealed[watcher] ){
						UINTs[4]/*total Eligible Weight*/ += totalShares[watcher];
						if( ticket.voted[watcher] ){
							UINTs[0]/*weight of votes*/ += totalShares[watcher];
							//check to see if chosen option already is accounted for, if so, add weight to it.
							for(opt = 0; opt<UINTs[2]/*option count*/; opt+=1){
								if( (ticket.dataType == 1 && intOptions[opt] == ticket.intVotes[watcher]) ||
									(ticket.dataType == 0 && addressOptions[opt] == ticket.addressVotes[watcher]) 
								){
									optionWeights[opt] += totalShares[watcher];
									if(optionWeights[opt] > optionWeights[UINTs[3]/*top option*/] && !ticket.subjective){
										UINTs[3]/*top option*/ = opt;
									}
									break;
								}
							}

							//add new unique option
							if(opt == UINTs[2]/*option count*/){
								if(ticket.dataType == 1){
									intOptions[UINTs[2]/*option count*/] = ticket.intVotes[watcher];
								}else if(ticket.dataType == 0){
									addressOptions[UINTs[2]/*option count*/] = ticket.addressVotes[watcher];
								}
								optionWeights[UINTs[2]/*option count*/] = totalShares[watcher];
								
								UINTs[2]/*option count*/+=1;
							}
						}else if(ticket.rejected[watcher]){
							UINTs[1]/*weight of rejections*/ += totalShares[watcher];
						}
					}
				}else{
					ticket.damaged[watcher] = true;
				}
			}
			
			if( (UINTs[4]/*total Eligible Weight*/ == (UINTs[1]/*weight of rejections*/ + UINTs[0]/*weight of votes*/) && !ticket.subjective) || (_now() > ticket.timeRequested + ticket.timeWindow*(ticket.subjective?3:2) ) ){
				
				bool rejected;
				if( UINTs[1]/*weight of rejections*/ > optionWeights[UINTs[3]/*top option*/] ){
					rejected = true;
				}
				uint8 dataType = ticket.dataType;
				//write results in stone
				if(rejected){
					ticket.ticketRejected = true;
				}else{				
					if(ticket.subjective){
						ticket.numberOfOptions = UINTs[2]/*option count*/;
						for(UINTs[6]=0;UINTs[6]<UINTs[2];UINTs[6]+=1){
							ticket.weightOfResults[UINTs[6]] = optionWeights[UINTs[6]];
							if(dataType == 1){
								ticket.resolvedInts[UINTs[6]] = intOptions[UINTs[6]];
							}else if(dataType == 0){
								ticket.resolvedAddresses[UINTs[6]] = addressOptions[UINTs[6]];
							}
						}
					}else{
						ticket.numberOfOptions = UINTs[2]==0?0:1;//just in case no one responds the number of options needs to be 0
						if(dataType == 1){
							ticket.resolvedInts[0] = intOptions[UINTs[3]/*top option*/];
						}else if(dataType == 0){
							ticket.resolvedAddresses[0] = addressOptions[UINTs[3]/*top option*/];
						}
					}
				}

				//dish out the rewards
				earningsPerShare[ORACLE] += ticket.serviceFee * scaleFactor / totalShares[ORACLE];

				ticket.finalized = true;
				if(ticket.subjective){
					if(dataType == 1){
						Requestor(ticket.sender).oracleIntFallback(ticket.ID, ticket.ticketRejected, ticket.numberOfOptions, optionWeights, intOptions);
					}else if(dataType == 0){
						Requestor(ticket.sender).oracleAddressFallback(ticket.ID, ticket.ticketRejected, ticket.numberOfOptions, optionWeights, addressOptions);
					}
				}else{
					if(dataType == 1){
						Requestor(ticket.sender).oracleObjectiveIntFallback(ticket.ID, ticket.ticketRejected, intOptions);
					}else if(dataType == 0){
						Requestor(ticket.sender).oracleObjectiveAddressFallback(ticket.ID, ticket.ticketRejected, addressOptions);
					}
				}
				
				emit FinalizedRequest(ticket.ID, watchers);
			}else{
				revert();
			}
		}
	}

	event Cashout(address addr, uint ETH);
	function cashout(address[] memory pools) external{
		address payable sender = payable(msg.sender);
		for(uint p; p < pools.length; p+=1){
			update(pools[p], sender);
		}
		runWatcherPayroll(sender);
		uint ETH = earnings[sender];
		earnings[sender] = 0;
		emit Cashout(sender, ETH);
		sender.transfer( ETH );
	}

	function runWatcherPayroll(address watcher) public{
		if( isWatcher[watcher] ){
			update(ORACLE, watcher );
			updateWatcherTxEarnings( watcher, true );
		}
	}

	function tryToPunish(uint[] memory tickets, address[] memory watchers) external{
		freezeNoncommits(tickets, watchers);
		freezeUnrevealedCommits(tickets, watchers);
		freezeWrongWatchers(tickets, watchers);
	}

	event FreezeNoncommits(uint ticketID, address watcher);
	function freezeNoncommits(uint[] memory tickets, address[] memory watchers) public{
		// get them while they're still at the round table and we're in the reveal phase of a ticket
		RequestTicket storage ticket;
		for(uint i; i<watchers.length; i+=1){
			ticket = requestTickets[ tickets[i] ];
			if( isWatcher[ watchers[i] ] &&
				!ticket.committed[ watchers[i] ] &&
				timeSeated[ watchers[i] ] <= ticket.timeRequested &&
				_now() > ticket.timeRequested + ticket.timeWindow
			){
				if(punish(tickets[i] , watchers[i]) ){
					emit FreezeNoncommits(tickets[i] , watchers[i]);
				}
			}
		}
	}
	
	event FreezeUnrevealedCommits(uint ticketID, address watcher);
	function freezeUnrevealedCommits(uint[] memory tickets, address[] memory watchers) public{
		// get them if they made a commit, but did not reveal it after the reveal window is over
		RequestTicket storage ticket;
		for(uint i; i<watchers.length; i+=1){
		    ticket = requestTickets[ tickets[i] ];
			if( isWatcher[ watchers[i] ] &&
				!ticket.revealed[ watchers[i] ] &&
				timeSeated[ watchers[i] ] <= ticket.timeRequested &&
				_now() > requestTickets[ tickets[i] ].timeRequested + ticket.timeWindow*2
			){
				if(punish(tickets[i] , watchers[i]) ){
					emit FreezeUnrevealedCommits(tickets[i] , watchers[i]);
				}
			}
		}
	}

	event FreezeWrongWatchers(uint ticketID, address watcher);
	function freezeWrongWatchers(uint[] memory tickets, address[] memory watchers) public{
		// get them if the ticket is finalized and their vote doesn't match the resolved answer
		address watcher;
		RequestTicket storage ticket;
		for(uint i; i<watchers.length; i+=1){
			ticket = requestTickets[ tickets[i] ];
			watcher = watchers[i];
			if( ticket.finalized &&
				isWatcher[ watchers[i] ] &&
				timeSeated[ watchers[i] ] <= ticket.timeRequested &&
				!ticket.ticketRejected &&
				(
					(!ticket.subjective && (
						(ticket.dataType == 1 && ticket.resolvedInts[0] != ticket.intVotes[ watcher ] )||
						(ticket.dataType == 0 && ticket.resolvedAddresses[0] != ticket.addressVotes[ watcher ] )
					))||
					(ticket.subjective && ticket.damaged[ watcher ] )||//if their subjective contribution is garbage
					ticket.rejected[ watcher ]//if they reject something the majority didn't reject
				)
			){
				if(punish(tickets[i] , watcher)){
					emit FreezeWrongWatchers(tickets[i] , watcher);
				}
			}
		}
	}

	event Punish(address watcher, uint thawOutTime);
	function punish(uint ticketID, address watcher) internal returns(bool punished){
		RequestTicket storage ticket = requestTickets[ticketID];
		if(latestPunishment[watcher] < ticket.timeRequested+ticket.timeWindow*(ticket.subjective?3:2)){
			if( isWatcher[watcher] ){
				removeShares(ORACLE, watcher, totalShares[watcher]);
			}

			frozen[watcher] = true;
			latestPunishment[watcher] = ticket.timeRequested;
			timeWhenThawedOut[watcher] = _now() + oracleConfigurations[FREEZE_TIMEOUT];

			emit Punish(watcher, timeWhenThawedOut[watcher]);
			return true;
		}
		return false;
	}

	event Thaw(address candidate);
	function thaw(address candidate, bool _assert) public{
		if( _now() >= timeWhenThawedOut[candidate] && frozen[candidate] ) {
			frozen[candidate] = false;
			if(_assert){
				assertCandidate();
			}
			emit Thaw(candidate);
		}else{
			revert();
		}
	}

	event UpdateRoundTable(uint newTotalHotSeats);
	function updateRoundTable(uint seats) public{
		// update hotSeats for when they're lower.
		uint s;
		uint i;
		uint weakestChair;
		address thisWatcher;
		uint configSEATS = oracleConfigurations[ROUNDTABLE_SEATS];

		if( configSEATS == hotSeats ) return;

		if( hotSeats > totalWatchers && configSEATS < hotSeats){
			hotSeats = totalWatchers;
		}

		for( s = 0; s<seats; s+=1 ){

			for( i=0; i<hotSeats; i+=1){
				thisWatcher = chairsCandidate[i];
				if( totalShares[ thisWatcher ] < totalShares[ chairsCandidate[weakestChair] ] ){
					weakestChair = i;
				}
			}

			thisWatcher = chairsCandidate[weakestChair];
			removeShares(ORACLE, thisWatcher, totalShares[thisWatcher]);

			hotSeats-=1;

			if( configSEATS == hotSeats ){break;}
		}

		emit UpdateRoundTable(hotSeats);
	}

	function viewRequestTicket(uint ticketID) public view returns(
		address sender,
		uint timeRequested,
		uint timeWindow,
		uint numberOfOptions,
		bool finalized,
		bool rejected,
		uint[] memory weightOfResults,
		int[] memory resolvedInts,
		address[] memory resolvedAddresses
	){	
		RequestTicket storage T = requestTickets[ticketID];
		sender = T.sender;
		timeRequested = T.timeRequested;
		timeWindow = T.timeWindow;
		finalized = T.finalized;
		numberOfOptions = T.numberOfOptions;
		rejected = T.ticketRejected;

		weightOfResults = new uint[](T.numberOfOptions);
		resolvedInts = new int[](T.numberOfOptions);
		resolvedAddresses = new address[](T.numberOfOptions);
		//yikes
		for(uint i = 0; i< T.numberOfOptions; i+=1){
			weightOfResults[i] = T.weightOfResults[i];
			resolvedInts[i] = T.resolvedInts[i];
			resolvedAddresses[i] = T.resolvedAddresses[i];	
		}
	}

	function viewCandidates(bool personal_or_roundtable, address perspective) public view returns(address[] memory addresses, uint[] memory dividends, uint[] memory seat, uint[] memory weights, uint[] memory clocks, bool[] memory isFrozen, bool[] memory atTable, uint[] memory roundTableDividends){
		uint L;
		
		if(personal_or_roundtable){
			L = hotSeats;
		}else{
			L = yourBacking[perspective].length;
		}

		dividends = new uint[](L);
		seat = new uint[](L);
		roundTableDividends = new uint[](L);

		weights = new uint[](L*2);
		clocks = new uint[](L*3);

		isFrozen = new bool[](L);
		atTable = new bool[](L);

		addresses = new address[](L);

		address candidate;
		for(uint c = 0; c<L; c+=1){
			if(personal_or_roundtable){
				candidate = chairsCandidate[c];
			}else{
				candidate = yourBacking[perspective][c];
			}
			addresses[c] = candidate;
			dividends[c] = dividendsOf(candidate, perspective);
			roundTableDividends[c] = dividendsOf(ORACLE, candidate);
			seat[c] = candidatesChair[candidate];
			weights[c] = shares[candidate][perspective];
			weights[c+L] = totalShares[candidate];
			isFrozen[c] = frozen[candidate];
			atTable[c] = isWatcher[candidate];
			clocks[c] = timeWhenThawedOut[candidate];
			clocks[c+L] = timeSeated[candidate];
			clocks[c+L*2] = latestPunishment[candidate];
		}
	}

	function viewGovernance(address addr) public view returns(uint[] memory data){
		data = new uint[](CONFIGS*4);
		for(uint i = 0; i< CONFIGS; i+=1){
			data[i] = oracleConfigurations[i];
			data[CONFIGS + i] = totalVotes_forEach_configOption[i][ oracleConfigurations[i] ];
			data[CONFIGS*2 + i] = individualsSelectedOption[i][addr];
			data[CONFIGS*3 + i] = totalVotes_forEach_configOption[i][ individualsSelectedOption[i][addr] ];
		}
	}
	
	function accountData(address account) public view returns(
		uint _resolveWeight,
		uint _weightLocked,
		uint _timeSeated,
		bool _frozen,
		bool _isWatcher,
		uint _earnings,
		uint _totalShares,
		uint[] memory UINTs
	){
		_resolveWeight = resolveWeight[account];
		_weightLocked = weightLocked[account];
		_timeSeated = timeSeated[account];
		_frozen = frozen[account];
		_isWatcher = isWatcher[account];
		_earnings = earnings[account];
		_totalShares = totalShares[account];
		UINTs = new uint[](5);

		if( _isWatcher ){
			UINTs[0] = earningsPerWatcher - watcherPayouts[account];//txCoverageFee
			UINTs[1] = dividendsOf(ORACLE, account) * oracleConfigurations[DELEGATE_REWARDSHARE] / (1e20);
		}

		UINTs[2] = timeWhenThawedOut[account];
		UINTs[3] = latestPunishment[account];
		UINTs[4] = candidatesChair[account];
	}

	function compareStrings(string memory a, string memory b) public pure returns (bool) {
		return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b))) );
	}
	function compareBytes(bytes32 a, bytes32 b) public pure returns (bool) {
		return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b))) );
	}
	function bytesToAddress(bytes memory bys) private pure returns (address addr){
        assembly {
          addr := mload( add(bys,20) )
        } 
    }
}

abstract contract ResolveToken{
	function transfer(address _to, uint256 _value) public virtual returns (bool);
}

abstract contract Pyramid{
	function pullResolves(uint amount) public virtual returns (uint forfeiture);
	function resolveToken() public view virtual returns(ResolveToken);
}

abstract contract Requestor{
	function oracleIntFallback(uint ticketID, bool rejected, uint numberOfOptions, uint[] memory optionWeights, int[] memory intOptions) external virtual;
	function oracleAddressFallback(uint ticketID, bool rejected, uint numberOfOptions, uint[] memory optionWeights, address[] memory addressOptions) external virtual;
	function oracleObjectiveIntFallback(uint ticketID, bool rejected, int[] memory intOptions) external virtual;
	function oracleObjectiveAddressFallback(uint ticketID, bool rejected, address[] memory addressOptions) external virtual;
}

abstract contract Greenpoint{
	function payEthToAcreStakers() payable public virtual;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"candidate","type":"address"},{"indexed":false,"internalType":"bool","name":"successfulAssert","type":"bool"},{"indexed":false,"internalType":"address","name":"replacedWatcher","type":"address"},{"indexed":false,"internalType":"uint256","name":"newSeat","type":"uint256"}],"name":"AssertCandidate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"config","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"option","type":"uint256"}],"name":"AssertOption","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"candidate","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BackCandidate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"ETH","type":"uint256"}],"name":"Cashout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"CommitVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"dataType","type":"uint8"},{"indexed":false,"internalType":"bool","name":"subjective","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timeRequested","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"responseTimeWindow","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feePaid","type":"uint256"}],"name":"FileRequestTicket","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"watchers","type":"address[]"}],"name":"FinalizedRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"},{"indexed":false,"internalType":"address","name":"watcher","type":"address"}],"name":"FreezeNoncommits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"},{"indexed":false,"internalType":"address","name":"watcher","type":"address"}],"name":"FreezeUnrevealedCommits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"},{"indexed":false,"internalType":"address","name":"watcher","type":"address"}],"name":"FreezeWrongWatchers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"config","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"option","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"OptionVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"candidate","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PullBacking","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcher","type":"address"},{"indexed":false,"internalType":"uint256","name":"thawOutTime","type":"uint256"}],"name":"Punish","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"},{"indexed":false,"internalType":"bool","name":"rejected","type":"bool"},{"indexed":false,"internalType":"int256","name":"intVote","type":"int256"},{"indexed":false,"internalType":"address","name":"addressVote","type":"address"}],"name":"RevealVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountStaked","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"}],"name":"StakeResolves","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"},{"indexed":false,"internalType":"address","name":"defender","type":"address"},{"indexed":false,"internalType":"bool","name":"stance","type":"bool"}],"name":"SubjectiveStance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"candidate","type":"address"}],"name":"Thaw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcher","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TxCashout","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeResolves","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTotalHotSeats","type":"uint256"}],"name":"UpdateRoundTable","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"watcher","type":"address"},{"indexed":false,"internalType":"uint256","name":"paidOut","type":"uint256"}],"name":"WatcherPayroll","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"accountData","outputs":[{"internalType":"uint256","name":"_resolveWeight","type":"uint256"},{"internalType":"uint256","name":"_weightLocked","type":"uint256"},{"internalType":"uint256","name":"_timeSeated","type":"uint256"},{"internalType":"bool","name":"_frozen","type":"bool"},{"internalType":"bool","name":"_isWatcher","type":"bool"},{"internalType":"uint256","name":"_earnings","type":"uint256"},{"internalType":"uint256","name":"_totalShares","type":"uint256"},{"internalType":"uint256[]","name":"UINTs","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"alreadyBacking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"assertCandidate","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"config","type":"uint256"},{"internalType":"uint256","name":"option","type":"uint256"}],"name":"assertOption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"cashout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"chairsCandidate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tickets","type":"uint256[]"},{"internalType":"bytes32[]","name":"voteHashes","type":"bytes32[]"}],"name":"commitVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"a","type":"bytes32"},{"internalType":"bytes32","name":"b","type":"bytes32"}],"name":"compareBytes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"a","type":"string"},{"internalType":"string","name":"b","type":"string"}],"name":"compareStrings","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devPull","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"dividendsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"returnType","type":"uint8"},{"internalType":"bool","name":"subjective","type":"bool"}],"name":"fileRequestTicket","outputs":[{"internalType":"uint256","name":"ticketID","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ticketID","type":"uint256"}],"name":"finalizeRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tickets","type":"uint256[]"}],"name":"finalizeRequests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tickets","type":"uint256[]"},{"internalType":"address[]","name":"watchers","type":"address[]"}],"name":"freezeNoncommits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tickets","type":"uint256[]"},{"internalType":"address[]","name":"watchers","type":"address[]"}],"name":"freezeUnrevealedCommits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tickets","type":"uint256[]"},{"internalType":"address[]","name":"watchers","type":"address[]"}],"name":"freezeWrongWatchers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFee","outputs":[{"internalType":"uint256","name":"txCoverageFee","type":"uint256"},{"internalType":"uint256","name":"serviceFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hotSeats","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"individualsSelectedOption","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool[]","name":"isModifying","type":"bool[]"},{"internalType":"uint256[]","name":"modifiedOptions","type":"uint256[]"}],"name":"optionVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"oracleConfigurations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"candidate","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pullAllTheWay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"candidate","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"pullBacking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pyramid","outputs":[{"internalType":"contract Pyramid","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resolveToken","outputs":[{"internalType":"contract ResolveToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tickets","type":"uint256[]"},{"internalType":"bool[]","name":"rejected","type":"bool[]"},{"internalType":"int256[]","name":"intVotes","type":"int256[]"},{"internalType":"address[]","name":"addressVotes","type":"address[]"},{"internalType":"uint256[]","name":"passwords","type":"uint256[]"}],"name":"revealVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"watcher","type":"address"}],"name":"runWatcherPayroll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"candidate","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeCandidate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tickets","type":"uint256[]"},{"internalType":"address[]","name":"defenders","type":"address[]"},{"internalType":"bool[]","name":"stances","type":"bool[]"}],"name":"subjectiveStance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"candidate","type":"address"},{"internalType":"bool","name":"_assert","type":"bool"}],"name":"thaw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalVotes_forEach_configOption","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWatchers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tickets","type":"uint256[]"},{"internalType":"address[]","name":"watchers","type":"address[]"}],"name":"tryToPunish","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstakeResolves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"lock","type":"bool"}],"name":"updateACRE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"updatePines","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"seats","type":"uint256"}],"name":"updateRoundTable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"personal_or_roundtable","type":"bool"},{"internalType":"address","name":"perspective","type":"address"}],"name":"viewCandidates","outputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"dividends","type":"uint256[]"},{"internalType":"uint256[]","name":"seat","type":"uint256[]"},{"internalType":"uint256[]","name":"weights","type":"uint256[]"},{"internalType":"uint256[]","name":"clocks","type":"uint256[]"},{"internalType":"bool[]","name":"isFrozen","type":"bool[]"},{"internalType":"bool[]","name":"atTable","type":"bool[]"},{"internalType":"uint256[]","name":"roundTableDividends","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"viewGovernance","outputs":[{"internalType":"uint256[]","name":"data","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ticketID","type":"uint256"}],"name":"viewRequestTicket","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"timeRequested","type":"uint256"},{"internalType":"uint256","name":"timeWindow","type":"uint256"},{"internalType":"uint256","name":"numberOfOptions","type":"uint256"},{"internalType":"bool","name":"finalized","type":"bool"},{"internalType":"bool","name":"rejected","type":"bool"},{"internalType":"uint256[]","name":"weightOfResults","type":"uint256[]"},{"internalType":"int256[]","name":"resolvedInts","type":"int256[]"},{"internalType":"address[]","name":"resolvedAddresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"yourBacking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

600080546001600160a01b0319908116909155600180549091169055600660808181526101606040529060a060c08036833750508151620000489260029250602001906200016c565b50601e80546001600160a01b03199081167391683899ed812c1ac49590779cb72da6bf7971fe1790915560228054909116738db802d64f97dc6bde4ee9e8c1aecc64d3e7c0281790553480156200009e57600080fd5b50601e60009054906101000a90046001600160a01b03166001600160a01b031663a3e5301c6040518163ffffffff1660e01b815260040160206040518083038186803b158015620000ee57600080fd5b505afa15801562000103573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001299190620001d3565b601c80546001600160a01b0319166001600160a01b0392909216919091179055620001514290565b601f55601d80546001600160a01b0319163317905562000205565b828054828255906000526020600020908101928215620001aa579160200282015b82811115620001aa5782518255916020019190600101906200018d565b50620001b8929150620001bc565b5090565b5b80821115620001b85760008155600101620001bd565b600060208284031215620001e657600080fd5b81516001600160a01b0381168114620001fe57600080fd5b9392505050565b615dd280620002156000396000f3fe6080604052600436106102725760003560e01c80637df446471161014f578063bd67e7b6116100c1578063ddff6f901161007a578063ddff6f90146107f7578063deb906e71461082c578063e398ffef14610860578063ef1bade314610880578063ef2a1dbf146108a0578063fc6d90b2146108c057600080fd5b8063bd67e7b614610737578063be7f3a4a14610757578063bed34bba1461076d578063c0ee0b8a1461078d578063c8ae3eba146107ad578063ced72f87146107cd57600080fd5b80638c862168116101135780638c8621681461066a578063a3e5301c1461068a578063a52b366b146106aa578063a6cc4afd146106d7578063adbb7da8146106f7578063b91f11f61461071757600080fd5b80637df446471461057f57806381b8025b146105b757806383074a63146105d75780638618fe39146105f75780638c4d08db1461062f57600080fd5b80633ea7a304116101e857806360a31921116101ac57806360a31921146104c25780636268ca23146104e2578063661ffaa0146105025780636d7929e41461052257806376c03ea2146105355780637b6e43c11461056957600080fd5b80633ea7a3041461042c578063495c750c1461044c57806351d335c91461046c5780635990e1b4146104825780635c2f465e146104a257600080fd5b8063250e87c91161023a578063250e87c914610346578063253c7d5f146103665780632722fdf6146103865780632891a5f1146103b4578063319a22fb146103ec578063369115091461040c57600080fd5b806301e360be1461027757806303441006146102ca5780630921ac02146102ec57806312ca3c301461030c5780631a904ceb14610331575b600080fd5b34801561028357600080fd5b506102ad61029236600461584e565b6009602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d657600080fd5b506102ea6102e536600461584e565b6108e0565b005b3480156102f857600080fd5b506102ea610307366004615606565b611710565b34801561031857600080fd5b50610321611cc6565b60405190151581526020016102c1565b34801561033d57600080fd5b506102ea611f5a565b34801561035257600080fd5b50601e546102ad906001600160a01b031681565b34801561037257600080fd5b506102ea61038136600461531f565b612026565b34801561039257600080fd5b506103a66103a136600461584e565b61206b565b6040519081526020016102c1565b3480156103c057600080fd5b506103a66103cf366004615880565b600460209081526000928352604080842090915290825290205481565b3480156103f857600080fd5b506102ea6104073660046153ab565b61208c565b34801561041857600080fd5b506102ea6104273660046157d3565b612192565b34801561043857600080fd5b506102ea6104473660046156d7565b612300565b34801561045857600080fd5b506102ea610467366004615374565b61245b565b34801561047857600080fd5b506103a660215481565b34801561048e57600080fd5b506102ea61049d366004615526565b6124b5565b3480156104ae57600080fd5b506102ea6104bd36600461584e565b6126bd565b3480156104ce57600080fd5b506103a66104dd366004615341565b6128c4565b3480156104ee57600080fd5b506102ea6104fd36600461557f565b612995565b34801561050e57600080fd5b506102ea61051d3660046154f2565b612bf9565b6103a66105303660046158a3565b612c39565b34801561054157600080fd5b506105556105503660046157b5565b612e03565b6040516102c1989796959493929190615a25565b34801561057557600080fd5b506103a660185481565b34801561058b57600080fd5b506103a661059a366004615341565b601460209081526000928352604080842090915290825290205481565b3480156105c357600080fd5b506102ad6105d23660046153ab565b6133d0565b3480156105e357600080fd5b506102ea6105f2366004615526565b613408565b34801561060357600080fd5b506103a66106123660046157d3565b600360209081526000928352604080842090915290825290205481565b34801561063b57600080fd5b5061032161064a366004615341565b601b60209081526000928352604080842090915290825290205460ff1681565b34801561067657600080fd5b506102ea61068536600461584e565b613426565b34801561069657600080fd5b50601c546102ad906001600160a01b031681565b3480156106b657600080fd5b506106ca6106c536600461531f565b6135ab565b6040516102c19190615ad4565b3480156106e357600080fd5b506102ea6106f236600461531f565b613788565b34801561070357600080fd5b506102ea610712366004615374565b6137c1565b34801561072357600080fd5b506102ea610732366004615526565b61386f565b34801561074357600080fd5b506102ea6107523660046153ab565b613b17565b34801561076357600080fd5b506103a660115481565b34801561077957600080fd5b506103216107883660046157f5565b613b2a565b34801561079957600080fd5b506102ea6107a83660046153d5565b613b83565b3480156107b957600080fd5b506102ea6107c83660046153ab565b613e84565b3480156107d957600080fd5b506107e2613e8f565b604080519283526020830191909152016102c1565b34801561080357600080fd5b5061081761081236600461584e565b613ee5565b6040516102c1999897969594939291906159a8565b34801561083857600080fd5b5061084c61084736600461531f565b6140e7565b6040516102c1989796959493929190615c07565b34801561086c57600080fd5b506102ea61087b366004615526565b6142ef565b34801561088c57600080fd5b5061032161089b3660046157d3565b614500565b3480156108ac57600080fd5b506102ea6108bb36600461548f565b61453a565b3480156108cc57600080fd5b506102ea6108db36600461545b565b6146c0565b6000818152600760205260409020600481015460ff1661170c576000806011546001600160401b0381111561091757610917615d78565b604051908082528060200260200182016040528015610940578160200160208202803683370190505b50905060006011546001600160401b0381111561095f5761095f615d78565b604051908082528060200260200182016040528015610988578160200160208202803683370190505b50905060006011546001600160401b038111156109a7576109a7615d78565b6040519080825280602002602001820160405280156109d0578160200160208202803683370190505b50905060006011546001600160401b038111156109ef576109ef615d78565b604051908082528060200260200182016040528015610a18578160200160208202803683370190505b506040805160078082526101008201909252919250600091906020820160e08036833701905050905060006060610a4e8a61479a565b84600581518110610a6157610a61615d62565b6020026020010181935082815250505060005b6011548110156110175760008181526009602052604090205485516001600160a01b0390911699508990869083908110610ab057610ab0615d62565b60200260200101906001600160a01b031690816001600160a01b031681525050600284600581518110610ae557610ae5615d62565b6020026020010151610af79190615cd9565b828281518110610b0957610b09615d62565b602002602001015111610fdf576001546001600160a01b038a8116911614801590610b4c57506001600160a01b0389166000908152600d602052604090205460ff165b8015610b74575060028a01546001600160a01b038a166000908152600b602052604090205411155b8015610b9a57506001600160a01b0389166000908152600c8b01602052604090205460ff165b15610f89576001600160a01b038916600090815260136020526040902054845185906004908110610bcd57610bcd615d62565b60200260200101818151610be19190615c9c565b9052506001600160a01b0389166000908152600e8b01602052604090205460ff1615610f8e576001600160a01b038916600090815260136020526040812054855190918691610c3257610c32615d62565b60200260200101818151610c469190615c9c565b905250600092505b83600281518110610c6157610c61615d62565b6020026020010151831015610e005760098a015460ff166001148015610cbb57506001600160a01b0389166000908152600f8b0160205260409020548851899085908110610cb157610cb1615d62565b6020026020010151145b80610d17575060098a015460ff16158015610d1757506001600160a01b03808a16600090815260108c0160205260409020548851911690889085908110610d0457610d04615d62565b60200260200101516001600160a01b0316145b15610dee576001600160a01b0389166000908152601360205260409020548651879085908110610d4957610d49615d62565b60200260200101818151610d5d9190615c9c565b9052508351869085906003908110610d7757610d77615d62565b602002602001015181518110610d8f57610d8f615d62565b6020026020010151868481518110610da957610da9615d62565b6020026020010151118015610dc3575060068a015460ff16155b15610de9578284600381518110610ddc57610ddc615d62565b6020026020010181815250505b610e00565b610df9600184615c9c565b9250610c4e565b83600281518110610e1357610e13615d62565b6020026020010151831415610f895760098a015460ff1660011415610e8d576001600160a01b0389166000908152600f8b0160205260409020548451899086906002908110610e6457610e64615d62565b602002602001015181518110610e7c57610e7c615d62565b602002602001018181525050610f08565b60098a015460ff16610f08576001600160a01b03808a16600090815260108c0160205260409020548551911690889086906002908110610ecf57610ecf615d62565b602002602001015181518110610ee757610ee7615d62565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6001600160a01b0389166000908152601360205260409020548451879086906002908110610f3857610f38615d62565b602002602001015181518110610f5057610f50615d62565b602002602001018181525050600184600281518110610f7157610f71615d62565b60200260200101818151610f859190615c9c565b9052505b611005565b6001600160a01b0389166000908152600d8b01602052604090205460ff1615610f89576001600160a01b038916600090815260136020526040902054845185906001908110610f7157610f71615d62565b6001600160a01b038916600090815260088b0160205260409020805460ff191660011790555b611010600182615c9c565b9050610a74565b508260008151811061102b5761102b615d62565b60200260200101518360018151811061104657611046615d62565b60200260200101516110589190615c9c565b8360048151811061106b5761106b615d62565b60200260200101511480156110855750600689015460ff16155b806110c55750600689015460ff1661109e5760026110a1565b60035b60ff1689600301546110b39190615cfb565b89600201546110c29190615c9c565b42115b1561027257600085846003815181106110e0576110e0615d62565b6020026020010151815181106110f8576110f8615d62565b60200260200101518460018151811061111357611113615d62565b60200260200101511115611125575060015b60098a015460ff1681156111475760118b01805460ff19166001179055611482565b60068b015460ff161561137a578460028151811061116757611167615d62565b60200260200101518b6012018190555060008560068151811061118c5761118c615d62565b6020026020010181815250505b846002815181106111ac576111ac615d62565b6020026020010151856006815181106111c7576111c7615d62565b602002602001015110156113755786856006815181106111e9576111e9615d62565b60200260200101518151811061120157611201615d62565b60200260200101518b60130160008760068151811061122257611222615d62565b60200260200101518152602001908152602001600020819055508060ff16600114156112b457888560068151811061125c5761125c615d62565b60200260200101518151811061127457611274615d62565b60200260200101518b60140160008760068151811061129557611295615d62565b6020026020010151815260200190815260200160002081905550611344565b60ff81166113445787856006815181106112d0576112d0615d62565b6020026020010151815181106112e8576112e8615d62565b60200260200101518b60150160008760068151811061130957611309615d62565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60018560068151811061135957611359615d62565b6020026020010181815161136d9190615c9c565b905250611199565b611482565b8460028151811061138d5761138d615d62565b60200260200101516000146113a35760016113a6565b60005b60ff90811660128d015581166001141561140c5788856003815181106113ce576113ce615d62565b6020026020010151815181106113e6576113e6615d62565b60200260200101518b601401600080815260200190815260200160002081905550611482565b60ff811661148257878560038151811061142857611428615d62565b60200260200101518151811061144057611440615d62565b60200260200101518b601501600080815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b600080546001600160a01b031681526013602052604090205460058c01546114af90600160401b90615cfb565b6114b99190615cd9565b600080546001600160a01b0316815260166020526040812080549091906114e1908490615c9c565b909155505060048b01805460ff1916600117905560068b015460ff16156115fe578060ff16600114156115a9578a60010160009054906101000a90046001600160a01b03166001600160a01b031663e87076cc8c600001548d60110160009054906101000a900460ff168e601201548b8e6040518663ffffffff1660e01b8152600401611572959493929190615b98565b600060405180830381600087803b15801561158c57600080fd5b505af11580156115a0573d6000803e3d6000fd5b505050506116c7565b60ff81166115f95760018b01548b5460118d015460128e015460405163ace62afb60e01b81526001600160a01b039094169363ace62afb9361157293909260ff909116918d908f90600401615b53565b6116c7565b8060ff166001141561164b5760018b01548b5460118d015460405163234cc9b760e01b81526001600160a01b039093169263234cc9b79261157292909160ff909116908e90600401615b32565b60ff81166116c75760018b01548b5460118d0154604051631bfd059760e11b81526001600160a01b03909316926337fa0b2e9261169492909160ff909116908d90600401615b08565b600060405180830381600087803b1580156116ae57600080fd5b505af11580156116c2573d6000803e3d6000fd5b505050505b8a546040517fe412c5d4fe9a885e67c46e34c24c2278249bb57f0f75b59b0ff2f4df71cdecbe916116f9918990615ae7565b60405180910390a1505050505050505050505b5050565b3360006060815b8851811015611cbb57600760008a838151811061173657611736615d62565b602090810291909101810151825281810192909252604090810160009081206001600160a01b0388168252600a8101909352205490935060ff1615611ca957826003015483600201546117899190615c9c565b421180156117b5575060038301546117a2906002615cfb565b83600201546117b19190615c9c565b4211155b1561027257600983015460ff1660011415611856578781815181106117dc576117dc615d62565b60200260200101518782815181106117f6576117f6615d62565b602002602001015186838151811061181057611810615d62565b60200260200101516040516020016118409392919092151560f81b83526001830191909152602182015260410190565b60405160208183030381529060405291506118fc565b600983015460ff166118fc5787818151811061187457611874615d62565b602002602001015186828151811061188e5761188e615d62565b60200260200101518683815181106118a8576118a8615d62565b60200260200101516040516020016118ea9392919092151560f81b835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b60405160208183030381529060405291505b61195f8280519060200120600760008c858151811061191d5761191d615d62565b60200260200101518152602001908152602001600020600b016000876001600160a01b03166001600160a01b0316815260200190815260200160002054614500565b15610272576001600760008b848151811061197c5761197c615d62565b60200260200101518152602001908152602001600020600c016000866001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508781815181106119e1576119e1615d62565b602002602001015115611a5e576001600760008b8481518110611a0657611a06615d62565b60200260200101518152602001908152602001600020600d016000866001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550611bda565b6001600760008b8481518110611a7657611a76615d62565b602090810291909101810151825281810192909252604090810160009081206001600160a01b0389168252600e019092529020805460ff1916911515919091179055600983015460ff1660011415611b3d57868181518110611ada57611ada615d62565b6020026020010151600760008b8481518110611af857611af8615d62565b60200260200101518152602001908152602001600020600f016000866001600160a01b03166001600160a01b0316815260200190815260200160002081905550611bda565b600983015460ff16611bda57858181518110611b5b57611b5b615d62565b6020026020010151600760008b8481518110611b7957611b79615d62565b602002602001015181526020019081526020016000206010016000866001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b7f0da72da6ba448b914546388b7b52bc6bf20f290f82d60dc9bac6a49efd888385848a8381518110611c0e57611c0e615d62565b60200260200101518a8481518110611c2857611c28615d62565b60200260200101518a8581518110611c4257611c42615d62565b60200260200101518a8681518110611c5c57611c5c615d62565b6020026020010151604051611ca09594939291906001600160a01b039586168152602081019490945291151560408401526060830152909116608082015260a00190565b60405180910390a15b611cb4600182615c9c565b9050611717565b505050505050505050565b336000818152600c60205260408120549091908290819060ff16158015611cef57506000601154115b611cf857600080fd5b60006018546011541415611d6f5760005b601154811015611d6957600081815260096020908152604080832054878452818420546001600160a01b03908116855260139093528184205492168084529220549193501115611d57578093505b611d62600182615c9c565b9050611d09565b50611d79565b6001915060185492505b6000838152600960209081526040808320546001600160a01b0390811684526013909252808320549187168352909120541180611db35750815b8015611dd857506001600160a01b0384166000908152600d602052604090205460ff16155b15611efb576000838152600960205260409020546001600160a01b031682611e2a57600080546001600160a01b0383811683526013602052604090922054611e25929091169083906149a1565b611e38565b506001546001600160a01b03165b600080546001600160a01b0387811683526013602052604090922054611e6392909116908790614afa565b6001600160a01b038581166000818152600b602090815260408083204290558883526009825280832080546001600160a01b03191685179055838352600a8252918290208890558151928352600190830152918316818301526060810186905290517ff313d7b97de5f9223513c3e6327eb4557214f8cfe4912bd70cc1147224b8bb209181900360800190a160019550505050505090565b600154604080516001600160a01b038781168252600060208301529092168282015260608201859052517ff313d7b97de5f9223513c3e6327eb4557214f8cfe4912bd70cc1147224b8bb209181900360800190a1600094505050505090565b601d546001600160a01b03163314611f7157600080fd5b6021805460009091556022546001600160a01b031663fa0cd58b611f96600284615cd9565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fc157600080fd5b505af1158015611fd5573d6000803e3d6000fd5b5050505050336001600160a01b03166108fc600283611ff49190615cd9565b611ffe9084615d1a565b6040518115909202916000818181858888f1935050505015801561170c573d6000803e3d6000fd5b6001600160a01b0381166000908152600d602052604090205460ff16156120685760005461205d906001600160a01b031682614be3565b612068816001614d67565b50565b6002818154811061207b57600080fd5b600091825260209091200154905081565b6001600160a01b03821660009081526014602090815260408083203380855292529091205482118015906120d957506001600160a01b0383166000908152600c602052604090205460ff16155b80156120fe57506001600160a01b0383166000908152600d602052604090205460ff16155b15610272576001600160a01b0381166000908152600660205260408120805484929061212b908490615d1a565b9091555061213c90508382846149a1565b604080516001600160a01b038084168252851660208201529081018390527fb46567f3d2217cfda80b13d2798423c02e6e8ad7cc7553d555c33d6ea8972b64906060015b60405180910390a1505050565b505050565b600082815260036020526040812060028054919291859081106121b7576121b7615d62565b60009182526020808320909101548352828101939093526040918201812054858252600384528282208583529093522054111561170c57600182141561220b5760b481116122065760b4612208565b805b90505b81612224576007811161221f576007612221565b805b90505b60028214156122515768056bc75e2d631000008111612243578061224e565b68056bc75e2d631000005b90505b806002838154811061226557612265615d62565b600091825260209091200155816122c257600260008154811061228a5761228a615d62565b906000526020600020015460115410156122c25760026000815481106122b2576122b2615d62565b6000918252602090912001546011555b60408051838152602081018390527f95b6a67fddbdbd82beb0b9431b394c314a65f30fb7d153a7df01e3c9c70cfac091015b60405180910390a15050565b336000805b8451811015612454576007600086838151811061232457612324615d62565b602002602001015181526020019081526020016000209150816003015482600201546123509190615c9c565b4211610272576001600160a01b0383166000908152600a830160205260409020805460ff19166001179055835184908290811061238f5761238f615d62565b602002602001015182600b016000856001600160a01b03166001600160a01b03168152602001908152602001600020819055507fdfa8b2eba5788145be2e64941ef2744e990e6ff8cf92aa2a6e169464cf6aac7c838683815181106123f6576123f6615d62565b602002602001015186848151811061241057612410615d62565b602090810291909101810151604080516001600160a01b0390951685529184019290925282015260600160405180910390a161244d600182615c9c565b9050612305565b5050505050565b601d546001600160a01b03163314801561247f5750602254600160a01b900460ff16155b61248857600080fd5b60228054911515600160a01b026001600160a81b03199092166001600160a01b0390931692909217179055565b6000805b82518110156126b757600760008583815181106124d8576124d8615d62565b602002602001015181526020019081526020016000209150600d600084838151811061250657612506615d62565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff168015612575575081600a01600084838151811061254c5761254c615d62565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b80156125c357508160020154600b600085848151811061259757612597615d62565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411155b80156125e15750816003015482600201546125de9190615c9c565b42115b156126a5576126228482815181106125fb576125fb615d62565b602002602001015184838151811061261557612615615d62565b6020026020010151614e1e565b156126a5577fdb940a7c62c3fcd01b14ddbc82d925b787b365bfbe96626df2913b8d34f579dc84828151811061265a5761265a615d62565b602002602001015184838151811061267457612674615d62565b602002602001015160405161269c9291909182526001600160a01b0316602082015260400190565b60405180910390a15b6126b0600182615c9c565b90506124b9565b50505050565b336000818152600660209081526040808320546005909252909120546126e39190615d1a565b8211610272576001600160a01b03811660009081526005602052604081208054849290612711908490615d1a565b90915550600090505b600681101561277c576000818152600360209081526040808320600483528184206001600160a01b0387168552835281842054845290915281208054859290612764908490615d1a565b909155506127759050600182615c9c565b905061271a565b50604080516001600160a01b0383168152602081018490527f180194e23a6f1a7598ce10cb5a93bb45217b9f32fcd00ab1a81286210a6db504910160405180910390a1601e546040516307f173f160e21b8152600481018490526001600160a01b0390911690631fc5cfc490602401602060405180830381600087803b15801561280557600080fd5b505af1158015612819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283d9190615867565b50601c5460405163a9059cbb60e01b81526001600160a01b038381166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561288c57600080fd5b505af11580156128a0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218d9190615798565b6001600160a01b0380831660008181526015602090815260408083209486168352938152838220549282526016905291822054829161290291615d1a565b6000549091506001600160a01b03858116911614801561293b57506001600160a01b0383166000908152600d602052604090205460ff16155b1561294a57600091505061298f565b6001600160a01b03808516600090815260146020908152604080832093871683529290522054600160401b90612981908390615cfb565b61298b9190615cd9565b9150505b92915050565b336000805b8551811015612bf157600760008783815181106129b9576129b9615d62565b6020026020010151815260200190815260200160002091508160020154600b6000856001600160a01b03166001600160a01b031681526020019081526020016000205411610272578160020154600b6000878481518110612a1c57612a1c615d62565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411158015612a7057506003820154612a5e906002615cfb565b8260020154612a6d9190615c9c565b42115b8015612a995750600380830154612a8691615cfb565b8260020154612a959190615c9c565b4211155b1561027257838181518110612ab057612ab0615d62565b6020026020010151826007016000856001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110612af357612af3615d62565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507f846e74191f442a252b5448450c45744469ee6758620b4a2b319642a60ca3d23583878381518110612b6657612b66615d62565b6020026020010151878481518110612b8057612b80615d62565b6020026020010151878581518110612b9a57612b9a615d62565b6020026020010151604051612bd794939291906001600160a01b039485168152602081019390935292166040820152901515606082015260800190565b60405180910390a1612bea600182615c9c565b905061299a565b505050505050565b60005b815181101561170c57612c27828281518110612c1a57612c1a615d62565b60200260200101516108e0565b612c32600182615c9c565b9050612bfc565b6000348180612c46613e8f565b9150915060006301e13380601f5442612c5f9190615d1a565b10612c6b576000612c76565b612c76601483615cd9565b90508660ff1660011480612c8b575060ff8716155b612c9457600080fd5b80612c9f8385615c9c565b612ca99190615c9c565b84106102725760088054600081815260076020526040812091975090918791612cd183615d31565b909155505060098101805460ff191660ff8a161790554281600201819055506002600181548110612d0457612d04615d62565b60009182526020909120015460038201558581556001810180546001600160a01b0319163317905560068101805488151560ff1990911617905583612d498387615d1a565b612d539190615d1a565b81600501819055508160216000828254612d6d9190615c9c565b9091555050601854612d7f9085615cd9565b60176000828254612d909190615c9c565b90915550506003810154604080513381526020810189905260ff8b1681830152891515606082015242608082015260a081019290925260c08201879052517f78b0b6fc4cdc1dcce1a77c883f3f8cee63ae1e4a78b39064b4c7d3ab473f1edf9181900360e00190a1505050505092915050565b60608060608060608060608060008a15612e205750601154612e3b565b506001600160a01b0389166000908152601a60205260409020545b806001600160401b03811115612e5357612e53615d78565b604051908082528060200260200182016040528015612e7c578160200160208202803683370190505b509750806001600160401b03811115612e9757612e97615d78565b604051908082528060200260200182016040528015612ec0578160200160208202803683370190505b509650806001600160401b03811115612edb57612edb615d78565b604051908082528060200260200182016040528015612f04578160200160208202803683370190505b509150612f12816002615cfb565b6001600160401b03811115612f2957612f29615d78565b604051908082528060200260200182016040528015612f52578160200160208202803683370190505b509550612f60816003615cfb565b6001600160401b03811115612f7757612f77615d78565b604051908082528060200260200182016040528015612fa0578160200160208202803683370190505b509450806001600160401b03811115612fbb57612fbb615d78565b604051908082528060200260200182016040528015612fe4578160200160208202803683370190505b509350806001600160401b03811115612fff57612fff615d78565b604051908082528060200260200182016040528015613028578160200160208202803683370190505b509250806001600160401b0381111561304357613043615d78565b60405190808252806020026020018201604052801561306c578160200160208202803683370190505b5098506000805b828110156133c0578c156130a0576000818152600960205260409020546001600160a01b031691506130e2565b6001600160a01b038c166000908152601a602052604090208054829081106130ca576130ca615d62565b6000918252602090912001546001600160a01b031691505b818b82815181106130f5576130f5615d62565b60200260200101906001600160a01b031690816001600160a01b03168152505061311f828d6128c4565b8a828151811061313157613131615d62565b6020908102919091010152600054613152906001600160a01b0316836128c4565b84828151811061316457613164615d62565b602002602001018181525050600a6000836001600160a01b03166001600160a01b03168152602001908152602001600020548982815181106131a8576131a8615d62565b60200260200101818152505060146000836001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000205488828151811061320f5761320f615d62565b6020908102919091018101919091526001600160a01b038316600090815260139091526040902054886132428584615c9c565b8151811061325257613252615d62565b6020908102919091018101919091526001600160a01b0383166000908152600c9091526040902054865160ff9091169087908390811061329457613294615d62565b9115156020928302919091018201526001600160a01b0383166000908152600d9091526040902054855160ff909116908690839081106132d6576132d6615d62565b9115156020928302919091018201526001600160a01b0383166000908152600f9091526040902054875188908390811061331257613312615d62565b6020908102919091018101919091526001600160a01b0383166000908152600b9091526040902054876133458584615c9c565b8151811061335557613355615d62565b6020908102919091018101919091526001600160a01b0383166000908152600e909152604090205487613389856002615cfb565b6133939084615c9c565b815181106133a3576133a3615d62565b60209081029190910101526133b9600182615c9c565b9050613073565b5050509295985092959890939650565b601a60205281600052604060002081815481106133ec57600080fd5b6000918252602090912001546001600160a01b03169150829050565b61341282826124b5565b61341c82826142ef565b61170c828261386f565b6000806000806000600260008154811061344257613442615d62565b9060005260206000200154905060115481141561346157505050505050565b601854601154118015613475575060115481105b15613481576018546011555b600094505b8585101561356857600093505b6011548410156134f357600084815260096020908152604080832054868452818420546001600160a01b039081168552601390935281842054921680845292205491935011156134e1578392505b6134ec600185615c9c565b9350613493565b60008381526009602090815260408083205483546001600160a01b039182168086526013909452919093205491945061352f92169084906149a1565b6001601160008282546135429190615d1a565b909155505060115481141561355657613568565b613561600186615c9c565b9450613486565b7f4fd61a710c95929daa9c582f7abeaaaead9a191e99a6cf2a956852058f987e9a60115460405161359b91815260200190565b60405180910390a1505050505050565b60606135b960066004615cfb565b6001600160401b038111156135d0576135d0615d78565b6040519080825280602002602001820160405280156135f9578160200160208202803683370190505b50905060005b6006811015613782576002818154811061361b5761361b615d62565b906000526020600020015482828151811061363857613638615d62565b6020026020010181815250506003600082815260200190815260200160002060006002838154811061366c5761366c615d62565b9060005260206000200154815260200190815260200160002054828260066136949190615c9c565b815181106136a4576136a4615d62565b60209081029190910181019190915260008281526004825260408082206001600160a01b0387168352909252205482826136e060066002615cfb565b6136ea9190615c9c565b815181106136fa576136fa615d62565b602090810291909101810191909152600082815260038083526040808320600485528184206001600160a01b0389168552855281842054845290935291902054908390839061374b90600690615cfb565b6137559190615c9c565b8151811061376557613765615d62565b602090810291909101015261377b600182615c9c565b90506135ff565b50919050565b601d546001600160a01b0316331461379f57600080fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166000908152600f6020526040902054421015801561380157506001600160a01b0382166000908152600c602052604090205460ff165b15610272576001600160a01b0382166000908152600c60205260409020805460ff19169055801561383657613834611cc6565b505b6040516001600160a01b03831681527f08d96ea9fa3fe06368b69ca8c3f12f3d118ab54146641b6c0a919ae0747206eb906020016122f4565b60008060005b8351811015612454576007600086838151811061389457613894615d62565b6020026020010151815260200190815260200160002091508381815181106138be576138be615d62565b6020908102919091010151600483015490935060ff1680156139195750600d60008583815181106138f1576138f1615d62565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff165b801561396757508160020154600b600086848151811061393b5761393b615d62565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411155b80156139785750601182015460ff16155b8015613a735750600682015460ff16158015613a1a5750600982015460ff1660011480156139d057506001600160a01b0383166000908152600f83016020908152604080832054838052601486019092529091205414155b80613a1a5750600982015460ff16158015613a1a57506001600160a01b03808416600090815260108401602090815260408083205483805260158701909252909120548216911614155b80613a4e5750600682015460ff168015613a4e57506001600160a01b038316600090815260088301602052604090205460ff165b80613a7357506001600160a01b0383166000908152600d8301602052604090205460ff165b15613b0557613a9b858281518110613a8d57613a8d615d62565b602002602001015184614e1e565b15613b05577f66f367e56622acb25f58dba1a40a6a740e1b6fa9888f555087ca5c8e3fbfb812858281518110613ad357613ad3615d62565b602002602001015184604051613afc9291909182526001600160a01b0316602082015260400190565b60405180910390a15b613b10600182615c9c565b9050613875565b613b21828261208c565b61170c816126bd565b600081604051602001613b3d919061596d565b6040516020818303038152906040528051906020012083604051602001613b64919061596d565b6040516020818303038152906040528051906020012014905092915050565b601c546001600160a01b031633141561027257601e546001600160a01b0385811691161415613bb1576126b7565b6001600160a01b03841660009081526005602052604081208054859290613bd9908490615c9c565b90915550506001600160a01b038416600090815260208052604081205460ff1615613c865760005b60068160ff161015613c805760ff811660008181526004602090815260408083206001600160a01b038b16845282528083205493835260038252808320848452909152812080549294508792909190613c5b908490615c9c565b90915550613c6e905060ff821683612192565b613c79600182615cb4565b9050613c01565b50613d4b565b6001600160a01b03851660009081526020805260408120805460ff191660011790555b60068160ff161015613d495760028160ff1681548110613ccb57613ccb615d62565b600091825260208083209091015460ff84168084526004835260408085206001600160a01b038c168652845280852083905590845260038352808420828552909252908220805491945087929091613d24908490615c9c565b90915550613d37905060ff821683612192565b613d42600182615cb4565b9050613ca9565b505b846001600160a01b03167f496d21a3791df17b9e71acba0bd6c88352f3da2636dc2bfae959f09af6c4fb99858585604051613d8893929190615bd1565b60405180910390a26000613dd184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614f9a92505050565b6001549091506001600160a01b03808316911614613df457613df4868287614fa1565b601c54601e5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810188905291169063a9059cbb90604401602060405180830381600087803b158015613e4457600080fd5b505af1158015613e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e7c9190615798565b5050506126b7565b61170c338383614fa1565b6000806011546002600581548110613ea957613ea9615d62565b9060005260206000200154613ebe9190615cfb565b6002600481548110613ed257613ed2615d62565b9060005260206000200154915091509091565b60008181526007602052604090206001810154600282015460038301546004840154601285015460118601546001600160a01b039095169593949293909260ff92831692169060609081908190866001600160401b03811115613f4a57613f4a615d78565b604051908082528060200260200182016040528015613f73578160200160208202803683370190505b50935080601201546001600160401b03811115613f9257613f92615d78565b604051908082528060200260200182016040528015613fbb578160200160208202803683370190505b50925080601201546001600160401b03811115613fda57613fda615d78565b604051908082528060200260200182016040528015614003578160200160208202803683370190505b50915060005b81601201548110156140d8576000818152601383016020526040902054855186908390811061403a5761403a615d62565b6020026020010181815250508160140160008281526020019081526020016000205484828151811061406e5761406e615d62565b602090810291909101810191909152600082815260158401909152604090205483516001600160a01b03909116908490839081106140ae576140ae615d62565b6001600160a01b03909216602092830291909101909101526140d1600182615c9c565b9050614009565b50509193959799909294969850565b6001600160a01b0381166000908152600560208181526040808420546006835281852054600b845282862054600c855283872054600d8652848820546012875285892054601388529886902054865189815260c0810190975294989397929660ff9283169692909116949260609291820160a0803683370190505090508315614220576001600160a01b0389166000908152601960205260409020546017546141909190615d1a565b816000815181106141a3576141a3615d62565b60200260200101818152505068056bc75e2d63100000600280815481106141cc576141cc615d62565b600091825260208220015490546141ec906001600160a01b03168c6128c4565b6141f69190615cfb565b6142009190615cd9565b8160018151811061421357614213615d62565b6020026020010181815250505b6001600160a01b0389166000908152600f602052604090205481518290600290811061424e5761424e615d62565b602002602001018181525050600e60008a6001600160a01b03166001600160a01b03168152602001908152602001600020548160038151811061429357614293615d62565b602002602001018181525050600a60008a6001600160a01b03166001600160a01b0316815260200190815260200160002054816004815181106142d8576142d8615d62565b602002602001018181525050919395975091939597565b6000805b82518110156126b7576007600085838151811061431257614312615d62565b602002602001015181526020019081526020016000209150600d600084838151811061434057614340615d62565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1680156143af575081600c01600084838151811061438657614386615d62565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b80156143fd57508160020154600b60008584815181106143d1576143d1615d62565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411155b801561445157506003820154614414906002615cfb565b6007600086848151811061442a5761442a615d62565b602002602001015181526020019081526020016000206002015461444e9190615c9c565b42115b156144ee5761446b8482815181106125fb576125fb615d62565b156144ee577fb47f0a03f44d44a25ab97a3ba3ae1459aead6c30d229c44a316b03dd43aa2aac8482815181106144a3576144a3615d62565b60200260200101518483815181106144bd576144bd615d62565b60200260200101516040516144e59291909182526001600160a01b0316602082015260400190565b60405180910390a15b6144f9600182615c9c565b90506142f3565b60008160405160200161451591815260200190565b60408051601f1981840301815282825280516020918201209083018690529101613b64565b3360008181526020805260408120805460ff19166001179055805b60068210156124545784828151811061457057614570615d62565b6020026020010151156146ae5783828151811061458f5761458f615d62565b6020908102919091018101516001600160a01b0385166000818152600584526040808220548783526003865281832060048752828420948452938652818320548352929094529283208054929450909290916145ec908490615d1a565b909155505060008281526004602090815260408083206001600160a01b038716845282528083208490556005825280832054858452600383528184208585529092528220805491929091614641908490615c9c565b90915550506001600160a01b0383166000818152600560209081526040918290205482519384529083018590528282018490526060830152517fa9e37c974eaa5d76c988f9e32be7ff5e520ca27d84ec816815c3fa33ed00f2769181900360800190a16146ae8282612192565b6146b9600183615c9c565b9150614555565b3360005b8251811015614702576146f08382815181106146e2576146e2615d62565b602002602001015183614be3565b6146fb600182615c9c565b90506146c4565b5061470c81612026565b6001600160a01b03811660008181526012602090815260408083208054939055805193845290830182905290917fbdc68fa65ba7134c6af79a12ce7d3a00efe776fb55a6b16ffccf2058fb967f11910160405180910390a16040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156126b7573d6000803e3d6000fd5b60008181526007602052604081206011546060919083908190819081906001600160401b038111156147ce576147ce615d78565b6040519080825280602002602001820160405280156147f7578160200160208202803683370190505b50600686015490965060ff1615614997575060005b601154811015614997576000818152600960209081526040808320546001600160a01b0316808452600d9092529091205490945060ff16801561486b575060028501546001600160a01b0385166000908152600b602052604090205411155b15614985576001600160a01b0384166000908152601360205260409020546148939088615c9c565b9650600091505b601154821015614985576000828152600960209081526040808320546001600160a01b0316808452600d9092529091205490935060ff1680156148f9575060028501546001600160a01b0384166000908152600b602052604090205411155b15614973576001600160a01b03808516600090815260078701602090815260408083209387168352929052205460ff1615614973576001600160a01b038416600090815260136020526040902054865187908490811061495b5761495b615d62565b6020026020010181815161496f9190615c9c565b9052505b61497e600183615c9c565b915061489a565b614990600182615c9c565b905061480c565b5050505050915091565b6149ab8383614be3565b6001600160a01b038316600090815260136020526040812080548392906149d3908490615d1a565b90915550506001600160a01b03808416600090815260146020908152604080832093861683529290529081208054839290614a0f908490615d1a565b90915550506000546001600160a01b038481169116141561218d57614a35826001614d67565b6001546001600160a01b0383811691161461218d576001600160a01b0382166000908152600d60209081526040808320805460ff19169055600a9091528120546018549091906009908290614a8c90600190615d1a565b815260208082019290925260409081016000908120548582526009845282822080546001600160a01b0319166001600160a01b039092169182179055808252600a90935290812084905560188054929350600192909190614aee908490615d1a565b90915550505050505050565b614b048383614be3565b6001600160a01b03831660009081526013602052604081208054839290614b2c908490615c9c565b90915550506001600160a01b03808416600090815260146020908152604080832093861683529290529081208054839290614b68908490615c9c565b90915550506000546001600160a01b038481169116141561218d57614b8e826000614d67565b6001546001600160a01b0383811691161461218d57600160186000828254614bb69190615c9c565b90915550506001600160a01b0382166000908152600d60205260409020805460ff19166001179055505050565b6000614bef83836128c4565b6001600160a01b038085166000818152601660209081526040808320546015835281842089871685529092528220555492935091161415614d3557600068056bc75e2d6310000060028081548110614c4957614c49615d62565b906000526020600020015483614c5f9190615cfb565b614c699190615cd9565b6001600160a01b038416600090815260126020526040812080549293508392909190614c96908490615c9c565b90915550506001600160a01b03831660009081526013602052604081205415614cfc576001600160a01b038416600090815260136020526040902054600160401b614ce18486615d1a565b614ceb9190615cfb565b614cf59190615cd9565b9050614d00565b5060005b6001600160a01b03841660009081526016602052604081208054839290614d28908490615c9c565b9091555061218d92505050565b6001600160a01b03821660009081526012602052604081208054839290614d5d908490615c9c565b9091555050505050565b6001600160a01b038216600090815260196020526040812054601754614d8d9190615d1a565b6017546001600160a01b03851660009081526019602052604090205590508115614ddf576001600160a01b03831660009081526012602052604081208054839290614dd9908490615c9c565b90915550505b604080516001600160a01b0385168152602081018390527fc661e76b5a6e97d962bc536b290133544a35bd9a85bfa2b47bae41371d9106359101612180565b6000828152600760205260408120600681015460ff16614e3f576002614e42565b60035b60ff168160030154614e549190615cfb565b8160020154614e639190615c9c565b6001600160a01b0384166000908152600e60205260409020541015614f90576001600160a01b0383166000908152600d602052604090205460ff1615614ece57600080546001600160a01b0385811683526013602052604090922054614ece929091169085906149a1565b6001600160a01b0383166000908152600c60209081526040808320805460ff19166001179055600280850154600e90935292205580546003908110614f1557614f15615d62565b9060005260206000200154614f274290565b614f319190615c9c565b6001600160a01b0384166000818152600f602090815260409182902084905581519283528201929092527febbcaaf6b9aa8b4083ae4b2f842c8de6f75319018e7b5e141a1e87aebadde6c3910160405180910390a1600191505061298f565b5060009392505050565b6014015190565b6000546001600160a01b0383811691161415614fbc57600080fd5b6001600160a01b038316600090815260066020908152604080832054600590925290912054614feb9190615d1a565b811115801561501357506001600160a01b0382166000908152600c602052604090205460ff16155b801561503857506001600160a01b0382166000908152600d602052604090205460ff16155b15610272576001600160a01b03831660009081526006602052604081208054839290615065908490615c9c565b909155506150769050828483614afa565b604080516001600160a01b038086168252841660208201529081018290527f6c00e620c7a4707cb0999e411409fb17bce41cdc4c9f18375fa9b3bf3bf4f94c9060600160405180910390a16001600160a01b038084166000908152601b602090815260408083209386168352929052205460ff1661218d576001600160a01b038381166000818152601a602090815260408083208054600180820183559185528385200180546001600160a01b0319169689169687179055938352601b825280832094835293905291909120805460ff19169091179055505050565b80356001600160a01b038116811461516957600080fd5b919050565b600082601f83011261517f57600080fd5b8135602061519461518f83615c79565b615c49565b80838252828201915082860187848660051b89010111156151b457600080fd5b60005b858110156151da576151c882615152565b845292840192908401906001016151b7565b5090979650505050505050565b600082601f8301126151f857600080fd5b8135602061520861518f83615c79565b80838252828201915082860187848660051b890101111561522857600080fd5b60005b858110156151da57813561523e81615d8e565b8452928401929084019060010161522b565b600082601f83011261526157600080fd5b8135602061527161518f83615c79565b80838252828201915082860187848660051b890101111561529157600080fd5b60005b858110156151da57813584529284019290840190600101615294565b600082601f8301126152c157600080fd5b81356001600160401b038111156152da576152da615d78565b6152ed601f8201601f1916602001615c49565b81815284602083860101111561530257600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561533157600080fd5b61533a82615152565b9392505050565b6000806040838503121561535457600080fd5b61535d83615152565b915061536b60208401615152565b90509250929050565b6000806040838503121561538757600080fd5b61539083615152565b915060208301356153a081615d8e565b809150509250929050565b600080604083850312156153be57600080fd5b6153c783615152565b946020939093013593505050565b600080600080606085870312156153eb57600080fd5b6153f485615152565b93506020850135925060408501356001600160401b038082111561541757600080fd5b818701915087601f83011261542b57600080fd5b81358181111561543a57600080fd5b88602082850101111561544c57600080fd5b95989497505060200194505050565b60006020828403121561546d57600080fd5b81356001600160401b0381111561548357600080fd5b61298b8482850161516e565b600080604083850312156154a257600080fd5b82356001600160401b03808211156154b957600080fd5b6154c5868387016151e7565b935060208501359150808211156154db57600080fd5b506154e885828601615250565b9150509250929050565b60006020828403121561550457600080fd5b81356001600160401b0381111561551a57600080fd5b61298b84828501615250565b6000806040838503121561553957600080fd5b82356001600160401b038082111561555057600080fd5b61555c86838701615250565b9350602085013591508082111561557257600080fd5b506154e88582860161516e565b60008060006060848603121561559457600080fd5b83356001600160401b03808211156155ab57600080fd5b6155b787838801615250565b945060208601359150808211156155cd57600080fd5b6155d98783880161516e565b935060408601359150808211156155ef57600080fd5b506155fc868287016151e7565b9150509250925092565b600080600080600060a0868803121561561e57600080fd5b85356001600160401b038082111561563557600080fd5b61564189838a01615250565b9650602088013591508082111561565757600080fd5b61566389838a016151e7565b9550604088013591508082111561567957600080fd5b61568589838a01615250565b9450606088013591508082111561569b57600080fd5b6156a789838a0161516e565b935060808801359150808211156156bd57600080fd5b506156ca88828901615250565b9150509295509295909350565b600080604083850312156156ea57600080fd5b82356001600160401b038082111561570157600080fd5b61570d86838701615250565b935060209150818501358181111561572457600080fd5b85019050601f8101861361573757600080fd5b803561574561518f82615c79565b80828252848201915084840189868560051b870101111561576557600080fd5b600094505b8385101561578857803583526001949094019391850191850161576a565b5080955050505050509250929050565b6000602082840312156157aa57600080fd5b815161533a81615d8e565b600080604083850312156157c857600080fd5b823561535d81615d8e565b600080604083850312156157e657600080fd5b50508035926020909101359150565b6000806040838503121561580857600080fd5b82356001600160401b038082111561581f57600080fd5b61582b868387016152b0565b9350602085013591508082111561584157600080fd5b506154e8858286016152b0565b60006020828403121561586057600080fd5b5035919050565b60006020828403121561587957600080fd5b5051919050565b6000806040838503121561589357600080fd5b8235915061536b60208401615152565b600080604083850312156158b657600080fd5b823560ff8116811461539057600080fd5b600081518084526020808501945080840160005b838110156159005781516001600160a01b0316875295820195908201906001016158db565b509495945050505050565b600081518084526020808501945080840160005b8381101561590057815115158752958201959082019060010161591f565b600081518084526020808501945080840160005b8381101561590057815187529582019590820190600101615951565b6000825160005b8181101561598e5760208186018101518583015201615974565b8181111561599d576000828501525b509190910192915050565b600061012060018060a01b038c1683528a6020840152896040840152886060840152871515608084015286151560a08401528060c08401526159ec8184018761593d565b905082810360e0840152615a00818661593d565b9050828103610100840152615a1581856158c7565b9c9b505050505050505050505050565b6000610100808352615a398184018c6158c7565b90508281036020840152615a4d818b61593d565b90508281036040840152615a61818a61593d565b90508281036060840152615a75818961593d565b90508281036080840152615a89818861593d565b905082810360a0840152615a9d818761590b565b905082810360c0840152615ab1818661590b565b905082810360e0840152615ac5818561593d565b9b9a5050505050505050505050565b60208152600061533a602083018461593d565b828152604060208201526000615b0060408301846158c7565b949350505050565b8381528215156020820152606060408201526000615b2960608301846158c7565b95945050505050565b8381528215156020820152606060408201526000615b29606083018461593d565b858152841515602082015283604082015260a060608201526000615b7a60a083018561593d565b8281036080840152615b8c81856158c7565b98975050505050505050565b858152841515602082015283604082015260a060608201526000615bbf60a083018561593d565b8281036080840152615b8c818561593d565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006101008a8352896020840152886040840152871515606084015286151560808401528560a08401528460c08401528060e0840152615ac58184018561593d565b604051601f8201601f191681016001600160401b0381118282101715615c7157615c71615d78565b604052919050565b60006001600160401b03821115615c9257615c92615d78565b5060051b60200190565b60008219821115615caf57615caf615d4c565b500190565b600060ff821660ff84168060ff03821115615cd157615cd1615d4c565b019392505050565b600082615cf657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615d1557615d15615d4c565b500290565b600082821015615d2c57615d2c615d4c565b500390565b6000600019821415615d4557615d45615d4c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461206857600080fdfea2646970667358221220c386c167846cc81c78650063ee28b1e5a82c4292215ebe251ed685d8412c147c64736f6c63430008060033

Deployed Bytecode

0x6080604052600436106102725760003560e01c80637df446471161014f578063bd67e7b6116100c1578063ddff6f901161007a578063ddff6f90146107f7578063deb906e71461082c578063e398ffef14610860578063ef1bade314610880578063ef2a1dbf146108a0578063fc6d90b2146108c057600080fd5b8063bd67e7b614610737578063be7f3a4a14610757578063bed34bba1461076d578063c0ee0b8a1461078d578063c8ae3eba146107ad578063ced72f87146107cd57600080fd5b80638c862168116101135780638c8621681461066a578063a3e5301c1461068a578063a52b366b146106aa578063a6cc4afd146106d7578063adbb7da8146106f7578063b91f11f61461071757600080fd5b80637df446471461057f57806381b8025b146105b757806383074a63146105d75780638618fe39146105f75780638c4d08db1461062f57600080fd5b80633ea7a304116101e857806360a31921116101ac57806360a31921146104c25780636268ca23146104e2578063661ffaa0146105025780636d7929e41461052257806376c03ea2146105355780637b6e43c11461056957600080fd5b80633ea7a3041461042c578063495c750c1461044c57806351d335c91461046c5780635990e1b4146104825780635c2f465e146104a257600080fd5b8063250e87c91161023a578063250e87c914610346578063253c7d5f146103665780632722fdf6146103865780632891a5f1146103b4578063319a22fb146103ec578063369115091461040c57600080fd5b806301e360be1461027757806303441006146102ca5780630921ac02146102ec57806312ca3c301461030c5780631a904ceb14610331575b600080fd5b34801561028357600080fd5b506102ad61029236600461584e565b6009602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102d657600080fd5b506102ea6102e536600461584e565b6108e0565b005b3480156102f857600080fd5b506102ea610307366004615606565b611710565b34801561031857600080fd5b50610321611cc6565b60405190151581526020016102c1565b34801561033d57600080fd5b506102ea611f5a565b34801561035257600080fd5b50601e546102ad906001600160a01b031681565b34801561037257600080fd5b506102ea61038136600461531f565b612026565b34801561039257600080fd5b506103a66103a136600461584e565b61206b565b6040519081526020016102c1565b3480156103c057600080fd5b506103a66103cf366004615880565b600460209081526000928352604080842090915290825290205481565b3480156103f857600080fd5b506102ea6104073660046153ab565b61208c565b34801561041857600080fd5b506102ea6104273660046157d3565b612192565b34801561043857600080fd5b506102ea6104473660046156d7565b612300565b34801561045857600080fd5b506102ea610467366004615374565b61245b565b34801561047857600080fd5b506103a660215481565b34801561048e57600080fd5b506102ea61049d366004615526565b6124b5565b3480156104ae57600080fd5b506102ea6104bd36600461584e565b6126bd565b3480156104ce57600080fd5b506103a66104dd366004615341565b6128c4565b3480156104ee57600080fd5b506102ea6104fd36600461557f565b612995565b34801561050e57600080fd5b506102ea61051d3660046154f2565b612bf9565b6103a66105303660046158a3565b612c39565b34801561054157600080fd5b506105556105503660046157b5565b612e03565b6040516102c1989796959493929190615a25565b34801561057557600080fd5b506103a660185481565b34801561058b57600080fd5b506103a661059a366004615341565b601460209081526000928352604080842090915290825290205481565b3480156105c357600080fd5b506102ad6105d23660046153ab565b6133d0565b3480156105e357600080fd5b506102ea6105f2366004615526565b613408565b34801561060357600080fd5b506103a66106123660046157d3565b600360209081526000928352604080842090915290825290205481565b34801561063b57600080fd5b5061032161064a366004615341565b601b60209081526000928352604080842090915290825290205460ff1681565b34801561067657600080fd5b506102ea61068536600461584e565b613426565b34801561069657600080fd5b50601c546102ad906001600160a01b031681565b3480156106b657600080fd5b506106ca6106c536600461531f565b6135ab565b6040516102c19190615ad4565b3480156106e357600080fd5b506102ea6106f236600461531f565b613788565b34801561070357600080fd5b506102ea610712366004615374565b6137c1565b34801561072357600080fd5b506102ea610732366004615526565b61386f565b34801561074357600080fd5b506102ea6107523660046153ab565b613b17565b34801561076357600080fd5b506103a660115481565b34801561077957600080fd5b506103216107883660046157f5565b613b2a565b34801561079957600080fd5b506102ea6107a83660046153d5565b613b83565b3480156107b957600080fd5b506102ea6107c83660046153ab565b613e84565b3480156107d957600080fd5b506107e2613e8f565b604080519283526020830191909152016102c1565b34801561080357600080fd5b5061081761081236600461584e565b613ee5565b6040516102c1999897969594939291906159a8565b34801561083857600080fd5b5061084c61084736600461531f565b6140e7565b6040516102c1989796959493929190615c07565b34801561086c57600080fd5b506102ea61087b366004615526565b6142ef565b34801561088c57600080fd5b5061032161089b3660046157d3565b614500565b3480156108ac57600080fd5b506102ea6108bb36600461548f565b61453a565b3480156108cc57600080fd5b506102ea6108db36600461545b565b6146c0565b6000818152600760205260409020600481015460ff1661170c576000806011546001600160401b0381111561091757610917615d78565b604051908082528060200260200182016040528015610940578160200160208202803683370190505b50905060006011546001600160401b0381111561095f5761095f615d78565b604051908082528060200260200182016040528015610988578160200160208202803683370190505b50905060006011546001600160401b038111156109a7576109a7615d78565b6040519080825280602002602001820160405280156109d0578160200160208202803683370190505b50905060006011546001600160401b038111156109ef576109ef615d78565b604051908082528060200260200182016040528015610a18578160200160208202803683370190505b506040805160078082526101008201909252919250600091906020820160e08036833701905050905060006060610a4e8a61479a565b84600581518110610a6157610a61615d62565b6020026020010181935082815250505060005b6011548110156110175760008181526009602052604090205485516001600160a01b0390911699508990869083908110610ab057610ab0615d62565b60200260200101906001600160a01b031690816001600160a01b031681525050600284600581518110610ae557610ae5615d62565b6020026020010151610af79190615cd9565b828281518110610b0957610b09615d62565b602002602001015111610fdf576001546001600160a01b038a8116911614801590610b4c57506001600160a01b0389166000908152600d602052604090205460ff165b8015610b74575060028a01546001600160a01b038a166000908152600b602052604090205411155b8015610b9a57506001600160a01b0389166000908152600c8b01602052604090205460ff165b15610f89576001600160a01b038916600090815260136020526040902054845185906004908110610bcd57610bcd615d62565b60200260200101818151610be19190615c9c565b9052506001600160a01b0389166000908152600e8b01602052604090205460ff1615610f8e576001600160a01b038916600090815260136020526040812054855190918691610c3257610c32615d62565b60200260200101818151610c469190615c9c565b905250600092505b83600281518110610c6157610c61615d62565b6020026020010151831015610e005760098a015460ff166001148015610cbb57506001600160a01b0389166000908152600f8b0160205260409020548851899085908110610cb157610cb1615d62565b6020026020010151145b80610d17575060098a015460ff16158015610d1757506001600160a01b03808a16600090815260108c0160205260409020548851911690889085908110610d0457610d04615d62565b60200260200101516001600160a01b0316145b15610dee576001600160a01b0389166000908152601360205260409020548651879085908110610d4957610d49615d62565b60200260200101818151610d5d9190615c9c565b9052508351869085906003908110610d7757610d77615d62565b602002602001015181518110610d8f57610d8f615d62565b6020026020010151868481518110610da957610da9615d62565b6020026020010151118015610dc3575060068a015460ff16155b15610de9578284600381518110610ddc57610ddc615d62565b6020026020010181815250505b610e00565b610df9600184615c9c565b9250610c4e565b83600281518110610e1357610e13615d62565b6020026020010151831415610f895760098a015460ff1660011415610e8d576001600160a01b0389166000908152600f8b0160205260409020548451899086906002908110610e6457610e64615d62565b602002602001015181518110610e7c57610e7c615d62565b602002602001018181525050610f08565b60098a015460ff16610f08576001600160a01b03808a16600090815260108c0160205260409020548551911690889086906002908110610ecf57610ecf615d62565b602002602001015181518110610ee757610ee7615d62565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6001600160a01b0389166000908152601360205260409020548451879086906002908110610f3857610f38615d62565b602002602001015181518110610f5057610f50615d62565b602002602001018181525050600184600281518110610f7157610f71615d62565b60200260200101818151610f859190615c9c565b9052505b611005565b6001600160a01b0389166000908152600d8b01602052604090205460ff1615610f89576001600160a01b038916600090815260136020526040902054845185906001908110610f7157610f71615d62565b6001600160a01b038916600090815260088b0160205260409020805460ff191660011790555b611010600182615c9c565b9050610a74565b508260008151811061102b5761102b615d62565b60200260200101518360018151811061104657611046615d62565b60200260200101516110589190615c9c565b8360048151811061106b5761106b615d62565b60200260200101511480156110855750600689015460ff16155b806110c55750600689015460ff1661109e5760026110a1565b60035b60ff1689600301546110b39190615cfb565b89600201546110c29190615c9c565b42115b1561027257600085846003815181106110e0576110e0615d62565b6020026020010151815181106110f8576110f8615d62565b60200260200101518460018151811061111357611113615d62565b60200260200101511115611125575060015b60098a015460ff1681156111475760118b01805460ff19166001179055611482565b60068b015460ff161561137a578460028151811061116757611167615d62565b60200260200101518b6012018190555060008560068151811061118c5761118c615d62565b6020026020010181815250505b846002815181106111ac576111ac615d62565b6020026020010151856006815181106111c7576111c7615d62565b602002602001015110156113755786856006815181106111e9576111e9615d62565b60200260200101518151811061120157611201615d62565b60200260200101518b60130160008760068151811061122257611222615d62565b60200260200101518152602001908152602001600020819055508060ff16600114156112b457888560068151811061125c5761125c615d62565b60200260200101518151811061127457611274615d62565b60200260200101518b60140160008760068151811061129557611295615d62565b6020026020010151815260200190815260200160002081905550611344565b60ff81166113445787856006815181106112d0576112d0615d62565b6020026020010151815181106112e8576112e8615d62565b60200260200101518b60150160008760068151811061130957611309615d62565b6020026020010151815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60018560068151811061135957611359615d62565b6020026020010181815161136d9190615c9c565b905250611199565b611482565b8460028151811061138d5761138d615d62565b60200260200101516000146113a35760016113a6565b60005b60ff90811660128d015581166001141561140c5788856003815181106113ce576113ce615d62565b6020026020010151815181106113e6576113e6615d62565b60200260200101518b601401600080815260200190815260200160002081905550611482565b60ff811661148257878560038151811061142857611428615d62565b60200260200101518151811061144057611440615d62565b60200260200101518b601501600080815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b600080546001600160a01b031681526013602052604090205460058c01546114af90600160401b90615cfb565b6114b99190615cd9565b600080546001600160a01b0316815260166020526040812080549091906114e1908490615c9c565b909155505060048b01805460ff1916600117905560068b015460ff16156115fe578060ff16600114156115a9578a60010160009054906101000a90046001600160a01b03166001600160a01b031663e87076cc8c600001548d60110160009054906101000a900460ff168e601201548b8e6040518663ffffffff1660e01b8152600401611572959493929190615b98565b600060405180830381600087803b15801561158c57600080fd5b505af11580156115a0573d6000803e3d6000fd5b505050506116c7565b60ff81166115f95760018b01548b5460118d015460128e015460405163ace62afb60e01b81526001600160a01b039094169363ace62afb9361157293909260ff909116918d908f90600401615b53565b6116c7565b8060ff166001141561164b5760018b01548b5460118d015460405163234cc9b760e01b81526001600160a01b039093169263234cc9b79261157292909160ff909116908e90600401615b32565b60ff81166116c75760018b01548b5460118d0154604051631bfd059760e11b81526001600160a01b03909316926337fa0b2e9261169492909160ff909116908d90600401615b08565b600060405180830381600087803b1580156116ae57600080fd5b505af11580156116c2573d6000803e3d6000fd5b505050505b8a546040517fe412c5d4fe9a885e67c46e34c24c2278249bb57f0f75b59b0ff2f4df71cdecbe916116f9918990615ae7565b60405180910390a1505050505050505050505b5050565b3360006060815b8851811015611cbb57600760008a838151811061173657611736615d62565b602090810291909101810151825281810192909252604090810160009081206001600160a01b0388168252600a8101909352205490935060ff1615611ca957826003015483600201546117899190615c9c565b421180156117b5575060038301546117a2906002615cfb565b83600201546117b19190615c9c565b4211155b1561027257600983015460ff1660011415611856578781815181106117dc576117dc615d62565b60200260200101518782815181106117f6576117f6615d62565b602002602001015186838151811061181057611810615d62565b60200260200101516040516020016118409392919092151560f81b83526001830191909152602182015260410190565b60405160208183030381529060405291506118fc565b600983015460ff166118fc5787818151811061187457611874615d62565b602002602001015186828151811061188e5761188e615d62565b60200260200101518683815181106118a8576118a8615d62565b60200260200101516040516020016118ea9392919092151560f81b835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b60405160208183030381529060405291505b61195f8280519060200120600760008c858151811061191d5761191d615d62565b60200260200101518152602001908152602001600020600b016000876001600160a01b03166001600160a01b0316815260200190815260200160002054614500565b15610272576001600760008b848151811061197c5761197c615d62565b60200260200101518152602001908152602001600020600c016000866001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508781815181106119e1576119e1615d62565b602002602001015115611a5e576001600760008b8481518110611a0657611a06615d62565b60200260200101518152602001908152602001600020600d016000866001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550611bda565b6001600760008b8481518110611a7657611a76615d62565b602090810291909101810151825281810192909252604090810160009081206001600160a01b0389168252600e019092529020805460ff1916911515919091179055600983015460ff1660011415611b3d57868181518110611ada57611ada615d62565b6020026020010151600760008b8481518110611af857611af8615d62565b60200260200101518152602001908152602001600020600f016000866001600160a01b03166001600160a01b0316815260200190815260200160002081905550611bda565b600983015460ff16611bda57858181518110611b5b57611b5b615d62565b6020026020010151600760008b8481518110611b7957611b79615d62565b602002602001015181526020019081526020016000206010016000866001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b7f0da72da6ba448b914546388b7b52bc6bf20f290f82d60dc9bac6a49efd888385848a8381518110611c0e57611c0e615d62565b60200260200101518a8481518110611c2857611c28615d62565b60200260200101518a8581518110611c4257611c42615d62565b60200260200101518a8681518110611c5c57611c5c615d62565b6020026020010151604051611ca09594939291906001600160a01b039586168152602081019490945291151560408401526060830152909116608082015260a00190565b60405180910390a15b611cb4600182615c9c565b9050611717565b505050505050505050565b336000818152600c60205260408120549091908290819060ff16158015611cef57506000601154115b611cf857600080fd5b60006018546011541415611d6f5760005b601154811015611d6957600081815260096020908152604080832054878452818420546001600160a01b03908116855260139093528184205492168084529220549193501115611d57578093505b611d62600182615c9c565b9050611d09565b50611d79565b6001915060185492505b6000838152600960209081526040808320546001600160a01b0390811684526013909252808320549187168352909120541180611db35750815b8015611dd857506001600160a01b0384166000908152600d602052604090205460ff16155b15611efb576000838152600960205260409020546001600160a01b031682611e2a57600080546001600160a01b0383811683526013602052604090922054611e25929091169083906149a1565b611e38565b506001546001600160a01b03165b600080546001600160a01b0387811683526013602052604090922054611e6392909116908790614afa565b6001600160a01b038581166000818152600b602090815260408083204290558883526009825280832080546001600160a01b03191685179055838352600a8252918290208890558151928352600190830152918316818301526060810186905290517ff313d7b97de5f9223513c3e6327eb4557214f8cfe4912bd70cc1147224b8bb209181900360800190a160019550505050505090565b600154604080516001600160a01b038781168252600060208301529092168282015260608201859052517ff313d7b97de5f9223513c3e6327eb4557214f8cfe4912bd70cc1147224b8bb209181900360800190a1600094505050505090565b601d546001600160a01b03163314611f7157600080fd5b6021805460009091556022546001600160a01b031663fa0cd58b611f96600284615cd9565b6040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fc157600080fd5b505af1158015611fd5573d6000803e3d6000fd5b5050505050336001600160a01b03166108fc600283611ff49190615cd9565b611ffe9084615d1a565b6040518115909202916000818181858888f1935050505015801561170c573d6000803e3d6000fd5b6001600160a01b0381166000908152600d602052604090205460ff16156120685760005461205d906001600160a01b031682614be3565b612068816001614d67565b50565b6002818154811061207b57600080fd5b600091825260209091200154905081565b6001600160a01b03821660009081526014602090815260408083203380855292529091205482118015906120d957506001600160a01b0383166000908152600c602052604090205460ff16155b80156120fe57506001600160a01b0383166000908152600d602052604090205460ff16155b15610272576001600160a01b0381166000908152600660205260408120805484929061212b908490615d1a565b9091555061213c90508382846149a1565b604080516001600160a01b038084168252851660208201529081018390527fb46567f3d2217cfda80b13d2798423c02e6e8ad7cc7553d555c33d6ea8972b64906060015b60405180910390a1505050565b505050565b600082815260036020526040812060028054919291859081106121b7576121b7615d62565b60009182526020808320909101548352828101939093526040918201812054858252600384528282208583529093522054111561170c57600182141561220b5760b481116122065760b4612208565b805b90505b81612224576007811161221f576007612221565b805b90505b60028214156122515768056bc75e2d631000008111612243578061224e565b68056bc75e2d631000005b90505b806002838154811061226557612265615d62565b600091825260209091200155816122c257600260008154811061228a5761228a615d62565b906000526020600020015460115410156122c25760026000815481106122b2576122b2615d62565b6000918252602090912001546011555b60408051838152602081018390527f95b6a67fddbdbd82beb0b9431b394c314a65f30fb7d153a7df01e3c9c70cfac091015b60405180910390a15050565b336000805b8451811015612454576007600086838151811061232457612324615d62565b602002602001015181526020019081526020016000209150816003015482600201546123509190615c9c565b4211610272576001600160a01b0383166000908152600a830160205260409020805460ff19166001179055835184908290811061238f5761238f615d62565b602002602001015182600b016000856001600160a01b03166001600160a01b03168152602001908152602001600020819055507fdfa8b2eba5788145be2e64941ef2744e990e6ff8cf92aa2a6e169464cf6aac7c838683815181106123f6576123f6615d62565b602002602001015186848151811061241057612410615d62565b602090810291909101810151604080516001600160a01b0390951685529184019290925282015260600160405180910390a161244d600182615c9c565b9050612305565b5050505050565b601d546001600160a01b03163314801561247f5750602254600160a01b900460ff16155b61248857600080fd5b60228054911515600160a01b026001600160a81b03199092166001600160a01b0390931692909217179055565b6000805b82518110156126b757600760008583815181106124d8576124d8615d62565b602002602001015181526020019081526020016000209150600d600084838151811061250657612506615d62565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff168015612575575081600a01600084838151811061254c5761254c615d62565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b80156125c357508160020154600b600085848151811061259757612597615d62565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411155b80156125e15750816003015482600201546125de9190615c9c565b42115b156126a5576126228482815181106125fb576125fb615d62565b602002602001015184838151811061261557612615615d62565b6020026020010151614e1e565b156126a5577fdb940a7c62c3fcd01b14ddbc82d925b787b365bfbe96626df2913b8d34f579dc84828151811061265a5761265a615d62565b602002602001015184838151811061267457612674615d62565b602002602001015160405161269c9291909182526001600160a01b0316602082015260400190565b60405180910390a15b6126b0600182615c9c565b90506124b9565b50505050565b336000818152600660209081526040808320546005909252909120546126e39190615d1a565b8211610272576001600160a01b03811660009081526005602052604081208054849290612711908490615d1a565b90915550600090505b600681101561277c576000818152600360209081526040808320600483528184206001600160a01b0387168552835281842054845290915281208054859290612764908490615d1a565b909155506127759050600182615c9c565b905061271a565b50604080516001600160a01b0383168152602081018490527f180194e23a6f1a7598ce10cb5a93bb45217b9f32fcd00ab1a81286210a6db504910160405180910390a1601e546040516307f173f160e21b8152600481018490526001600160a01b0390911690631fc5cfc490602401602060405180830381600087803b15801561280557600080fd5b505af1158015612819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283d9190615867565b50601c5460405163a9059cbb60e01b81526001600160a01b038381166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561288c57600080fd5b505af11580156128a0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218d9190615798565b6001600160a01b0380831660008181526015602090815260408083209486168352938152838220549282526016905291822054829161290291615d1a565b6000549091506001600160a01b03858116911614801561293b57506001600160a01b0383166000908152600d602052604090205460ff16155b1561294a57600091505061298f565b6001600160a01b03808516600090815260146020908152604080832093871683529290522054600160401b90612981908390615cfb565b61298b9190615cd9565b9150505b92915050565b336000805b8551811015612bf157600760008783815181106129b9576129b9615d62565b6020026020010151815260200190815260200160002091508160020154600b6000856001600160a01b03166001600160a01b031681526020019081526020016000205411610272578160020154600b6000878481518110612a1c57612a1c615d62565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411158015612a7057506003820154612a5e906002615cfb565b8260020154612a6d9190615c9c565b42115b8015612a995750600380830154612a8691615cfb565b8260020154612a959190615c9c565b4211155b1561027257838181518110612ab057612ab0615d62565b6020026020010151826007016000856001600160a01b03166001600160a01b031681526020019081526020016000206000878481518110612af357612af3615d62565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055507f846e74191f442a252b5448450c45744469ee6758620b4a2b319642a60ca3d23583878381518110612b6657612b66615d62565b6020026020010151878481518110612b8057612b80615d62565b6020026020010151878581518110612b9a57612b9a615d62565b6020026020010151604051612bd794939291906001600160a01b039485168152602081019390935292166040820152901515606082015260800190565b60405180910390a1612bea600182615c9c565b905061299a565b505050505050565b60005b815181101561170c57612c27828281518110612c1a57612c1a615d62565b60200260200101516108e0565b612c32600182615c9c565b9050612bfc565b6000348180612c46613e8f565b9150915060006301e13380601f5442612c5f9190615d1a565b10612c6b576000612c76565b612c76601483615cd9565b90508660ff1660011480612c8b575060ff8716155b612c9457600080fd5b80612c9f8385615c9c565b612ca99190615c9c565b84106102725760088054600081815260076020526040812091975090918791612cd183615d31565b909155505060098101805460ff191660ff8a161790554281600201819055506002600181548110612d0457612d04615d62565b60009182526020909120015460038201558581556001810180546001600160a01b0319163317905560068101805488151560ff1990911617905583612d498387615d1a565b612d539190615d1a565b81600501819055508160216000828254612d6d9190615c9c565b9091555050601854612d7f9085615cd9565b60176000828254612d909190615c9c565b90915550506003810154604080513381526020810189905260ff8b1681830152891515606082015242608082015260a081019290925260c08201879052517f78b0b6fc4cdc1dcce1a77c883f3f8cee63ae1e4a78b39064b4c7d3ab473f1edf9181900360e00190a1505050505092915050565b60608060608060608060608060008a15612e205750601154612e3b565b506001600160a01b0389166000908152601a60205260409020545b806001600160401b03811115612e5357612e53615d78565b604051908082528060200260200182016040528015612e7c578160200160208202803683370190505b509750806001600160401b03811115612e9757612e97615d78565b604051908082528060200260200182016040528015612ec0578160200160208202803683370190505b509650806001600160401b03811115612edb57612edb615d78565b604051908082528060200260200182016040528015612f04578160200160208202803683370190505b509150612f12816002615cfb565b6001600160401b03811115612f2957612f29615d78565b604051908082528060200260200182016040528015612f52578160200160208202803683370190505b509550612f60816003615cfb565b6001600160401b03811115612f7757612f77615d78565b604051908082528060200260200182016040528015612fa0578160200160208202803683370190505b509450806001600160401b03811115612fbb57612fbb615d78565b604051908082528060200260200182016040528015612fe4578160200160208202803683370190505b509350806001600160401b03811115612fff57612fff615d78565b604051908082528060200260200182016040528015613028578160200160208202803683370190505b509250806001600160401b0381111561304357613043615d78565b60405190808252806020026020018201604052801561306c578160200160208202803683370190505b5098506000805b828110156133c0578c156130a0576000818152600960205260409020546001600160a01b031691506130e2565b6001600160a01b038c166000908152601a602052604090208054829081106130ca576130ca615d62565b6000918252602090912001546001600160a01b031691505b818b82815181106130f5576130f5615d62565b60200260200101906001600160a01b031690816001600160a01b03168152505061311f828d6128c4565b8a828151811061313157613131615d62565b6020908102919091010152600054613152906001600160a01b0316836128c4565b84828151811061316457613164615d62565b602002602001018181525050600a6000836001600160a01b03166001600160a01b03168152602001908152602001600020548982815181106131a8576131a8615d62565b60200260200101818152505060146000836001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b031681526020019081526020016000205488828151811061320f5761320f615d62565b6020908102919091018101919091526001600160a01b038316600090815260139091526040902054886132428584615c9c565b8151811061325257613252615d62565b6020908102919091018101919091526001600160a01b0383166000908152600c9091526040902054865160ff9091169087908390811061329457613294615d62565b9115156020928302919091018201526001600160a01b0383166000908152600d9091526040902054855160ff909116908690839081106132d6576132d6615d62565b9115156020928302919091018201526001600160a01b0383166000908152600f9091526040902054875188908390811061331257613312615d62565b6020908102919091018101919091526001600160a01b0383166000908152600b9091526040902054876133458584615c9c565b8151811061335557613355615d62565b6020908102919091018101919091526001600160a01b0383166000908152600e909152604090205487613389856002615cfb565b6133939084615c9c565b815181106133a3576133a3615d62565b60209081029190910101526133b9600182615c9c565b9050613073565b5050509295985092959890939650565b601a60205281600052604060002081815481106133ec57600080fd5b6000918252602090912001546001600160a01b03169150829050565b61341282826124b5565b61341c82826142ef565b61170c828261386f565b6000806000806000600260008154811061344257613442615d62565b9060005260206000200154905060115481141561346157505050505050565b601854601154118015613475575060115481105b15613481576018546011555b600094505b8585101561356857600093505b6011548410156134f357600084815260096020908152604080832054868452818420546001600160a01b039081168552601390935281842054921680845292205491935011156134e1578392505b6134ec600185615c9c565b9350613493565b60008381526009602090815260408083205483546001600160a01b039182168086526013909452919093205491945061352f92169084906149a1565b6001601160008282546135429190615d1a565b909155505060115481141561355657613568565b613561600186615c9c565b9450613486565b7f4fd61a710c95929daa9c582f7abeaaaead9a191e99a6cf2a956852058f987e9a60115460405161359b91815260200190565b60405180910390a1505050505050565b60606135b960066004615cfb565b6001600160401b038111156135d0576135d0615d78565b6040519080825280602002602001820160405280156135f9578160200160208202803683370190505b50905060005b6006811015613782576002818154811061361b5761361b615d62565b906000526020600020015482828151811061363857613638615d62565b6020026020010181815250506003600082815260200190815260200160002060006002838154811061366c5761366c615d62565b9060005260206000200154815260200190815260200160002054828260066136949190615c9c565b815181106136a4576136a4615d62565b60209081029190910181019190915260008281526004825260408082206001600160a01b0387168352909252205482826136e060066002615cfb565b6136ea9190615c9c565b815181106136fa576136fa615d62565b602090810291909101810191909152600082815260038083526040808320600485528184206001600160a01b0389168552855281842054845290935291902054908390839061374b90600690615cfb565b6137559190615c9c565b8151811061376557613765615d62565b602090810291909101015261377b600182615c9c565b90506135ff565b50919050565b601d546001600160a01b0316331461379f57600080fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166000908152600f6020526040902054421015801561380157506001600160a01b0382166000908152600c602052604090205460ff165b15610272576001600160a01b0382166000908152600c60205260409020805460ff19169055801561383657613834611cc6565b505b6040516001600160a01b03831681527f08d96ea9fa3fe06368b69ca8c3f12f3d118ab54146641b6c0a919ae0747206eb906020016122f4565b60008060005b8351811015612454576007600086838151811061389457613894615d62565b6020026020010151815260200190815260200160002091508381815181106138be576138be615d62565b6020908102919091010151600483015490935060ff1680156139195750600d60008583815181106138f1576138f1615d62565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff165b801561396757508160020154600b600086848151811061393b5761393b615d62565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411155b80156139785750601182015460ff16155b8015613a735750600682015460ff16158015613a1a5750600982015460ff1660011480156139d057506001600160a01b0383166000908152600f83016020908152604080832054838052601486019092529091205414155b80613a1a5750600982015460ff16158015613a1a57506001600160a01b03808416600090815260108401602090815260408083205483805260158701909252909120548216911614155b80613a4e5750600682015460ff168015613a4e57506001600160a01b038316600090815260088301602052604090205460ff165b80613a7357506001600160a01b0383166000908152600d8301602052604090205460ff165b15613b0557613a9b858281518110613a8d57613a8d615d62565b602002602001015184614e1e565b15613b05577f66f367e56622acb25f58dba1a40a6a740e1b6fa9888f555087ca5c8e3fbfb812858281518110613ad357613ad3615d62565b602002602001015184604051613afc9291909182526001600160a01b0316602082015260400190565b60405180910390a15b613b10600182615c9c565b9050613875565b613b21828261208c565b61170c816126bd565b600081604051602001613b3d919061596d565b6040516020818303038152906040528051906020012083604051602001613b64919061596d565b6040516020818303038152906040528051906020012014905092915050565b601c546001600160a01b031633141561027257601e546001600160a01b0385811691161415613bb1576126b7565b6001600160a01b03841660009081526005602052604081208054859290613bd9908490615c9c565b90915550506001600160a01b038416600090815260208052604081205460ff1615613c865760005b60068160ff161015613c805760ff811660008181526004602090815260408083206001600160a01b038b16845282528083205493835260038252808320848452909152812080549294508792909190613c5b908490615c9c565b90915550613c6e905060ff821683612192565b613c79600182615cb4565b9050613c01565b50613d4b565b6001600160a01b03851660009081526020805260408120805460ff191660011790555b60068160ff161015613d495760028160ff1681548110613ccb57613ccb615d62565b600091825260208083209091015460ff84168084526004835260408085206001600160a01b038c168652845280852083905590845260038352808420828552909252908220805491945087929091613d24908490615c9c565b90915550613d37905060ff821683612192565b613d42600182615cb4565b9050613ca9565b505b846001600160a01b03167f496d21a3791df17b9e71acba0bd6c88352f3da2636dc2bfae959f09af6c4fb99858585604051613d8893929190615bd1565b60405180910390a26000613dd184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250614f9a92505050565b6001549091506001600160a01b03808316911614613df457613df4868287614fa1565b601c54601e5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810188905291169063a9059cbb90604401602060405180830381600087803b158015613e4457600080fd5b505af1158015613e58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e7c9190615798565b5050506126b7565b61170c338383614fa1565b6000806011546002600581548110613ea957613ea9615d62565b9060005260206000200154613ebe9190615cfb565b6002600481548110613ed257613ed2615d62565b9060005260206000200154915091509091565b60008181526007602052604090206001810154600282015460038301546004840154601285015460118601546001600160a01b039095169593949293909260ff92831692169060609081908190866001600160401b03811115613f4a57613f4a615d78565b604051908082528060200260200182016040528015613f73578160200160208202803683370190505b50935080601201546001600160401b03811115613f9257613f92615d78565b604051908082528060200260200182016040528015613fbb578160200160208202803683370190505b50925080601201546001600160401b03811115613fda57613fda615d78565b604051908082528060200260200182016040528015614003578160200160208202803683370190505b50915060005b81601201548110156140d8576000818152601383016020526040902054855186908390811061403a5761403a615d62565b6020026020010181815250508160140160008281526020019081526020016000205484828151811061406e5761406e615d62565b602090810291909101810191909152600082815260158401909152604090205483516001600160a01b03909116908490839081106140ae576140ae615d62565b6001600160a01b03909216602092830291909101909101526140d1600182615c9c565b9050614009565b50509193959799909294969850565b6001600160a01b0381166000908152600560208181526040808420546006835281852054600b845282862054600c855283872054600d8652848820546012875285892054601388529886902054865189815260c0810190975294989397929660ff9283169692909116949260609291820160a0803683370190505090508315614220576001600160a01b0389166000908152601960205260409020546017546141909190615d1a565b816000815181106141a3576141a3615d62565b60200260200101818152505068056bc75e2d63100000600280815481106141cc576141cc615d62565b600091825260208220015490546141ec906001600160a01b03168c6128c4565b6141f69190615cfb565b6142009190615cd9565b8160018151811061421357614213615d62565b6020026020010181815250505b6001600160a01b0389166000908152600f602052604090205481518290600290811061424e5761424e615d62565b602002602001018181525050600e60008a6001600160a01b03166001600160a01b03168152602001908152602001600020548160038151811061429357614293615d62565b602002602001018181525050600a60008a6001600160a01b03166001600160a01b0316815260200190815260200160002054816004815181106142d8576142d8615d62565b602002602001018181525050919395975091939597565b6000805b82518110156126b7576007600085838151811061431257614312615d62565b602002602001015181526020019081526020016000209150600d600084838151811061434057614340615d62565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1680156143af575081600c01600084838151811061438657614386615d62565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16155b80156143fd57508160020154600b60008584815181106143d1576143d1615d62565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205411155b801561445157506003820154614414906002615cfb565b6007600086848151811061442a5761442a615d62565b602002602001015181526020019081526020016000206002015461444e9190615c9c565b42115b156144ee5761446b8482815181106125fb576125fb615d62565b156144ee577fb47f0a03f44d44a25ab97a3ba3ae1459aead6c30d229c44a316b03dd43aa2aac8482815181106144a3576144a3615d62565b60200260200101518483815181106144bd576144bd615d62565b60200260200101516040516144e59291909182526001600160a01b0316602082015260400190565b60405180910390a15b6144f9600182615c9c565b90506142f3565b60008160405160200161451591815260200190565b60408051601f1981840301815282825280516020918201209083018690529101613b64565b3360008181526020805260408120805460ff19166001179055805b60068210156124545784828151811061457057614570615d62565b6020026020010151156146ae5783828151811061458f5761458f615d62565b6020908102919091018101516001600160a01b0385166000818152600584526040808220548783526003865281832060048752828420948452938652818320548352929094529283208054929450909290916145ec908490615d1a565b909155505060008281526004602090815260408083206001600160a01b038716845282528083208490556005825280832054858452600383528184208585529092528220805491929091614641908490615c9c565b90915550506001600160a01b0383166000818152600560209081526040918290205482519384529083018590528282018490526060830152517fa9e37c974eaa5d76c988f9e32be7ff5e520ca27d84ec816815c3fa33ed00f2769181900360800190a16146ae8282612192565b6146b9600183615c9c565b9150614555565b3360005b8251811015614702576146f08382815181106146e2576146e2615d62565b602002602001015183614be3565b6146fb600182615c9c565b90506146c4565b5061470c81612026565b6001600160a01b03811660008181526012602090815260408083208054939055805193845290830182905290917fbdc68fa65ba7134c6af79a12ce7d3a00efe776fb55a6b16ffccf2058fb967f11910160405180910390a16040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156126b7573d6000803e3d6000fd5b60008181526007602052604081206011546060919083908190819081906001600160401b038111156147ce576147ce615d78565b6040519080825280602002602001820160405280156147f7578160200160208202803683370190505b50600686015490965060ff1615614997575060005b601154811015614997576000818152600960209081526040808320546001600160a01b0316808452600d9092529091205490945060ff16801561486b575060028501546001600160a01b0385166000908152600b602052604090205411155b15614985576001600160a01b0384166000908152601360205260409020546148939088615c9c565b9650600091505b601154821015614985576000828152600960209081526040808320546001600160a01b0316808452600d9092529091205490935060ff1680156148f9575060028501546001600160a01b0384166000908152600b602052604090205411155b15614973576001600160a01b03808516600090815260078701602090815260408083209387168352929052205460ff1615614973576001600160a01b038416600090815260136020526040902054865187908490811061495b5761495b615d62565b6020026020010181815161496f9190615c9c565b9052505b61497e600183615c9c565b915061489a565b614990600182615c9c565b905061480c565b5050505050915091565b6149ab8383614be3565b6001600160a01b038316600090815260136020526040812080548392906149d3908490615d1a565b90915550506001600160a01b03808416600090815260146020908152604080832093861683529290529081208054839290614a0f908490615d1a565b90915550506000546001600160a01b038481169116141561218d57614a35826001614d67565b6001546001600160a01b0383811691161461218d576001600160a01b0382166000908152600d60209081526040808320805460ff19169055600a9091528120546018549091906009908290614a8c90600190615d1a565b815260208082019290925260409081016000908120548582526009845282822080546001600160a01b0319166001600160a01b039092169182179055808252600a90935290812084905560188054929350600192909190614aee908490615d1a565b90915550505050505050565b614b048383614be3565b6001600160a01b03831660009081526013602052604081208054839290614b2c908490615c9c565b90915550506001600160a01b03808416600090815260146020908152604080832093861683529290529081208054839290614b68908490615c9c565b90915550506000546001600160a01b038481169116141561218d57614b8e826000614d67565b6001546001600160a01b0383811691161461218d57600160186000828254614bb69190615c9c565b90915550506001600160a01b0382166000908152600d60205260409020805460ff19166001179055505050565b6000614bef83836128c4565b6001600160a01b038085166000818152601660209081526040808320546015835281842089871685529092528220555492935091161415614d3557600068056bc75e2d6310000060028081548110614c4957614c49615d62565b906000526020600020015483614c5f9190615cfb565b614c699190615cd9565b6001600160a01b038416600090815260126020526040812080549293508392909190614c96908490615c9c565b90915550506001600160a01b03831660009081526013602052604081205415614cfc576001600160a01b038416600090815260136020526040902054600160401b614ce18486615d1a565b614ceb9190615cfb565b614cf59190615cd9565b9050614d00565b5060005b6001600160a01b03841660009081526016602052604081208054839290614d28908490615c9c565b9091555061218d92505050565b6001600160a01b03821660009081526012602052604081208054839290614d5d908490615c9c565b9091555050505050565b6001600160a01b038216600090815260196020526040812054601754614d8d9190615d1a565b6017546001600160a01b03851660009081526019602052604090205590508115614ddf576001600160a01b03831660009081526012602052604081208054839290614dd9908490615c9c565b90915550505b604080516001600160a01b0385168152602081018390527fc661e76b5a6e97d962bc536b290133544a35bd9a85bfa2b47bae41371d9106359101612180565b6000828152600760205260408120600681015460ff16614e3f576002614e42565b60035b60ff168160030154614e549190615cfb565b8160020154614e639190615c9c565b6001600160a01b0384166000908152600e60205260409020541015614f90576001600160a01b0383166000908152600d602052604090205460ff1615614ece57600080546001600160a01b0385811683526013602052604090922054614ece929091169085906149a1565b6001600160a01b0383166000908152600c60209081526040808320805460ff19166001179055600280850154600e90935292205580546003908110614f1557614f15615d62565b9060005260206000200154614f274290565b614f319190615c9c565b6001600160a01b0384166000818152600f602090815260409182902084905581519283528201929092527febbcaaf6b9aa8b4083ae4b2f842c8de6f75319018e7b5e141a1e87aebadde6c3910160405180910390a1600191505061298f565b5060009392505050565b6014015190565b6000546001600160a01b0383811691161415614fbc57600080fd5b6001600160a01b038316600090815260066020908152604080832054600590925290912054614feb9190615d1a565b811115801561501357506001600160a01b0382166000908152600c602052604090205460ff16155b801561503857506001600160a01b0382166000908152600d602052604090205460ff16155b15610272576001600160a01b03831660009081526006602052604081208054839290615065908490615c9c565b909155506150769050828483614afa565b604080516001600160a01b038086168252841660208201529081018290527f6c00e620c7a4707cb0999e411409fb17bce41cdc4c9f18375fa9b3bf3bf4f94c9060600160405180910390a16001600160a01b038084166000908152601b602090815260408083209386168352929052205460ff1661218d576001600160a01b038381166000818152601a602090815260408083208054600180820183559185528385200180546001600160a01b0319169689169687179055938352601b825280832094835293905291909120805460ff19169091179055505050565b80356001600160a01b038116811461516957600080fd5b919050565b600082601f83011261517f57600080fd5b8135602061519461518f83615c79565b615c49565b80838252828201915082860187848660051b89010111156151b457600080fd5b60005b858110156151da576151c882615152565b845292840192908401906001016151b7565b5090979650505050505050565b600082601f8301126151f857600080fd5b8135602061520861518f83615c79565b80838252828201915082860187848660051b890101111561522857600080fd5b60005b858110156151da57813561523e81615d8e565b8452928401929084019060010161522b565b600082601f83011261526157600080fd5b8135602061527161518f83615c79565b80838252828201915082860187848660051b890101111561529157600080fd5b60005b858110156151da57813584529284019290840190600101615294565b600082601f8301126152c157600080fd5b81356001600160401b038111156152da576152da615d78565b6152ed601f8201601f1916602001615c49565b81815284602083860101111561530257600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561533157600080fd5b61533a82615152565b9392505050565b6000806040838503121561535457600080fd5b61535d83615152565b915061536b60208401615152565b90509250929050565b6000806040838503121561538757600080fd5b61539083615152565b915060208301356153a081615d8e565b809150509250929050565b600080604083850312156153be57600080fd5b6153c783615152565b946020939093013593505050565b600080600080606085870312156153eb57600080fd5b6153f485615152565b93506020850135925060408501356001600160401b038082111561541757600080fd5b818701915087601f83011261542b57600080fd5b81358181111561543a57600080fd5b88602082850101111561544c57600080fd5b95989497505060200194505050565b60006020828403121561546d57600080fd5b81356001600160401b0381111561548357600080fd5b61298b8482850161516e565b600080604083850312156154a257600080fd5b82356001600160401b03808211156154b957600080fd5b6154c5868387016151e7565b935060208501359150808211156154db57600080fd5b506154e885828601615250565b9150509250929050565b60006020828403121561550457600080fd5b81356001600160401b0381111561551a57600080fd5b61298b84828501615250565b6000806040838503121561553957600080fd5b82356001600160401b038082111561555057600080fd5b61555c86838701615250565b9350602085013591508082111561557257600080fd5b506154e88582860161516e565b60008060006060848603121561559457600080fd5b83356001600160401b03808211156155ab57600080fd5b6155b787838801615250565b945060208601359150808211156155cd57600080fd5b6155d98783880161516e565b935060408601359150808211156155ef57600080fd5b506155fc868287016151e7565b9150509250925092565b600080600080600060a0868803121561561e57600080fd5b85356001600160401b038082111561563557600080fd5b61564189838a01615250565b9650602088013591508082111561565757600080fd5b61566389838a016151e7565b9550604088013591508082111561567957600080fd5b61568589838a01615250565b9450606088013591508082111561569b57600080fd5b6156a789838a0161516e565b935060808801359150808211156156bd57600080fd5b506156ca88828901615250565b9150509295509295909350565b600080604083850312156156ea57600080fd5b82356001600160401b038082111561570157600080fd5b61570d86838701615250565b935060209150818501358181111561572457600080fd5b85019050601f8101861361573757600080fd5b803561574561518f82615c79565b80828252848201915084840189868560051b870101111561576557600080fd5b600094505b8385101561578857803583526001949094019391850191850161576a565b5080955050505050509250929050565b6000602082840312156157aa57600080fd5b815161533a81615d8e565b600080604083850312156157c857600080fd5b823561535d81615d8e565b600080604083850312156157e657600080fd5b50508035926020909101359150565b6000806040838503121561580857600080fd5b82356001600160401b038082111561581f57600080fd5b61582b868387016152b0565b9350602085013591508082111561584157600080fd5b506154e8858286016152b0565b60006020828403121561586057600080fd5b5035919050565b60006020828403121561587957600080fd5b5051919050565b6000806040838503121561589357600080fd5b8235915061536b60208401615152565b600080604083850312156158b657600080fd5b823560ff8116811461539057600080fd5b600081518084526020808501945080840160005b838110156159005781516001600160a01b0316875295820195908201906001016158db565b509495945050505050565b600081518084526020808501945080840160005b8381101561590057815115158752958201959082019060010161591f565b600081518084526020808501945080840160005b8381101561590057815187529582019590820190600101615951565b6000825160005b8181101561598e5760208186018101518583015201615974565b8181111561599d576000828501525b509190910192915050565b600061012060018060a01b038c1683528a6020840152896040840152886060840152871515608084015286151560a08401528060c08401526159ec8184018761593d565b905082810360e0840152615a00818661593d565b9050828103610100840152615a1581856158c7565b9c9b505050505050505050505050565b6000610100808352615a398184018c6158c7565b90508281036020840152615a4d818b61593d565b90508281036040840152615a61818a61593d565b90508281036060840152615a75818961593d565b90508281036080840152615a89818861593d565b905082810360a0840152615a9d818761590b565b905082810360c0840152615ab1818661590b565b905082810360e0840152615ac5818561593d565b9b9a5050505050505050505050565b60208152600061533a602083018461593d565b828152604060208201526000615b0060408301846158c7565b949350505050565b8381528215156020820152606060408201526000615b2960608301846158c7565b95945050505050565b8381528215156020820152606060408201526000615b29606083018461593d565b858152841515602082015283604082015260a060608201526000615b7a60a083018561593d565b8281036080840152615b8c81856158c7565b98975050505050505050565b858152841515602082015283604082015260a060608201526000615bbf60a083018561593d565b8281036080840152615b8c818561593d565b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b60006101008a8352896020840152886040840152871515606084015286151560808401528560a08401528460c08401528060e0840152615ac58184018561593d565b604051601f8201601f191681016001600160401b0381118282101715615c7157615c71615d78565b604052919050565b60006001600160401b03821115615c9257615c92615d78565b5060051b60200190565b60008219821115615caf57615caf615d4c565b500190565b600060ff821660ff84168060ff03821115615cd157615cd1615d4c565b019392505050565b600082615cf657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615615d1557615d15615d4c565b500290565b600082821015615d2c57615d2c615d4c565b500390565b6000600019821415615d4557615d45615d4c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b801515811461206857600080fdfea2646970667358221220c386c167846cc81c78650063ee28b1e5a82c4292215ebe251ed685d8412c147c64736f6c63430008060033

Deployed Bytecode Sourcemap

61:31277:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1668:47;;;;;;;;;;-1:-1:-1;1668:47:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1668:47:0;;;;;;-1:-1:-1;;;;;15273:32:1;;;15255:51;;15243:2;15228:18;1668:47:0;;;;;;;;17426:4741;;;;;;;;;;-1:-1:-1;17426:4741:0;;;;;:::i;:::-;;:::i;:::-;;13987:1523;;;;;;;;;;-1:-1:-1;13987:1523:0;;;;;:::i;:::-;;:::i;8547:1216::-;;;;;;;;;;;;;:::i;:::-;;;22442:14:1;;22435:22;22417:41;;22405:2;22390:18;8547:1216:0;22372:92:1;11872:215:0;;;;;;;;;;;;;:::i;2794:76::-;;;;;;;;;;-1:-1:-1;2794:76:0;;;;-1:-1:-1;;;;;2794:76:0;;;22540:165;;;;;;;;;;-1:-1:-1;22540:165:0;;;;;:::i;:::-;;:::i;1229:56::-;;;;;;;;;;-1:-1:-1;1229:56:0;;;;;:::i;:::-;;:::i;:::-;;;23068:25:1;;;23056:2;23041:18;1229:56:0;23023:76:1;1383:87:0;;;;;;;;;;-1:-1:-1;1383:87:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;7949:350;;;;;;;;;;-1:-1:-1;7949:350:0;;;;;:::i;:::-;;:::i;10609:673::-;;;;;;;;;;-1:-1:-1;10609:673:0;;;;;:::i;:::-;;:::i;13383:499::-;;;;;;;;;;-1:-1:-1;13383:499:0;;;;;:::i;:::-;;:::i;11706:161::-;;;;;;;;;;-1:-1:-1;11706:161:0;;;;;:::i;:::-;;:::i;11463:20::-;;;;;;;;;;;;;;;;22987:614;;;;;;;;;;-1:-1:-1;22987:614:0;;;;;:::i;:::-;;:::i;6641:497::-;;;;;;;;;;-1:-1:-1;6641:497:0;;;;;:::i;:::-;;:::i;3978:276::-;;;;;;;;;;-1:-1:-1;3978:276:0;;;;;:::i;:::-;;:::i;15602:762::-;;;;;;;;;;-1:-1:-1;15602:762:0;;;;;:::i;:::-;;:::i;17277:143::-;;;;;;;;;;-1:-1:-1;17277:143:0;;;;;:::i;:::-;;:::i;12303:1011::-;;;;;;:::i;:::-;;:::i;28169:1355::-;;;;;;;;;;-1:-1:-1;28169:1355:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;2495:25::-;;;;;;;;;;;;;;;;2265:61;;;;;;;;;;-1:-1:-1;2265:61:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2597:48;;;;;;;;;;-1:-1:-1;2597:48:0;;;;;:::i;:::-;;:::i;22710:214::-;;;;;;;;;;-1:-1:-1;22710:214:0;;;;;:::i;:::-;;:::i;1289:90::-;;;;;;;;;;-1:-1:-1;1289:90:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2652:66;;;;;;;;;;-1:-1:-1;2652:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;26437:818;;;;;;;;;;-1:-1:-1;26437:818:0;;;;;:::i;:::-;;:::i;2728:32::-;;;;;;;;;;-1:-1:-1;2728:32:0;;;;-1:-1:-1;;;;;2728:32:0;;;29529:446;;;;;;;;;;-1:-1:-1;29529:446:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11487:115::-;;;;;;;;;;-1:-1:-1;11487:115:0;;;;;:::i;:::-;;:::i;26121:262::-;;;;;;;;;;-1:-1:-1;26121:262:0;;;;;:::i;:::-;;:::i;24388:1043::-;;;;;;;;;;-1:-1:-1;24388:1043:0;;;;;:::i;:::-;;:::i;8304:129::-;;;;;;;;;;-1:-1:-1;8304:129:0;;;;;:::i;:::-;;:::i;2093:20::-;;;;;;;;;;;;;;;;30840:173;;;;;;;;;;-1:-1:-1;30840:173:0;;;;;:::i;:::-;;:::i;5406:1176::-;;;;;;;;;;-1:-1:-1;5406:1176:0;;;;;:::i;:::-;;:::i;7213:111::-;;;;;;;;;;-1:-1:-1;7213:111:0;;;;;:::i;:::-;;:::i;11287:171::-;;;;;;;;;;;;;:::i;:::-;;;;26578:25:1;;;26634:2;26619:18;;26612:34;;;;26551:18;11287:171:0;26533:119:1;27260:904:0;;;;;;;;;;-1:-1:-1;27260:904:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;29981:854::-;;;;;;;;;;-1:-1:-1;29981:854:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;23672:650::-;;;;;;;;;;-1:-1:-1;23672:650:0;;;;;:::i;:::-;;:::i;31016:159::-;;;;;;;;;;-1:-1:-1;31016:159:0;;;;;:::i;:::-;;:::i;9843:713::-;;;;;;;;;;-1:-1:-1;9843:713:0;;;;;:::i;:::-;;:::i;22213:322::-;;;;;;;;;;-1:-1:-1;22213:322:0;;;;;:::i;:::-;;:::i;17426:4741::-;17603:28;17634:24;;;:14;:24;;;;;17667:16;;;;;;17663:4500;;17695:15;17721:23;17757:8;;-1:-1:-1;;;;;17747:19:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17747:19:0;;17721:45;;17772:31;17820:8;;-1:-1:-1;;;;;17806:23:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17806:23:0;;17772:57;;17835:27;17876:8;;-1:-1:-1;;;;;17865:20:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17865:20:0;;17835:50;;17893:25;17935:8;;-1:-1:-1;;;;;17921:23:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17921:23:0;-1:-1:-1;17989:13:0;;;18000:1;17989:13;;;;;;;;;17893:51;;-1:-1:-1;17967:19:0;;17989:13;;;;;;;;;;;-1:-1:-1;17989:13:0;17967:35;;18170:8;18184:20;18247:25;18263:8;18247:15;:25::i;:::-;18211:5;18217:1;18211:8;;;;;;;;:::i;:::-;;;;;;18210:62;;;;;;;;;18282:10;18278:1685;18306:8;;18298:5;:16;18278:1685;;;18342:22;;;;:15;:22;;;;;;18371:15;;-1:-1:-1;;;;;18342:22:0;;;;-1:-1:-1;18342:22:0;;18371:8;;18358:5;;18371:15;;;;;;:::i;:::-;;;;;;:25;-1:-1:-1;;;;;18371:25:0;;;-1:-1:-1;;;;;18371:25:0;;;;;18446:1;18421:5;18427:1;18421:8;;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;18406:6;18413:5;18406:13;;;;;;;;:::i;:::-;;;;;;;:41;18403:1554;;18469:8;;-1:-1:-1;;;;;18460:17:0;;;18469:8;;18460:17;;;;:39;;-1:-1:-1;;;;;;18481:18:0;;;;;;:9;:18;;;;;;;;18460:39;:86;;;;-1:-1:-1;18526:20:0;;;;-1:-1:-1;;;;;18503:19:0;;;;;;:10;:19;;;;;;:43;;18460:86;:114;;;;-1:-1:-1;;;;;;18550:24:0;;;;;;:15;;;:24;;;;;;;;18460:114;18456:1444;;;-1:-1:-1;;;;;18622:20:0;;;;;;:11;:20;;;;;;18585:8;;:5;;18591:1;;18585:8;;;;;;:::i;:::-;;;;;;:57;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;;18655:21:0;;;;;;:12;;;:21;;;;;;;;18651:1241;;;-1:-1:-1;;;;;18719:20:0;;;;;;:11;:20;;;;;;18688:8;;18719:20;;18688:5;;:8;;;;:::i;:::-;;;;;;:51;;;;;;;:::i;:::-;;;-1:-1:-1;18850:1:0;;-1:-1:-1;18840:479:0;18857:5;18863:1;18857:8;;;;;;;;:::i;:::-;;;;;;;18853:3;:12;18840:479;;;18906:15;;;;;;;:20;:67;;;;-1:-1:-1;;;;;;18949:24:0;;;;;;:15;;;:24;;;;;;18930:15;;:10;;18941:3;;18930:15;;;;;;:::i;:::-;;;;;;;:43;18906:67;18905:160;;;-1:-1:-1;18989:15:0;;;;;;:20;:75;;;;-1:-1:-1;;;;;;19036:28:0;;;;;;;:19;;;:28;;;;;;19013:19;;19036:28;;;19013:14;;19028:3;;19013:19;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;19013:51:0;;18989:75;18901:408;;;-1:-1:-1;;;;;19111:20:0;;;;;;:11;:20;;;;;;19089:18;;:13;;19103:3;;19089:18;;;;;;:::i;:::-;;;;;;:42;;;;;;;:::i;:::-;;;-1:-1:-1;19181:8:0;;19167:13;;19181:5;;19187:1;;19181:8;;;;;;:::i;:::-;;;;;;;19167:37;;;;;;;;:::i;:::-;;;;;;;19146:13;19160:3;19146:18;;;;;;;;:::i;:::-;;;;;;;:58;:80;;;;-1:-1:-1;19209:17:0;;;;;;19208:18;19146:80;19143:138;;;19265:3;19240:5;19246:1;19240:8;;;;;;;;:::i;:::-;;;;;;:28;;;;;19143:138;19292:5;;18901:408;18883:6;18888:1;18883:6;;:::i;:::-;;;18840:479;;;19372:5;19378:1;19372:8;;;;;;;;:::i;:::-;;;;;;;19365:3;:15;19362:412;;;19411:15;;;;;;;:20;19408:235;;;-1:-1:-1;;;;;19483:24:0;;;;;;:15;;;:24;;;;;;19455:8;;19444:10;;19455:5;;19461:1;;19455:8;;;;;;:::i;:::-;;;;;;;19444:36;;;;;;;;:::i;:::-;;;;;;:63;;;;;19408:235;;;19527:15;;;;;;19524:119;;-1:-1:-1;;;;;19603:28:0;;;;;;;:19;;;:28;;;;;;19575:8;;19603:28;;;19560:14;;19575:5;;19581:1;;19575:8;;;;;;:::i;:::-;;;;;;;19560:40;;;;;;;;:::i;:::-;;;;;;:71;-1:-1:-1;;;;;19560:71:0;;;-1:-1:-1;;;;;19560:71:0;;;;;19524:119;-1:-1:-1;;;;;19695:20:0;;;;;;:11;:20;;;;;;19667:8;;19653:13;;19667:5;;19673:1;;19667:8;;;;;;:::i;:::-;;;;;;;19653:39;;;;;;;;:::i;:::-;;;;;;:62;;;;;19762:1;19736:5;19742:1;19736:8;;;;;;;;:::i;:::-;;;;;;:27;;;;;;;:::i;:::-;;;-1:-1:-1;19362:412:0;18403:1554;;18651:1241;-1:-1:-1;;;;;19791:24:0;;;;;;:15;;;:24;;;;;;;;19788:104;;;-1:-1:-1;;;;;19862:20:0;;;;;;:11;:20;;;;;;19826:8;;:5;;19832:1;;19826:8;;;;;;:::i;18403:1554::-;-1:-1:-1;;;;;19919:23:0;;;;;;:14;;;:23;;;;;:30;;-1:-1:-1;;19919:30:0;19945:4;19919:30;;;18403:1554;18316:8;18323:1;18316:8;;:::i;:::-;;;18278:1685;;;;20051:5;20057:1;20051:8;;;;;;;;:::i;:::-;;;;;;;20016:5;20022:1;20016:8;;;;;;;;:::i;:::-;;;;;;;:43;;;;:::i;:::-;19978:5;19984:1;19978:8;;;;;;;;:::i;:::-;;;;;;;:101;:123;;;;-1:-1:-1;20084:17:0;;;;;;20083:18;19978:123;19977:205;;;-1:-1:-1;20158:17:0;;;;;;:21;;20178:1;20158:21;;;20176:1;20158:21;20139:41;;:6;:17;;;:41;;;;:::i;:::-;20116:6;:20;;;:64;;;;:::i;:::-;3070:15;20107:73;19977:205;19973:2185;;;20197:13;20256;20270:5;20276:1;20270:8;;;;;;;;:::i;:::-;;;;;;;20256:37;;;;;;;;:::i;:::-;;;;;;;20221:5;20227:1;20221:8;;;;;;;;:::i;:::-;;;;;;;:72;20217:109;;;-1:-1:-1;20314:4:0;20217:109;20349:15;;;;;;20401:845;;;;20421:21;;;:28;;-1:-1:-1;;20421:28:0;20445:4;20421:28;;;20401:845;;;20476:17;;;;;;20473:766;;;20528:5;20534:1;20528:8;;;;;;;;:::i;:::-;;;;;;;20503:6;:22;;:33;;;;20574:1;20565:5;20571:1;20565:8;;;;;;;;:::i;:::-;;;;;;:10;;;;;20561:328;20585:5;20591:1;20585:8;;;;;;;;:::i;:::-;;;;;;;20576:5;20582:1;20576:8;;;;;;;;:::i;:::-;;;;;;;:17;20561:328;;;20651:13;20665:5;20671:1;20665:8;;;;;;;;:::i;:::-;;;;;;;20651:23;;;;;;;;:::i;:::-;;;;;;;20616:6;:22;;:32;20639:5;20645:1;20639:8;;;;;;;;:::i;:::-;;;;;;;20616:32;;;;;;;;;;;:58;;;;20687:8;:13;;20699:1;20687:13;20684:196;;;20744:10;20755:5;20761:1;20755:8;;;;;;;;:::i;:::-;;;;;;;20744:20;;;;;;;;:::i;:::-;;;;;;;20712:6;:19;;:29;20732:5;20738:1;20732:8;;;;;;;;:::i;:::-;;;;;;;20712:29;;;;;;;;;;;:52;;;;20684:196;;;20783:13;;;20780:100;;20845:14;20860:5;20866:1;20860:8;;;;;;;;:::i;:::-;;;;;;;20845:24;;;;;;;;:::i;:::-;;;;;;;20808:6;:24;;:34;20833:5;20839:1;20833:8;;;;;;;;:::i;:::-;;;;;;;20808:34;;;;;;;;;;;;:61;;;;;-1:-1:-1;;;;;20808:61:0;;;;;-1:-1:-1;;;;;20808:61:0;;;;;;20780:100;20604:1;20594:5;20600:1;20594:8;;;;;;;;:::i;:::-;;;;;;:11;;;;;;;:::i;:::-;;;-1:-1:-1;20561:328:0;;;20473:766;;;20935:5;20941:1;20935:8;;;;;;;;:::i;:::-;;;;;;;20945:1;20935:11;:15;;20949:1;20935:15;;;20947:1;20935:15;20910:40;;;;:22;;;:40;21028:13;;21040:1;21028:13;21025:206;;;21077:10;21088:5;21094:1;21088:8;;;;;;;;:::i;:::-;;;;;;;21077:34;;;;;;;;:::i;:::-;;;;;;;21052:6;:19;;:22;21072:1;21052:22;;;;;;;;;;;:59;;;;21025:206;;;21129:13;;;21126:105;;21183:14;21198:5;21204:1;21198:8;;;;;;;;:::i;:::-;;;;;;;21183:38;;;;;;;;:::i;:::-;;;;;;;21153:6;:24;;:27;21178:1;21153:27;;;;;;;;;;;;:68;;;;;-1:-1:-1;;;;;21153:68:0;;;;;-1:-1:-1;;;;;21153:68:0;;;;;;21126:105;21344:19;21356:6;;-1:-1:-1;;;;;21356:6:0;21344:19;;:11;:19;;;;;;21310:17;;;;:31;;-1:-1:-1;;;2150:19:0;21310:31;:::i;:::-;:53;;;;:::i;:::-;21282:24;21299:6;;-1:-1:-1;;;;;21299:6:0;21282:24;;:16;:24;;;;;:81;;:24;;;:81;;;;;:::i;:::-;;;;-1:-1:-1;;21372:16:0;;;:23;;-1:-1:-1;;21372:23:0;21391:4;21372:23;;;21405:17;;;;21372:23;21405:17;21402:669;;;21434:8;:13;;21446:1;21434:13;21431:337;;;21467:6;:13;;;;;;;;;;-1:-1:-1;;;;;21467:13:0;-1:-1:-1;;;;;21457:42:0;;21500:6;:9;;;21511:6;:21;;;;;;;;;;;;21534:6;:22;;;21558:13;21573:10;21457:127;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21402:669;;21431:337;21601:13;;;21598:170;;21634:13;;;;21671:9;;21682:21;;;;21705:22;;;;21624:135;;-1:-1:-1;;;21624:135:0;;-1:-1:-1;;;;;21634:13:0;;;;21624:46;;:135;;21671:9;;21682:21;;;;;21729:13;;21744:14;;21624:135;;;:::i;21598:170::-;21402:669;;;21790:8;:13;;21802:1;21790:13;21787:277;;;21823:13;;;;21865:9;;21876:21;;;;21813:97;;-1:-1:-1;;;21813:97:0;;-1:-1:-1;;;;;21823:13:0;;;;21813:51;;:97;;21865:9;;21876:21;;;;;21899:10;;21813:97;;;:::i;21787:277::-;21927:13;;;21924:140;;21960:13;;;;22006:9;;22017:21;;;;21950:105;;-1:-1:-1;;;21950:105:0;;-1:-1:-1;;;;;21960:13:0;;;;21950:55;;:105;;22006:9;;22017:21;;;;;22040:14;;21950:105;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21924:140;22105:9;;22088:37;;;;;;22116:8;;22088:37;:::i;:::-;;;;;;;;20184:1948;;17684:4479;;;;;;;;17663:4500;17472:4695;17426:4741;:::o;13987:1523::-;14163:10;14146:14;14211:28;14146:14;14244:1262;14258:7;:14;14256:1;:16;14244:1262;;;14295:14;:28;14311:7;14319:1;14311:10;;;;;;;;:::i;:::-;;;;;;;;;;;;14295:28;;;;;;;;;;;;;-1:-1:-1;14295:28:0;;;-1:-1:-1;;;;;14333:24:0;;;;:16;;;:24;;;;;14295:28;;-1:-1:-1;14333:24:0;;14329:1172;;;14401:6;:17;;;14378:6;:20;;;:40;;;;:::i;:::-;3070:15;14369:49;:105;;;;-1:-1:-1;14455:17:0;;;;:19;;14473:1;14455:19;:::i;:::-;14432:6;:20;;;:42;;;;:::i;:::-;3070:15;14422:52;;14369:105;14366:1129;;;14487:15;;;;;;;:20;14484:245;;;14553:8;14562:1;14553:11;;;;;;;;:::i;:::-;;;;;;;14566:8;14575:1;14566:11;;;;;;;;:::i;:::-;;;;;;;14579:9;14589:1;14579:12;;;;;;;;:::i;:::-;;;;;;;14535:58;;;;;;;;;14360:14:1;;14353:22;14348:3;14344:32;14332:45;;14402:1;14393:11;;14386:27;;;;14438:2;14429:12;;14422:28;14475:2;14466:12;;14322:162;14535:58:0;;;;;;;;;;;;;14517:76;;14484:245;;;14610:15;;;;;;14607:122;;14676:8;14685:1;14676:11;;;;;;;;:::i;:::-;;;;;;;14689:12;14702:1;14689:15;;;;;;;;:::i;:::-;;;;;;;14706:9;14716:1;14706:12;;;;;;;;:::i;:::-;;;;;;;14658:62;;;;;;;;;13979:14:1;;13972:22;13967:3;13963:32;13951:45;;14033:2;14029:15;;;;-1:-1:-1;;14025:53:1;14021:1;14012:11;;14005:74;14104:2;14095:12;;14088:28;14141:2;14132:12;;13941:209;14658:62:0;;;;;;;;;;;;;14640:80;;14607:122;14742:90;14766:15;14756:26;;;;;;14784:14;:28;14800:7;14808:1;14800:10;;;;;;;;:::i;:::-;;;;;;;14784:28;;;;;;;;;;;:39;;:47;14824:6;-1:-1:-1;;;;;14784:47:0;-1:-1:-1;;;;;14784:47:0;;;;;;;;;;;;;14742:12;:90::i;:::-;14738:699;;;14893:4;14845:14;:28;14861:7;14869:1;14861:10;;;;;;;;:::i;:::-;;;;;;;14845:28;;;;;;;;;;;:37;;:45;14883:6;-1:-1:-1;;;;;14845:45:0;-1:-1:-1;;;;;14845:45:0;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;14909:8;14918:1;14909:11;;;;;;;;:::i;:::-;;;;;;;14906:393;;;14979:4;14931:14;:28;14947:7;14955:1;14947:10;;;;;;;;:::i;:::-;;;;;;;14931:28;;;;;;;;;;;:37;;:45;14969:6;-1:-1:-1;;;;;14931:45:0;-1:-1:-1;;;;;14931:45:0;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;14906:393;;;15052:4;15007:14;:28;15023:7;15031:1;15023:10;;;;;;;;:::i;:::-;;;;;;;;;;;;15007:28;;;;;;;;;;;;;-1:-1:-1;15007:28:0;;;-1:-1:-1;;;;;15007:42:0;;;;:34;;:42;;;;;:49;;-1:-1:-1;;15007:49:0;;;;;;;;;;15069:15;;;;15007:49;15069:15;-1:-1:-1;15069:20:0;15066:223;;;15149:8;15158:1;15149:11;;;;;;;;:::i;:::-;;;;;;;15101:14;:28;15117:7;15125:1;15117:10;;;;;;;;:::i;:::-;;;;;;;15101:28;;;;;;;;;;;:37;;:45;15139:6;-1:-1:-1;;;;;15101:45:0;-1:-1:-1;;;;;15101:45:0;;;;;;;;;;;;:59;;;;15066:223;;;15179:15;;;;;;15176:113;;15263:12;15276:1;15263:15;;;;;;;;:::i;:::-;;;;;;;15211:14;:28;15227:7;15235:1;15227:10;;;;;;;;:::i;:::-;;;;;;;15211:28;;;;;;;;;;;:41;;:49;15253:6;-1:-1:-1;;;;;15211:49:0;-1:-1:-1;;;;;15211:49:0;;;;;;;;;;;;;:67;;;;;-1:-1:-1;;;;;15211:67:0;;;;;-1:-1:-1;;;;;15211:67:0;;;;;;15176:113;15312:73;15323:6;15331:7;15339:1;15331:10;;;;;;;;:::i;:::-;;;;;;;15343:8;15352:1;15343:11;;;;;;;;:::i;:::-;;;;;;;15356:8;15365:1;15356:11;;;;;;;;:::i;:::-;;;;;;;15369:12;15382:1;15369:15;;;;;;;;:::i;:::-;;;;;;;15312:73;;;;;;;;;-1:-1:-1;;;;;17494:15:1;;;17476:34;;17541:2;17526:18;;17519:34;;;;17596:14;;17589:22;17584:2;17569:18;;17562:50;17643:2;17628:18;;17621:34;17692:15;;;17686:3;17671:19;;17664:44;17425:3;17410:19;;17392:322;15312:73:0;;;;;;;;14366:1129;14274:4;14277:1;14274:4;;:::i;:::-;;;14244:1262;;;;14141:1369;;;13987:1523;;;;;:::o;8547:1216::-;8627:10;8589:12;8692:17;;;:6;:17;;;;;;8589:12;;8627:10;8589:12;;;;8692:17;;8691:18;:34;;;;;8724:1;8713:8;;:12;8691:34;8682:44;;;;;;8731:19;8772:13;;8760:8;;:25;8757:297;;;8796:6;8792:192;8806:8;;8804:1;:10;8792:192;;;8842:18;;;;:15;:18;;;;;;;;;8913:29;;;;;;;-1:-1:-1;;;;;8913:29:0;;;8900:44;;:11;:44;;;;;;;8842:18;;8871:26;;;;;;8842:18;;-1:-1:-1;;8867:111:0;;;8969:1;8954:16;;8867:111;8816:4;8819:1;8816:4;;:::i;:::-;;;8792:192;;;;8757:297;;;9010:4;8999:15;;9035:13;;9020:28;;8757:297;9090:44;9103:29;;;:15;:29;;;;;;;;;-1:-1:-1;;;;;9103:29:0;;;9090:44;;:11;:44;;;;;;;9065:22;;;;;;;;;:69;;:81;;;9138:8;9065:81;9064:109;;;;-1:-1:-1;;;;;;9153:20:0;;;;;;:9;:20;;;;;;;;9152:21;9064:109;9060:613;;;9181:23;9207:29;;;:15;:29;;;;;;-1:-1:-1;;;;;9207:29:0;9248:8;9244:138;;9277:6;;;-1:-1:-1;;;;;9302:28:0;;;;;:11;:28;;;;;;;9264:67;;9277:6;;;;9285:15;;9264:12;:67::i;:::-;9244:138;;;-1:-1:-1;9367:8:0;;-1:-1:-1;;;;;9367:8:0;9244:138;9399:6;;;-1:-1:-1;;;;;9418:22:0;;;;;:11;:22;;;;;;;9389:52;;9399:6;;;;9407:9;;9389;:52::i;:::-;-1:-1:-1;;;;;9447:21:0;;;;;;;:10;:21;;;;;;;;3070:15;9447:30;;9485:29;;;:15;:29;;;;;:41;;-1:-1:-1;;;;;;9485:41:0;;;;;9533:26;;;:15;:26;;;;;;:41;;;9587:63;;16247:34:1;;;-1:-1:-1;16297:18:1;;;16290:50;16376:15;;;16356:18;;;16349:43;16423:2;16408:18;;16401:34;;;9587:63:0;;;;;;;16196:3:1;9587:63:0;;;9663:4;9656:11;;;;;;;8547:1216;:::o;9060:613::-;9718:8;;9684:57;;;-1:-1:-1;;;;;16265:15:1;;;16247:34;;9711:5:0;16312:2:1;16297:18;;16290:50;9718:8:0;;;16356:18:1;;;16349:43;16423:2;16408:18;;16401:34;;;9684:57:0;;;;;;16196:3:1;9684:57:0;;;9753:5;9746:12;;;;;;8547:1216;:::o;11872:215::-;11924:10;;-1:-1:-1;;;;;11924:10:0;11910;:24;11902:33;;;;;;11953:8;;;11940:10;11966:12;;;11983:10;;-1:-1:-1;;;;;11983:10:0;:30;12021:7;12027:1;11953:8;12021:7;:::i;:::-;11983:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12045:10;-1:-1:-1;;;;;12037:28:0;:45;12079:1;12073:5;:7;;;;:::i;:::-;12067:13;;:5;:13;:::i;:::-;12037:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22540:165;-1:-1:-1;;;;;22599:18:0;;;;;;:9;:18;;;;;;;;22595:106;;;22632:6;;22625:24;;-1:-1:-1;;;;;22632:6:0;22640:7;22625:6;:24::i;:::-;22655:40;22680:7;22689:4;22655:23;:40::i;:::-;22540:165;:::o;1229:56::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1229:56:0;:::o;7949:350::-;-1:-1:-1;;;;;8061:17:0;;8015:14;8061:17;;;:6;:17;;;;;;;;8032:10;8061:25;;;;;;;;;8051:35;;;;;:57;;-1:-1:-1;;;;;;8091:17:0;;;;;;:6;:17;;;;;;;;8090:18;8051:57;:82;;;;-1:-1:-1;;;;;;8113:20:0;;;;;;:9;:20;;;;;;;;8112:21;8051:82;8047:248;;;-1:-1:-1;;;;;8141:20:0;;;;;;:12;:20;;;;;:30;;8165:6;;8141:20;:30;;8165:6;;8141:30;:::i;:::-;;;;-1:-1:-1;8177:39:0;;-1:-1:-1;8190:9:0;8201:6;8209;8177:12;:39::i;:::-;8227:38;;;-1:-1:-1;;;;;15862:15:1;;;15844:34;;15914:15;;15909:2;15894:18;;15887:43;15946:18;;;15939:34;;;8227:38:0;;15794:2:1;15779:18;8227:38:0;;;;;;;;8010:289;7949:350;;:::o;8047:248::-;8010:289;7949:350;;:::o;10609:673::-;10722:39;;;;:31;:39;;;;;10763:20;:28;;10722:39;;;10754:6;;10763:28;;;;;;:::i;:::-;;;;;;;;;;;;;10722:71;;;;;;;;;;;;;;;;10672:39;;;:31;:39;;;;;:47;;;;;;;;:121;10668:610;;;1050:1;10804:6;:30;10801:69;;;10853:3;10846:6;:10;:21;;10864:3;10846:21;;;10857:6;10846:21;10837:30;;10801:69;10878:26;10875:70;;10928:1;10921:6;:8;:17;;10937:1;10921:17;;;10930:6;10921:17;10912:26;;10875:70;1092:1;10953:6;:30;10950:71;;;11002:4;10995:6;:11;:23;;11012:6;10995:23;;;11007:4;10995:23;10986:32;;10950:71;11059:6;11028:20;11049:6;11028:28;;;;;;;;:::i;:::-;;;;;;;;;;:37;11076:26;11073:159;;11122:20;1008:1;11122:38;;;;;;;;:::i;:::-;;;;;;;;;11113:8;;:47;11110:116;;;11180:20;1008:1;11180:38;;;;;;;;:::i;:::-;;;;;;;;;;;11169:8;:49;11110:116;11244:28;;;26578:25:1;;;26634:2;26619:18;;26612:34;;;11244:28:0;;26551:18:1;11244:28:0;;;;;;;;10609:673;;:::o;13383:499::-;13485:10;13468:14;;13533:345;13547:7;:14;13545:1;:16;13533:345;;;13584:14;:28;13600:7;13608:1;13600:10;;;;;;;;:::i;:::-;;;;;;;13584:28;;;;;;;;;;;13575:37;;13655:6;:17;;;13632:6;:20;;;:40;;;;:::i;:::-;3070:15;13622:50;13618:255;;-1:-1:-1;;;;;13681:24:0;;;;;;:16;;;:24;;;;;:31;;-1:-1:-1;;13681:31:0;13708:4;13681:31;;;13747:13;;:10;;13758:1;;13747:13;;;;;;:::i;:::-;;;;;;;13719:6;:17;;:25;13737:6;-1:-1:-1;;;;;13719:25:0;-1:-1:-1;;;;;13719:25:0;;;;;;;;;;;;:41;;;;13772:45;13783:6;13791:7;13799:1;13791:10;;;;;;;;:::i;:::-;;;;;;;13803;13814:1;13803:13;;;;;;;;:::i;:::-;;;;;;;;;;;;13772:45;;;-1:-1:-1;;;;;17939:32:1;;;17921:51;;17988:18;;;17981:34;;;;18031:18;;18024:34;17909:2;17894:18;13772:45:0;;;;;;;13563:4;13566:1;13563:4;;:::i;:::-;;;13533:345;;;;13463:419;;13383:499;;:::o;11706:161::-;11784:10;;-1:-1:-1;;;;;11784:10:0;11770;:24;:37;;;;-1:-1:-1;11799:8:0;;-1:-1:-1;;;11799:8:0;;;;11798:9;11770:37;11762:46;;;;;;11813:10;:29;;11847:15;;;-1:-1:-1;;;11847:15:0;-1:-1:-1;;;;;;11847:15:0;;;-1:-1:-1;;;;;11813:29:0;;;11847:15;;;;;;;11706:161::o;22987:614::-;23170:28;23207:6;23203:394;23217:8;:15;23215:1;:17;23203:394;;;23254:14;:28;23270:7;23278:1;23270:10;;;;;;;;:::i;:::-;;;;;;;23254:28;;;;;;;;;;;23245:37;;23292:9;:24;23303:8;23312:1;23303:11;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;23292:24:0;;;;;;;;;;;-1:-1:-1;23292:24:0;;;;:65;;;;;23326:6;:16;;:31;23344:8;23353:1;23344:11;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;23326:31:0;;;;;;;;;;;-1:-1:-1;23326:31:0;;;;23325:32;23292:65;:123;;;;;23395:6;:20;;;23366:10;:25;23378:8;23387:1;23378:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23366:25:0;-1:-1:-1;;;;;23366:25:0;;;;;;;;;;;;;:49;;23292:123;:181;;;;;23456:6;:17;;;23433:6;:20;;;:40;;;;:::i;:::-;3070:15;23424:49;23292:181;23288:304;;;23489:32;23496:7;23504:1;23496:10;;;;;;;;:::i;:::-;;;;;;;23509:8;23518:1;23509:11;;;;;;;;:::i;:::-;;;;;;;23489:6;:32::i;:::-;23486:100;;;23536:42;23553:7;23561:1;23553:10;;;;;;;;:::i;:::-;;;;;;;23566:8;23575:1;23566:11;;;;;;;;:::i;:::-;;;;;;;23536:42;;;;;;23278:25:1;;;-1:-1:-1;;;;;23339:32:1;23334:2;23319:18;;23312:60;23266:2;23251:18;;23233:145;23536:42:0;;;;;;;;23486:100;23234:4;23237:1;23234:4;;:::i;:::-;;;23203:394;;;;23069:532;22987:614;;:::o;6641:497::-;6707:10;6690:14;6762:20;;;:12;:20;;;;;;;;;6738:13;:21;;;;;;;:44;;6762:20;6738:44;:::i;:::-;6726:6;:58;6722:412;;-1:-1:-1;;;;;6792:21:0;;;;;;:13;:21;;;;;:31;;6817:6;;6792:21;:31;;6817:6;;6792:31;:::i;:::-;;;;-1:-1:-1;6833:11:0;;-1:-1:-1;6829:153:0;1222:1;6850:6;:14;6829:153;;;6883:39;;;;:31;:39;;;;;;;;6923:25;:33;;;;;-1:-1:-1;;;;;6923:41:0;;;;;;;;;;6883:82;;;;;;;:92;;6969:6;;6883:39;:92;;6969:6;;6883:92;:::i;:::-;;;;-1:-1:-1;6866:9:0;;-1:-1:-1;6874:1:0;6866:9;;:::i;:::-;;;6829:153;;;-1:-1:-1;6994:31:0;;;-1:-1:-1;;;;;15517:32:1;;15499:51;;15581:2;15566:18;;15559:34;;;6994:31:0;;15472:18:1;6994:31:0;;;;;;;7031:7;;:28;;-1:-1:-1;;;7031:28:0;;;;;23068:25:1;;;-1:-1:-1;;;;;7031:7:0;;;;:20;;23041:18:1;;7031:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;7067:12:0;;:37;;-1:-1:-1;;;7067:37:0;;-1:-1:-1;;;;;15517:32:1;;;7067:37:0;;;15499:51:1;15566:18;;;15559:34;;;7067:12:0;;;;:21;;15472:18:1;;7067:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3978:276::-;-1:-1:-1;;;;;4105:13:0;;;4050:4;4105:13;;;:7;:13;;;;;;;;:22;;;;;;;;;;;;4080;;;:16;:22;;;;;;4050:4;;4080:47;;;:::i;:::-;4143:6;;4060:67;;-1:-1:-1;;;;;;4135:14:0;;;4143:6;;4135:14;:37;;;;-1:-1:-1;;;;;;4154:18:0;;;;;;:9;:18;;;;;;;;4153:19;4135:37;4132:55;;;4186:1;4179:8;;;;;4132:55;-1:-1:-1;;;;;4199:12:0;;;;;;;:6;:12;;;;;;;;:21;;;;;;;;;;-1:-1:-1;;;2150:19:0;4199:36;;4223:12;;4199:36;:::i;:::-;:50;;;;:::i;:::-;4192:57;;;3978:276;;;;;:::o;15602:762::-;15732:10;15715:14;;15780:580;15794:7;:14;15792:1;:16;15780:580;;;15831:14;:28;15847:7;15855:1;15847:10;;;;;;;;:::i;:::-;;;;;;;15831:28;;;;;;;;;;;15822:37;;15890:6;:20;;;15868:10;:18;15879:6;-1:-1:-1;;;;;15868:18:0;-1:-1:-1;;;;;15868:18:0;;;;;;;;;;;;;:42;15865:490;;15950:6;:20;;;15922:10;:24;15933:9;15943:1;15933:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15922:24:0;-1:-1:-1;;;;;15922:24:0;;;;;;;;;;;;;:48;;:103;;;;-1:-1:-1;16006:17:0;;;;:19;;16024:1;16006:19;:::i;:::-;15983:6;:20;;;:42;;;;:::i;:::-;3070:15;15974:51;15922:103;:159;;;;-1:-1:-1;16062:17:0;;;;;:19;;;:::i;:::-;16039:6;:20;;;:42;;;;:::i;:::-;3070:15;16029:52;;15922:159;15918:353;;;16130:7;16138:1;16130:10;;;;;;;;:::i;:::-;;;;;;;16091:6;:14;;:22;16106:6;-1:-1:-1;;;;;16091:22:0;-1:-1:-1;;;;;16091:22:0;;;;;;;;;;;;:36;16114:9;16124:1;16114:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;16091:36:0;-1:-1:-1;;;;;16091:36:0;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;16153:62;16170:6;16178:7;16186:1;16178:10;;;;;;;;:::i;:::-;;;;;;;16190:9;16200:1;16190:12;;;;;;;;:::i;:::-;;;;;;;16204:7;16212:1;16204:10;;;;;;;;:::i;:::-;;;;;;;16153:62;;;;;;;;-1:-1:-1;;;;;17006:15:1;;;16988:34;;17053:2;17038:18;;17031:34;;;;17101:15;;17096:2;17081:18;;17074:43;17160:14;;17153:22;17148:2;17133:18;;17126:50;16937:3;16922:19;;16904:278;16153:62:0;;;;;;;;15810:4;15813:1;15810:4;;:::i;:::-;;;15780:580;;;;15710:654;;15602:762;;;:::o;17277:143::-;17343:6;17339:77;17353:7;:14;17351:1;:16;17339:77;;;17381:29;17398:7;17406:1;17398:10;;;;;;;;:::i;:::-;;;;;;;17381:15;:29::i;:::-;17369:4;17372:1;17369:4;;:::i;:::-;;;17339:77;;12303:1011;12391:13;12421:9;12391:13;;12475:8;:6;:8::i;:::-;12435:48;;;;12492:11;12538:9;12527:7;;12509:15;:25;;;;:::i;:::-;12508:39;12506:61;;12566:1;12506:61;;;12551:13;12562:2;12551:10;:13;:::i;:::-;12492:75;;12582:10;:15;;12596:1;12582:15;:34;;;-1:-1:-1;12601:15:0;;;;12582:34;12574:43;;;;;;12663:6;12634:26;12650:10;12634:13;:26;:::i;:::-;:35;;;;:::i;:::-;12627:3;:42;12624:686;;12689:18;;;12713:28;12744:34;;;:14;:34;;;;;12689:18;;-1:-1:-1;12744:34:0;;12689:18;;12784:20;12689:18;12784:20;:::i;:::-;;;;-1:-1:-1;;12812:15:0;;;:28;;-1:-1:-1;;12812:28:0;;;;;;;3070:15;12846:6;:20;;:29;;;;12901:20;1050:1;12901:42;;;;;;;;:::i;:::-;;;;;;;;;;;12881:17;;;:62;12949:20;;;12975:13;;;:26;;-1:-1:-1;;;;;;12975:26:0;12991:10;12975:26;;;13007:17;;;:30;;;;;-1:-1:-1;;13007:30:0;;;;;;13078:13;13063:12;13069:6;13063:3;:12;:::i;:::-;:28;;;;:::i;:::-;13043:6;:17;;:48;;;;13109:6;13097:8;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;13159:13:0;;13143:29;;:13;:29;:::i;:::-;13121:18;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;13257:17:0;;;;13185:95;;;13203:10;19965:51:1;;20047:2;20032:18;;20025:34;;;20107:4;20095:17;;20075:18;;;20068:45;20156:14;;20149:22;20144:2;20129:18;;20122:50;3070:15:0;20203:3:1;20188:19;;20181:35;20003:3;20232:19;;20225:35;;;;20291:3;20276:19;;20269:35;;;13185:95:0;;;;;;19952:3:1;13185:95:0;;;12670:616;12405:909;;;;12303:1011;;;;:::o;28169:1355::-;28263:26;28291:23;28316:18;28336:21;28359:20;28381:22;28405:21;28428:33;28467:6;28485:22;28482:101;;;-1:-1:-1;28518:8:0;;28482:101;;;-1:-1:-1;;;;;;28546:24:0;;;;;;:11;:24;;;;;:31;28482:101;28612:1;-1:-1:-1;;;;;28601:13:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28601:13:0;;28589:25;;28637:1;-1:-1:-1;;;;;28626:13:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28626:13:0;;28619:20;;28677:1;-1:-1:-1;;;;;28666:13:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28666:13:0;-1:-1:-1;28644:35:0;-1:-1:-1;28707:3:0;:1;28709;28707:3;:::i;:::-;-1:-1:-1;;;;;28696:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28696:15:0;-1:-1:-1;28686:25:0;-1:-1:-1;28736:3:0;:1;28738;28736:3;:::i;:::-;-1:-1:-1;;;;;28725:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28725:15:0;;28716:24;;28769:1;-1:-1:-1;;;;;28758:13:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28758:13:0;;28747:24;;28797:1;-1:-1:-1;;;;;28786:13:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28786:13:0;;28776:23;;28832:1;-1:-1:-1;;;;;28818:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28818:16:0;-1:-1:-1;28806:28:0;-1:-1:-1;28841:17:0;;28863:657;28881:1;28879;:3;28863:657;;;28898:22;28895:127;;;28940:18;;;;:15;:18;;;;;;-1:-1:-1;;;;;28940:18:0;;-1:-1:-1;28895:127:0;;;-1:-1:-1;;;;;28988:24:0;;;;;;:11;:24;;;;;:27;;29013:1;;28988:27;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;28988:27:0;;-1:-1:-1;28895:127:0;29042:9;29027;29037:1;29027:12;;;;;;;;:::i;:::-;;;;;;:24;-1:-1:-1;;;;;29027:24:0;;;-1:-1:-1;;;;;29027:24:0;;;;;29072:35;29084:9;29095:11;29072;:35::i;:::-;29057:9;29067:1;29057:12;;;;;;;;:::i;:::-;;;;;;;;;;:50;29150:6;;29138:30;;-1:-1:-1;;;;;29150:6:0;29158:9;29138:11;:30::i;:::-;29113:19;29133:1;29113:22;;;;;;;;:::i;:::-;;;;;;:55;;;;;29184:15;:26;29200:9;-1:-1:-1;;;;;29184:26:0;-1:-1:-1;;;;;29184:26:0;;;;;;;;;;;;;29174:4;29179:1;29174:7;;;;;;;;:::i;:::-;;;;;;:36;;;;;29229:6;:17;29236:9;-1:-1:-1;;;;;29229:17:0;-1:-1:-1;;;;;29229:17:0;;;;;;;;;;;;:30;29247:11;-1:-1:-1;;;;;29229:30:0;-1:-1:-1;;;;;29229:30:0;;;;;;;;;;;;;29216:7;29224:1;29216:10;;;;;;;;:::i;:::-;;;;;;;;;;;:43;;;;-1:-1:-1;;;;;29280:22:0;;;;;;:11;:22;;;;;;;29265:7;29273:3;29275:1;29273;:3;:::i;:::-;29265:12;;;;;;;;:::i;:::-;;;;;;;;;;;:37;;;;-1:-1:-1;;;;;29322:17:0;;;;;;:6;:17;;;;;;;29308:11;;29322:17;;;;;29308:8;;29317:1;;29308:11;;;;;;:::i;:::-;:31;;;:11;;;;;;;;;;:31;-1:-1:-1;;;;;29358:20:0;;;;;;:9;:20;;;;;;;29345:10;;29358:20;;;;;29345:7;;29353:1;;29345:10;;;;;;:::i;:::-;:33;;;:10;;;;;;;;;;:33;-1:-1:-1;;;;;29396:28:0;;;;;;:17;:28;;;;;;;29384:9;;:6;;29391:1;;29384:9;;;;;;:::i;:::-;;;;;;;;;;;:40;;;;-1:-1:-1;;;;;29444:21:0;;;;;;:10;:21;;;;;;;29430:6;29437:3;29439:1;29437;:3;:::i;:::-;29430:11;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;;;-1:-1:-1;;;;;29487:27:0;;;;;;:16;:27;;;;;;;29471:6;29480:3;:1;29482;29480:3;:::i;:::-;29478:5;;:1;:5;:::i;:::-;29471:13;;;;;;;;:::i;:::-;;;;;;;;;;:43;28884:4;28887:1;28884:4;;:::i;:::-;;;28863:657;;;;28462:1062;;28169:1355;;;;;;;;;;;:::o;2597:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2597:48:0;;-1:-1:-1;2597:48:0;;-1:-1:-1;2597:48:0:o;22710:214::-;22794:35;22811:7;22820:8;22794:16;:35::i;:::-;22834:42;22858:7;22867:8;22834:23;:42::i;:::-;22881:38;22901:7;22910:8;22881:19;:38::i;26437:818::-;26532:6;26543;26554:17;26576:19;26600:16;26619:20;1008:1;26619:38;;;;;;;;:::i;:::-;;;;;;;;;26600:57;;26683:8;;26668:11;:23;26664:37;;;26694:7;;;;;26437:818;:::o;26664:37::-;26722:13;;26711:8;;:24;:50;;;;;26753:8;;26739:11;:22;26711:50;26707:91;;;26779:13;;26768:8;:24;26707:91;26813:1;26809:5;;26804:409;26818:5;26816:1;:7;26804:409;;;26846:1;26844:3;;26839:190;26851:8;;26849:1;:10;26839:190;;;26887:18;;;;:15;:18;;;;;;;;;26958:29;;;;;;;-1:-1:-1;;;;;26958:29:0;;;26945:44;;:11;:44;;;;;;;26887:18;;26916:26;;;;;;26887:18;;-1:-1:-1;;26912:111:0;;;27014:1;26999:16;;26912:111;26861:4;26864:1;26861:4;;:::i;:::-;;;26839:190;;;27050:29;;;;:15;:29;;;;;;;;;27098:6;;-1:-1:-1;;;;;27050:29:0;;;27119:24;;;:11;:24;;;;;;;;27050:29;;-1:-1:-1;27085:59:0;;27098:6;;27050:29;;27085:12;:59::i;:::-;27162:1;27152:8;;:11;;;;;;;:::i;:::-;;;;-1:-1:-1;;27190:8:0;;27175:23;;27171:37;;;27201:5;;27171:37;26825:4;26828:1;26825:4;;:::i;:::-;;;26804:409;;;27224:26;27241:8;;27224:26;;;;23068:25:1;;23056:2;23041:18;;23023:76;27224:26:0;;;;;;;;26481:774;;;;;26437:818;:::o;29529:446::-;29587:18;29629:9;1222:1;29637;29629:9;:::i;:::-;-1:-1:-1;;;;;29618:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29618:21:0;;29611:28;;29648:6;29644:327;1222:1;29660;:10;29644:327;;;29693:20;29714:1;29693:23;;;;;;;;:::i;:::-;;;;;;;;;29683:4;29688:1;29683:7;;;;;;;;:::i;:::-;;;;;;:33;;;;;29742:31;:34;29774:1;29742:34;;;;;;;;;;;:61;29778:20;29799:1;29778:23;;;;;;;;:::i;:::-;;;;;;;;;29742:61;;;;;;;;;;;;29722:4;29737:1;1222;29727:11;;;;:::i;:::-;29722:17;;;;;;;;:::i;:::-;;;;;;;;;;;:81;;;;29831:28;;;;:25;:28;;;;;;-1:-1:-1;;;;;29831:34:0;;;;;;;;;29809:4;29857:1;29814:9;1222:1;29822;29814:9;:::i;:::-;:13;;;;:::i;:::-;29809:19;;;;;;;;:::i;:::-;;;;;;;;;;;:56;;;;29893:34;;;;:31;:34;;;;;;;29929:25;:28;;;;;-1:-1:-1;;;;;29929:34:0;;;;;;;;;;29893:72;;;;;;;;;;29871:4;;29925:1;;29876:9;;1222:1;;29876:9;:::i;:::-;:13;;;;:::i;:::-;29871:19;;;;;;;;:::i;:::-;;;;;;;;;;:94;29672:4;29675:1;29672:4;;:::i;:::-;;;29644:327;;;;29529:446;;;:::o;11487:115::-;11555:10;;-1:-1:-1;;;;;11555:10:0;11541;:24;11533:33;;;;;;11571:10;:26;;-1:-1:-1;;;;;;11571:26:0;-1:-1:-1;;;;;11571:26:0;;;;;;;;;;11487:115::o;26121:262::-;-1:-1:-1;;;;;26193:28:0;;;;;;:17;:28;;;;;;3070:15;26183:38;;:59;;;;-1:-1:-1;;;;;;26225:17:0;;;;;;:6;:17;;;;;;;;26183:59;26179:200;;;-1:-1:-1;;;;;26251:17:0;;26271:5;26251:17;;;:6;:17;;;;;:25;;-1:-1:-1;;26251:25:0;;;26282:42;;;;26300:17;:15;:17::i;:::-;;26282:42;26334:15;;-1:-1:-1;;;;;15273:32:1;;15255:51;;26334:15:0;;15243:2:1;15228:18;26334:15:0;15210:102:1;24388:1043:0;24569:15;24589:28;24626:6;24622:805;24636:8;:15;24634:1;:17;24622:805;;;24673:14;:28;24689:7;24697:1;24689:10;;;;;;;;:::i;:::-;;;;;;;24673:28;;;;;;;;;;;24664:37;;24717:8;24726:1;24717:11;;;;;;;;:::i;:::-;;;;;;;;;;;24738:16;;;;24717:11;;-1:-1:-1;24738:16:0;;:49;;;;;24763:9;:24;24774:8;24783:1;24774:11;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;24763:24:0;;;;;;;;;;;-1:-1:-1;24763:24:0;;;;24738:49;:107;;;;;24825:6;:20;;;24796:10;:25;24808:8;24817:1;24808:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24796:25:0;-1:-1:-1;;;;;24796:25:0;;;;;;;;;;;;;:49;;24738:107;:138;;;;-1:-1:-1;24855:21:0;;;;;;24854:22;24738:138;:571;;;;-1:-1:-1;24895:17:0;;;;;;24894:18;:216;;;;-1:-1:-1;24926:15:0;;;;;;;:20;:76;;;;-1:-1:-1;;;;;;24976:26:0;;;;;;:15;;;:26;;;;;;;;;24950:22;;;:19;;;:22;;;;;;;:52;;24926:76;24925:177;;;-1:-1:-1;25015:15:0;;;;;;:20;:85;;;;-1:-1:-1;;;;;;25070:30:0;;;;;;;:19;;;:30;;;;;;;;;25039:27;;;:24;;;:27;;;;;;;;;25070:30;;25039:61;;25015:85;24893:276;;;-1:-1:-1;25121:17:0;;;;;;:46;;;;-1:-1:-1;;;;;;25142:25:0;;;;;;:14;;;:25;;;;;;;;25121:46;24893:356;;;-1:-1:-1;;;;;;25223:26:0;;;;;;:15;;;:26;;;;;;;;24893:356;24734:688;;;25325:28;25332:7;25340:1;25332:10;;;;;;;;:::i;:::-;;;;;;;25345:7;25325:6;:28::i;:::-;25322:94;;;25367:41;25387:7;25395:1;25387:10;;;;;;;;:::i;:::-;;;;;;;25400:7;25367:41;;;;;;23278:25:1;;;-1:-1:-1;;;;;23339:32:1;23334:2;23319:18;;23312:60;23266:2;23251:18;;23233:145;25367:41:0;;;;;;;;25322:94;24653:4;24656:1;24653:4;;:::i;:::-;;;24622:805;;8304:129;8370:30;8382:9;8393:6;8370:11;:30::i;:::-;8405:23;8421:6;8405:15;:23::i;30840:173::-;30919:4;31002:1;30984:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;30974:32;;;;;;30966:1;30948:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;30938:32;;;;;;:68;30930:78;;30840:173;;;;:::o;5406:1176::-;5516:12;;-1:-1:-1;;;;;5516:12:0;5494:10;:35;5490:1088;;;5556:7;;-1:-1:-1;;;;;5540:24:0;;;5556:7;;5540:24;5537:131;;;5572:7;;5537:131;-1:-1:-1;;;;;5673:19:0;;;;;;:13;:19;;;;;:28;;5696:5;;5673:19;:28;;5696:5;;5673:28;:::i;:::-;;;;-1:-1:-1;;;;;;;5754:12:0;;5734:11;5754:12;;;:6;:12;;;;;;;;5751:541;;;5778:12;5774:212;1222:1;5796:6;:14;;;5774:212;;;5839:33;;;;;;;:25;:33;;;;;;;;-1:-1:-1;;;;;5839:39:0;;;;;;;;;;5886;;;:31;:39;;;;;:47;;;;;;;;:56;;5839:39;;-1:-1:-1;5937:5:0;;5886:47;;5839:33;5886:56;;5937:5;;5886:56;:::i;:::-;;;;-1:-1:-1;5950:28:0;;-1:-1:-1;5950:28:0;;;5971:6;5950:12;:28::i;:::-;5812:9;5820:1;5812:9;;:::i;:::-;;;5774:212;;;;5751:541;;;-1:-1:-1;;;;;6003:12:0;;;;;;:6;:12;;;;;:19;;-1:-1:-1;;6003:19:0;6018:4;6003:19;;;6029:257;1222:1;6051:6;:14;;;6029:257;;;6094:20;6115:6;6094:28;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6130:33;;;;;;:25;:33;;;;;;-1:-1:-1;;;;;6130:39:0;;;;;;;;;:48;;;6186:39;;;:31;:39;;;;;:47;;;;;;;;;:56;;6094:28;;-1:-1:-1;6237:5:0;;6186:47;;:56;;6237:5;;6186:56;:::i;:::-;;;;-1:-1:-1;6250:28:0;;-1:-1:-1;6250:28:0;;;6271:6;6250:12;:28::i;:::-;6067:9;6075:1;6067:9;;:::i;:::-;;;6029:257;;;;5751:541;6318:4;-1:-1:-1;;;;;6304:33:0;;6324:5;6331;;6304:33;;;;;;;;:::i;:::-;;;;;;;;6348:23;6374;6390:5;;6374:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6374:14:0;;-1:-1:-1;;;6374:23:0:i;:::-;6428:8;;6348:49;;-1:-1:-1;;;;;;6409:27:0;;;6428:8;;6409:27;6405:89;;6444:43;6458:4;6464:15;6481:5;6444:13;:43::i;:::-;6501:12;;6532:7;;6501:47;;-1:-1:-1;;;6501:47:0;;-1:-1:-1;;;;;6532:7:0;;;6501:47;;;15499:51:1;15566:18;;;15559:34;;;6501:12:0;;;:21;;15472:18:1;;6501:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5531:1023;;5490:1088;;7213:111;7277:44;7291:10;7303:9;7314:6;7277:13;:44::i;11287:171::-;11325:18;11345:15;11408:8;;11375:20;1193:1;11375:32;;;;;;;;:::i;:::-;;;;;;;;;:41;;;;:::i;:::-;11418:20;1161:1;11418:33;;;;;;;;:::i;:::-;;;;;;;;;11366:87;;;;11287:171;;:::o;27260:904::-;27326:14;27584:24;;;:14;:24;;;;;27622:8;;;;27651:15;;;;27684:12;;;;27713:11;;;;27747:17;;;;27780:16;;;;-1:-1:-1;;;;;27622:8:0;;;;27651:15;;27684:12;;27747:17;;27713:11;;;;;27780:16;;27450:29;;;;;;27747:17;-1:-1:-1;;;;;27821:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27821:29:0;;27803:47;;27880:1;:17;;;-1:-1:-1;;;;;27870:28:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27870:28:0;;27855:43;;27937:1;:17;;;-1:-1:-1;;;;;27923:32:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27923:32:0;;27903:52;;27975:6;27971:189;27990:1;:17;;;27987:1;:20;27971:189;;;28041:20;;;;:17;;;:20;;;;;;28020:18;;:15;;28059:1;;28020:18;;;;;;:::i;:::-;;;;;;:41;;;;;28085:1;:14;;:17;28100:1;28085:17;;;;;;;;;;;;28067:12;28080:1;28067:15;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;;;28131:22;;;;:19;;;:22;;;;;;;28108:20;;-1:-1:-1;;;;;28131:22:0;;;;28108:17;;28151:1;;28108:20;;;;;;:::i;:::-;-1:-1:-1;;;;;28108:45:0;;;:20;;;;;;;;;;;:45;28009:4;28012:1;28009:4;;:::i;:::-;;;27971:189;;;;27552:612;27260:904;;;;;;;;;;;:::o;29981:854::-;-1:-1:-1;;;;;30234:22:0;;30043:19;30234:22;;;:13;:22;;;;;;;;;30277:12;:21;;;;;;30317:10;:19;;;;;;30351:6;:15;;;;;;30384:9;:18;;;;;;30419:8;:17;;;;;;30456:11;:20;;;;;;;30489:13;;;;;;;;;;;30234:22;;30277:21;;30317:19;;30351:15;;;;;30384:18;;;;;30456:20;30189:19;;30489:13;;;;;;;;;;-1:-1:-1;30489:13:0;30481:21;;30513:10;30509:197;;;-1:-1:-1;;;;;30563:23:0;;;;;;:14;:23;;;;;;30542:18;;:44;;30563:23;30542:44;:::i;:::-;30531:5;30537:1;30531:8;;;;;;;;:::i;:::-;;;;;;:55;;;;;30695:4;30649:20;1092:1;30649:42;;;;;;;;:::i;:::-;;;;;;;;;;30630:6;;30618:28;;-1:-1:-1;;;;;30630:6:0;30638:7;30618:11;:28::i;:::-;:73;;;;:::i;:::-;:82;;;;:::i;:::-;30607:5;30613:1;30607:8;;;;;;;;:::i;:::-;;;;;;:93;;;;;30509:197;-1:-1:-1;;;;;30723:26:0;;;;;;:17;:26;;;;;;30712:8;;:5;;30718:1;;30712:8;;;;;;:::i;:::-;;;;;;:37;;;;;30765:16;:25;30782:7;-1:-1:-1;;;;;30765:25:0;-1:-1:-1;;;;;30765:25:0;;;;;;;;;;;;;30754:5;30760:1;30754:8;;;;;;;;:::i;:::-;;;;;;:36;;;;;30806:15;:24;30822:7;-1:-1:-1;;;;;30806:24:0;-1:-1:-1;;;;;30806:24:0;;;;;;;;;;;;;30795:5;30801:1;30795:8;;;;;;;;:::i;:::-;;;;;;:35;;;;;29981:854;;;;;;;;;:::o;23672:650::-;23858:28;23895:6;23891:427;23905:8;:15;23903:1;:17;23891:427;;;23945:14;:28;23961:7;23969:1;23961:10;;;;;;;;:::i;:::-;;;;;;;23945:28;;;;;;;;;;;23936:37;;23983:9;:24;23994:8;24003:1;23994:11;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;23983:24:0;;;;;;;;;;;-1:-1:-1;23983:24:0;;;;:64;;;;;24017:6;:15;;:30;24034:8;24043:1;24034:11;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;24017:30:0;;;;;;;;;;;-1:-1:-1;24017:30:0;;;;24016:31;23983:64;:122;;;;;24085:6;:20;;;24056:10;:25;24068:8;24077:1;24068:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;24056:25:0;-1:-1:-1;;;;;24056:25:0;;;;;;;;;;;;;:49;;23983:122;:204;;;;-1:-1:-1;24168:17:0;;;;:19;;24186:1;24168:19;:::i;:::-;24123:14;:28;24139:7;24147:1;24139:10;;;;;;;;:::i;:::-;;;;;;;24123:28;;;;;;;;;;;:42;;;:64;;;;:::i;:::-;3070:15;24114:73;23983:204;23979:334;;;24203:32;24210:7;24218:1;24210:10;;;;;;;;:::i;24203:32::-;24200:107;;;24250:49;24274:7;24282:1;24274:10;;;;;;;;:::i;:::-;;;;;;;24287:8;24296:1;24287:11;;;;;;;;:::i;:::-;;;;;;;24250:49;;;;;;23278:25:1;;;-1:-1:-1;;;;;23339:32:1;23334:2;23319:18;;23312:60;23266:2;23251:18;;23233:145;24250:49:0;;;;;;;;24200:107;23922:4;23925:1;23922:4;;:::i;:::-;;;23891:427;;31016:159;31081:4;31164:1;31146:21;;;;;;14618:19:1;;14662:2;14653:12;;14608:63;31146:21:0;;;;-1:-1:-1;;31146:21:0;;;;;;;;;31136:32;;31146:21;31136:32;;;;31110:21;;;14618:19:1;;;31136:32:0;14653:12:1;31110:21:0;14608:63:1;9843:713:0;9949:10;9932:14;10004;;;:6;:14;;;;;:21;;-1:-1:-1;;10004:21:0;10021:4;10004:21;;;9932:14;10030:522;1222:1;10046:6;:14;10030:522;;;10081:11;10093:6;10081:19;;;;;;;;:::i;:::-;;;;;;;10078:469;;;10125:15;10141:6;10125:23;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;10243:21:0;;;;;;:13;:21;;;;;;;10155:39;;;:31;:39;;;;;10196:25;:33;;;;;:41;;;;;;;;;;10155:84;;;;;;;;;:109;;10125:23;;-1:-1:-1;10243:21:0;;10155:84;;:109;;10243:21;;10155:109;:::i;:::-;;;;-1:-1:-1;;10271:33:0;;;;:25;:33;;;;;;;;-1:-1:-1;;;;;10271:41:0;;;;;;;;;:58;;;10397:13;:21;;;;;;10336:39;;;:31;:39;;;;;:57;;;;;;;;:82;;10397:21;;10336:57;;:82;;10397:21;;10336:82;:::i;:::-;;;;-1:-1:-1;;;;;;;10473:21:0;;;;;;:13;:21;;;;;;;;;;10430:65;;18300:51:1;;;18367:18;;;18360:34;;;18410:18;;;18403:34;;;18468:2;18453:18;;18446:34;10430:65:0;;;;;;18287:3:1;10430:65:0;;;10502:38;10516:6;10524:14;10502:12;:38::i;:::-;10062:9;10070:1;10062:9;;:::i;:::-;;;10030:522;;22213:322;22300:10;22267:22;22316:71;22332:5;:12;22328:1;:16;22316:71;;;22357:24;22364:5;22370:1;22364:8;;;;;;;;:::i;:::-;;;;;;;22374:6;22357;:24::i;:::-;22346:4;22349:1;22346:4;;:::i;:::-;;;22316:71;;;;22391:25;22409:6;22391:17;:25::i;:::-;-1:-1:-1;;;;;22432:16:0;;22421:8;22432:16;;;:8;:16;;;;;;;;;;22453:20;;;22483;;15499:51:1;;;15566:18;;;15559:34;;;22432:16:0;;22483:20;;15472:18:1;22483:20:0;;;;;;;22508:22;;-1:-1:-1;;;;;22508:15:0;;;:22;;;;;22525:3;;22508:22;;;;22525:3;22508:15;:22;;;;;;;;;;;;;;;;;;;16369:842;16433:17;16509:24;;;:14;:24;;;;;16630:8;;16452:20;;16509:24;16433:17;;;;;;;;-1:-1:-1;;;;;16619:20:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16619:20:0;-1:-1:-1;16647:17:0;;;;16610:29;;-1:-1:-1;16647:17:0;;16644:563;;;-1:-1:-1;16679:1:0;16671:531;16686:8;;16682:1;:12;16671:531;;;16727:18;;;;:15;:18;;;;;;;;;-1:-1:-1;;;;;16727:18:0;16756:27;;;:9;:27;;;;;;;16727:18;;-1:-1:-1;16756:27:0;;:83;;;;-1:-1:-1;16819:20:0;;;;-1:-1:-1;;;;;16787:28:0;;;;;;:10;:28;;;;;;:52;;16756:83;16752:444;;;-1:-1:-1;;;;;16865:29:0;;;;;;:11;:29;;;;;;16849:45;;;;:::i;:::-;;;16910:1;16906:5;;16902:286;16917:8;;16913:1;:12;16902:286;;;16952:18;;;;:15;:18;;;;;;;;;-1:-1:-1;;;;;16952:18:0;16983:19;;;:9;:19;;;;;;;16952:18;;-1:-1:-1;16983:19:0;;:67;;;;-1:-1:-1;17030:20:0;;;;-1:-1:-1;;;;;17006:20:0;;;;;;:10;:20;;;;;;:44;;16983:67;16979:201;;;-1:-1:-1;;;;;17064:32:0;;;;;;;:14;;;:32;;;;;;;;:42;;;;;;;;;;;;17061:110;;;-1:-1:-1;;;;;17131:29:0;;;;;;:11;:29;;;;;;17118:9;;:6;;17125:1;;17118:9;;;;;;:::i;:::-;;;;;;:42;;;;;;;:::i;:::-;;;-1:-1:-1;17061:110:0;16927:4;16930:1;16927:4;;:::i;:::-;;;16902:286;;;16696:4;16699:1;16696:4;;:::i;:::-;;;16671:531;;;16473:738;;;;;16369:842;;;:::o;3437:536::-;3516:21;3523:4;3529:7;3516:6;:21::i;:::-;-1:-1:-1;;;;;3542:17:0;;;;;;:11;:17;;;;;:27;;3563:6;;3542:17;:27;;3563:6;;3542:27;:::i;:::-;;;;-1:-1:-1;;;;;;;3574:12:0;;;;;;;:6;:12;;;;;;;;:21;;;;;;;;;;;:31;;3599:6;;3574:12;:31;;3599:6;;3574:31;:::i;:::-;;;;-1:-1:-1;;3623:6:0;;-1:-1:-1;;;;;3615:14:0;;;3623:6;;3615:14;3612:357;;;3636:37;3660:7;3668:4;3636:23;:37::i;:::-;3694:8;;-1:-1:-1;;;;;3683:19:0;;;3694:8;;3683:19;3679:285;;-1:-1:-1;;;;;3710:18:0;;3731:5;3710:18;;;:9;:18;;;;;;;;:26;;-1:-1:-1;;3710:26:0;;;3764:15;:24;;;;;;3828:13;;3764:24;;3731:5;3812:15;;3731:5;;3828:15;;3710:26;;3828:15;:::i;:::-;3812:32;;;;;;;;;;;;;;-1:-1:-1;3812:32:0;;;;3851:30;;;:15;:30;;;;;:37;;-1:-1:-1;;;;;;3851:37:0;-1:-1:-1;;;;;3812:32:0;;;3851:37;;;;;3895:21;;;:15;:21;;;;;;:35;;;3939:13;:18;;3812:32;;-1:-1:-1;3812:32:0;;3939:13;;-1:-1:-1;3939:18:0;;3812:32;;3939:18;:::i;:::-;;;;-1:-1:-1;;;;3437:536:0;;;:::o;3095:337::-;3171:21;3178:4;3184:7;3171:6;:21::i;:::-;-1:-1:-1;;;;;3197:17:0;;;;;;:11;:17;;;;;:27;;3218:6;;3197:17;:27;;3218:6;;3197:27;:::i;:::-;;;;-1:-1:-1;;;;;;;3229:12:0;;;;;;;:6;:12;;;;;;;;:21;;;;;;;;;;;:31;;3254:6;;3229:12;:31;;3254:6;;3229:31;:::i;:::-;;;;-1:-1:-1;;3278:6:0;;-1:-1:-1;;;;;3270:14:0;;;3278:6;;3270:14;3267:161;;;3291:38;3315:7;3323:5;3291:23;:38::i;:::-;3350:8;;-1:-1:-1;;;;;3339:19:0;;;3350:8;;3339:19;3335:88;;3383:1;3366:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;3391:18:0;;;;;;:9;:18;;;;;:25;;-1:-1:-1;;3391:25:0;3412:4;3391:25;;;3095:337;;;:::o;4319:643::-;4380:13;4396:26;4408:4;4414:7;4396:11;:26::i;:::-;-1:-1:-1;;;;;4458:22:0;;;;;;;:16;:22;;;;;;;;;4433:7;:13;;;;;:22;;;;;;;;;;:47;4498:6;4380:42;;-1:-1:-1;4498:6:0;;4490:14;4487:468;;;4511:16;4587:4;4541:20;1092:1;4541:42;;;;;;;;:::i;:::-;;;;;;;;;4530:8;:53;;;;:::i;:::-;:62;;;;:::i;:::-;-1:-1:-1;;;;;4598:17:0;;;;;;:8;:17;;;;;:32;;4511:81;;-1:-1:-1;4511:81:0;;4598:17;;;:32;;4511:81;;4598:32;:::i;:::-;;;;-1:-1:-1;;;;;;;4659:20:0;;4638:12;4659:20;;;:11;:20;;;;;;:22;4656:140;;-1:-1:-1;;;;;4740:20:0;;;;;;:11;:20;;;;;;-1:-1:-1;;;4700:22:0;4711:11;4700:8;:22;:::i;:::-;4699:38;;;;:::i;:::-;:61;;;;:::i;:::-;4689:71;;4656:140;;;-1:-1:-1;4788:1:0;4656:140;-1:-1:-1;;;;;4803:90:0;;;;;;:16;:90;;;;;:101;;4897:7;;4803:90;:101;;4897:7;;4803:101;:::i;:::-;;;;-1:-1:-1;4487:468:0;;-1:-1:-1;;;4487:468:0;;-1:-1:-1;;;;;4920:17:0;;;;;;:8;:17;;;;;:29;;4941:8;;4920:17;:29;;4941:8;;4920:29;:::i;:::-;;;;-1:-1:-1;;4375:587:0;4319:643;;:::o;5016:265::-;-1:-1:-1;;;;;5126:23:0;;5093:9;5126:23;;;:14;:23;;;;;;5105:18;;:44;;5126:23;5105:44;:::i;:::-;5180:18;;-1:-1:-1;;;;;5154:23:0;;;;;;:14;:23;;;;;:44;5093:56;-1:-1:-1;5203:36:0;;;;-1:-1:-1;;;;;5214:17:0;;;;;;:8;:17;;;;;:25;;5235:4;;5214:17;:25;;5235:4;;5214:25;:::i;:::-;;;;-1:-1:-1;;5203:36:0;5249:24;;;-1:-1:-1;;;;;15517:32:1;;15499:51;;15581:2;15566:18;;15559:34;;;5249:24:0;;15472:18:1;5249:24:0;15454:145:1;25487:596:0;25552:13;25602:24;;;:14;:24;;;;;25702:17;;;;;;:21;;25722:1;25702:21;;;25720:1;25702:21;25683:41;;:6;:17;;;:41;;;;:::i;:::-;25662:6;:20;;;:62;;;;:::i;:::-;-1:-1:-1;;;;;25634:25:0;;;;;;:16;:25;;;;;;:90;25631:431;;;-1:-1:-1;;;;;25735:18:0;;;;;;:9;:18;;;;;;;;25731:89;;;25775:6;;;-1:-1:-1;;;;;25792:20:0;;;;;:11;:20;;;;;;;25762:51;;25775:6;;;;25783:7;;25762:12;:51::i;:::-;-1:-1:-1;;;;;25827:15:0;;;;;;:6;:15;;;;;;;;:22;;-1:-1:-1;;25827:22:0;25845:4;25827:22;;;25883:20;;;;;25855:16;:25;;;;;:48;25947:36;;1128:1;;25947:36;;;;;;:::i;:::-;;;;;;;;;25938:6;3070:15;;3016:74;25938:6;:45;;;;:::i;:::-;-1:-1:-1;;;;;25909:26:0;;;;;;:17;:26;;;;;;;;;:74;;;25996:43;;15499:51:1;;;15566:18;;15559:34;;;;25996:43:0;;15472:18:1;25996:43:0;;;;;;;26052:4;26045:11;;;;;25631:431;-1:-1:-1;26073:5:0;;25487:596;-1:-1:-1;;;25487:596:0:o;31178:157::-;31311:2;31303:11;31296:20;;31178:157::o;7327:547::-;7430:6;;-1:-1:-1;;;;;7419:17:0;;;7430:6;;7419:17;;7411:26;;;;;;-1:-1:-1;;;;;7482:20:0;;;;;;:12;:20;;;;;;;;;7458:13;:21;;;;;;;:44;;7482:20;7458:44;:::i;:::-;7446:6;:58;;:80;;;;-1:-1:-1;;;;;;7509:17:0;;;;;;:6;:17;;;;;;;;7508:18;7446:80;:105;;;;-1:-1:-1;;;;;;7531:20:0;;;;;;:9;:20;;;;;;;;7530:21;7446:105;7442:427;;;-1:-1:-1;;;;;7559:20:0;;;;;;:12;:20;;;;;:30;;7583:6;;7559:20;:30;;7583:6;;7559:30;:::i;:::-;;;;-1:-1:-1;7595:36:0;;-1:-1:-1;7605:9:0;7616:6;7624;7595:9;:36::i;:::-;7644:40;;;-1:-1:-1;;;;;15862:15:1;;;15844:34;;15914:15;;15909:2;15894:18;;15887:43;15946:18;;;15939:34;;;7644:40:0;;15794:2:1;15779:18;7644:40:0;;;;;;;-1:-1:-1;;;;;7710:22:0;;;;;;;:14;:22;;;;;;;;:33;;;;;;;;;;;;7706:134;;-1:-1:-1;;;;;7751:19:0;;;;;;;:11;:19;;;;;;;;:35;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7751:35:0;;;;;;;;;7793:22;;;:14;:22;;;;;:33;;;;;;;;;;:40;;-1:-1:-1;;7793:40:0;;;;;;8010:289;7949:350;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:679::-;246:5;299:3;292:4;284:6;280:17;276:27;266:2;;317:1;314;307:12;266:2;353:6;340:20;379:4;403:60;419:43;459:2;419:43;:::i;:::-;403:60;:::i;:::-;485:3;509:2;504:3;497:15;537:2;532:3;528:12;521:19;;572:2;564:6;560:15;624:3;619:2;613;610:1;606:10;598:6;594:23;590:32;587:41;584:2;;;641:1;638;631:12;584:2;663:1;673:169;687:2;684:1;681:9;673:169;;;744:23;763:3;744:23;:::i;:::-;732:36;;788:12;;;;820;;;;705:1;698:9;673:169;;;-1:-1:-1;860:5:1;;256:615;-1:-1:-1;;;;;;;256:615:1:o;876:742::-;927:5;980:3;973:4;965:6;961:17;957:27;947:2;;998:1;995;988:12;947:2;1034:6;1021:20;1060:4;1084:60;1100:43;1140:2;1100:43;:::i;1084:60::-;1166:3;1190:2;1185:3;1178:15;1218:2;1213:3;1209:12;1202:19;;1253:2;1245:6;1241:15;1305:3;1300:2;1294;1291:1;1287:10;1279:6;1275:23;1271:32;1268:41;1265:2;;;1322:1;1319;1312:12;1265:2;1344:1;1354:235;1368:2;1365:1;1362:9;1354:235;;;1439:3;1426:17;1456:28;1478:5;1456:28;:::i;:::-;1497:18;;1535:12;;;;1567;;;;1386:1;1379:9;1354:235;;1623:672;1676:5;1729:3;1722:4;1714:6;1710:17;1706:27;1696:2;;1747:1;1744;1737:12;1696:2;1783:6;1770:20;1809:4;1833:60;1849:43;1889:2;1849:43;:::i;1833:60::-;1915:3;1939:2;1934:3;1927:15;1967:2;1962:3;1958:12;1951:19;;2002:2;1994:6;1990:15;2054:3;2049:2;2043;2040:1;2036:10;2028:6;2024:23;2020:32;2017:41;2014:2;;;2071:1;2068;2061:12;2014:2;2093:1;2103:163;2117:2;2114:1;2111:9;2103:163;;;2174:17;;2162:30;;2212:12;;;;2244;;;;2135:1;2128:9;2103:163;;2300:531;2343:5;2396:3;2389:4;2381:6;2377:17;2373:27;2363:2;;2414:1;2411;2404:12;2363:2;2450:6;2437:20;-1:-1:-1;;;;;2472:2:1;2469:26;2466:2;;;2498:18;;:::i;:::-;2542:55;2585:2;2566:13;;-1:-1:-1;;2562:27:1;2591:4;2558:38;2542:55;:::i;:::-;2622:2;2613:7;2606:19;2668:3;2661:4;2656:2;2648:6;2644:15;2640:26;2637:35;2634:2;;;2685:1;2682;2675:12;2634:2;2750;2743:4;2735:6;2731:17;2724:4;2715:7;2711:18;2698:55;2798:1;2773:16;;;2791:4;2769:27;2762:38;;;;2777:7;2353:478;-1:-1:-1;;;2353:478:1:o;2836:186::-;2895:6;2948:2;2936:9;2927:7;2923:23;2919:32;2916:2;;;2964:1;2961;2954:12;2916:2;2987:29;3006:9;2987:29;:::i;:::-;2977:39;2906:116;-1:-1:-1;;;2906:116:1:o;3027:260::-;3095:6;3103;3156:2;3144:9;3135:7;3131:23;3127:32;3124:2;;;3172:1;3169;3162:12;3124:2;3195:29;3214:9;3195:29;:::i;:::-;3185:39;;3243:38;3277:2;3266:9;3262:18;3243:38;:::i;:::-;3233:48;;3114:173;;;;;:::o;3292:315::-;3357:6;3365;3418:2;3406:9;3397:7;3393:23;3389:32;3386:2;;;3434:1;3431;3424:12;3386:2;3457:29;3476:9;3457:29;:::i;:::-;3447:39;;3536:2;3525:9;3521:18;3508:32;3549:28;3571:5;3549:28;:::i;:::-;3596:5;3586:15;;;3376:231;;;;;:::o;3612:254::-;3680:6;3688;3741:2;3729:9;3720:7;3716:23;3712:32;3709:2;;;3757:1;3754;3747:12;3709:2;3780:29;3799:9;3780:29;:::i;:::-;3770:39;3856:2;3841:18;;;;3828:32;;-1:-1:-1;;;3699:167:1:o;3871:733::-;3959:6;3967;3975;3983;4036:2;4024:9;4015:7;4011:23;4007:32;4004:2;;;4052:1;4049;4042:12;4004:2;4075:29;4094:9;4075:29;:::i;:::-;4065:39;;4151:2;4140:9;4136:18;4123:32;4113:42;;4206:2;4195:9;4191:18;4178:32;-1:-1:-1;;;;;4270:2:1;4262:6;4259:14;4256:2;;;4286:1;4283;4276:12;4256:2;4324:6;4313:9;4309:22;4299:32;;4369:7;4362:4;4358:2;4354:13;4350:27;4340:2;;4391:1;4388;4381:12;4340:2;4431;4418:16;4457:2;4449:6;4446:14;4443:2;;;4473:1;4470;4463:12;4443:2;4518:7;4513:2;4504:6;4500:2;4496:15;4492:24;4489:37;4486:2;;;4539:1;4536;4529:12;4486:2;3994:610;;;;-1:-1:-1;;4570:2:1;4562:11;;-1:-1:-1;;;3994:610:1:o;4609:348::-;4693:6;4746:2;4734:9;4725:7;4721:23;4717:32;4714:2;;;4762:1;4759;4752:12;4714:2;4802:9;4789:23;-1:-1:-1;;;;;4827:6:1;4824:30;4821:2;;;4867:1;4864;4857:12;4821:2;4890:61;4943:7;4934:6;4923:9;4919:22;4890:61;:::i;4962:588::-;5077:6;5085;5138:2;5126:9;5117:7;5113:23;5109:32;5106:2;;;5154:1;5151;5144:12;5106:2;5194:9;5181:23;-1:-1:-1;;;;;5264:2:1;5256:6;5253:14;5250:2;;;5280:1;5277;5270:12;5250:2;5303:58;5353:7;5344:6;5333:9;5329:22;5303:58;:::i;:::-;5293:68;;5414:2;5403:9;5399:18;5386:32;5370:48;;5443:2;5433:8;5430:16;5427:2;;;5459:1;5456;5449:12;5427:2;;5482:62;5536:7;5525:8;5514:9;5510:24;5482:62;:::i;:::-;5472:72;;;5096:454;;;;;:::o;5555:347::-;5639:6;5692:2;5680:9;5671:7;5667:23;5663:32;5660:2;;;5708:1;5705;5698:12;5660:2;5748:9;5735:23;-1:-1:-1;;;;;5773:6:1;5770:30;5767:2;;;5813:1;5810;5803:12;5767:2;5836:60;5888:7;5879:6;5868:9;5864:22;5836:60;:::i;5907:594::-;6025:6;6033;6086:2;6074:9;6065:7;6061:23;6057:32;6054:2;;;6102:1;6099;6092:12;6054:2;6142:9;6129:23;-1:-1:-1;;;;;6212:2:1;6204:6;6201:14;6198:2;;;6228:1;6225;6218:12;6198:2;6251:60;6303:7;6294:6;6283:9;6279:22;6251:60;:::i;:::-;6241:70;;6364:2;6353:9;6349:18;6336:32;6320:48;;6393:2;6383:8;6380:16;6377:2;;;6409:1;6406;6399:12;6377:2;;6432:63;6487:7;6476:8;6465:9;6461:24;6432:63;:::i;6506:814::-;6655:6;6663;6671;6724:2;6712:9;6703:7;6699:23;6695:32;6692:2;;;6740:1;6737;6730:12;6692:2;6780:9;6767:23;-1:-1:-1;;;;;6850:2:1;6842:6;6839:14;6836:2;;;6866:1;6863;6856:12;6836:2;6889:60;6941:7;6932:6;6921:9;6917:22;6889:60;:::i;:::-;6879:70;;7002:2;6991:9;6987:18;6974:32;6958:48;;7031:2;7021:8;7018:16;7015:2;;;7047:1;7044;7037:12;7015:2;7070:63;7125:7;7114:8;7103:9;7099:24;7070:63;:::i;:::-;7060:73;;7186:2;7175:9;7171:18;7158:32;7142:48;;7215:2;7205:8;7202:16;7199:2;;;7231:1;7228;7221:12;7199:2;;7254:60;7306:7;7295:8;7284:9;7280:24;7254:60;:::i;:::-;7244:70;;;6682:638;;;;;:::o;7325:1265::-;7541:6;7549;7557;7565;7573;7626:3;7614:9;7605:7;7601:23;7597:33;7594:2;;;7643:1;7640;7633:12;7594:2;7683:9;7670:23;-1:-1:-1;;;;;7753:2:1;7745:6;7742:14;7739:2;;;7769:1;7766;7759:12;7739:2;7792:60;7844:7;7835:6;7824:9;7820:22;7792:60;:::i;:::-;7782:70;;7905:2;7894:9;7890:18;7877:32;7861:48;;7934:2;7924:8;7921:16;7918:2;;;7950:1;7947;7940:12;7918:2;7973:60;8025:7;8014:8;8003:9;7999:24;7973:60;:::i;:::-;7963:70;;8086:2;8075:9;8071:18;8058:32;8042:48;;8115:2;8105:8;8102:16;8099:2;;;8131:1;8128;8121:12;8099:2;8154:62;8208:7;8197:8;8186:9;8182:24;8154:62;:::i;:::-;8144:72;;8269:2;8258:9;8254:18;8241:32;8225:48;;8298:2;8288:8;8285:16;8282:2;;;8314:1;8311;8304:12;8282:2;8337:63;8392:7;8381:8;8370:9;8366:24;8337:63;:::i;:::-;8327:73;;8453:3;8442:9;8438:19;8425:33;8409:49;;8483:2;8473:8;8470:16;8467:2;;;8499:1;8496;8489:12;8467:2;;8522:62;8576:7;8565:8;8554:9;8550:24;8522:62;:::i;:::-;8512:72;;;7584:1006;;;;;;;;:::o;8595:1148::-;8713:6;8721;8774:2;8762:9;8753:7;8749:23;8745:32;8742:2;;;8790:1;8787;8780:12;8742:2;8830:9;8817:23;-1:-1:-1;;;;;8900:2:1;8892:6;8889:14;8886:2;;;8916:1;8913;8906:12;8886:2;8939:60;8991:7;8982:6;8971:9;8967:22;8939:60;:::i;:::-;8929:70;;9018:2;9008:12;;9073:2;9062:9;9058:18;9045:32;9102:2;9092:8;9089:16;9086:2;;;9118:1;9115;9108:12;9086:2;9141:24;;;-1:-1:-1;9196:4:1;9188:13;;9184:27;-1:-1:-1;9174:2:1;;9225:1;9222;9215:12;9174:2;9261;9248:16;9284:60;9300:43;9340:2;9300:43;:::i;9284:60::-;9366:3;9390:2;9385:3;9378:15;9418:2;9413:3;9409:12;9402:19;;9449:2;9445;9441:11;9497:7;9492:2;9486;9483:1;9479:10;9475:2;9471:19;9467:28;9464:41;9461:2;;;9518:1;9515;9508:12;9461:2;9540:1;9531:10;;9550:163;9564:2;9561:1;9558:9;9550:163;;;9621:17;;9609:30;;9582:1;9575:9;;;;;9659:12;;;;9691;;9550:163;;;9554:3;9732:5;9722:15;;;;;;;8732:1011;;;;;:::o;9748:245::-;9815:6;9868:2;9856:9;9847:7;9843:23;9839:32;9836:2;;;9884:1;9881;9874:12;9836:2;9916:9;9910:16;9935:28;9957:5;9935:28;:::i;9998:315::-;10063:6;10071;10124:2;10112:9;10103:7;10099:23;10095:32;10092:2;;;10140:1;10137;10130:12;10092:2;10179:9;10166:23;10198:28;10220:5;10198:28;:::i;10318:248::-;10386:6;10394;10447:2;10435:9;10426:7;10422:23;10418:32;10415:2;;;10463:1;10460;10453:12;10415:2;-1:-1:-1;;10486:23:1;;;10556:2;10541:18;;;10528:32;;-1:-1:-1;10405:161:1:o;10571:543::-;10659:6;10667;10720:2;10708:9;10699:7;10695:23;10691:32;10688:2;;;10736:1;10733;10726:12;10688:2;10776:9;10763:23;-1:-1:-1;;;;;10846:2:1;10838:6;10835:14;10832:2;;;10862:1;10859;10852:12;10832:2;10885:50;10927:7;10918:6;10907:9;10903:22;10885:50;:::i;:::-;10875:60;;10988:2;10977:9;10973:18;10960:32;10944:48;;11017:2;11007:8;11004:16;11001:2;;;11033:1;11030;11023:12;11001:2;;11056:52;11100:7;11089:8;11078:9;11074:24;11056:52;:::i;11119:180::-;11178:6;11231:2;11219:9;11210:7;11206:23;11202:32;11199:2;;;11247:1;11244;11237:12;11199:2;-1:-1:-1;11270:23:1;;11189:110;-1:-1:-1;11189:110:1:o;11304:184::-;11374:6;11427:2;11415:9;11406:7;11402:23;11398:32;11395:2;;;11443:1;11440;11433:12;11395:2;-1:-1:-1;11466:16:1;;11385:103;-1:-1:-1;11385:103:1:o;11493:254::-;11561:6;11569;11622:2;11610:9;11601:7;11597:23;11593:32;11590:2;;;11638:1;11635;11628:12;11590:2;11674:9;11661:23;11651:33;;11703:38;11737:2;11726:9;11722:18;11703:38;:::i;12005:404::-;12068:6;12076;12129:2;12117:9;12108:7;12104:23;12100:32;12097:2;;;12145:1;12142;12135:12;12097:2;12184:9;12171:23;12234:4;12227:5;12223:16;12216:5;12213:27;12203:2;;12254:1;12251;12244:12;12414:461;12467:3;12505:5;12499:12;12532:6;12527:3;12520:19;12558:4;12587:2;12582:3;12578:12;12571:19;;12624:2;12617:5;12613:14;12645:1;12655:195;12669:6;12666:1;12663:13;12655:195;;;12734:13;;-1:-1:-1;;;;;12730:39:1;12718:52;;12790:12;;;;12825:15;;;;12766:1;12684:9;12655:195;;;-1:-1:-1;12866:3:1;;12475:400;-1:-1:-1;;;;;12475:400:1:o;12880:448::-;12930:3;12968:5;12962:12;12995:6;12990:3;12983:19;13021:4;13050:2;13045:3;13041:12;13034:19;;13087:2;13080:5;13076:14;13108:1;13118:185;13132:6;13129:1;13126:13;13118:185;;;13207:13;;13200:21;13193:29;13181:42;;13243:12;;;;13278:15;;;;13154:1;13147:9;13118:185;;13333:434;13385:3;13423:5;13417:12;13450:6;13445:3;13438:19;13476:4;13505:2;13500:3;13496:12;13489:19;;13542:2;13535:5;13531:14;13563:1;13573:169;13587:6;13584:1;13581:13;13573:169;;;13648:13;;13636:26;;13682:12;;;;13717:15;;;;13609:1;13602:9;13573:169;;14676:428;14807:3;14845:6;14839:13;14870:1;14880:129;14894:6;14891:1;14888:13;14880:129;;;14992:4;14976:14;;;14972:25;;14966:32;14953:11;;;14946:53;14909:12;14880:129;;;15027:6;15024:1;15021:13;15018:2;;;15062:1;15053:6;15048:3;15044:16;15037:27;15018:2;-1:-1:-1;15082:16:1;;;;;14815:289;-1:-1:-1;;14815:289:1:o;18491:1164::-;18943:4;18972:3;19031:1;19027;19022:3;19018:11;19014:19;19006:6;19002:32;18991:9;18984:51;19071:6;19066:2;19055:9;19051:18;19044:34;19114:6;19109:2;19098:9;19094:18;19087:34;19157:6;19152:2;19141:9;19137:18;19130:34;19215:6;19208:14;19201:22;19195:3;19184:9;19180:19;19173:51;19275:6;19268:14;19261:22;19255:3;19244:9;19240:19;19233:51;19321:2;19315:3;19304:9;19300:19;19293:31;19347:55;19398:2;19387:9;19383:18;19375:6;19347:55;:::i;:::-;19333:69;;19451:9;19443:6;19439:22;19433:3;19422:9;19418:19;19411:51;19485:43;19521:6;19513;19485:43;:::i;:::-;19471:57;;19577:9;19569:6;19565:22;19559:3;19548:9;19544:19;19537:51;19605:44;19642:6;19634;19605:44;:::i;:::-;19597:52;18952:703;-1:-1:-1;;;;;;;;;;;;18952:703:1:o;20315:1692::-;20991:4;21020:3;21050:2;21039:9;21032:21;21076:56;21128:2;21117:9;21113:18;21105:6;21076:56;:::i;:::-;21062:70;;21180:9;21172:6;21168:22;21163:2;21152:9;21148:18;21141:50;21214:43;21250:6;21242;21214:43;:::i;:::-;21200:57;;21305:9;21297:6;21293:22;21288:2;21277:9;21273:18;21266:50;21339:43;21375:6;21367;21339:43;:::i;:::-;21325:57;;21430:9;21422:6;21418:22;21413:2;21402:9;21398:18;21391:50;21464:43;21500:6;21492;21464:43;:::i;:::-;21450:57;;21556:9;21548:6;21544:22;21538:3;21527:9;21523:19;21516:51;21590:43;21626:6;21618;21590:43;:::i;:::-;21576:57;;21682:9;21674:6;21670:22;21664:3;21653:9;21649:19;21642:51;21716:41;21750:6;21742;21716:41;:::i;:::-;21702:55;;21806:9;21798:6;21794:22;21788:3;21777:9;21773:19;21766:51;21840:41;21874:6;21866;21840:41;:::i;:::-;21826:55;;21930:9;21922:6;21918:22;21912:3;21901:9;21897:19;21890:51;21958:43;21994:6;21986;21958:43;:::i;:::-;21950:51;21000:1007;-1:-1:-1;;;;;;;;;;;21000:1007:1:o;22012:260::-;22191:2;22180:9;22173:21;22154:4;22211:55;22262:2;22251:9;22247:18;22239:6;22211:55;:::i;23383:332::-;23590:6;23579:9;23572:25;23633:2;23628;23617:9;23613:18;23606:30;23553:4;23653:56;23705:2;23694:9;23690:18;23682:6;23653:56;:::i;:::-;23645:64;23562:153;-1:-1:-1;;;;23562:153:1:o;23720:413::-;23949:6;23938:9;23931:25;24006:6;23999:14;23992:22;23987:2;23976:9;23972:18;23965:50;24051:2;24046;24035:9;24031:18;24024:30;23912:4;24071:56;24123:2;24112:9;24108:18;24100:6;24071:56;:::i;:::-;24063:64;23921:212;-1:-1:-1;;;;;23921:212:1:o;24138:410::-;24365:6;24354:9;24347:25;24422:6;24415:14;24408:22;24403:2;24392:9;24388:18;24381:50;24467:2;24462;24451:9;24447:18;24440:30;24328:4;24487:55;24538:2;24527:9;24523:18;24515:6;24487:55;:::i;24553:690::-;24888:6;24877:9;24870:25;24945:6;24938:14;24931:22;24926:2;24915:9;24911:18;24904:50;24990:6;24985:2;24974:9;24970:18;24963:34;25033:3;25028:2;25017:9;25013:18;25006:31;24851:4;25060:56;25111:3;25100:9;25096:19;25088:6;25060:56;:::i;:::-;25165:9;25157:6;25153:22;25147:3;25136:9;25132:19;25125:51;25193:44;25230:6;25222;25193:44;:::i;:::-;25185:52;24860:383;-1:-1:-1;;;;;;;;24860:383:1:o;25248:687::-;25581:6;25570:9;25563:25;25638:6;25631:14;25624:22;25619:2;25608:9;25604:18;25597:50;25683:6;25678:2;25667:9;25663:18;25656:34;25726:3;25721:2;25710:9;25706:18;25699:31;25544:4;25753:56;25804:3;25793:9;25789:19;25781:6;25753:56;:::i;:::-;25858:9;25850:6;25846:22;25840:3;25829:9;25825:19;25818:51;25886:43;25922:6;25914;25886:43;:::i;25940:459::-;26125:6;26114:9;26107:25;26168:2;26163;26152:9;26148:18;26141:30;26207:6;26202:2;26191:9;26187:18;26180:34;26264:6;26256;26251:2;26240:9;26236:18;26223:48;26320:1;26291:22;;;26315:2;26287:31;;;26280:42;;;;26383:2;26362:15;;;-1:-1:-1;;26358:29:1;26343:45;26339:54;;26097:302;-1:-1:-1;;26097:302:1:o;26657:803::-;26983:4;27012:3;27042:6;27031:9;27024:25;27085:6;27080:2;27069:9;27065:18;27058:34;27128:6;27123:2;27112:9;27108:18;27101:34;27185:6;27178:14;27171:22;27166:2;27155:9;27151:18;27144:50;27245:6;27238:14;27231:22;27225:3;27214:9;27210:19;27203:51;27291:6;27285:3;27274:9;27270:19;27263:35;27335:6;27329:3;27318:9;27314:19;27307:35;27379:2;27373:3;27362:9;27358:19;27351:31;27399:55;27450:2;27439:9;27435:18;27427:6;27399:55;:::i;27465:275::-;27536:2;27530:9;27601:2;27582:13;;-1:-1:-1;;27578:27:1;27566:40;;-1:-1:-1;;;;;27621:34:1;;27657:22;;;27618:62;27615:2;;;27683:18;;:::i;:::-;27719:2;27712:22;27510:230;;-1:-1:-1;27510:230:1:o;27745:183::-;27805:4;-1:-1:-1;;;;;27830:6:1;27827:30;27824:2;;;27860:18;;:::i;:::-;-1:-1:-1;27905:1:1;27901:14;27917:4;27897:25;;27814:114::o;27933:128::-;27973:3;28004:1;28000:6;27997:1;27994:13;27991:2;;;28010:18;;:::i;:::-;-1:-1:-1;28046:9:1;;27981:80::o;28066:204::-;28104:3;28140:4;28137:1;28133:12;28172:4;28169:1;28165:12;28207:3;28201:4;28197:14;28192:3;28189:23;28186:2;;;28215:18;;:::i;:::-;28251:13;;28112:158;-1:-1:-1;;;28112:158:1:o;28275:217::-;28315:1;28341;28331:2;;28385:10;28380:3;28376:20;28373:1;28366:31;28420:4;28417:1;28410:15;28448:4;28445:1;28438:15;28331:2;-1:-1:-1;28477:9:1;;28321:171::o;28497:168::-;28537:7;28603:1;28599;28595:6;28591:14;28588:1;28585:21;28580:1;28573:9;28566:17;28562:45;28559:2;;;28610:18;;:::i;:::-;-1:-1:-1;28650:9:1;;28549:116::o;28670:125::-;28710:4;28738:1;28735;28732:8;28729:2;;;28743:18;;:::i;:::-;-1:-1:-1;28780:9:1;;28719:76::o;28800:135::-;28839:3;-1:-1:-1;;28860:17:1;;28857:2;;;28880:18;;:::i;:::-;-1:-1:-1;28927:1:1;28916:13;;28847:88::o;28940:127::-;29001:10;28996:3;28992:20;28989:1;28982:31;29032:4;29029:1;29022:15;29056:4;29053:1;29046:15;29072:127;29133:10;29128:3;29124:20;29121:1;29114:31;29164:4;29161:1;29154:15;29188:4;29185:1;29178:15;29204:127;29265:10;29260:3;29256:20;29253:1;29246:31;29296:4;29293:1;29286:15;29320:4;29317:1;29310:15;29336:118;29422:5;29415:13;29408:21;29401:5;29398:32;29388:2;;29444:1;29441;29434:12

Swarm Source

ipfs://c386c167846cc81c78650063ee28b1e5a82c4292215ebe251ed685d8412c147c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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