Contract 0x4710736eB86F54898A3f49638Dbde077573b7395

Contract Overview

Balance:
0.0001 Ether
Txn Hash
Method
Block
From
To
Value
0xd4b55351daf10e04e6222b015b2c032ce815a56797e4e1fe77948a2d3f320288Set Decision95206632021-10-24 10:00:06255 days 9 hrs ago0xa9b09467445558b582eb67332ca9a1f15eac0ae6 IN  0x4710736eb86f54898a3f49638dbde077573b73950 Ether0.00010086 1
0x41315e2c03389c8bc7a1eafcf35dd8d970c132e9ab5b5cba8125869210cd8e94Disclose Proof95206562021-10-24 9:58:21255 days 9 hrs ago0x331b6804031b8e8c1609d03cbdecc26c587b3e97 IN  0x4710736eb86f54898a3f49638dbde077573b73950 Ether0.000173 1
0x65b71038b0a6a2f0ee95cb95314676069c1dc461f08af9c66031babbd4943601Disclose Proof95206452021-10-24 9:55:36255 days 9 hrs ago0x331b6804031b8e8c1609d03cbdecc26c587b3e97 IN  0x4710736eb86f54898a3f49638dbde077573b73950 Ether0.0002553 1.5
0x66590bfdee9b199ef23641edb5f808f3449c96edce12fc20a284fd1f298092eeDisclose Proof95206432021-10-24 9:55:06255 days 9 hrs ago0xf7f6d6fbbc3ccd5149be91edeccf519834b1530f IN  0x4710736eb86f54898a3f49638dbde077573b73950 Ether0.00007348 1
0x086a55feae1666f1ff59615794a4e8eb1951a4db80870d05fa4b2646156fa7deAccept Case95206402021-10-24 9:54:21255 days 9 hrs ago0xf7f6d6fbbc3ccd5149be91edeccf519834b1530f IN  0x4710736eb86f54898a3f49638dbde077573b73950.000001 Ether0.00014987 1.5
0x7be0c0373ee4a2586a35551d44a1e8fa5b0c31334e9414bf47755f290b6fd8eeCreate Case95206362021-10-24 9:53:21255 days 9 hrs ago0x331b6804031b8e8c1609d03cbdecc26c587b3e97 IN  0x4710736eb86f54898a3f49638dbde077573b73950.000001 Ether0.00268499 1.5
0xbbefbf338b73d99d9d8c7189eef33b1a01cfe227f1d511cc8a8c620b32e33eccRegister Judge95206282021-10-24 9:51:21255 days 9 hrs ago0xa9b09467445558b582eb67332ca9a1f15eac0ae6 IN  0x4710736eb86f54898a3f49638dbde077573b73950.0001 Ether0.00013467 1
0xd606ee9f993f41bedce20f03a550e40068940e332ef214c424b28c1260b184e10x6080604095205892021-10-24 9:41:36255 days 9 hrs ago0xa9b09467445558b582eb67332ca9a1f15eac0ae6 IN  Contract Creation0 Ether0.0340060310
[ Download CSV Export 
Latest 21 internal transactions
Parent Txn Hash Block From To Value
0xd4b55351daf10e04e6222b015b2c032ce815a56797e4e1fe77948a2d3f32028895206632021-10-24 10:00:06255 days 9 hrs ago 0x8f9c1091048f36f9f259b019679591122775658e 0x4710736eb86f54898a3f49638dbde077573b73950 Ether
0xd4b55351daf10e04e6222b015b2c032ce815a56797e4e1fe77948a2d3f32028895206632021-10-24 10:00:06255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0xd4b55351daf10e04e6222b015b2c032ce815a56797e4e1fe77948a2d3f32028895206632021-10-24 10:00:06255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x41315e2c03389c8bc7a1eafcf35dd8d970c132e9ab5b5cba8125869210cd8e9495206562021-10-24 9:58:21255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x41315e2c03389c8bc7a1eafcf35dd8d970c132e9ab5b5cba8125869210cd8e9495206562021-10-24 9:58:21255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x41315e2c03389c8bc7a1eafcf35dd8d970c132e9ab5b5cba8125869210cd8e9495206562021-10-24 9:58:21255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x41315e2c03389c8bc7a1eafcf35dd8d970c132e9ab5b5cba8125869210cd8e9495206562021-10-24 9:58:21255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x41315e2c03389c8bc7a1eafcf35dd8d970c132e9ab5b5cba8125869210cd8e9495206562021-10-24 9:58:21255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x41315e2c03389c8bc7a1eafcf35dd8d970c132e9ab5b5cba8125869210cd8e9495206562021-10-24 9:58:21255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x65b71038b0a6a2f0ee95cb95314676069c1dc461f08af9c66031babbd494360195206452021-10-24 9:55:36255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x65b71038b0a6a2f0ee95cb95314676069c1dc461f08af9c66031babbd494360195206452021-10-24 9:55:36255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x65b71038b0a6a2f0ee95cb95314676069c1dc461f08af9c66031babbd494360195206452021-10-24 9:55:36255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x65b71038b0a6a2f0ee95cb95314676069c1dc461f08af9c66031babbd494360195206452021-10-24 9:55:36255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x65b71038b0a6a2f0ee95cb95314676069c1dc461f08af9c66031babbd494360195206452021-10-24 9:55:36255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x66590bfdee9b199ef23641edb5f808f3449c96edce12fc20a284fd1f298092ee95206432021-10-24 9:55:06255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x66590bfdee9b199ef23641edb5f808f3449c96edce12fc20a284fd1f298092ee95206432021-10-24 9:55:06255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x66590bfdee9b199ef23641edb5f808f3449c96edce12fc20a284fd1f298092ee95206432021-10-24 9:55:06255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x66590bfdee9b199ef23641edb5f808f3449c96edce12fc20a284fd1f298092ee95206432021-10-24 9:55:06255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x086a55feae1666f1ff59615794a4e8eb1951a4db80870d05fa4b2646156fa7de95206402021-10-24 9:54:21255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0.000001 Ether
0x086a55feae1666f1ff59615794a4e8eb1951a4db80870d05fa4b2646156fa7de95206402021-10-24 9:54:21255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395 0x8f9c1091048f36f9f259b019679591122775658e0 Ether
0x7be0c0373ee4a2586a35551d44a1e8fa5b0c31334e9414bf47755f290b6fd8ee95206362021-10-24 9:53:21255 days 9 hrs ago 0x4710736eb86f54898a3f49638dbde077573b7395  Contract Creation0.000001 Ether
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xdA0c294cA6EE9584Eba52Cd58C2de1c3e966B65A

Contract Name:
CryptoJudges

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-24
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

interface IJudgeManager {
    function reportGood(address jugde) external;
    function reportBad(address jugde) external;
}

struct CaseParticipant {
	address addr;
	bytes32 proofHash;
	string proof;
	uint collateral;
}

enum CaseStates {
	Undefined,
	Requested,
	Accepted,
	DisclosingProofs,
	Judging,
	Won,
	Lost,
	Aborted,
	Closed
}

struct CaseData {
	uint caseId;
	CaseParticipant requester;	
	CaseParticipant opponent;
	address[] judges;
	uint judgesRequired;
	string description;

	CaseStates state;
	uint tally;
	uint votes;
	uint baseCollateral;
	uint expiration;
}

contract Case {
	uint constant STEP_EXPIRATION_TIME = 10 minutes; //1 days;
	uint constant JUDGE_CUT_DENOMINATOR = 100000; // 100%
	uint constant JUDGE_CUT = 1000; // 1%

	CaseData data;
	
	mapping (address => bool) isJudgeVoteRequired;

	IJudgeManager judges;

	event CaseRequested(address indexed requester, address indexed opponent);
	event CaseAccepted(address indexed requester, address indexed opponent);
	event JudgeAssigned(address indexed judge, uint caseId);
	event CaseAborted();
	event CaseClosed();

	constructor(IJudgeManager judgesContract, uint caseId, address requesterAddress, address opponentAddress, string memory description, bytes32 proofHash, uint collateral) payable {
		require(msg.value == collateral, "Invalid collateral provided");

		judges = judgesContract;
		data = CaseData(
			caseId,
			CaseParticipant(requesterAddress, proofHash, "", collateral),
			CaseParticipant(opponentAddress, "", "", 0),
			new address[](0),
			1,
			description,
			CaseStates.Requested,
			0,
			0,
			collateral,
			block.timestamp + STEP_EXPIRATION_TIME
		);

		emit CaseRequested(requesterAddress, opponentAddress);
	}

	function getCaseData() public view returns (CaseData memory) {
		return data;
	}

	function isExpired() public view returns (bool) {
		return data.expiration < block.timestamp;
	}

	function isRequester(address addr) public view returns (bool) {
		return data.requester.addr == addr;
	}
	
	function isOpponent(address addr) public view returns (bool) {
		return data.opponent.addr == addr;
	}

	function isJudge(address addr) public view returns (bool) {
		for (uint256 index = 0; index < data.judges.length; index++) {
			if (data.judges[index] == addr) {
				return true;
			}
		}
		return false;
	}

	function needsJudges() public view returns (bool) {
		return data.state == CaseStates.Judging && data.judges.length < data.judgesRequired;
	}

	modifier onlyJudgesContract {
		require(msg.sender == address(judges), "Invalid function call");
		_;
	}

	modifier handlesExpired {
		if (isExpired()) {
			handleExpiredCase();
		} else {
			_;
		}
	}

	modifier bumpsExpiration {
		_;
		data.expiration = block.timestamp + STEP_EXPIRATION_TIME;
	}

	function acceptCase(bytes32 proofHash) public payable handlesExpired bumpsExpiration onlyJudgesContract {
		require(data.state == CaseStates.Requested);
		require(data.baseCollateral == msg.value, "Provide the right amount of collateral");

		data.opponent.proofHash = proofHash;
		data.opponent.collateral = data.baseCollateral;
		data.state = CaseStates.Accepted;

		emit CaseAccepted(data.requester.addr, data.opponent.addr);
	}

	function discloseRequesterProof(string calldata proof) public handlesExpired bumpsExpiration onlyJudgesContract {
		require(data.state == CaseStates.Accepted || data.state == CaseStates.DisclosingProofs, "This case does not accept proofs");
		require(!isDisclosedProof(data.requester), "The proof is already provided");
		require(keccak256(abi.encodePacked(proof)) == data.requester.proofHash, "Proof does not match proof hash");
		
		data.requester.proof = proof;
		data.state = CaseStates(uint(data.state) + 1); // move on to next state (either Disclosing or Judging)
	}

	function discloseOpponentProof(string calldata proof) public handlesExpired bumpsExpiration onlyJudgesContract {
		require(data.state == CaseStates.Accepted || data.state == CaseStates.DisclosingProofs, "This case does not accept proofs");
		require(!isDisclosedProof(data.opponent), "The proof is already provided");
		require(keccak256(abi.encodePacked(proof)) == data.opponent.proofHash, "Proof does not match proof hash");
		
		data.opponent.proof = proof;
		data.state = CaseStates(uint(data.state) + 1); // move on to next state (either Disclosing or Judging)
	}
	
	function assignJudge(address judgeAddress) public handlesExpired onlyJudgesContract returns (bool) {
		if (data.state == CaseStates.Judging && !isJudge(judgeAddress)) { // Don't fail for other states to allow calling multiple times
			isJudgeVoteRequired[judgeAddress] = true;
			data.judges.push(judgeAddress);
			return true;
		}
		return false;
	}

	function setDecision(bool win, address judge) public handlesExpired bumpsExpiration onlyJudgesContract {
		require(data.state == CaseStates.Judging, "This case is not being judged");
		require(isJudgeVoteRequired[judge], "This judge has voted");

		if (win) {
			data.tally += 1;
		}
		isJudgeVoteRequired[judge] = false;
		data.votes += 1;

		if (data.votes == data.judgesRequired) {
			if(data.tally >= data.judgesRequired / 2) {
				data.state = CaseStates.Won;
			} else {
				data.state = CaseStates.Lost;
			}
		}

		judges.reportGood(judge);
	}

	function appeal(address appealer) public payable handlesExpired bumpsExpiration onlyJudgesContract {
		require(data.state == CaseStates.Won || data.state == CaseStates.Lost, "The case cannot be appealed");
		require(msg.value == data.baseCollateral * 3);

		if (data.requester.addr == appealer) {
			data.requester.collateral += msg.value;
		} else if (data.opponent.addr == appealer) {
			data.opponent.collateral += msg.value;
		}
		data.baseCollateral *= 3;
		data.judgesRequired *= 3;
		data.judges = new address[](0);
		data.tally = 0;
		data.votes = 0;
		data.state = CaseStates.Judging;
	}
	
	function claim() public {
		require(isExpired(), "The case is not expired");
		handleExpiredCase(); // win or lose, either way someone has to receive money
	}

	function isDisclosedProof(CaseParticipant storage participant) private view returns (bool) {
		return bytes(participant.proof).length > 0;
	}

	function refundAll() private {
		if (data.requester.collateral != 0) {
			payable(data.requester.addr).transfer(data.requester.collateral);
		}

		if (data.opponent.collateral != 0) {
			payable(data.opponent.addr).transfer(data.opponent.collateral);
		}
	}

	function sendJudgeCut(uint losersCollateral) private {
		uint judgesCut = losersCollateral * JUDGE_CUT / JUDGE_CUT_DENOMINATOR;
		for (uint256 index = 0; index < data.judges.length; index++) {
			payable(data.judges[index]).transfer(judgesCut); // send the judge their cut
		}
	}

	function handleExpiredCase() private {
		if (data.state == CaseStates.Requested || data.state == CaseStates.Accepted) {
			data.state = CaseStates.Aborted;
			refundAll();
			emit CaseAborted();
			
		} else if (data.state == CaseStates.DisclosingProofs) { // only one of participants disclosed proof
			// send everything to the one who disclosed proof
			address goodBoy = address(0x0);
			if (isDisclosedProof(data.opponent)) {
				goodBoy = data.opponent.addr;
			} else if (isDisclosedProof(data.requester)) {
				goodBoy = data.requester.addr;
			}

			data.state = CaseStates.Aborted;
			payable(goodBoy).transfer(address(this).balance);
			emit CaseAborted();
						
		} else if (data.state == CaseStates.Judging) { // Judging did not complete on time
			// refund both and report the bad judges
			data.state = CaseStates.Aborted;
			refundAll();
			for (uint256 index = 0; index < data.judges.length; index++) {
				if (isJudgeVoteRequired[data.judges[index]]) {
					judges.reportBad(data.judges[index]);
				}
			}
			emit CaseAborted();
		} else if (data.state == CaseStates.Won) { // requester wins
			data.state = CaseStates.Closed;
			sendJudgeCut(data.opponent.collateral);
			payable(data.requester.addr).transfer(address(this).balance); // send the rest to the requester
			emit CaseClosed();
		} else if (data.state == CaseStates.Lost) { // requester loses, opponent wins
			data.state = CaseStates.Closed;
			sendJudgeCut(data.requester.collateral);
			payable(data.opponent.addr).transfer(address(this).balance); // send the rest to the opponent
			emit CaseClosed();
		}
	}
}


contract CryptoJudges is IJudgeManager {
	struct Judge {
		address addr;
		uint score;
		uint stake;
		bool banned;
	}

	mapping (uint => Judge) JudgesData;
	mapping (address => uint) Judges;
	uint currentJudgeId;

	mapping (uint => Case) Cases;
	mapping (address => uint) lastCases;
	uint currentCaseId;

	uint constant REQUIRED_JUDGE_STAKE = 100000 gwei; // 0.0001 ether;
	uint constant MINIMUM_CASE_COLLATERAL = 1 gwei; //gwei;
	uint constant JUDGE_SCORE_INITIAL = 100;
	uint constant JUDGE_SCORE_INCREMENT = 10;
	uint constant JUDGE_SCORE_DECREMENT = 50;

	constructor() {
		currentJudgeId = 0; // id == 0 -> null judge/case/request
		currentCaseId = 0;
	}

	//////
	// Judge management
	//////

	function registerJudge() public payable {
		require(Judges[msg.sender] == 0, "This address is already a judge");
		require(msg.value == REQUIRED_JUDGE_STAKE, "Invalid stake provided");

		currentJudgeId++;
		JudgesData[currentJudgeId] = Judge(msg.sender, JUDGE_SCORE_INITIAL, REQUIRED_JUDGE_STAKE, false);
		Judges[msg.sender] = currentJudgeId;
	}

	function reportGood(address judge) public {
		JudgesData[Judges[judge]].score += JUDGE_SCORE_INCREMENT;
	}

	function reportBad(address judge) public {
		uint judgeId = Judges[judge];
		if (JudgesData[judgeId].score < JUDGE_SCORE_DECREMENT) { // score is too low, kick the judge
			JudgesData[judgeId].banned = true;
			payable(address(0x0)).transfer(JudgesData[judgeId].stake);
			return;
		}
		JudgesData[judgeId].score -= JUDGE_SCORE_DECREMENT;
	}

	//////
	// Case management
	//////

	function createCase(address opponent, string calldata description, bytes32 proofHash) public payable returns (uint caseId) {
		require(Judges[msg.sender] == 0, "A judge cannot open a case");
		require(Judges[opponent] == 0, "A judge cannot be an opponent");
		require(msg.value >= MINIMUM_CASE_COLLATERAL, "Must provide some coins as collateral");

		currentCaseId++;
		Case newCase = (new Case){value:msg.value}(
			this,
			currentCaseId,
			msg.sender,
			opponent,
			description,
			proofHash,
			msg.value);
		Cases[currentCaseId] = newCase;

		lastCases[msg.sender] = currentCaseId;
		lastCases[opponent] = currentCaseId;

		return currentCaseId;
	}

	function getCase(address participant) public view returns (CaseData memory) {
		require(lastCases[participant] != 0, "No cases");
		
		return Cases[lastCases[participant]].getCaseData();
	}
	
	function getCaseById(uint caseId) public view returns (CaseData memory) {
		require(address(Cases[caseId]) != address(0x0), "No case");
		return Cases[caseId].getCaseData();
	}

	function caseContract(uint caseId) public view returns (address) {
		return address(Cases[caseId]);
	}

	function acceptCase(uint caseId, bytes32 proofHash) public payable {
		require(Cases[caseId].isOpponent(msg.sender), "This is not your case");
		
		Cases[caseId].acceptCase{value:msg.value}(proofHash);
	}

	function discloseProof(uint caseId, string calldata proof) public {
		if (Cases[caseId].isRequester(msg.sender)) {
			Cases[caseId].discloseRequesterProof(proof);
		} else if (Cases[caseId].isOpponent(msg.sender)) {
			Cases[caseId].discloseOpponentProof(proof);
		} else {
			revert("You are not related to this case");
		}

		assignJudge(caseId);
	}

	function setDecision(uint caseId, bool win) public {
		require(Cases[caseId].isJudge(msg.sender), "You are not the judge");
		Cases[caseId].setDecision(win, msg.sender);
	}

	function appeal(uint caseId) public payable {
		require(Cases[caseId].isRequester(msg.sender) || Cases[caseId].isOpponent(msg.sender), "You are not related to this case");
		
		Cases[caseId].appeal{value:msg.value}(msg.sender);
		assignJudge(caseId);
	}

	function claim(uint caseId) public {
		Cases[caseId].claim();
	}

	function assignJudge(uint caseId) private {
		while (Cases[caseId].needsJudges()) {
			uint judge = 0;
			while (judge == 0 || JudgesData[judge].banned || Cases[caseId].isJudge(JudgesData[judge].addr)) { // keep rolling untill we find a judge
				judge = (uint(keccak256(abi.encodePacked(blockhash(block.number - 1)))) % currentJudgeId) + 1;
			}
			if (Cases[caseId].assignJudge(JudgesData[judge].addr)) {
				lastCases[JudgesData[judge].addr] = caseId;
			}
		}
	}
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"caseId","type":"uint256"},{"internalType":"bytes32","name":"proofHash","type":"bytes32"}],"name":"acceptCase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"caseId","type":"uint256"}],"name":"appeal","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"caseId","type":"uint256"}],"name":"caseContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"caseId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"opponent","type":"address"},{"internalType":"string","name":"description","type":"string"},{"internalType":"bytes32","name":"proofHash","type":"bytes32"}],"name":"createCase","outputs":[{"internalType":"uint256","name":"caseId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"caseId","type":"uint256"},{"internalType":"string","name":"proof","type":"string"}],"name":"discloseProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"participant","type":"address"}],"name":"getCase","outputs":[{"components":[{"internalType":"uint256","name":"caseId","type":"uint256"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes32","name":"proofHash","type":"bytes32"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"uint256","name":"collateral","type":"uint256"}],"internalType":"struct CaseParticipant","name":"requester","type":"tuple"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes32","name":"proofHash","type":"bytes32"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"uint256","name":"collateral","type":"uint256"}],"internalType":"struct CaseParticipant","name":"opponent","type":"tuple"},{"internalType":"address[]","name":"judges","type":"address[]"},{"internalType":"uint256","name":"judgesRequired","type":"uint256"},{"internalType":"string","name":"description","type":"string"},{"internalType":"enum CaseStates","name":"state","type":"uint8"},{"internalType":"uint256","name":"tally","type":"uint256"},{"internalType":"uint256","name":"votes","type":"uint256"},{"internalType":"uint256","name":"baseCollateral","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"internalType":"struct CaseData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"caseId","type":"uint256"}],"name":"getCaseById","outputs":[{"components":[{"internalType":"uint256","name":"caseId","type":"uint256"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes32","name":"proofHash","type":"bytes32"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"uint256","name":"collateral","type":"uint256"}],"internalType":"struct CaseParticipant","name":"requester","type":"tuple"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes32","name":"proofHash","type":"bytes32"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"uint256","name":"collateral","type":"uint256"}],"internalType":"struct CaseParticipant","name":"opponent","type":"tuple"},{"internalType":"address[]","name":"judges","type":"address[]"},{"internalType":"uint256","name":"judgesRequired","type":"uint256"},{"internalType":"string","name":"description","type":"string"},{"internalType":"enum CaseStates","name":"state","type":"uint8"},{"internalType":"uint256","name":"tally","type":"uint256"},{"internalType":"uint256","name":"votes","type":"uint256"},{"internalType":"uint256","name":"baseCollateral","type":"uint256"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"internalType":"struct CaseData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"registerJudge","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"judge","type":"address"}],"name":"reportBad","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"judge","type":"address"}],"name":"reportGood","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"caseId","type":"uint256"},{"internalType":"bool","name":"win","type":"bool"}],"name":"setDecision","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5060006002819055600555613c918061002a6000396000f3fe608060405260043610620000b45760003560e01c80638d5cf4d8116200006c5780638d5cf4d814620001a857806393e0ea0314620001cd578063a33338f714620001f2578063e04c3a7e1462000218578063e2c3b374146200023d578063f3181bff146200026257600080fd5b806228434e14620000b95780630d9de3f714620000c5578063272ba1c41462000102578063379607f514620001195780635a08dce6146200013e5780637e69b7b01462000191575b600080fd5b620000c362000287565b005b348015620000d257600080fd5b50620000ea620000e4366004620012c9565b620003da565b604051620000f9919062001417565b60405180910390f35b620000c362000113366004620014fd565b620004d5565b3480156200012657600080fd5b50620000c36200013836600462001520565b6200061a565b3480156200014b57600080fd5b50620001786200015d36600462001520565b6000908152600360205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001620000f9565b620000c3620001a236600462001520565b62000683565b348015620001b557600080fd5b50620000c3620001c7366004620012c9565b6200086c565b348015620001da57600080fd5b50620000c3620001ec36600462001549565b620008ac565b6200020962000203366004620015c8565b620009f6565b604051908152602001620000f9565b3480156200022557600080fd5b50620000c3620002373660046200162a565b62000bd9565b3480156200024a57600080fd5b50620000ea6200025c36600462001520565b62000e12565b3480156200026f57600080fd5b50620000c362000281366004620012c9565b62000eb8565b3360009081526001602052604090205415620002ea5760405162461bcd60e51b815260206004820152601f60248201527f54686973206164647265737320697320616c72656164792061206a756467650060448201526064015b60405180910390fd5b655af3107a400034146200033a5760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081cdd185ad9481c1c9bdd9a59195960521b6044820152606401620002e1565b600280549060006200034c8362001690565b9091555050604080516080810182523380825260646020808401918252655af3107a4000848601908152600060608601818152600280548352828552888320975188546001600160a01b0319166001600160a01b039091161788559451600180890191909155925187860155516003909601805460ff19169615159690961790955591549284525291902055565b620003e4620011e0565b6001600160a01b038216600090815260046020526040902054620004365760405162461bcd60e51b81526020600482015260086024820152674e6f20636173657360c01b6044820152606401620002e1565b6001600160a01b0380831660009081526004602081815260408084205484526003909152808320548151632f5751d960e11b81529151941693635eaea3b293828401939092829003018186803b1580156200049057600080fd5b505afa158015620004a5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620004cf9190810190620018db565b92915050565b6000828152600360205260409081902054905163d0f63a6360e01b81523360048201526001600160a01b039091169063d0f63a639060240160206040518083038186803b1580156200052657600080fd5b505afa1580156200053b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000561919062001a1a565b620005a75760405162461bcd60e51b815260206004820152601560248201527454686973206973206e6f7420796f7572206361736560581b6044820152606401620002e1565b600082815260036020526040908190205490516309896d2560e41b8152600481018390526001600160a01b0390911690639896d2509034906024016000604051808303818588803b158015620005fc57600080fd5b505af115801562000611573d6000803e3d6000fd5b50505050505050565b600081815260036020526040808220548151634e71d92d60e01b815291516001600160a01b0390911692634e71d92d926004808201939182900301818387803b1580156200066757600080fd5b505af11580156200067c573d6000803e3d6000fd5b5050505050565b60008181526003602052604090819020549051630252917760e01b81523360048201526001600160a01b039091169063025291779060240160206040518083038186803b158015620006d457600080fd5b505afa158015620006e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200070f919062001a1a565b80620007a257506000818152600360205260409081902054905163d0f63a6360e01b81523360048201526001600160a01b039091169063d0f63a639060240160206040518083038186803b1580156200076757600080fd5b505afa1580156200077c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007a2919062001a1a565b620007f05760405162461bcd60e51b815260206004820181905260248201527f596f7520617265206e6f742072656c6174656420746f207468697320636173656044820152606401620002e1565b6000818152600360205260409081902054905163181a7d0960e31b81523360048201526001600160a01b039091169063c0d3e8489034906024016000604051808303818588803b1580156200084457600080fd5b505af115801562000859573d6000803e3d6000fd5b5050505050620008698162000f61565b50565b6001600160a01b0381166000908152600160208181526040808420548452908390528220018054600a9290620008a490849062001a3a565b909155505050565b600082815260036020526040908190205490516376c4b6b360e11b81523360048201526001600160a01b039091169063ed896d669060240160206040518083038186803b158015620008fd57600080fd5b505afa15801562000912573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000938919062001a1a565b6200097e5760405162461bcd60e51b8152602060048201526015602482015274596f7520617265206e6f7420746865206a7564676560581b6044820152606401620002e1565b600082815260036020526040908190205490516377f29b1b60e01b815282151560048201523360248201526001600160a01b03909116906377f29b1b90604401600060405180830381600087803b158015620009d957600080fd5b505af1158015620009ee573d6000803e3d6000fd5b505050505050565b336000908152600160205260408120541562000a555760405162461bcd60e51b815260206004820152601a60248201527f41206a756467652063616e6e6f74206f70656e206120636173650000000000006044820152606401620002e1565b6001600160a01b0385166000908152600160205260409020541562000abd5760405162461bcd60e51b815260206004820152601d60248201527f41206a756467652063616e6e6f7420626520616e206f70706f6e656e740000006044820152606401620002e1565b633b9aca0034101562000b215760405162461bcd60e51b815260206004820152602560248201527f4d7573742070726f7669646520736f6d6520636f696e7320617320636f6c6c616044820152641d195c985b60da1b6064820152608401620002e1565b6005805490600062000b338362001690565b91905055506000343060055433898989893460405162000b5390620012a5565b62000b6698979695949392919062001a7e565b6040518091039082f090508015801562000b84573d6000803e3d6000fd5b5060058054600090815260036020908152604080832080546001600160a01b0319166001600160a01b039687161790559254338352600490915282822081905598909216825290208690555093949350505050565b60008381526003602052604090819020549051630252917760e01b81523360048201526001600160a01b039091169063025291779060240160206040518083038186803b15801562000c2a57600080fd5b505afa15801562000c3f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c65919062001a1a565b1562000ce65760008381526003602052604090819020549051630befd51f60e01b81526001600160a01b0390911690630befd51f9062000cac908590859060040162001ad3565b600060405180830381600087803b15801562000cc757600080fd5b505af115801562000cdc573d6000803e3d6000fd5b5050505062000e02565b6000838152600360205260409081902054905163d0f63a6360e01b81523360048201526001600160a01b039091169063d0f63a639060240160206040518083038186803b15801562000d3757600080fd5b505afa15801562000d4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d72919062001a1a565b1562000db95760008381526003602052604090819020549051633578409b60e11b81526001600160a01b0390911690636af081369062000cac908590859060040162001ad3565b60405162461bcd60e51b815260206004820181905260248201527f596f7520617265206e6f742072656c6174656420746f207468697320636173656044820152606401620002e1565b62000e0d8362000f61565b505050565b62000e1c620011e0565b6000828152600360205260409020546001600160a01b031662000e6c5760405162461bcd60e51b81526020600482015260076024820152664e6f206361736560c81b6044820152606401620002e1565b600082815260036020526040808220548151632f5751d960e11b815291516001600160a01b0390911692635eaea3b29260048082019391829003018186803b1580156200049057600080fd5b6001600160a01b0381166000908152600160208181526040808420548085529184905290922001546032111562000f345760008181526020819052604080822060038101805460ff1916600117905560020154905181156108fc02919083818181858288f1935050505015801562000e0d573d6000803e3d6000fd5b600081815260208190526040812060010180546032929062000f5890849062001ae9565b90915550505050565b600081815260036020908152604091829020548251630990460560e21b815292516001600160a01b03909116926326411814926004808301939192829003018186803b15801562000fb157600080fd5b505afa15801562000fc6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fec919062001a1a565b15620008695760005b80158062001014575060008181526020819052604090206003015460ff165b80620010b5575060008281526003602090815260408083205484845291839052918290205491516376c4b6b360e11b81526001600160a01b03928316600482015291169063ed896d669060240160206040518083038186803b1580156200107a57600080fd5b505afa1580156200108f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010b5919062001a1a565b156200111157600254620010cb60014362001ae9565b6040805191406020830152016040516020818303038152906040528051906020012060001c620010fc919062001b03565b6200110990600162001a3a565b905062000ff5565b600082815260036020908152604080832054848452918390529182902054915163ca04ddcb60e01b81526001600160a01b03928316600482015291169063ca04ddcb90602401602060405180830381600087803b1580156200117257600080fd5b505af115801562001187573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011ad919062001a1a565b15620011d957600081815260208181526040808320546001600160a01b03168352600490915290208290555b5062000f61565b604051806101600160405280600081526020016200122b604051806080016040528060006001600160a01b031681526020016000801916815260200160608152602001600081525090565b81526040805160808101825260008082526020828101829052606093830184905292820152910190815260200160608152602001600081526020016060815260200160006008811115620012835762001283620013de565b8152602001600081526020016000815260200160008152602001600081525090565b6121358062001b2783390190565b6001600160a01b03811681146200086957600080fd5b600060208284031215620012dc57600080fd5b8135620012e981620012b3565b9392505050565b60005b838110156200130d578181015183820152602001620012f3565b838111156200131d576000848401525b50505050565b600081518084526200133d816020860160208601620012f0565b601f01601f19169290920160200192915050565b60018060a01b03815116825260208101516020830152600060408201516080604085015262001384608085018262001323565b606093840151949093019390935250919050565b600081518084526020808501945080840160005b83811015620013d35781516001600160a01b031687529582019590820190600101620013ac565b509495945050505050565b634e487b7160e01b600052602160045260246000fd5b600981106200141357634e487b7160e01b600052602160045260246000fd5b9052565b6020815281516020820152600060208301516101608060408501526200144261018085018362001351565b91506040850151601f198086850301606087015262001462848362001351565b9350606087015191508086850301608087015262001481848362001398565b9350608087015160a087015260a08701519150808685030160c087015250620014ab838262001323565b92505060c0850151620014c260e0860182620013f4565b5060e0850151610100858101919091528501516101208086019190915285015161014080860191909152909401519390920192909252919050565b600080604083850312156200151157600080fd5b50508035926020909101359150565b6000602082840312156200153357600080fd5b5035919050565b80151581146200086957600080fd5b600080604083850312156200155d57600080fd5b82359150602083013562001571816200153a565b809150509250929050565b60008083601f8401126200158f57600080fd5b50813567ffffffffffffffff811115620015a857600080fd5b602083019150836020828501011115620015c157600080fd5b9250929050565b60008060008060608587031215620015df57600080fd5b8435620015ec81620012b3565b9350602085013567ffffffffffffffff8111156200160957600080fd5b62001617878288016200157c565b9598909750949560400135949350505050565b6000806000604084860312156200164057600080fd5b83359250602084013567ffffffffffffffff8111156200165f57600080fd5b6200166d868287016200157c565b9497909650939450505050565b634e487b7160e01b600052601160045260246000fd5b6000600019821415620016a757620016a76200167a565b5060010190565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff81118282101715620016eb57620016eb620016ae565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156200171d576200171d620016ae565b604052919050565b600082601f8301126200173757600080fd5b815167ffffffffffffffff811115620017545762001754620016ae565b62001769601f8201601f1916602001620016f1565b8181528460208386010111156200177f57600080fd5b62001792826020830160208701620012f0565b949350505050565b600060808284031215620017ad57600080fd5b6040516080810167ffffffffffffffff8282108183111715620017d457620017d4620016ae565b8160405282935084519150620017ea82620012b3565b8183526020850151602084015260408501519150808211156200180c57600080fd5b506200181b8582860162001725565b604083015250606083015160608201525092915050565b600082601f8301126200184457600080fd5b8151602067ffffffffffffffff821115620018635762001863620016ae565b8160051b62001874828201620016f1565b92835284810182019282810190878511156200188f57600080fd5b83870192505b84831015620018bb578251620018ab81620012b3565b8252918301919083019062001895565b979650505050505050565b805160098110620018d657600080fd5b919050565b600060208284031215620018ee57600080fd5b815167ffffffffffffffff808211156200190757600080fd5b9083019061016082860312156200191d57600080fd5b62001927620016c4565b825181526020830151828111156200193e57600080fd5b6200194c878286016200179a565b6020830152506040830151828111156200196557600080fd5b62001973878286016200179a565b6040830152506060830151828111156200198c57600080fd5b6200199a8782860162001832565b6060830152506080830151608082015260a083015182811115620019bd57600080fd5b620019cb8782860162001725565b60a083015250620019df60c08401620018c6565b60c082015260e08381015190820152610100808401519082015261012080840151908201526101409283015192810192909252509392505050565b60006020828403121562001a2d57600080fd5b8151620012e9816200153a565b6000821982111562001a505762001a506200167a565b500190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0389811682526020820189905287811660408301528616606082015260e06080820181905260009062001abc908301868862001a55565b60a08301949094525060c001529695505050505050565b6020815260006200179260208301848662001a55565b60008282101562001afe5762001afe6200167a565b500390565b60008262001b2157634e487b7160e01b600052601260045260246000fd5b50069056fe60806040526040516200213538038062002135833981016040819052620000269162000498565b8034146200007a5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c696420636f6c6c61746572616c2070726f76696465640000000000604482015260640160405180910390fd5b86601260006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040518061016001604052808781526020016040518060800160405280886001600160a01b031681526020018581526020016040518060200160405280600081525081526020018481525081526020016040518060800160405280876001600160a01b03168152602001600080191681526020016040518060200160405280600081525081526020016000815250815260200160006001600160401b0381111562000150576200015062000482565b6040519080825280602002602001820160405280156200017a578160200160208202803683370190505b5081526020016001815260200184815260200160016008811115620001a357620001a3620005d5565b8152602001600081526020016000815260200182815260200161025842620001cc9190620005eb565b9052805160009081556020808301518051600180546001600160a01b0319166001600160a01b039092169190911781558183015160025560408201518051929391926200021e9260039201906200036b565b506060919091015160039091015560408281015180516005840180546001600160a01b0319166001600160a01b039092169190911781556020808301516006860155928201518051929391926200027c92600787019201906200036b565b506060918201516003909101558201518051620002a4916009840191602090910190620003fa565b506080820151600a82015560a08201518051620002cc91600b8401916020909101906200036b565b5060c0820151600c8201805460ff19166001836008811115620002f357620002f3620005d5565b021790555060e0820151600d820155610100820151600e820155610120820151600f820155610140909101516010909101556040516001600160a01b0380861691908716907fb957e4dc3b04409e6c4b14ee40d0d8e5efe8caf593e96b517b5afcdbbc7ff32690600090a3505050505050506200064f565b828054620003799062000612565b90600052602060002090601f0160209004810192826200039d5760008555620003e8565b82601f10620003b857805160ff1916838001178555620003e8565b82800160010185558215620003e8579182015b82811115620003e8578251825591602001919060010190620003cb565b50620003f692915062000452565b5090565b828054828255906000526020600020908101928215620003e8579160200282015b82811115620003e857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200041b565b5b80821115620003f6576000815560010162000453565b6001600160a01b03811681146200047f57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600080600080600080600060e0888a031215620004b457600080fd5b8751620004c18162000469565b8097505060208089015196506040890151620004dd8162000469565b60608a0151909650620004f08162000469565b60808a01519095506001600160401b03808211156200050e57600080fd5b818b0191508b601f8301126200052357600080fd5b81518181111562000538576200053862000482565b604051601f8201601f19908116603f0116810190838211818310171562000563576200056362000482565b816040528281528e868487010111156200057c57600080fd5b600093505b82841015620005a0578484018601518185018701529285019262000581565b82841115620005b25760008684830101525b80985050505050505060a0880151915060c0880151905092959891949750929550565b634e487b7160e01b600052602160045260246000fd5b600082198211156200060d57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200062757607f821691505b602082108114156200064957634e487b7160e01b600052602260045260246000fd5b50919050565b611ad6806200065f6000396000f3fe6080604052600436106100c25760003560e01c80636af081361161007f578063c0d3e84811610059578063c0d3e848146101e3578063ca04ddcb146101f6578063d0f63a6314610216578063ed896d661461024557600080fd5b80636af081361461019057806377f29b1b146101b05780639896d250146101d057600080fd5b806302529177146100c75780630befd51f1461010b578063264118141461012d5780632f13b60c146101425780634e71d92d146101595780635eaea3b21461016e575b600080fd5b3480156100d357600080fd5b506100f66100e23660046116b5565b6001546001600160a01b0390811691161490565b60405190151581526020015b60405180910390f35b34801561011757600080fd5b5061012b6101263660046116d7565b610265565b005b34801561013957600080fd5b506100f6610479565b34801561014e57600080fd5b5060105442116100f6565b34801561016557600080fd5b5061012b6104a9565b34801561017a57600080fd5b50610183610504565b6040516101029190611857565b34801561019c57600080fd5b5061012b6101ab3660046116d7565b610816565b3480156101bc57600080fd5b5061012b6101cb366004611933565b6109b5565b61012b6101de36600461196d565b610bc0565b61012b6101f13660046116b5565b610ceb565b34801561020257600080fd5b506100f66102113660046116b5565b610ea5565b34801561022257600080fd5b506100f66102313660046116b5565b6005546001600160a01b0390811691161490565b34801561025157600080fd5b506100f66102603660046116b5565b610f91565b60105442111561027b57610277610ffe565b5050565b6012546001600160a01b031633146102ae5760405162461bcd60e51b81526004016102a590611986565b60405180910390fd5b6002600c5460ff1660088111156102c7576102c761181f565b14806102e957506003600c5460ff1660088111156102e7576102e761181f565b145b6103355760405162461bcd60e51b815260206004820181905260248201527f54686973206361736520646f6573206e6f74206163636570742070726f6f667360448201526064016102a5565b61033f60016113b2565b1561038c5760405162461bcd60e51b815260206004820152601d60248201527f5468652070726f6f6620697320616c72656164792070726f766964656400000060448201526064016102a5565b6002546040516103a290849084906020016119b5565b60405160208183030381529060405280519060200120146104055760405162461bcd60e51b815260206004820152601f60248201527f50726f6f6620646f6573206e6f74206d617463682070726f6f6620686173680060448201526064016102a5565b610411600383836114ef565b50600c5460ff1660088111156104295761042961181f565b6104349060016119db565b60088111156104455761044561181f565b600c805460ff191660018360088111156104615761046161181f565b0217905550610472610258426119db565b6010555050565b60006004600c5460ff1660088111156104945761049461181f565b1480156104a45750600a54600954105b905090565b60105442116104fa5760405162461bcd60e51b815260206004820152601760248201527f5468652063617365206973206e6f74206578706972656400000000000000000060448201526064016102a5565b610502610ffe565b565b61050c611573565b60408051610160810182526000805482528251608081018452600180546001600160a01b03168252600254602083810191909152600380549596949591870194840191610558906119f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610584906119f3565b80156105d15780601f106105a6576101008083540402835291602001916105d1565b820191906000526020600020905b8154815290600101906020018083116105b457829003601f168201915b505050918352505060039190910154602091820152908252604080516080810182526005850180546001600160a01b03168252600686015482850152600786018054959094019491939092840191610628906119f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610654906119f3565b80156106a15780601f10610676576101008083540402835291602001916106a1565b820191906000526020600020905b81548152906001019060200180831161068457829003601f168201915b5050505050815260200160038201548152505081526020016009820180548060200260200160405190810160405280929190818152602001828054801561071157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106f3575b50505050508152602001600a8201548152602001600b82018054610734906119f3565b80601f0160208091040260200160405190810160405280929190818152602001828054610760906119f3565b80156107ad5780601f10610782576101008083540402835291602001916107ad565b820191906000526020600020905b81548152906001019060200180831161079057829003601f168201915b5050509183525050600c82015460209091019060ff1660088111156107d4576107d461181f565b60088111156107e5576107e561181f565b8152602001600d8201548152602001600e8201548152602001600f8201548152602001601082015481525050905090565b60105442111561082857610277610ffe565b6012546001600160a01b031633146108525760405162461bcd60e51b81526004016102a590611986565b6002600c5460ff16600881111561086b5761086b61181f565b148061088d57506003600c5460ff16600881111561088b5761088b61181f565b145b6108d95760405162461bcd60e51b815260206004820181905260248201527f54686973206361736520646f6573206e6f74206163636570742070726f6f667360448201526064016102a5565b6108e360056113b2565b156109305760405162461bcd60e51b815260206004820152601d60248201527f5468652070726f6f6620697320616c72656164792070726f766964656400000060448201526064016102a5565b60065460405161094690849084906020016119b5565b60405160208183030381529060405280519060200120146109a95760405162461bcd60e51b815260206004820152601f60248201527f50726f6f6620646f6573206e6f74206d617463682070726f6f6620686173680060448201526064016102a5565b610411600783836114ef565b6010544211156109c757610277610ffe565b6012546001600160a01b031633146109f15760405162461bcd60e51b81526004016102a590611986565b6004600c5460ff166008811115610a0a57610a0a61181f565b14610a575760405162461bcd60e51b815260206004820152601d60248201527f546869732063617365206973206e6f74206265696e67206a756467656400000060448201526064016102a5565b6001600160a01b03811660009081526011602052604090205460ff16610ab65760405162461bcd60e51b8152602060048201526014602482015273151a1a5cc81a9d5919d9481a185cc81d9bdd195960621b60448201526064016102a5565b8115610ad85760016000600d016000828254610ad291906119db565b90915550505b6001600160a01b0381166000908152601160205260408120805460ff19169055600e805460019290610b0b9084906119db565b9091555050600a54600e541415610b5357600a54610b2b90600290611a2e565b600d5410610b4557600c805460ff19166005179055610b53565b600c805460ff191660061790555b6012546040516311ab9e9b60e31b81526001600160a01b03838116600483015290911690638d5cf4d890602401600060405180830381600087803b158015610b9a57600080fd5b505af1158015610bae573d6000803e3d6000fd5b505050506102584261047291906119db565b601054421115610bd557610bd2610ffe565b50565b6012546001600160a01b03163314610bff5760405162461bcd60e51b81526004016102a590611986565b6001600c5460ff166008811115610c1857610c1861181f565b14610c2257600080fd5b600f543414610c825760405162461bcd60e51b815260206004820152602660248201527f50726f766964652074686520726967687420616d6f756e74206f6620636f6c6c604482015265185d195c985b60d21b60648201526084016102a5565b6006819055600f54600855600c805460ff191660021790556005546001546040516001600160a01b0392831692909116907fdd5f05630ec0ad93ddee9d95393a7402ae7eac8de7af06b03249fee0478b876d90600090a3610ce5610258426119db565b60105550565b601054421115610cfd57610bd2610ffe565b6012546001600160a01b03163314610d275760405162461bcd60e51b81526004016102a590611986565b6005600c5460ff166008811115610d4057610d4061181f565b1480610d6257506006600c5460ff166008811115610d6057610d6061181f565b145b610dae5760405162461bcd60e51b815260206004820152601b60248201527f54686520636173652063616e6e6f742062652061707065616c6564000000000060448201526064016102a5565b600f54610dbc906003611a50565b3414610dc757600080fd5b6001546001600160a01b0382811691161415610dfd5760048054349190600090610df29084906119db565b90915550610e2e9050565b6005546001600160a01b0382811691161415610e2e5760088054349190600090610e289084906119db565b90915550505b60036000600f016000828254610e449190611a50565b9091555050600a805460039190600090610e5f908490611a50565b90915550506040805160008152602081019182905251610e8191600991611634565b506000600d819055600e55600c805460ff19166004179055610ce5610258426119db565b6000610eb2601054421190565b15610ec457610ebf610ffe565b919050565b6012546001600160a01b03163314610eee5760405162461bcd60e51b81526004016102a590611986565b6004600c5460ff166008811115610f0757610f0761181f565b148015610f1a5750610f1882610f91565b155b15610f8957506001600160a01b03166000818152601160205260408120805460ff1916600190811790915560098054808301825592527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90910180546001600160a01b03191690921790915590565b506000919050565b6000805b600954811015610ff557826001600160a01b031660006009018281548110610fbf57610fbf611a6f565b6000918252602090912001546001600160a01b03161415610fe35750600192915050565b80610fed81611a85565b915050610f95565b50600092915050565b6001600c5460ff1660088111156110175761101761181f565b148061103957506002600c5460ff1660088111156110375761103761181f565b145b1561107e57600c805460ff191660071790556110536113ce565b6040517f3b0a072432f66c2c62b2ffa05c0384d649697f4a86708232650b4b37372f232c90600090a1565b6003600c5460ff1660088111156110975761109761181f565b141561114e5760006110a960056113b2565b156110c057506005546001600160a01b03166110dd565b6110ca60016113b2565b156110dd57506001546001600160a01b03165b600c8054600760ff199091161790556040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611121573d6000803e3d6000fd5b506040517f3b0a072432f66c2c62b2ffa05c0384d649697f4a86708232650b4b37372f232c90600090a150565b6004600c5460ff1660088111156111675761116761181f565b14156112a357600c805460ff191660071790556111826113ce565b60005b60095481101561127757601160008060090183815481106111a8576111a8611a6f565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff161561126557601254600980546001600160a01b039092169163f3181bff9190849081106111ff576111ff611a6f565b60009182526020909120015460405160e083901b6001600160e01b03191681526001600160a01b039091166004820152602401600060405180830381600087803b15801561124c57600080fd5b505af1158015611260573d6000803e3d6000fd5b505050505b8061126f81611a85565b915050611185565b506040517f3b0a072432f66c2c62b2ffa05c0384d649697f4a86708232650b4b37372f232c90600090a1565b6005600c5460ff1660088111156112bc576112bc61181f565b141561134157600c805460ff19166008908117909155546112dc90611458565b6001546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611315573d6000803e3d6000fd5b506040517f9ab8bf53a18ac51a5a24e74d7dcf0f9e8f30c86b3009a4934fb1489632e7953e90600090a1565b6006600c5460ff16600881111561135a5761135a61181f565b141561050257600c805460ff1916600817905560045461137990611458565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611315573d6000803e3d6000fd5b6000808260020180546113c4906119f3565b9050119050919050565b60045415611414576001546004546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015611412573d6000803e3d6000fd5b505b60085415610502576005546008546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015610bd2573d6000803e3d6000fd5b6000620186a061146a6103e884611a50565b6114749190611a2e565b905060005b6009548110156114ea57600980548290811061149757611497611a6f565b60009182526020822001546040516001600160a01b039091169184156108fc02918591818181858888f193505050501580156114d7573d6000803e3d6000fd5b50806114e281611a85565b915050611479565b505050565b8280546114fb906119f3565b90600052602060002090601f01602090048101928261151d5760008555611563565b82601f106115365782800160ff19823516178555611563565b82800160010185558215611563579182015b82811115611563578235825591602001919060010190611548565b5061156f929150611689565b5090565b604051806101600160405280600081526020016115bd604051806080016040528060006001600160a01b031681526020016000801916815260200160608152602001600081525090565b815260408051608081018252600080825260208281018290526060938301849052928201529101908152602001606081526020016000815260200160608152602001600060088111156116125761161261181f565b8152602001600081526020016000815260200160008152602001600081525090565b828054828255906000526020600020908101928215611563579160200282015b8281111561156357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611654565b5b8082111561156f576000815560010161168a565b80356001600160a01b0381168114610ebf57600080fd5b6000602082840312156116c757600080fd5b6116d08261169e565b9392505050565b600080602083850312156116ea57600080fd5b823567ffffffffffffffff8082111561170257600080fd5b818501915085601f83011261171657600080fd5b81358181111561172557600080fd5b86602082850101111561173757600080fd5b60209290920196919550909350505050565b6000815180845260005b8181101561176f57602081850181015186830182015201611753565b81811115611781576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0381511682526020810151602083015260006040820151608060408501526117c76080850182611749565b606093840151949093019390935250919050565b600081518084526020808501945080840160005b838110156118145781516001600160a01b0316875295820195908201906001016117ef565b509495945050505050565b634e487b7160e01b600052602160045260246000fd5b6009811061185357634e487b7160e01b600052602160045260246000fd5b9052565b602081528151602082015260006020830151610160806040850152611880610180850183611796565b91506040850151601f198086850301606087015261189e8483611796565b935060608701519150808685030160808701526118bb84836117db565b9350608087015160a087015260a08701519150808685030160c0870152506118e38382611749565b92505060c08501516118f860e0860182611835565b5060e0850151610100858101919091528501516101208086019190915285015161014080860191909152909401519390920192909252919050565b6000806040838503121561194657600080fd5b8235801515811461195657600080fd5b91506119646020840161169e565b90509250929050565b60006020828403121561197f57600080fd5b5035919050565b602080825260159082015274125b9d985b1a5908199d5b98dd1a5bdb8818d85b1b605a1b604082015260600190565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156119ee576119ee6119c5565b500190565b600181811c90821680611a0757607f821691505b60208210811415611a2857634e487b7160e01b600052602260045260246000fd5b50919050565b600082611a4b57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611a6a57611a6a6119c5565b500290565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611a9957611a996119c5565b506001019056fea26469706673582212209c92ecf8dbeeee94b1a295c7e6121a53f0a27eddeb8de7a4b33c972632f5970764736f6c63430008090033a2646970667358221220586ec6cea094151f6e97cc623b1ba7eac240cfc12ca154e9ac2a640f6d5e966a64736f6c63430008090033

Deployed ByteCode Sourcemap

8627:4344:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9359:354;;;:::i;:::-;;10907:193;;;;;;;;;;-1:-1:-1;10907:193:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11399:208;;;;;;:::i;:::-;;:::i;12421:66::-;;;;;;;;;;-1:-1:-1;12421:66:0;;;;;:::i;:::-;;:::i;11290:104::-;;;;;;;;;;-1:-1:-1;11290:104:0;;;;;:::i;:::-;11346:7;11375:13;;;:5;:13;;;;;;-1:-1:-1;;;;;11375:13:0;;11290:104;;;;-1:-1:-1;;;;;4432:32:1;;;4414:51;;4402:2;4387:18;11290:104:0;4268:203:1;12158:258:0;;;;;;:::i;:::-;;:::i;9718:108::-;;;;;;;;;;-1:-1:-1;9718:108:0;;;;;:::i;:::-;;:::i;11978:175::-;;;;;;;;;;-1:-1:-1;11978:175:0;;;;;:::i;:::-;;:::i;10226:676::-;;;;;;:::i;:::-;;:::i;:::-;;;6031:25:1;;;6019:2;6004:18;10226:676:0;5885:177:1;11612:361:0;;;;;;;;;;-1:-1:-1;11612:361:0;;;;;:::i;:::-;;:::i;11106:179::-;;;;;;;;;;-1:-1:-1;11106:179:0;;;;;:::i;:::-;;:::i;9831:349::-;;;;;;;;;;-1:-1:-1;9831:349:0;;;;;:::i;:::-;;:::i;9359:354::-;9419:10;9412:18;;;;:6;:18;;;;;;:23;9404:67;;;;-1:-1:-1;;;9404:67:0;;6753:2:1;9404:67:0;;;6735:21:1;6792:2;6772:18;;;6765:30;6831:33;6811:18;;;6804:61;6882:18;;9404:67:0;;;;;;;;;8987:11;9484:9;:33;9476:68;;;;-1:-1:-1;;;9476:68:0;;7113:2:1;9476:68:0;;;7095:21:1;7152:2;7132:18;;;7125:30;-1:-1:-1;;;7171:18:1;;;7164:52;7233:18;;9476:68:0;6911:346:1;9476:68:0;9551:14;:16;;;:14;:16;;;:::i;:::-;;;;-1:-1:-1;;9601:67:0;;;;;;;;9607:10;9601:67;;;9113:3;9601:67;;;;;;;8987:11;9601:67;;;;;;-1:-1:-1;9601:67:0;;;;;;9583:14;;;9572:26;;;;;;;;:96;;;;-1:-1:-1;;;;;;9572:96:0;-1:-1:-1;;;;;9572:96:0;;;;;;;;-1:-1:-1;9572:96:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9572:96:0;;;;;;;;;;;9694:14;;9673:18;;;;;;;:35;9359:354::o;10907:193::-;10966:15;;:::i;:::-;-1:-1:-1;;;;;10996:22:0;;;;;;:9;:22;;;;;;10988:48;;;;-1:-1:-1;;;10988:48:0;;7736:2:1;10988:48:0;;;7718:21:1;7775:1;7755:18;;;7748:29;-1:-1:-1;;;7793:18:1;;;7786:38;7841:18;;10988:48:0;7534:331:1;10988:48:0;-1:-1:-1;;;;;11058:22:0;;;11052:29;11058:22;;;:9;:22;;;;;;;;;11052:29;;:5;:29;;;;;;;:43;;-1:-1:-1;;;11052:43:0;;;;:29;;;:41;;:43;;;;:29;;:43;;;;;:29;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11052:43:0;;;;;;;;;;;;:::i;:::-;11045:50;10907:193;-1:-1:-1;;10907:193:0:o;11399:208::-;11479:13;;;;:5;:13;;;;;;;;:36;;-1:-1:-1;;;11479:36:0;;11504:10;11479:36;;;4414:51:1;-1:-1:-1;;;;;11479:13:0;;;;:24;;4387:18:1;;11479:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11471:70;;;;-1:-1:-1;;;11471:70:0;;12922:2:1;11471:70:0;;;12904:21:1;12961:2;12941:18;;;12934:30;-1:-1:-1;;;12980:18:1;;;12973:51;13041:18;;11471:70:0;12720:345:1;11471:70:0;11550:13;;;;:5;:13;;;;;;;;:52;;-1:-1:-1;;;11550:52:0;;;;;6031:25:1;;;-1:-1:-1;;;;;11550:13:0;;;;:24;;11581:9;;6004:18:1;;11550:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11399:208;;:::o;12421:66::-;12461:13;;;;:5;:13;;;;;;;:21;;-1:-1:-1;;;12461:21:0;;;;-1:-1:-1;;;;;12461:13:0;;;;:19;;:21;;;;;;;;;;;:13;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12421:66;:::o;12158:258::-;12215:13;;;;:5;:13;;;;;;;;:37;;-1:-1:-1;;;12215:37:0;;12241:10;12215:37;;;4414:51:1;-1:-1:-1;;;;;12215:13:0;;;;:25;;4387:18:1;;12215:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:77;;;-1:-1:-1;12256:13:0;;;;:5;:13;;;;;;;;:36;;-1:-1:-1;;;12256:36:0;;12281:10;12256:36;;;4414:51:1;-1:-1:-1;;;;;12256:13:0;;;;:24;;4387:18:1;;12256:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12207:122;;;;-1:-1:-1;;;12207:122:0;;13454:2:1;12207:122:0;;;13436:21:1;;;13473:18;;;13466:30;13532:34;13512:18;;;13505:62;13584:18;;12207:122:0;13252:356:1;12207:122:0;12338:13;;;;:5;:13;;;;;;;;:49;;-1:-1:-1;;;12338:49:0;;12376:10;12338:49;;;4414:51:1;-1:-1:-1;;;;;12338:13:0;;;;:20;;12365:9;;4387:18:1;;12338:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12392:19;12404:6;12392:11;:19::i;:::-;12158:258;:::o;9718:108::-;-1:-1:-1;;;;;9776:13:0;;9765:10;9776:13;;;:6;:13;;;;;;;;;9765:25;;;;;;;;:31;:56;;9158:2;;9765:10;:56;;9158:2;;9765:56;:::i;:::-;;;;-1:-1:-1;;;9718:108:0:o;11978:175::-;12042:13;;;;:5;:13;;;;;;;;:33;;-1:-1:-1;;;12042:33:0;;12064:10;12042:33;;;4414:51:1;-1:-1:-1;;;;;12042:13:0;;;;:21;;4387:18:1;;12042:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12034:67;;;;-1:-1:-1;;;12034:67:0;;13948:2:1;12034:67:0;;;13930:21:1;13987:2;13967:18;;;13960:30;-1:-1:-1;;;14006:18:1;;;13999:51;14067:18;;12034:67:0;13746:345:1;12034:67:0;12106:13;;;;:5;:13;;;;;;;;:42;;-1:-1:-1;;;12106:42:0;;14289:14:1;;14282:22;12106:42:0;;;14264:41:1;12137:10:0;14321:18:1;;;14314:60;-1:-1:-1;;;;;12106:13:0;;;;:25;;14237:18:1;;12106:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11978:175;;:::o;10226:676::-;10369:10;10336:11;10362:18;;;:6;:18;;;;;;:23;10354:62;;;;-1:-1:-1;;;10354:62:0;;14587:2:1;10354:62:0;;;14569:21:1;14626:2;14606:18;;;14599:30;14665:28;14645:18;;;14638:56;14711:18;;10354:62:0;14385:350:1;10354:62:0;-1:-1:-1;;;;;10429:16:0;;;;;;:6;:16;;;;;;:21;10421:63;;;;-1:-1:-1;;;10421:63:0;;14942:2:1;10421:63:0;;;14924:21:1;14981:2;14961:18;;;14954:30;15020:31;15000:18;;;14993:59;15069:18;;10421:63:0;14740:353:1;10421:63:0;9059:6;10497:9;:36;;10489:86;;;;-1:-1:-1;;;10489:86:0;;15300:2:1;10489:86:0;;;15282:21:1;15339:2;15319:18;;;15312:30;15378:34;15358:18;;;15351:62;-1:-1:-1;;;15429:18:1;;;15422:35;15474:19;;10489:86:0;15098:401:1;10489:86:0;10582:13;:15;;;:13;:15;;;:::i;:::-;;;;;;10602:12;10634:9;10650:4;10660:13;;10679:10;10695:8;10709:11;;10726:9;10741;10617:134;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10762:13:0;;;10756:20;;;;:5;:20;;;;;;;;:30;;-1:-1:-1;;;;;;10756:30:0;-1:-1:-1;;;;;10756:30:0;;;;;;10817:13;;10803:10;10793:21;;:9;:21;;;;;;:37;;;10835:19;;;;;;;;:35;;;-1:-1:-1;10817:13:0;;10226:676;-1:-1:-1;;;;10226:676:0:o;11612:361::-;11687:13;;;;:5;:13;;;;;;;;:37;;-1:-1:-1;;;11687:37:0;;11713:10;11687:37;;;4414:51:1;-1:-1:-1;;;;;11687:13:0;;;;:25;;4387:18:1;;11687:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11683:260;;;11732:13;;;;:5;:13;;;;;;;;:43;;-1:-1:-1;;;11732:43:0;;-1:-1:-1;;;;;11732:13:0;;;;:36;;:43;;11769:5;;;;11732:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11683:260;;;11791:13;;;;:5;:13;;;;;;;;:36;;-1:-1:-1;;;11791:36:0;;11816:10;11791:36;;;4414:51:1;-1:-1:-1;;;;;11791:13:0;;;;:24;;4387:18:1;;11791:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11787:156;;;11835:13;;;;:5;:13;;;;;;;;:42;;-1:-1:-1;;;11835:42:0;;-1:-1:-1;;;;;11835:13:0;;;;:35;;:42;;11871:5;;;;11835:42;;;:::i;11787:156::-;11895:42;;-1:-1:-1;;;11895:42:0;;13454:2:1;11895:42:0;;;13436:21:1;;;13473:18;;;13466:30;13532:34;13512:18;;;13505:62;13584:18;;11895:42:0;13252:356:1;11787:156:0;11949:19;11961:6;11949:11;:19::i;:::-;11612:361;;;:::o;11106:179::-;11161:15;;:::i;:::-;11225:3;11199:13;;;:5;:13;;;;;;-1:-1:-1;;;;;11199:13:0;11183:58;;;;-1:-1:-1;;;11183:58:0;;16999:2:1;11183:58:0;;;16981:21:1;17038:1;17018:18;;;17011:29;-1:-1:-1;;;17056:18:1;;;17049:37;17103:18;;11183:58:0;16797:330:1;11183:58:0;11253:13;;;;:5;:13;;;;;;;:27;;-1:-1:-1;;;11253:27:0;;;;-1:-1:-1;;;;;11253:13:0;;;;:25;;:27;;;;;;;;;;;:13;:27;;;;;;;;;;9831:349;-1:-1:-1;;;;;9892:13:0;;9877:12;9892:13;;;:6;:13;;;;;;;;;9914:19;;;;;;;;;;:25;;9202:2;-1:-1:-1;9910:211:0;;;10007:10;:19;;;;;;;;;;;:26;;;:33;;-1:-1:-1;;10007:33:0;10036:4;10007:33;;;10077:25;;;10046:57;;;;;;;10077:25;10007:10;10046:57;10007:10;10046:57;10077:25;10007:10;10046:57;;;;;;;;;;;;;;;;;;;9910:211;10125:10;:19;;;;;;;;;;:25;;:50;;9202:2;;10125:10;:50;;9202:2;;10125:50;:::i;:::-;;;;-1:-1:-1;;;;9831:349:0:o;12492:476::-;12546:13;;;;:5;:13;;;;;;;;;;:27;;-1:-1:-1;;;12546:27:0;;;;-1:-1:-1;;;;;12546:13:0;;;;:25;;:27;;;;;:13;;:27;;;;;:13;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12539:425;;;12581:10;12601:242;12608:10;;;:38;;-1:-1:-1;12622:10:0;:17;;;;;;;;;;:24;;;;;12608:38;:87;;;-1:-1:-1;12650:13:0;;;;:5;:13;;;;;;;;;12672:17;;;;;;;;;;;:22;12650:45;;-1:-1:-1;;;12650:45:0;;-1:-1:-1;;;;;12672:22:0;;;12650:45;;;4414:51:1;12650:13:0;;;:21;;4387:18:1;;12650:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12601:242;;;12817:14;;12794:16;12809:1;12794:12;:16;:::i;:::-;12767:45;;;12784:27;;12767:45;;;17391:19:1;17426:12;12767:45:0;;;;;;;;;;;;12757:56;;;;;;12752:62;;:79;;;;:::i;:::-;12751:85;;12835:1;12751:85;:::i;:::-;12743:93;;12601:242;;;12852:13;;;;:5;:13;;;;;;;;;12878:17;;;;;;;;;;;:22;12852:49;;-1:-1:-1;;;12852:49:0;;-1:-1:-1;;;;;12878:22:0;;;12852:49;;;4414:51:1;12852:13:0;;;:25;;4387:18:1;;12852:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12848:111;;;12910:33;12920:17;;;;;;;;;;;:22;-1:-1:-1;;;;;12920:22:0;12910:33;;:9;:33;;;;;:42;;;12848:111;12575:389;12539:425;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;402:258::-;474:1;484:113;498:6;495:1;492:13;484:113;;;574:11;;;568:18;555:11;;;548:39;520:2;513:10;484:113;;;615:6;612:1;609:13;606:48;;;650:1;641:6;636:3;632:16;625:27;606:48;;402:258;;;:::o;665:::-;707:3;745:5;739:12;772:6;767:3;760:19;788:63;844:6;837:4;832:3;828:14;821:4;814:5;810:16;788:63;:::i;:::-;905:2;884:15;-1:-1:-1;;880:29:1;871:39;;;;912:4;867:50;;665:258;-1:-1:-1;;665:258:1:o;928:422::-;1051:1;1047;1042:3;1038:11;1034:19;1026:5;1020:12;1016:38;1011:3;1004:51;1104:4;1097:5;1093:16;1087:23;1080:4;1075:3;1071:14;1064:47;986:3;1157:4;1150:5;1146:16;1140:23;1195:4;1188;1183:3;1179:14;1172:28;1221:47;1262:4;1257:3;1253:14;1239:12;1221:47;:::i;:::-;1317:4;1306:16;;;1300:23;1284:14;;;;1277:47;;;;-1:-1:-1;1209:59:1;928:422;-1:-1:-1;928:422:1:o;1355:461::-;1408:3;1446:5;1440:12;1473:6;1468:3;1461:19;1499:4;1528:2;1523:3;1519:12;1512:19;;1565:2;1558:5;1554:14;1586:1;1596:195;1610:6;1607:1;1604:13;1596:195;;;1675:13;;-1:-1:-1;;;;;1671:39:1;1659:52;;1731:12;;;;1766:15;;;;1707:1;1625:9;1596:195;;;-1:-1:-1;1807:3:1;;1355:461;-1:-1:-1;;;;;1355:461:1:o;1821:127::-;1882:10;1877:3;1873:20;1870:1;1863:31;1913:4;1910:1;1903:15;1937:4;1934:1;1927:15;1953:238;2035:1;2028:5;2025:12;2015:143;;2080:10;2075:3;2071:20;2068:1;2061:31;2115:4;2112:1;2105:15;2143:4;2140:1;2133:15;2015:143;2167:18;;1953:238::o;2196:1629::-;2373:2;2362:9;2355:21;2418:6;2412:13;2407:2;2396:9;2392:18;2385:41;2336:4;2473:2;2465:6;2461:15;2455:22;2496:6;2538:2;2533;2522:9;2518:18;2511:30;2564:68;2627:3;2616:9;2612:19;2598:12;2564:68;:::i;:::-;2550:82;;2681:2;2673:6;2669:15;2663:22;2708:2;2704:7;2775:2;2763:9;2755:6;2751:22;2747:31;2742:2;2731:9;2727:18;2720:59;2802:57;2852:6;2836:14;2802:57;:::i;:::-;2788:71;;2908:2;2900:6;2896:15;2890:22;2868:44;;2977:2;2965:9;2957:6;2953:22;2949:31;2943:3;2932:9;2928:19;2921:60;3004:52;3049:6;3033:14;3004:52;:::i;:::-;2990:66;;3111:3;3103:6;3099:16;3093:23;3087:3;3076:9;3072:19;3065:52;3166:3;3158:6;3154:16;3148:23;3126:45;;3236:2;3224:9;3216:6;3212:22;3208:31;3202:3;3191:9;3187:19;3180:60;;3263:41;3297:6;3281:14;3263:41;:::i;:::-;3249:55;;;3353:3;3345:6;3341:16;3335:23;3367:63;3425:3;3414:9;3410:19;3394:14;3367:63;:::i;:::-;-1:-1:-1;3467:3:1;3455:16;;3449:23;3491:3;3510:18;;;3503:30;;;;3558:15;;3552:22;3593:3;3612:18;;;3605:30;;;;3660:15;;3654:22;3695:3;3714:18;;;3707:30;;;;3779:15;;;3773:22;3753:18;;;;3746:50;;;;3813:6;2196:1629;-1:-1:-1;2196:1629:1:o;3830:248::-;3898:6;3906;3959:2;3947:9;3938:7;3934:23;3930:32;3927:52;;;3975:1;3972;3965:12;3927:52;-1:-1:-1;;3998:23:1;;;4068:2;4053:18;;;4040:32;;-1:-1:-1;3830:248:1:o;4083:180::-;4142:6;4195:2;4183:9;4174:7;4170:23;4166:32;4163:52;;;4211:1;4208;4201:12;4163:52;-1:-1:-1;4234:23:1;;4083:180;-1:-1:-1;4083:180:1:o;4476:118::-;4562:5;4555:13;4548:21;4541:5;4538:32;4528:60;;4584:1;4581;4574:12;4599:309;4664:6;4672;4725:2;4713:9;4704:7;4700:23;4696:32;4693:52;;;4741:1;4738;4731:12;4693:52;4777:9;4764:23;4754:33;;4837:2;4826:9;4822:18;4809:32;4850:28;4872:5;4850:28;:::i;:::-;4897:5;4887:15;;;4599:309;;;;;:::o;4913:348::-;4965:8;4975:6;5029:3;5022:4;5014:6;5010:17;5006:27;4996:55;;5047:1;5044;5037:12;4996:55;-1:-1:-1;5070:20:1;;5113:18;5102:30;;5099:50;;;5145:1;5142;5135:12;5099:50;5182:4;5174:6;5170:17;5158:29;;5234:3;5227:4;5218:6;5210;5206:19;5202:30;5199:39;5196:59;;;5251:1;5248;5241:12;5196:59;4913:348;;;;;:::o;5266:614::-;5355:6;5363;5371;5379;5432:2;5420:9;5411:7;5407:23;5403:32;5400:52;;;5448:1;5445;5438:12;5400:52;5487:9;5474:23;5506:31;5531:5;5506:31;:::i;:::-;5556:5;-1:-1:-1;5612:2:1;5597:18;;5584:32;5639:18;5628:30;;5625:50;;;5671:1;5668;5661:12;5625:50;5710:59;5761:7;5752:6;5741:9;5737:22;5710:59;:::i;:::-;5266:614;;5788:8;;-1:-1:-1;5684:85:1;;5870:2;5855:18;5842:32;;5266:614;-1:-1:-1;;;;5266:614:1:o;6067:479::-;6147:6;6155;6163;6216:2;6204:9;6195:7;6191:23;6187:32;6184:52;;;6232:1;6229;6222:12;6184:52;6268:9;6255:23;6245:33;;6329:2;6318:9;6314:18;6301:32;6356:18;6348:6;6345:30;6342:50;;;6388:1;6385;6378:12;6342:50;6427:59;6478:7;6469:6;6458:9;6454:22;6427:59;:::i;:::-;6067:479;;6505:8;;-1:-1:-1;6401:85:1;;-1:-1:-1;;;;6067:479:1:o;7262:127::-;7323:10;7318:3;7314:20;7311:1;7304:31;7354:4;7351:1;7344:15;7378:4;7375:1;7368:15;7394:135;7433:3;-1:-1:-1;;7454:17:1;;7451:43;;;7474:18;;:::i;:::-;-1:-1:-1;7521:1:1;7510:13;;7394:135::o;7870:127::-;7931:10;7926:3;7922:20;7919:1;7912:31;7962:4;7959:1;7952:15;7986:4;7983:1;7976:15;8002:255;8074:2;8068:9;8116:6;8104:19;;8153:18;8138:34;;8174:22;;;8135:62;8132:88;;;8200:18;;:::i;:::-;8236:2;8229:22;8002:255;:::o;8262:275::-;8333:2;8327:9;8398:2;8379:13;;-1:-1:-1;;8375:27:1;8363:40;;8433:18;8418:34;;8454:22;;;8415:62;8412:88;;;8480:18;;:::i;:::-;8516:2;8509:22;8262:275;;-1:-1:-1;8262:275:1:o;8542:497::-;8596:5;8649:3;8642:4;8634:6;8630:17;8626:27;8616:55;;8667:1;8664;8657:12;8616:55;8696:6;8690:13;8722:18;8718:2;8715:26;8712:52;;;8744:18;;:::i;:::-;8788:55;8831:2;8812:13;;-1:-1:-1;;8808:27:1;8837:4;8804:38;8788:55;:::i;:::-;8868:2;8859:7;8852:19;8914:3;8907:4;8902:2;8894:6;8890:15;8886:26;8883:35;8880:55;;;8931:1;8928;8921:12;8880:55;8944:64;9005:2;8998:4;8989:7;8985:18;8978:4;8970:6;8966:17;8944:64;:::i;:::-;9026:7;8542:497;-1:-1:-1;;;;8542:497:1:o;9044:812::-;9117:5;9165:4;9153:9;9148:3;9144:19;9140:30;9137:50;;;9183:1;9180;9173:12;9137:50;9216:2;9210:9;9258:4;9250:6;9246:17;9282:18;9350:6;9338:10;9335:22;9330:2;9318:10;9315:18;9312:46;9309:72;;;9361:18;;:::i;:::-;9401:10;9397:2;9390:22;9430:6;9421:15;;9466:9;9460:16;9445:31;;9485:33;9510:7;9485:33;:::i;:::-;9542:7;9534:6;9527:23;9604:2;9593:9;9589:18;9583:25;9578:2;9570:6;9566:15;9559:50;9653:2;9642:9;9638:18;9632:25;9618:39;;9680:2;9672:6;9669:14;9666:34;;;9696:1;9693;9686:12;9666:34;;9733:57;9786:3;9777:6;9766:9;9762:22;9733:57;:::i;:::-;9728:2;9720:6;9716:15;9709:82;;9845:2;9834:9;9830:18;9824:25;9819:2;9811:6;9807:15;9800:50;;9044:812;;;;:::o;9861:784::-;9926:5;9979:3;9972:4;9964:6;9960:17;9956:27;9946:55;;9997:1;9994;9987:12;9946:55;10026:6;10020:13;10052:4;10075:18;10071:2;10068:26;10065:52;;;10097:18;;:::i;:::-;10143:2;10140:1;10136:10;10166:28;10190:2;10186;10182:11;10166:28;:::i;:::-;10228:15;;;10298;;;10294:24;;;10259:12;;;;10330:15;;;10327:35;;;10358:1;10355;10348:12;10327:35;10394:2;10386:6;10382:15;10371:26;;10406:210;10422:6;10417:3;10414:15;10406:210;;;10495:3;10489:10;10512:31;10537:5;10512:31;:::i;:::-;10556:18;;10439:12;;;;10594;;;;10406:210;;;10634:5;9861:784;-1:-1:-1;;;;;;;9861:784:1:o;10650:155::-;10737:13;;10779:1;10769:12;;10759:40;;10795:1;10792;10785:12;10759:40;10650:155;;;:::o;10810:1655::-;10904:6;10957:2;10945:9;10936:7;10932:23;10928:32;10925:52;;;10973:1;10970;10963:12;10925:52;11006:9;11000:16;11035:18;11076:2;11068:6;11065:14;11062:34;;;11092:1;11089;11082:12;11062:34;11115:22;;;;11171:6;11153:16;;;11149:29;11146:49;;;11191:1;11188;11181:12;11146:49;11217:22;;:::i;:::-;11268:2;11262:9;11255:5;11248:24;11311:2;11307;11303:11;11297:18;11340:2;11330:8;11327:16;11324:36;;;11356:1;11353;11346:12;11324:36;11392:72;11456:7;11445:8;11441:2;11437:17;11392:72;:::i;:::-;11387:2;11380:5;11376:14;11369:96;;11504:2;11500;11496:11;11490:18;11533:2;11523:8;11520:16;11517:36;;;11549:1;11546;11539:12;11517:36;11585:72;11649:7;11638:8;11634:2;11630:17;11585:72;:::i;:::-;11580:2;11573:5;11569:14;11562:96;;11697:2;11693;11689:11;11683:18;11726:2;11716:8;11713:16;11710:36;;;11742:1;11739;11732:12;11710:36;11778:67;11837:7;11826:8;11822:2;11818:17;11778:67;:::i;:::-;11773:2;11766:5;11762:14;11755:91;;11893:3;11889:2;11885:12;11879:19;11873:3;11866:5;11862:15;11855:44;11938:3;11934:2;11930:12;11924:19;11968:2;11958:8;11955:16;11952:36;;;11984:1;11981;11974:12;11952:36;12021:56;12069:7;12058:8;12054:2;12050:17;12021:56;:::i;:::-;12015:3;12008:5;12004:15;11997:81;;12111:51;12157:3;12153:2;12149:12;12111:51;:::i;:::-;12105:3;12094:15;;12087:76;12210:3;12202:12;;;12196:19;12179:15;;;12172:44;12235:3;12276:11;;;12270:18;12254:14;;;12247:42;12308:3;12349:11;;;12343:18;12327:14;;;12320:42;12381:3;12422:11;;;12416:18;12400:14;;;12393:42;;;;-1:-1:-1;12098:5:1;10810:1655;-1:-1:-1;;;10810:1655:1:o;12470:245::-;12537:6;12590:2;12578:9;12569:7;12565:23;12561:32;12558:52;;;12606:1;12603;12596:12;12558:52;12638:9;12632:16;12657:28;12679:5;12657:28;:::i;13613:128::-;13653:3;13684:1;13680:6;13677:1;13674:13;13671:39;;;13690:18;;:::i;:::-;-1:-1:-1;13726:9:1;;13613:128::o;15504:267::-;15593:6;15588:3;15581:19;15645:6;15638:5;15631:4;15626:3;15622:14;15609:43;-1:-1:-1;15697:1:1;15672:16;;;15690:4;15668:27;;;15661:38;;;;15753:2;15732:15;;;-1:-1:-1;;15728:29:1;15719:39;;;15715:50;;15504:267::o;15776:764::-;-1:-1:-1;;;;;16162:15:1;;;16144:34;;16209:2;16194:18;;16187:34;;;16257:15;;;16252:2;16237:18;;16230:43;16309:15;;16304:2;16289:18;;16282:43;16362:3;16356;16341:19;;16334:32;;;16087:4;;16383:63;;16426:19;;16418:6;16410;16383:63;:::i;:::-;16477:3;16462:19;;16455:35;;;;-1:-1:-1;16521:3:1;16506:19;16499:35;16375:71;15776:764;-1:-1:-1;;;;;;15776:764:1:o;16545:247::-;16704:2;16693:9;16686:21;16667:4;16724:62;16782:2;16771:9;16767:18;16759:6;16751;16724:62;:::i;17132:125::-;17172:4;17200:1;17197;17194:8;17191:34;;;17205:18;;:::i;:::-;-1:-1:-1;17242:9:1;;17132:125::o;17449:209::-;17481:1;17507;17497:132;;17551:10;17546:3;17542:20;17539:1;17532:31;17586:4;17583:1;17576:15;17614:4;17611:1;17604:15;17497:132;-1:-1:-1;17643:9:1;;17449:209::o

Swarm Source

ipfs://586ec6cea094151f6e97cc623b1ba7eac240cfc12ca154e9ac2a640f6d5e966a
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading

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.