More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 2,151,338 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x64617461 | 65904984 | 118 days ago | IN | 0 POL | 0.05178163 | ||||
0x64617461 | 59944857 | 267 days ago | IN | 0 POL | 0.00350516 | ||||
0x64617461 | 57068800 | 340 days ago | IN | 0 POL | 0.00350475 | ||||
0x64617461 | 56788143 | 348 days ago | IN | 0 POL | 0.09394422 | ||||
0x64617461 | 54634611 | 405 days ago | IN | 0 POL | 0.01396513 | ||||
0x64617461 | 54634610 | 405 days ago | IN | 0 POL | 0.01365847 | ||||
0x64617461 | 54634610 | 405 days ago | IN | 0 POL | 0.01365847 | ||||
0x64617461 | 54370570 | 411 days ago | IN | 0 POL | 0.01569072 | ||||
0x64617461 | 54370555 | 411 days ago | IN | 0 POL | 0.01736885 | ||||
0x64617461 | 54370555 | 411 days ago | IN | 0 POL | 0.01845532 | ||||
0x64617461 | 54370554 | 411 days ago | IN | 0 POL | 0.0185299 | ||||
0x64617461 | 54370554 | 411 days ago | IN | 0 POL | 0.0185299 | ||||
0x64617461 | 54370554 | 411 days ago | IN | 0 POL | 0.0185299 | ||||
0x64617461 | 54370554 | 411 days ago | IN | 0 POL | 0.01715837 | ||||
0x64617461 | 54370554 | 411 days ago | IN | 0 POL | 0.01715837 | ||||
0x64617461 | 54233321 | 415 days ago | IN | 0 POL | 0.00473724 | ||||
0x64617461 | 54034912 | 420 days ago | IN | 0 POL | 0.01112057 | ||||
0x64617461 | 53856381 | 424 days ago | IN | 0.0002 POL | 0.01676742 | ||||
0x64617461 | 53820616 | 425 days ago | IN | 0 POL | 0.00999848 | ||||
0x64617461 | 53820614 | 425 days ago | IN | 0 POL | 0.0101216 | ||||
0x64617461 | 53820612 | 425 days ago | IN | 0 POL | 0.01005998 | ||||
0x64617461 | 53818415 | 425 days ago | IN | 0 POL | 0.01542609 | ||||
0x64617461 | 53569478 | 432 days ago | IN | 0 POL | 0.00525936 | ||||
0x64617461 | 53135981 | 443 days ago | IN | 0 POL | 0.00591126 | ||||
0x64617461 | 53135981 | 443 days ago | IN | 0 POL | 0.00591126 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
51354845 | 489 days ago | 9.95 POL | ||||
51350169 | 489 days ago | 27.86 POL | ||||
51345693 | 489 days ago | 42.785 POL | ||||
51343070 | 489 days ago | 5.4725 POL | ||||
51340590 | 490 days ago | 118.405 POL | ||||
51337945 | 490 days ago | 53.73 POL | ||||
51337904 | 490 days ago | 105.47 POL | ||||
51337503 | 490 days ago | 27.86 POL | ||||
51337343 | 490 days ago | 49.75 POL | ||||
51337285 | 490 days ago | 49.75 POL | ||||
51337219 | 490 days ago | 35.82 POL | ||||
51332258 | 490 days ago | 117.41 POL | ||||
51332202 | 490 days ago | 113.43 POL | ||||
51316473 | 490 days ago | Contract Creation | 0 POL | |||
51315861 | 490 days ago | Contract Creation | 0 POL | |||
51314139 | 490 days ago | 14.925 POL | ||||
51314138 | 490 days ago | Contract Creation | 0 POL | |||
51308970 | 490 days ago | 37.81 POL | ||||
51308752 | 490 days ago | 58.506 POL | ||||
51308484 | 490 days ago | 55.72 POL | ||||
51303643 | 490 days ago | 21.89 POL | ||||
51299776 | 491 days ago | 1.4925 POL | ||||
51297780 | 491 days ago | 1.585035 POL | ||||
51295015 | 491 days ago | 59.7 POL | ||||
51295015 | 491 days ago | 2.23875 POL |
Loading...
Loading
Contract Name:
SmartBRC_Center
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-12-15 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; interface IFactory { function isOperator(address) external view returns (bool); } interface JsonTool { struct JsonValue { bool executeFlag; string p; string op; string tick; uint256 max; uint256 lim; uint256 amt; address receiver; uint256 price; uint256 listid; } function parseJsonAndExecute(string calldata content) external pure returns (JsonValue memory); } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transferFrom(address from, address to, uint256 amount) external returns (bool); } contract SRC20 is IERC20 { uint256 public _maxSupply; uint256 public _amountPerMint; uint256 public _totalMinted; address public _factory; uint public holderAmount; uint public txAmount; uint public deployTime; // erc20 standard mapping(address => uint256) private _balances; uint256 private _totalSupply; constructor( uint256 maxSupply, uint256 amountPerMint, address factory ){ _maxSupply = maxSupply; _amountPerMint = amountPerMint; _factory = factory; _totalMinted = 0; deployTime = block.timestamp; } function mint(address to, uint256 amount) external { require(msg.sender == _factory, "only factory can mint"); uint256 mintAmount = amount; require(mintAmount <= _amountPerMint, "amount exceeds limit"); require(_totalMinted + mintAmount <= _maxSupply, "max supply exceeded"); _mint(to, mintAmount); _totalMinted += mintAmount; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); return true; } function decimals() public pure returns (uint8) { return 0; } function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOf(address account) public view returns(uint256) { return _balances[account]; } function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "transfer from the zero address"); require(recipient != address(0), "transfer to the zero address"); require(IFactory(_factory).isOperator(msg.sender), "!operator"); require(amount > 0, "transfer 0"); if(balanceOf(recipient) == 0) holderAmount++; uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; _balances[recipient] += amount; } if(balanceOf(sender) == 0) holderAmount--; txAmount++; } function _mint(address account, uint256 amount) internal { require(account != address(0), "mint to the zero address"); if(balanceOf(account) == 0) holderAmount++; _totalSupply += amount; unchecked { _balances[account] += amount; } txAmount++; } } library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } library JsmnSolLib { enum JsmnType { UNDEFINED, OBJECT, ARRAY, STRING, PRIMITIVE } uint constant RETURN_SUCCESS = 0; uint constant RETURN_ERROR_INVALID_JSON = 1; uint constant RETURN_ERROR_PART = 2; uint constant RETURN_ERROR_NO_MEM = 3; string constant FTMS_HEADER_HASH = "data:application/json,"; string constant SRC20_OP_HASH_DEPLOY = "deploy"; string constant SRC20_OP_HASH_MINT = "mint"; string constant SRC20_OP_HASH_TRANSFER = "transfer"; string constant SRC20_OP_HASH_LIST = "list"; string constant SRC20_OP_HASH_UNLIST = "unlist"; string constant SRC20_OP_HASH_BUY = "buy"; struct Token { JsmnType jsmnType; uint start; bool startSet; uint end; bool endSet; uint8 size; } struct Parser { uint pos; uint toknext; int toksuper; } function init(uint length) internal pure returns (Parser memory, Token[] memory) { Parser memory p = Parser(0, 0, -1); Token[] memory t = new Token[](length); return (p, t); } function allocateToken(Parser memory parser, Token[] memory tokens) internal pure returns (bool, Token memory) { if (parser.toknext >= tokens.length) { // no more space in tokens return (false, tokens[tokens.length-1]); } Token memory token = Token(JsmnType.UNDEFINED, 0, false, 0, false, 0); tokens[parser.toknext] = token; parser.toknext++; return (true, token); } function fillToken(Token memory token, JsmnType jsmnType, uint start, uint end) internal pure { token.jsmnType = jsmnType; token.start = start; token.startSet = true; token.end = end; token.endSet = true; token.size = 0; } function parseString(Parser memory parser, Token[] memory tokens, bytes memory s) internal pure returns (uint) { uint start = parser.pos; bool success; Token memory token; parser.pos++; for (; parser.pos<s.length; parser.pos++) { bytes1 c = s[parser.pos]; // Quote -> end of string if (c == '"') { (success, token) = allocateToken(parser, tokens); if (!success) { parser.pos = start; return RETURN_ERROR_NO_MEM; } fillToken(token, JsmnType.STRING, start+1, parser.pos); return RETURN_SUCCESS; } if (uint8(c) == 92 && parser.pos + 1 < s.length) { // handle escaped characters: skip over it parser.pos++; if (s[parser.pos] == '\"' || s[parser.pos] == '/' || s[parser.pos] == '\\' || s[parser.pos] == 'f' || s[parser.pos] == 'r' || s[parser.pos] == 'n' || s[parser.pos] == 'b' || s[parser.pos] == 't') { continue; } else { // all other values are INVALID parser.pos = start; return(RETURN_ERROR_INVALID_JSON); } } } parser.pos = start; return RETURN_ERROR_PART; } function parsePrimitive(Parser memory parser, Token[] memory tokens, bytes memory s) internal pure returns (uint) { bool found = false; uint start = parser.pos; bytes1 c; bool success; Token memory token; for (; parser.pos < s.length; parser.pos++) { c = s[parser.pos]; if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == ',' || c == 0x7d || c == 0x5d) { found = true; break; } if (uint8(c) < 32 || uint8(c) > 127) { parser.pos = start; return RETURN_ERROR_INVALID_JSON; } } if (!found) { parser.pos = start; return RETURN_ERROR_PART; } // found the end (success, token) = allocateToken(parser, tokens); if (!success) { parser.pos = start; return RETURN_ERROR_NO_MEM; } fillToken(token, JsmnType.PRIMITIVE, start, parser.pos); parser.pos--; return RETURN_SUCCESS; } function parse(string memory json, uint numberElements) internal pure returns (uint, Token[] memory tokens, uint) { bytes memory s = bytes(json); bool success; Parser memory parser; (parser, tokens) = init(numberElements); // Token memory token; uint r; uint count = parser.toknext; uint i; Token memory token; for (; parser.pos<s.length; parser.pos++) { bytes1 c = s[parser.pos]; // 0x7b, 0x5b opening curly parentheses or brackets if (c == 0x7b || c == 0x5b) { count++; (success, token) = allocateToken(parser, tokens); if (!success) { return (RETURN_ERROR_NO_MEM, tokens, 0); } if (parser.toksuper != -1) { tokens[uint(parser.toksuper)].size++; } token.jsmnType = (c == 0x7b ? JsmnType.OBJECT : JsmnType.ARRAY); token.start = parser.pos; token.startSet = true; parser.toksuper = int(parser.toknext - 1); continue; } // closing curly parentheses or brackets if (c == 0x7d || c == 0x5d) { JsmnType tokenType = (c == 0x7d ? JsmnType.OBJECT : JsmnType.ARRAY); bool isUpdated = false; for (i=parser.toknext-1; i>=0; i--) { token = tokens[i]; if (token.startSet && !token.endSet) { if (token.jsmnType != tokenType) { // found a token that hasn't been closed but from a different type return (RETURN_ERROR_INVALID_JSON, tokens, 0); } parser.toksuper = -1; tokens[i].end = parser.pos + 1; tokens[i].endSet = true; isUpdated = true; break; } } if (!isUpdated) { return (RETURN_ERROR_INVALID_JSON, tokens, 0); } for (; i>0; i--) { token = tokens[i]; if (token.startSet && !token.endSet) { parser.toksuper = int(i); break; } } if (i==0) { token = tokens[i]; if (token.startSet && !token.endSet) { parser.toksuper = int128(uint128(i)); } } continue; } // 0x42 if (c == '"') { r = parseString(parser, tokens, s); if (r != RETURN_SUCCESS) { return (r, tokens, 0); } //JsmnError.INVALID; count++; if (parser.toksuper != -1) tokens[uint(parser.toksuper)].size++; continue; } // ' ', \r, \t, \n if (c == ' ' || c == 0x11 || c == 0x12 || c == 0x14) { continue; } // 0x3a if (c == ':') { parser.toksuper = int(parser.toknext -1); continue; } if (c == ',') { if (parser.toksuper != -1 && tokens[uint(parser.toksuper)].jsmnType != JsmnType.ARRAY && tokens[uint(parser.toksuper)].jsmnType != JsmnType.OBJECT) { for(i = parser.toknext-1; i>=0; i--) { if (tokens[i].jsmnType == JsmnType.ARRAY || tokens[i].jsmnType == JsmnType.OBJECT) { if (tokens[i].startSet && !tokens[i].endSet) { parser.toksuper = int(i); break; } } } } continue; } // Primitive if ((c >= '0' && c <= '9') || c == '-' || c == 'f' || c == 't' || c == 'n') { if (parser.toksuper != -1) { token = tokens[uint(parser.toksuper)]; if (token.jsmnType == JsmnType.OBJECT || (token.jsmnType == JsmnType.STRING && token.size != 0)) { return (RETURN_ERROR_INVALID_JSON, tokens, 0); } } r = parsePrimitive(parser, tokens, s); if (r != RETURN_SUCCESS) { return (r, tokens, 0); } count++; if (parser.toksuper != -1) { tokens[uint(parser.toksuper)].size++; } continue; } // printable char if (c >= 0x20 && c <= 0x7e) { return (RETURN_ERROR_INVALID_JSON, tokens, 0); } } return (RETURN_SUCCESS, tokens, parser.toknext); } function getBytes(string memory json, uint start, uint end) internal pure returns (string memory) { bytes memory s = bytes(json); bytes memory result = new bytes(end-start); for (uint i=start; i<end; i++) { result[i-start] = s[i]; } return string(result); } // parseInt function parseInt(string memory _a) internal pure returns (int) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string memory _a, uint _b) internal pure returns (int) { bytes memory bresult = bytes(_a); int mint = 0; bool decimals = false; bool negative = false; for (uint i=0; i<bresult.length; i++){ if ((i == 0) && (bresult[i] == '-')) { negative = true; } if ((uint8(bresult[i]) >= 48) && (uint8(bresult[i]) <= 57)) { if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += int256(uint256(uint8(bresult[i]) - 48)); } else if (uint8(bresult[i]) == 46) decimals = true; } if (_b > 0) mint *= int(10**_b); if (negative) mint *= -1; return mint; } function uint2str(uint i) internal pure returns (string memory){ if (i == 0) return "0"; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = bytes1(uint8(48 + i % 10)); i /= 10; } return string(bstr); } function parseBool(string memory _a) internal pure returns (bool) { if (strCompare(_a, 'true') == 0) { return true; } else { return false; } } function strCompare(string memory _a, string memory _b) internal pure returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } /** * Compare two strings and return true if they are equal * @param _a string a * @param _b string b */ function equals(string memory _a, string memory _b) internal pure returns (bool){ return keccak256(bytes(_a)) == keccak256(bytes(_b)); } function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } function toUint(string memory s) internal pure returns (uint) { bytes memory b = bytes(s); uint result = 0; for (uint256 i = 0; i < b.length; i++) { uint256 c = uint256(uint8(b[i])); if (c >= 48 && c <= 57) { result = result * 10 + (c - 48); } } return result; } function isDigit(string memory s) internal pure returns (bool) { bytes memory b = bytes(s); for (uint i = 0; i < b.length; i++) { uint256 c = uint256(uint8(b[i])); if (c < 48 || c > 57) { return false; } } return true; } function isAddr(string memory s) internal pure returns (bool) { bytes memory b = bytes(s); if (b.length >= 1 + 20 && b[0] == '0' && (b[1] == 'x' || b[1] == 'X')) { return true; } return true; } function toAddress(string memory s) internal pure returns (address) { bytes memory _bytes = hexStringToAddress(s); address tempAddress; assembly { tempAddress := div(mload(add(add(_bytes, 0x20), 1)), 0x1000000000000000000000000) } return tempAddress; } function hexStringToAddress(string memory s) internal pure returns (bytes memory) { bytes memory ss = bytes(s); bytes memory r = new bytes(ss.length/2); for (uint i=0; i<ss.length/2; ++i) { r[i] = bytes1(fromHexChar(uint8(ss[2*i])) * 16 + fromHexChar(uint8(ss[2*i+1]))); } return r; } function fromHexChar(uint8 c) internal pure returns (uint8) { if (bytes1(c) >= bytes1('0') && bytes1(c) <= bytes1('9')) { return c - uint8(bytes1('0')); } if (bytes1(c) >= bytes1('a') && bytes1(c) <= bytes1('f')) { return 10 + c - uint8(bytes1('a')); } if (bytes1(c) >= bytes1('A') && bytes1(c) <= bytes1('F')) { return 10 + c - uint8(bytes1('A')); } return 0; } } abstract contract Ownable{ address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(msg.sender); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == msg.sender, "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract SmartBRC_Center is Ownable, IFactory { using Counters for Counters.Counter; Counters.Counter private _inscriptionIdTracker; address _jsonTool; mapping(string => address) private src20Contracts; mapping(address => uint256) private src20TokenIndex; mapping(address => string[]) public holderTokens; mapping(address => bool) public isOperator; struct SRC20Token { address tokenAddress; string tick; uint256 maxSupply; uint256 amountPerMint; uint256 deployId; address deployer; uint256 timestamp; } SRC20Token[] public src20Tokens; struct ListTick { string tick; uint256 listId; address listOwner; uint256 amt; uint256 price; uint256 perPrice; uint256 timestamp; } mapping(string => ListTick[]) public tickLists; mapping(string => mapping(uint256 => uint256)) tickListsindex; mapping(uint256 => address) public listOwnerAddr; mapping(address => ListTick[]) public ownerList; mapping(address => mapping(uint256 => uint256)) ownerListindex; uint256 nonce = 0; event Deploy( address indexed tokenAddress, SRC20Token tokenInfo ); event Transfer( address indexed from, address indexed to, address tokenAddress, uint256 value ); event List( address indexed tokenAddress, address indexed seller, uint256 indexed liatId, string tick, uint256 amount, uint256 price, uint256 timestamp ); event UnList( address indexed tokenAddr, address indexed seller, uint256 indexed liatId, string tick, uint256 amount, uint256 price, uint256 timestamp ); event Buy( address indexed tokenAddr, address indexed buyer, uint256 indexed liatId, string tick, address seller, uint256 amount, uint256 price, uint256 timestamp ); event Sold( address indexed tokenAddr, address indexed seller, uint256 indexed liatId, string tick, address buyer, uint256 amount, uint256 price, uint256 timestamp ); constructor(address _jsonToolAddr) { isOperator[msg.sender] = true; isOperator[address(this)] = true; _jsonTool = _jsonToolAddr; _inscriptionIdTracker.increment(); // default inscription ID 1 } /** * @dev ftmscribe an ftmscription. * Ftmscriptions are created by sending a transaction to the contract, the calldata must encoded as follows: * - 3 bytes: header, must be "ftm" * - 1 byte: version, must be 1 * - 2 byte: content type length * - 4 byte: content length * - content type bytes with length of content type length * - content bytes with length of content length * * @param input the calldata to be ftmscribed * @return bytes ftmscription ID encoded by abi.encode(uint256) */ fallback(bytes calldata input) external payable returns (bytes memory) { require(msg.sender == tx.origin, "!EOA"); require(JsmnSolLib.equals(string(input[0:22]),JsmnSolLib.FTMS_HEADER_HASH), "!header"); uint256 id = _inscriptionIdTracker.current(); _inscriptionIdTracker.increment(); string memory content = string(input[22:bytes(input).length]); JsonTool.JsonValue memory jsonVal = JsonTool(_jsonTool).parseJsonAndExecute(content); require(jsonVal.executeFlag, "!json execute failed"); if (JsmnSolLib.equals(jsonVal.op,JsmnSolLib.SRC20_OP_HASH_DEPLOY)) { require(src20Contracts[jsonVal.tick] == address(0),"!deploy"); createSRC20(jsonVal.tick, jsonVal.max, jsonVal.lim, id); emit Deploy(src20Contracts[jsonVal.tick],src20Tokens[src20TokenIndex[src20Contracts[jsonVal.tick]]]); } else if (JsmnSolLib.equals(jsonVal.op,JsmnSolLib.SRC20_OP_HASH_MINT)) { address tokenAddr = src20Contracts[jsonVal.tick]; require(tokenAddr != address(0), "!mint"); SRC20(tokenAddr).mint(msg.sender, jsonVal.amt); if(!checkHoldTick(msg.sender,jsonVal.tick)){ addHoldTick(msg.sender,jsonVal.tick); } emit Transfer(address(0),msg.sender,src20Contracts[jsonVal.tick],jsonVal.amt); }else if (JsmnSolLib.equals(jsonVal.op,JsmnSolLib.SRC20_OP_HASH_TRANSFER)) { address tokenAddr = src20Contracts[jsonVal.tick]; SRC20(tokenAddr).transferFrom(msg.sender, jsonVal.receiver,jsonVal.amt); if(!checkHoldTick(jsonVal.receiver,jsonVal.tick)){ addHoldTick(jsonVal.receiver,jsonVal.tick); } if(balanceOfTick(jsonVal.tick,msg.sender)==0){ removeHoldTick(msg.sender,jsonVal.tick); } emit Transfer(msg.sender,jsonVal.receiver,src20Contracts[jsonVal.tick],jsonVal.amt); }else if (JsmnSolLib.equals(jsonVal.op,JsmnSolLib.SRC20_OP_HASH_LIST)) { require(src20Contracts[jsonVal.tick] != address(0),"!list"); uint256 listId = creatNewList(jsonVal.tick,jsonVal.amt,jsonVal.price); emit List(src20Contracts[jsonVal.tick],msg.sender,listId,jsonVal.tick,jsonVal.amt,jsonVal.price,block.timestamp); }else if (JsmnSolLib.equals(jsonVal.op,JsmnSolLib.SRC20_OP_HASH_UNLIST)) { require(src20Contracts[jsonVal.tick] != address(0) && listOwnerAddr[jsonVal.listid] == msg.sender,"!unlist"); removeList(jsonVal.tick,msg.sender,jsonVal.listid); }else if (JsmnSolLib.equals(jsonVal.op,JsmnSolLib.SRC20_OP_HASH_BUY)) { require(src20Contracts[jsonVal.tick] != address(0) && listOwnerAddr[jsonVal.listid] != address(0),"!buy"); buyToken(jsonVal.tick,listOwnerAddr[jsonVal.listid],jsonVal.listid); removeList(jsonVal.tick,listOwnerAddr[jsonVal.listid],jsonVal.listid); emit Transfer(listOwnerAddr[jsonVal.listid],msg.sender,src20Contracts[jsonVal.tick],jsonVal.amt); } else { revert(); } return abi.encode(0); } function createSRC20( string memory tick, uint256 maxSupply, uint256 amountPerMint, uint256 scriptionId ) internal { require(bytes(tick).length == 4, "!tick"); require(maxSupply > 0, "!maxSupply"); require(amountPerMint > 0, "!amountPerMint"); require(maxSupply >= amountPerMint, "maxSupply < amountPerMint"); require(src20Contracts[tick] == address(0), "deployed"); SRC20 token = new SRC20(maxSupply, amountPerMint, address(this)); src20Contracts[tick] = address(token); SRC20Token memory tokenInfo = SRC20Token( address(token), tick, maxSupply, amountPerMint, scriptionId, msg.sender, block.timestamp ); src20Tokens.push(tokenInfo); src20TokenIndex[address(token)] = src20Tokens.length-1; } receive() external payable {revert();} //// management //// function withdraw() external onlyOwner { require(address(this).balance > 0, "no balance"); uint256 balance = address(this).balance; payable(owner()).transfer(balance); } function setOperator(address operator, bool _isOperator) external onlyOwner { isOperator[operator] = _isOperator; } //// utils //// function getTokensByPage(uint256 page, uint256 pageSize) external view returns (SRC20Token[] memory tokens, uint256[] memory totalSupplies) { require(page > 0, "!pNumber"); require(pageSize > 0, "!pSize"); uint256 start = (page - 1) * pageSize; uint256 end = start + pageSize; if (end > src20Tokens.length) { end = src20Tokens.length; } tokens = new SRC20Token[](end - start); totalSupplies = new uint256[](end - start); for (uint256 i = start; i < end; i++) { tokens[i - start] = src20Tokens[i]; totalSupplies[i - start] = SRC20(src20Tokens[i].tokenAddress).totalSupply(); } } function getTokenByTick(string memory tick) public view returns (SRC20Token memory tokenInfo, uint256 totalSupply) { address tokenAddr = src20Contracts[tick]; if (tokenAddr != address(0)) { tokenInfo = src20Tokens[src20TokenIndex[tokenAddr]]; totalSupply = SRC20(tokenAddr).totalSupply(); } } function getTokenCount() public view returns (uint256) { return src20Tokens.length; } function getTickListeds(string memory tick,uint256 page, uint256 pageSize) public view returns (ListTick[] memory listedTicks) { require(page > 0, "!pNumber"); require(pageSize > 0, "!pSize"); uint256 start = (page - 1) * pageSize; uint256 end = start + pageSize; if (end > tickLists[tick].length) { end = tickLists[tick].length; } listedTicks = new ListTick[](end - start); for (uint256 i = start; i < end; i++) { listedTicks[i - start] = tickLists[tick][i]; } } function getuserLists(address addr,uint256 page, uint256 pageSize) public view returns (ListTick[] memory listedTicks) { require(page > 0, "!pNumber"); require(pageSize > 0, "!pSize"); uint256 start = (page - 1) * pageSize; uint256 end = start + pageSize; if (end > ownerList[addr].length) { end = ownerList[addr].length; } listedTicks = new ListTick[](end - start); for (uint256 i = start; i < end; i++) { listedTicks[i - start] = ownerList[addr][i]; } } function checkHoldTick(address holder,string memory tick) public view returns (bool) { for (uint256 i = 0; i < holderTokens[holder].length; i++) { if (JsmnSolLib.equals(holderTokens[holder][i],tick)) {return true;} } // if we reach here, then the key doesn't exist return false; } function addHoldTick(address holder,string memory tick) internal returns (bool) { if (!checkHoldTick(holder,tick)) { holderTokens[holder].push(tick); } return true; } function removeHoldTick(address holder,string memory tick) internal returns (bool) { if (!checkHoldTick(holder,tick)) {return false;} // create a new keyArray array, remove key from it, and set it as the new keyArray array string[] memory newkeyArray = new string[](holderTokens[holder].length - 1); uint256 j = 0; for (uint256 i = 0; i < holderTokens[holder].length; i++) { if (!JsmnSolLib.equals(holderTokens[holder][i],tick)) { newkeyArray[j] = holderTokens[holder][i]; j++; } } // set the new keyArray array holderTokens[holder] = newkeyArray; return true; } function balanceOfTick(string memory tick,address account) public view returns(uint256 holdbalance) { address tokenAddr = src20Contracts[tick]; if (tokenAddr != address(0)) { holdbalance = SRC20(tokenAddr).balanceOf(account); } } function creatNewList(string memory tick,uint256 amt,uint256 price) internal returns (uint256) { require(listamontcheck(tick,amt), "Insufficient balance!"); uint256 listId = listidCrate(amt,price); ListTick memory listInfo = ListTick( tick, listId, msg.sender, amt, price, price/amt, block.timestamp ); tickLists[tick].push(listInfo); tickListsindex[tick][listId]=tickLists[tick].length-1; ownerList[msg.sender].push(listInfo); ownerListindex[msg.sender][listId]=ownerList[msg.sender].length-1; listOwnerAddr[listId] = msg.sender; return listId; } function removeList(string memory tick,address listowner,uint256 listId) internal returns (bool) { //allist uint256 index = tickListsindex[tick][listId]; ListTick memory deletListInfo =tickLists[tick][index]; uint256 movedListId = tickLists[tick][tickLists[tick].length-1].listId; tickLists[tick][index] = tickLists[tick][tickLists[tick].length-1]; tickLists[tick].pop(); delete tickListsindex[tick][listId]; tickListsindex[tick][movedListId]=index; //userlist uint256 userIndex = ownerListindex[listowner][listId]; uint256 usermovedListId = ownerList[listowner][ownerList[listowner].length-1].listId; ownerList[listowner][userIndex] = ownerList[listowner][ownerList[listowner].length-1]; ownerList[listowner].pop(); delete ownerListindex[listowner][usermovedListId]; ownerListindex[listowner][usermovedListId]=userIndex; address ownaddr = listOwnerAddr[listId]; delete listOwnerAddr[listId]; if(listowner == ownaddr){ emit UnList(src20Contracts[tick],msg.sender,listId,tick,deletListInfo.amt,deletListInfo.price,block.timestamp); }else{ emit Sold(src20Contracts[tick],listowner,listId,tick,msg.sender,deletListInfo.amt,deletListInfo.price,block.timestamp); } return true; } function buyToken(string memory tick,address listowner,uint256 listId) internal returns (bool) { ListTick memory listInfo = tickLists[tick][tickListsindex[tick][listId]]; require(listInfo.price == msg.value, "!Insufficient payvalue"); SRC20(src20Contracts[tick]).transferFrom(listowner, msg.sender,listInfo.amt); payable(listowner).transfer(msg.value * 995 / 1000); return true; } function listamontcheck(string memory tick,uint256 amt) internal view returns (bool) { uint256 listAmut = 0; for (uint256 i = 0; i < ownerList[msg.sender].length; i++) { if (!JsmnSolLib.equals(ownerList[msg.sender][i].tick,tick)) { listAmut=listAmut+ownerList[msg.sender][i].amt; } } return balanceOfTick(tick,msg.sender)>=listAmut+amt; } function listidCrate(uint256 amt,uint256 price) internal returns(uint256) { nonce += 1; return uint256(keccak256(abi.encodePacked(amt,price,nonce, msg.sender, block.number))); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_jsonToolAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddr","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"liatId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tick","type":"string"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Buy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"string","name":"tick","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"amountPerMint","type":"uint256"},{"internalType":"uint256","name":"deployId","type":"uint256"},{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"indexed":false,"internalType":"struct SmartBRC_Center.SRC20Token","name":"tokenInfo","type":"tuple"}],"name":"Deploy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"uint256","name":"liatId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tick","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"List","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddr","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"uint256","name":"liatId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tick","type":"string"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Sold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddr","type":"address"},{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"uint256","name":"liatId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tick","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UnList","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOfTick","outputs":[{"internalType":"uint256","name":"holdbalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"string","name":"tick","type":"string"}],"name":"checkHoldTick","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"uint256","name":"page","type":"uint256"},{"internalType":"uint256","name":"pageSize","type":"uint256"}],"name":"getTickListeds","outputs":[{"components":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"uint256","name":"listId","type":"uint256"},{"internalType":"address","name":"listOwner","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"perPrice","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct SmartBRC_Center.ListTick[]","name":"listedTicks","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tick","type":"string"}],"name":"getTokenByTick","outputs":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"string","name":"tick","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"amountPerMint","type":"uint256"},{"internalType":"uint256","name":"deployId","type":"uint256"},{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct SmartBRC_Center.SRC20Token","name":"tokenInfo","type":"tuple"},{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"page","type":"uint256"},{"internalType":"uint256","name":"pageSize","type":"uint256"}],"name":"getTokensByPage","outputs":[{"components":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"string","name":"tick","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"amountPerMint","type":"uint256"},{"internalType":"uint256","name":"deployId","type":"uint256"},{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct SmartBRC_Center.SRC20Token[]","name":"tokens","type":"tuple[]"},{"internalType":"uint256[]","name":"totalSupplies","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"page","type":"uint256"},{"internalType":"uint256","name":"pageSize","type":"uint256"}],"name":"getuserLists","outputs":[{"components":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"uint256","name":"listId","type":"uint256"},{"internalType":"address","name":"listOwner","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"perPrice","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct SmartBRC_Center.ListTick[]","name":"listedTicks","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"holderTokens","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"listOwnerAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerList","outputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"uint256","name":"listId","type":"uint256"},{"internalType":"address","name":"listOwner","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"perPrice","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"_isOperator","type":"bool"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"src20Tokens","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"string","name":"tick","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"amountPerMint","type":"uint256"},{"internalType":"uint256","name":"deployId","type":"uint256"},{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tickLists","outputs":[{"internalType":"string","name":"tick","type":"string"},{"internalType":"uint256","name":"listId","type":"uint256"},{"internalType":"address","name":"listOwner","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"perPrice","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600d553480156200001657600080fd5b5060405162004e3f38038062004e3f833981016040819052620000399162000105565b6200004433620000ac565b3360009081526006602090815260408083208054600160ff19918216811790925530855291909320805490911683179055600280546001600160a01b0319166001600160a01b038516179055620000a59190620000fc811b62000faf17901c565b5062000137565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80546001019055565b6000602082840312156200011857600080fd5b81516001600160a01b03811681146200013057600080fd5b9392505050565b614cf880620001476000396000f3fe608060405260043610620001275760003560e01c80638da5cb5b11620000a3578063dde415e4116200006d578063dde415e41462000ec5578063eeea02bf1462000eea578063efd8c9381462000f24578063f2fde38b1462000f49578063f47ef0d11462000f6e5762000132565b80638da5cb5b1462000dee578063a786bc3d1462000e22578063b4afa7dc1462000e5c578063d1da96211462000e905762000132565b806369aa1ab711620000f157806369aa1ab71462000d165780636d70f7ae1462000d4b578063715018a61462000d9057806378a895671462000da85780637cf2385d1462000dc95762000132565b8063137559781462000c605780631b6258141462000ca35780633ccfd60b1462000cd7578063558a72971462000cf15762000132565b366200013257600080fd5b60003660603332146200017a5760405162461bcd60e51b8152600401620001719060208082526004908201526321454f4160e01b604082015260600190565b60405180910390fd5b620001f76200018e60166000858762003718565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601681527519185d184e985c1c1b1a58d85d1a5bdb8bda9cdbdb8b60521b6020820152915062000f939050565b6200022f5760405162461bcd60e51b815260206004820152600760248201526610b432b0b232b960c91b604482015260640162000171565b60006200023b60015490565b90506200024c600180546001019055565b60006200025d846016818862003718565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600254604051631fa01dcb60e31b815295965090946001600160a01b03909116935063fd00ee589250620002c79150859060040162003798565b600060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200030f9190810190620038f1565b8051909150620003595760405162461bcd60e51b8152602060048201526014602482015273085a9cdbdb88195e1958dd5d194819985a5b195960621b604482015260640162000171565b620003878160400151604051806040016040528060068152602001656465706c6f7960d01b81525062000f93565b15620004f15760006001600160a01b031660038260600151604051620003ae919062003a10565b908152604051908190036020019020546001600160a01b031614620004005760405162461bcd60e51b8152602060048201526007602482015266216465706c6f7960c81b604482015260640162000171565b6200041a816060015182608001518360a001518662000fb8565b6003816060015160405162000430919062003a10565b9081526040519081900360200181205460608301516001600160a01b03909116917f329492a54e0d62511dc7c776ba7e30f08feb4d034c07931cacb563733442e83d916007916004916000916003916200048a9162003a10565b9081526040805160209281900383019020546001600160a01b0316835290820192909252016000205481548110620004c657620004c662003a2e565b9060005260206000209060070201604051620004e3919062003b05565b60405180910390a262000c35565b6200051d8160400151604051806040016040528060048152602001631b5a5b9d60e21b81525062000f93565b15620006a1576000600382606001516040516200053b919062003a10565b908152604051908190036020019020546001600160a01b03169050806200058d5760405162461bcd60e51b8152602060048201526005602482015264085b5a5b9d60da1b604482015260640162000171565b60c08201516040516340c10f1960e01b815233600482015260248101919091526001600160a01b038216906340c10f1990604401600060405180830381600087803b158015620005dc57600080fd5b505af1158015620005f1573d6000803e3d6000fd5b5050505062000605338360600151620012f9565b6200061c576200061a33836060015162001423565b505b336001600160a01b031660006001600160a01b03167fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6003856060015160405162000668919062003a10565b9081526040805191829003602090810183205460c08901516001600160a01b039091168452908301520160405180910390a35062000c35565b620006d18160400151604051806040016040528060088152602001673a3930b739b332b960c11b81525062000f93565b156200082b57600060038260600151604051620006ef919062003a10565b9081526040519081900360200181205460e084015160c08501516323b872dd60e01b84523360048501526001600160a01b039182166024850152604484015216915081906323b872dd906064016020604051808303816000875af11580156200075c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000782919062003b79565b50620007978260e001518360600151620012f9565b620007b257620007b08260e00151836060015162001423565b505b620007c282606001513362001475565b600003620007dc57620007da33836060015162001523565b505b8160e001516001600160a01b0316336001600160a01b03167fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6003856060015160405162000668919062003a10565b620008578160400151604051806040016040528060048152602001631b1a5cdd60e21b81525062000f93565b15620009795760006001600160a01b0316600382606001516040516200087e919062003a10565b908152604051908190036020019020546001600160a01b031603620008ce5760405162461bcd60e51b8152602060048201526005602482015264085b1a5cdd60da1b604482015260640162000171565b6000620008ea82606001518360c00151846101000151620017fd565b905080336001600160a01b0316600384606001516040516200090d919062003a10565b90815260405190819003602001812054606086015160c08701516101008801516001600160a01b03909316937f8d584e9d6b0fbea0b734760666eee515c84e7a67164fcb45777e83cf448ed062936200096a939291429062003b99565b60405180910390a45062000c35565b620009a78160400151604051806040016040528060068152602001651d5b9b1a5cdd60d21b81525062000f93565b1562000a675760006001600160a01b031660038260600151604051620009ce919062003a10565b908152604051908190036020019020546001600160a01b03161480159062000a1257506101208101516000908152600a60205260409020546001600160a01b031633145b62000a4a5760405162461bcd60e51b8152602060048201526007602482015266085d5b9b1a5cdd60ca1b604482015260640162000171565b62000a6081606001513383610120015162001aac565b5062000c35565b62000a9281604001516040518060400160405280600381526020016262757960e81b81525062000f93565b1562000c305760006001600160a01b03166003826060015160405162000ab9919062003a10565b908152604051908190036020019020546001600160a01b03161480159062000afd57506101208101516000908152600a60205260409020546001600160a01b031615155b62000b345760405162461bcd60e51b815260040162000171906020808252600490820152632162757960e01b604082015260600190565b6060810151610120820180516000908152600a6020526040902054905162000b6792916001600160a01b031690620021ee565b506060810151610120820180516000908152600a6020526040902054905162000b9b92916001600160a01b03169062001aac565b506101208101516000908152600a602052604090819020546060830151915133926001600160a01b03909216917fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f9160039162000bf89162003a10565b9081526040805191829003602090810183205460c08801516001600160a01b039091168452908301520160405180910390a362000c35565b600080fd5b6040805160006020820152016040516020818303038152906040529350505050915050805190602001f35b34801562000c6d57600080fd5b5062000c8562000c7f36600462003bca565b62002496565b60405162000c9a979695949392919062003be4565b60405180910390f35b34801562000cb057600080fd5b5062000cc862000cc236600462003c32565b6200258a565b60405162000c9a919062003798565b34801562000ce457600080fd5b5062000cef6200264c565b005b34801562000cfe57600080fd5b5062000cef62000d1036600462003c61565b620026e6565b34801562000d2357600080fd5b5062000d3b62000d3536600462003cf5565b6200271b565b60405162000c9a92919062003d98565b34801562000d5857600080fd5b5062000d7f62000d6a36600462003dbc565b60066020526000908152604090205460ff1681565b604051901515815260200162000c9a565b34801562000d9d57600080fd5b5062000cef6200291e565b34801562000db557600080fd5b506007545b60405190815260200162000c9a565b34801562000dd657600080fd5b5062000d7f62000de836600462003ddc565b620012f9565b34801562000dfb57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200162000c9a565b34801562000e2f57600080fd5b5062000e0962000e4136600462003bca565b600a602052600090815260409020546001600160a01b031681565b34801562000e6957600080fd5b5062000e8162000e7b36600462003e31565b62002936565b60405162000c9a919062003e82565b34801562000e9d57600080fd5b5062000eb562000eaf36600462003f38565b62002be4565b60405162000c9a92919062003f5b565b34801562000ed257600080fd5b5062000dba62000ee436600462003ffc565b62001475565b34801562000ef757600080fd5b5062000f0f62000f0936600462003c32565b62002f51565b60405162000c9a979695949392919062004048565b34801562000f3157600080fd5b5062000f0f62000f4336600462004097565b6200304e565b34801562000f5657600080fd5b5062000cef62000f6836600462003dbc565b6200307a565b34801562000f7b57600080fd5b5062000e8162000f8d366004620040df565b620030f9565b6000818051906020012083805190602001201490505b92915050565b80546001019055565b835160041462000ff35760405162461bcd60e51b8152602060048201526005602482015264217469636b60d81b604482015260640162000171565b60008311620010325760405162461bcd60e51b815260206004820152600a602482015269216d6178537570706c7960b01b604482015260640162000171565b60008211620010755760405162461bcd60e51b815260206004820152600e60248201526d08585b5bdd5b9d14195c935a5b9d60921b604482015260640162000171565b81831015620010c75760405162461bcd60e51b815260206004820152601960248201527f6d6178537570706c79203c20616d6f756e745065724d696e7400000000000000604482015260640162000171565b60006001600160a01b0316600385604051620010e4919062003a10565b908152604051908190036020019020546001600160a01b031614620011375760405162461bcd60e51b815260206004820152600860248201526719195c1b1bde595960c21b604482015260640162000171565b60008383306040516200114a90620035a1565b92835260208301919091526001600160a01b03166040820152606001604051809103906000f08015801562001183573d6000803e3d6000fd5b5090508060038660405162001199919062003a10565b90815260408051918290036020908101832080546001600160a01b039586166001600160a01b03199182161790915560e084018352858516845290830189815291830188905260608301879052608083018690523360a08401524260c0840152600780546001810182556000829052845191027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68881018054929096169190921617845590519192839290917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68901906200127390826200416a565b5060408201516002820155606082015160038201556080820151600482015560a08201516005820180546001600160a01b0319166001600160a01b0390921691909117905560c090910151600690910155600754620012d5906001906200424c565b6001600160a01b039092166000908152600460205260409020919091555050505050565b6000805b6001600160a01b03841660009081526005602052604090205481101562001419576001600160a01b03841660009081526005602052604090208054620013f391908390811062001351576200135162003a2e565b906000526020600020018054620013689062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620013969062003a44565b8015620013e75780601f10620013bb57610100808354040283529160200191620013e7565b820191906000526020600020905b815481529060010190602001808311620013c957829003601f168201915b50505050508462000f93565b156200140457600191505062000fa9565b80620014108162004262565b915050620012fd565b5060009392505050565b6000620014318383620012f9565b6200146c576001600160a01b0383166000908152600560209081526040822080546001810182559083529120016200146a83826200416a565b505b50600192915050565b6000806003846040516200148a919062003a10565b908152604051908190036020019020546001600160a01b0316905080156200151c576040516370a0823160e01b81526001600160a01b0384811660048301528216906370a0823190602401602060405180830381865afa158015620014f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200151991906200427e565b91505b5092915050565b6000620015318383620012f9565b6200153f5750600062000fa9565b6001600160a01b03831660009081526005602052604081205462001566906001906200424c565b6001600160401b03811115620015805762001580620037b4565b604051908082528060200260200182016040528015620015b557816020015b60608152602001906001900390816200159f5790505b5090506000805b6001600160a01b038616600090815260056020526040902054811015620017c5576001600160a01b03861660009081526005602052604090208054620016b291908390811062001610576200161062003a2e565b906000526020600020018054620016279062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620016559062003a44565b8015620016a65780601f106200167a57610100808354040283529160200191620016a6565b820191906000526020600020905b8154815290600101906020018083116200168857829003601f168201915b50505050508662000f93565b620017b0576001600160a01b0386166000908152600560205260409020805482908110620016e457620016e462003a2e565b906000526020600020018054620016fb9062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620017299062003a44565b80156200177a5780601f106200174e576101008083540402835291602001916200177a565b820191906000526020600020905b8154815290600101906020018083116200175c57829003601f168201915b505050505083838151811062001794576200179462003a2e565b60200260200101819052508180620017ac9062004262565b9250505b80620017bc8162004262565b915050620015bc565b506001600160a01b03851660009081526005602090815260409091208351620017f192850190620035af565b50600195945050505050565b60006200180b848462003384565b620018515760405162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e742062616c616e63652160581b604482015260640162000171565b60006200185f84846200346c565b905060006040518060e00160405280878152602001838152602001336001600160a01b031681526020018681526020018581526020018686620018a3919062004298565b8152602001428152509050600886604051620018c0919062003a10565b908152604051602091819003820190208054600181018255600091825291902082518392600702909101908190620018f990826200416a565b506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060155505060016008876040516200196f919062003a10565b908152604051908190036020019020546200198b91906200424c565b6009876040516200199d919062003a10565b9081526040805160209281900383019020600086815290835281812093909355338352600b825282208054600181018255908352912082518392600702909101908190620019ec90826200416a565b506020828101516001838101919091556040808501516002850180546001600160a01b0319166001600160a01b03909216919091179055606085015160038501556080850151600485015560a0850151600585015560c090940151600690930192909255336000908152600b909152919091205462001a6c91906200424c565b336000818152600c60209081526040808320878452825280832094909455600a90529190912080546001600160a01b031916909117905550949350505050565b60008060098560405162001ac1919062003a10565b90815260408051602092819003830181206000878152935290822054925060089062001aef90889062003a10565b9081526020016040518091039020828154811062001b115762001b1162003a2e565b90600052602060002090600702016040518060e001604052908160008201805462001b3c9062003a44565b80601f016020809104026020016040519081016040528092919081815260200182805462001b6a9062003a44565b801562001bbb5780601f1062001b8f5761010080835404028352916020019162001bbb565b820191906000526020600020905b81548152906001019060200180831162001b9d57829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b03166040808301919091526003830154606083015260048301546080830152600583015460a083015260069092015460c0909101525190915060009060089062001c2590899062003a10565b9081526020016040518091039020600160088960405162001c47919062003a10565b9081526040519081900360200190205462001c6391906200424c565b8154811062001c765762001c7662003a2e565b906000526020600020906007020160010154905060088760405162001c9c919062003a10565b9081526020016040518091039020600160088960405162001cbe919062003a10565b9081526040519081900360200190205462001cda91906200424c565b8154811062001ced5762001ced62003a2e565b906000526020600020906007020160088860405162001d0d919062003a10565b9081526020016040518091039020848154811062001d2f5762001d2f62003a2e565b600091825260209091206007909102018062001d4c8382620042bb565b506001828101549082015560028083015490820180546001600160a01b0319166001600160a01b0390921691909117905560038083015490820155600480830154908201556005808301549082015560069182015491015560405160089062001db790899062003a10565b908152602001604051809103902080548062001dd75762001dd7620043a4565b6000828152602081206000199092019160078302019062001df982826200360c565b506000600182018190556002820180546001600160a01b0319169055600382018190556004820181905560058201819055600690910155905560405160099062001e4590899062003a10565b9081526040805191829003602090810183206000898152915290812055839060099062001e74908a9062003a10565b90815260408051602092819003830190206000858152908352818120939093556001600160a01b038916808452600c8352818420898552835281842054908452600b9092528220805491929162001ece906001906200424c565b8154811062001ee15762001ee162003a2e565b6000918252602080832060016007909302018201546001600160a01b038c168452600b909152604090922080549293509162001f1e91906200424c565b8154811062001f315762001f3162003a2e565b9060005260206000209060070201600b60008a6001600160a01b03166001600160a01b03168152602001908152602001600020838154811062001f785762001f7862003a2e565b600091825260209091206007909102018062001f958382620042bb565b506001828101549082015560028083015490820180546001600160a01b0319166001600160a01b03928316179055600380840154908301556004808401549083015560058084015490830155600692830154929091019190915588166000908152600b60205260409020805480620020115762002011620043a4565b600082815260208120600019909201916007830201906200203382826200360c565b506000600182018190556002820180546001600160a01b03199081169091556003830182905560048301829055600583018290556006909201819055919092556001600160a01b038a8116808352600c6020908152604080852087865282528085208890558c8552600a9091529092208054938416905591909116908190036200214c5787336001600160a01b031660038c604051620020d4919062003a10565b908152602001604051809103902060009054906101000a90046001600160a01b03166001600160a01b03167f541abee13d29b66545e8abd78329040d0c50041abfb698dc5918f2c021eed0938d89606001518a60800151426040516200213e949392919062003b99565b60405180910390a4620021de565b87896001600160a01b031660038c60405162002169919062003a10565b908152602001604051809103902060009054906101000a90046001600160a01b03166001600160a01b03167f874eea0681d026073b93b7c815b3106f2af99ac700ab040b0984fd1fdce0c67f8d338a606001518b6080015142604051620021d5959493929190620043ba565b60405180910390a45b5060019998505050505050505050565b60008060088560405162002203919062003a10565b908152602001604051809103902060098660405162002223919062003a10565b90815260200160405180910390206000858152602001908152602001600020548154811062002256576200225662003a2e565b90600052602060002090600702016040518060e0016040529081600082018054620022819062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620022af9062003a44565b8015620023005780601f10620022d45761010080835404028352916020019162002300565b820191906000526020600020905b815481529060010190602001808311620022e257829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b03166040820152600382015460608201526004820154608080830191909152600583015460a083015260069092015460c0909101528101519091503414620023a25760405162461bcd60e51b815260206004820152601660248201527521496e73756666696369656e742070617976616c756560501b604482015260640162000171565b600385604051620023b4919062003a10565b9081526040519081900360200181205460608301516323b872dd60e01b83526001600160a01b038781166004850152336024850152604484019190915216906323b872dd906064016020604051808303816000875af11580156200241c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002442919062003b79565b506001600160a01b0384166108fc6103e862002461346103e3620043fc565b6200246d919062004298565b6040518115909202916000818181858888f19350505050158015620017f1573d6000803e3d6000fd5b60078181548110620024a757600080fd5b6000918252602090912060079091020180546001820180546001600160a01b03909216935090620024d89062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620025069062003a44565b8015620025575780601f106200252b5761010080835404028352916020019162002557565b820191906000526020600020905b8154815290600101906020018083116200253957829003601f168201915b50505050600283015460038401546004850154600586015460069096015494959294919350916001600160a01b03169087565b60056020528160005260406000208181548110620025a757600080fd5b90600052602060002001600091509150508054620025c59062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620025f39062003a44565b8015620026445780601f10620026185761010080835404028352916020019162002644565b820191906000526020600020905b8154815290600101906020018083116200262657829003601f168201915b505050505081565b62002656620034e5565b60004711620026955760405162461bcd60e51b815260206004820152600a6024820152696e6f2062616c616e636560b01b604482015260640162000171565b47620026a96000546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015620026e2573d6000803e3d6000fd5b5050565b620026f0620034e5565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b620027256200364b565b6000806003846040516200273a919062003a10565b908152604051908190036020019020546001600160a01b03169050801562002918576001600160a01b0381166000908152600460205260409020546007805490919081106200278d576200278d62003a2e565b60009182526020918290206040805160e0810190915260079092020180546001600160a01b031682526001810180549293919291840191620027cf9062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620027fd9062003a44565b80156200284e5780601f1062002822576101008083540402835291602001916200284e565b820191906000526020600020905b8154815290600101906020018083116200283057829003601f168201915b505050505081526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016006820154815250509250806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620028ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200291591906200427e565b91505b50915091565b62002928620034e5565b62002934600062003551565b565b6060600083116200295b5760405162461bcd60e51b8152600401620001719062004416565b600082116200297e5760405162461bcd60e51b8152600401620001719062004438565b6000826200298e6001866200424c565b6200299a9190620043fc565b90506000620029aa848362004458565b9050600886604051620029be919062003a10565b90815260405190819003602001902054811115620029fb57600886604051620029e8919062003a10565b9081526040519081900360200190205490505b62002a0782826200424c565b6001600160401b0381111562002a215762002a21620037b4565b60405190808252806020026020018201604052801562002a5e57816020015b62002a4a6200369a565b81526020019060019003908162002a405790505b509250815b8181101562002bda5760088760405162002a7e919062003a10565b9081526020016040518091039020818154811062002aa05762002aa062003a2e565b90600052602060002090600702016040518060e001604052908160008201805462002acb9062003a44565b80601f016020809104026020016040519081016040528092919081815260200182805462002af99062003a44565b801562002b4a5780601f1062002b1e5761010080835404028352916020019162002b4a565b820191906000526020600020905b81548152906001019060200180831162002b2c57829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b031660408201526003820154606082015260048201546080820152600582015460a082015260069091015460c0909101528462002ba685846200424c565b8151811062002bb95762002bb962003a2e565b6020026020010181905250808062002bd19062004262565b91505062002a63565b5050509392505050565b6060806000841162002c0a5760405162461bcd60e51b8152600401620001719062004416565b6000831162002c2d5760405162461bcd60e51b8152600401620001719062004438565b60008362002c3d6001876200424c565b62002c499190620043fc565b9050600062002c59858362004458565b60075490915081111562002c6c57506007545b62002c7882826200424c565b6001600160401b0381111562002c925762002c92620037b4565b60405190808252806020026020018201604052801562002ccf57816020015b62002cbb6200364b565b81526020019060019003908162002cb15790505b50935062002cde82826200424c565b6001600160401b0381111562002cf85762002cf8620037b4565b60405190808252806020026020018201604052801562002d22578160200160208202803683370190505b509250815b8181101562002f47576007818154811062002d465762002d4662003a2e565b60009182526020918290206040805160e0810190915260079092020180546001600160a01b03168252600181018054929391929184019162002d889062003a44565b80601f016020809104026020016040519081016040528092919081815260200182805462002db69062003a44565b801562002e075780601f1062002ddb5761010080835404028352916020019162002e07565b820191906000526020600020905b81548152906001019060200180831162002de957829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546001600160a01b0316608082015260069091015460a0909101528562002e5985846200424c565b8151811062002e6c5762002e6c62003a2e565b60200260200101819052506007818154811062002e8d5762002e8d62003a2e565b600091825260209182902060079091020154604080516318160ddd60e01b815290516001600160a01b03909216926318160ddd926004808401938290030181865afa15801562002ee1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f0791906200427e565b8462002f1485846200424c565b8151811062002f275762002f2762003a2e565b60209081029190910101528062002f3e8162004262565b91505062002d27565b5050509250929050565b600b602052816000526040600020818154811062002f6e57600080fd5b90600052602060002090600702016000915091505080600001805462002f949062003a44565b80601f016020809104026020016040519081016040528092919081815260200182805462002fc29062003a44565b8015620030135780601f1062002fe75761010080835404028352916020019162003013565b820191906000526020600020905b81548152906001019060200180831162002ff557829003601f168201915b50505060018401546002850154600386015460048701546005880154600690980154969793966001600160a01b039093169550909350919087565b8151602081840181018051600882529282019185019190912091905280548290811062002f6e57600080fd5b62003084620034e5565b6001600160a01b038116620030eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000171565b620030f68162003551565b50565b6060600083116200311e5760405162461bcd60e51b8152600401620001719062004416565b60008211620031415760405162461bcd60e51b8152600401620001719062004438565b600082620031516001866200424c565b6200315d9190620043fc565b905060006200316d848362004458565b6001600160a01b0387166000908152600b6020526040902054909150811115620031ac57506001600160a01b0385166000908152600b60205260409020545b620031b882826200424c565b6001600160401b03811115620031d257620031d2620037b4565b6040519080825280602002602001820160405280156200320f57816020015b620031fb6200369a565b815260200190600190039081620031f15790505b509250815b8181101562002bda576001600160a01b0387166000908152600b602052604090208054829081106200324a576200324a62003a2e565b90600052602060002090600702016040518060e0016040529081600082018054620032759062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620032a39062003a44565b8015620032f45780601f10620032c857610100808354040283529160200191620032f4565b820191906000526020600020905b815481529060010190602001808311620032d657829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b031660408201526003820154606082015260048201546080820152600582015460a082015260069091015460c090910152846200335085846200424c565b8151811062003363576200336362003a2e565b602002602001018190525080806200337b9062004262565b91505062003214565b600080805b336000908152600b60205260409020548110156200344957336000908152600b602052604090208054620033e9919083908110620033cb57620033cb62003a2e565b90600052602060002090600702016000018054620016279062003a44565b6200343457336000908152600b6020526040902080548290811062003412576200341262003a2e565b9060005260206000209060070201600301548262003431919062004458565b91505b80620034408162004262565b91505062003389565b5062003456838262004458565b62003462853362001475565b1015949350505050565b60006001600d600082825462003483919062004458565b9091555050600d5460408051602081018690529081018490526060808201929092523390911b6bffffffffffffffffffffffff1916608082015243609482015260b40160408051601f1981840301815291905280516020909101209392505050565b33620034f96000546001600160a01b031690565b6001600160a01b031614620029345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000171565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610854806200446f83390190565b828054828255906000526020600020908101928215620035fa579160200282015b82811115620035fa5782518290620035e990826200416a565b5091602001919060010190620035d0565b5062003608929150620036e0565b5090565b5080546200361a9062003a44565b6000825580601f106200362b575050565b601f016020900490600052602060002090810190620030f6919062003701565b6040518060e0016040528060006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040518060e00160405280606081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081525090565b8082111562003608576000620036f782826200360c565b50600101620036e0565b5b8082111562003608576000815560010162003702565b600080858511156200372957600080fd5b838611156200373757600080fd5b5050820193919092039150565b60005b838110156200376157818101518382015260200162003747565b50506000910152565b600081518084526200378481602086016020860162003744565b601f01601f19169290920160200192915050565b602081526000620037ad60208301846200376a565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715620037f057620037f0620037b4565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620038215762003821620037b4565b604052919050565b8015158114620030f657600080fd5b8051620038458162003829565b919050565b60006001600160401b03821115620038665762003866620037b4565b50601f01601f191660200190565b600082601f8301126200388657600080fd5b81516200389d62003897826200384a565b620037f6565b818152846020838601011115620038b357600080fd5b620038c682602083016020870162003744565b949350505050565b6001600160a01b0381168114620030f657600080fd5b80516200384581620038ce565b6000602082840312156200390457600080fd5b81516001600160401b03808211156200391c57600080fd5b9083019061014082860312156200393257600080fd5b6200393c620037ca565b620039478362003838565b81526020830151828111156200395c57600080fd5b6200396a8782860162003874565b6020830152506040830151828111156200398357600080fd5b620039918782860162003874565b604083015250606083015182811115620039aa57600080fd5b620039b88782860162003874565b6060830152506080830151608082015260a083015160a082015260c083015160c0820152620039ea60e08401620038e4565b60e082015261010083810151908201526101209283015192810192909252509392505050565b6000825162003a2481846020870162003744565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062003a5957607f821691505b60208210810362003a7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000815462003a8f8162003a44565b80855260206001838116801562003aaf576001811462003aca5762003afa565b60ff1985168884015283151560051b88018301955062003afa565b866000528260002060005b8581101562003af25781548a820186015290830190840162003ad5565b890184019650505b505050505092915050565b602080825282546001600160a01b03169082015260e06040820152600062003b3561010083016001850162003a80565b6002840154606084015260038401546080840152600484015460a084015260058401546001600160a01b031660c084015260069093015460e0909201919091525090565b60006020828403121562003b8c57600080fd5b8151620037ad8162003829565b60808152600062003bae60808301876200376a565b6020830195909552506040810192909252606090910152919050565b60006020828403121562003bdd57600080fd5b5035919050565b600060018060a01b03808a16835260e0602084015262003c0860e084018a6200376a565b60408401989098526060830196909652506080810193909352921660a082015260c0015292915050565b6000806040838503121562003c4657600080fd5b823562003c5381620038ce565b946020939093013593505050565b6000806040838503121562003c7557600080fd5b823562003c8281620038ce565b9150602083013562003c948162003829565b809150509250929050565b600082601f83011262003cb157600080fd5b813562003cc262003897826200384a565b81815284602083860101111562003cd857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121562003d0857600080fd5b81356001600160401b0381111562003d1f57600080fd5b620015198482850162003c9f565b600060018060a01b03808351168452602083015160e0602086015262003d5760e08601826200376a565b90506040840151604086015260608401516060860152608084015160808601528160a08501511660a086015260c084015160c0860152809250505092915050565b60408152600062003dad604083018562003d2d565b90508260208301529392505050565b60006020828403121562003dcf57600080fd5b8135620037ad81620038ce565b6000806040838503121562003df057600080fd5b823562003dfd81620038ce565b915060208301356001600160401b0381111562003e1957600080fd5b62003e278582860162003c9f565b9150509250929050565b60008060006060848603121562003e4757600080fd5b83356001600160401b0381111562003e5e57600080fd5b62003e6c8682870162003c9f565b9660208601359650604090950135949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101562003f2a57603f19898403018552815160e0815181865262003ed2828701826200376a565b838b0151878c0152898401516001600160a01b03168a880152606080850151908801526080808501519088015260a0808501519088015260c09384015193909601929092525050938601939086019060010162003ea9565b509098975050505050505050565b6000806040838503121562003f4c57600080fd5b50508035926020909101359150565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101562003fb657605f1988870301855262003fa386835162003d2d565b9550938201939082019060010162003f84565b50508584038187015286518085528782019482019350915060005b8281101562003fef5784518452938101939281019260010162003fd1565b5091979650505050505050565b600080604083850312156200401057600080fd5b82356001600160401b038111156200402757600080fd5b620040358582860162003c9f565b925050602083013562003c9481620038ce565b60e0815260006200405d60e083018a6200376a565b6020830198909852506001600160a01b039590951660408601526060850193909352608084019190915260a083015260c090910152919050565b60008060408385031215620040ab57600080fd5b82356001600160401b03811115620040c257600080fd5b620040d08582860162003c9f565b95602094909401359450505050565b600080600060608486031215620040f557600080fd5b83356200410281620038ce565b95602085013595506040909401359392505050565b601f8211156200416557600081815260208120601f850160051c81016020861015620041405750805b601f850160051c820191505b8181101562004161578281556001016200414c565b5050505b505050565b81516001600160401b03811115620041865762004186620037b4565b6200419e8162004197845462003a44565b8462004117565b602080601f831160018114620041d65760008415620041bd5750858301515b600019600386901b1c1916600185901b17855562004161565b600085815260208120601f198616915b828110156200420757888601518255948401946001909101908401620041e6565b5085821015620042265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000fa95762000fa962004236565b60006001820162004277576200427762004236565b5060010190565b6000602082840312156200429157600080fd5b5051919050565b600082620042b657634e487b7160e01b600052601260045260246000fd5b500490565b818103620042c7575050565b620042d3825462003a44565b6001600160401b03811115620042ed57620042ed620037b4565b620042fe8162004197845462003a44565b6000601f8211600181146200433557600083156200431c5750848201545b600019600385901b1c1916600184901b1784556200439d565b600085815260209020601f19841690600086815260209020845b838110156200437157828601548255600195860195909101906020016200434f565b5085831015620043905781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b634e487b7160e01b600052603160045260246000fd5b60a081526000620043cf60a08301886200376a565b6001600160a01b039690961660208301525060408101939093526060830191909152608090910152919050565b808202811582820484141762000fa95762000fa962004236565b60208082526008908201526710b8273ab6b132b960c11b604082015260600190565b602080825260069082015265217053697a6560d01b604082015260600190565b8082018082111562000fa95762000fa96200423656fe608060405234801561001057600080fd5b5060405161085438038061085483398101604081905261002f91610065565b6000928355600191909155600380546001600160a01b0319166001600160a01b03909216919091179055600255426006556100ab565b60008060006060848603121561007a57600080fd5b83516020850151604086015191945092506001600160a01b03811681146100a057600080fd5b809150509250925092565b61079a806100ba6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063736bf59111610071578063736bf591146101495780637a40624b1461015257806398f9724f1461015b578063a0c10c2d14610164578063c5cc6b6a1461016d578063f79a14141461019857600080fd5b806318160ddd146100b957806322f4596f146100d057806323b872dd146100d9578063313ce567146100fc57806340c10f191461010b57806370a0823114610120575b600080fd5b6008545b6040519081526020015b60405180910390f35b6100bd60005481565b6100ec6100e736600461065b565b6101a1565b60405190151581526020016100c7565b604051600081526020016100c7565b61011e610119366004610697565b6101b8565b005b6100bd61012e3660046106c1565b6001600160a01b031660009081526007602052604090205490565b6100bd60025481565b6100bd60065481565b6100bd60045481565b6100bd60055481565b600354610180906001600160a01b031681565b6040516001600160a01b0390911681526020016100c7565b6100bd60015481565b60006101ae8484846102d5565b5060019392505050565b6003546001600160a01b0316331461020f5760405162461bcd60e51b81526020600482015260156024820152741bdb9b1e48199858dd1bdc9e4818d85b881b5a5b9d605a1b60448201526064015b60405180910390fd5b600154819081111561025a5760405162461bcd60e51b8152602060048201526014602482015273185b5bdd5b9d08195e18d959591cc81b1a5b5a5d60621b6044820152606401610206565b6000548160025461026b91906106f9565b11156102af5760405162461bcd60e51b81526020600482015260136024820152721b585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610206565b6102b98382610567565b80600260008282546102cb91906106f9565b9091555050505050565b6001600160a01b03831661032b5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610206565b6001600160a01b0382166103815760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610206565b6003546040516336b87bd760e11b81523360048201526001600160a01b0390911690636d70f7ae90602401602060405180830381865afa1580156103c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ed9190610712565b6104255760405162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b6044820152606401610206565b600081116104625760405162461bcd60e51b815260206004820152600a60248201526907472616e7366657220360b41b6044820152606401610206565b6001600160a01b038216600090815260076020526040902054600003610498576004805490600061049283610734565b91905055505b6001600160a01b038316600090815260076020526040902054818110156105015760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e6365006044820152606401610206565b6001600160a01b03848116600081815260076020526040808220868603815593871682528120805486019055525460000361054c57600480549060006105468361074d565b91905055505b6005805490600061055c83610734565b919050555050505050565b6001600160a01b0382166105bd5760405162461bcd60e51b815260206004820152601860248201527f6d696e7420746f20746865207a65726f206164647265737300000000000000006044820152606401610206565b6001600160a01b0382166000908152600760205260409020546000036105f357600480549060006105ed83610734565b91905055505b806008600082825461060591906106f9565b90915550506001600160a01b0382166000908152600760205260408120805483019055600580549161063683610734565b91905055505050565b80356001600160a01b038116811461065657600080fd5b919050565b60008060006060848603121561067057600080fd5b6106798461063f565b92506106876020850161063f565b9150604084013590509250925092565b600080604083850312156106aa57600080fd5b6106b38361063f565b946020939093013593505050565b6000602082840312156106d357600080fd5b6106dc8261063f565b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070c5761070c6106e3565b92915050565b60006020828403121561072457600080fd5b815180151581146106dc57600080fd5b600060018201610746576107466106e3565b5060010190565b60008161075c5761075c6106e3565b50600019019056fea2646970667358221220de42cb1efbd12f2d16301b3bf82343ed2650bbc8c94106f4d7fee9c4b28f694864736f6c63430008120033a264697066735822122031c6f820553cce66247edf440483f487c0816940f71a237d3ae060db28dee8e764736f6c63430008120033000000000000000000000000530adb2c270a1ba125f7c0b8bc2b7d6e5f42ce7c
Deployed Bytecode
0x608060405260043610620001275760003560e01c80638da5cb5b11620000a3578063dde415e4116200006d578063dde415e41462000ec5578063eeea02bf1462000eea578063efd8c9381462000f24578063f2fde38b1462000f49578063f47ef0d11462000f6e5762000132565b80638da5cb5b1462000dee578063a786bc3d1462000e22578063b4afa7dc1462000e5c578063d1da96211462000e905762000132565b806369aa1ab711620000f157806369aa1ab71462000d165780636d70f7ae1462000d4b578063715018a61462000d9057806378a895671462000da85780637cf2385d1462000dc95762000132565b8063137559781462000c605780631b6258141462000ca35780633ccfd60b1462000cd7578063558a72971462000cf15762000132565b366200013257600080fd5b60003660603332146200017a5760405162461bcd60e51b8152600401620001719060208082526004908201526321454f4160e01b604082015260600190565b60405180910390fd5b620001f76200018e60166000858762003718565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601681527519185d184e985c1c1b1a58d85d1a5bdb8bda9cdbdb8b60521b6020820152915062000f939050565b6200022f5760405162461bcd60e51b815260206004820152600760248201526610b432b0b232b960c91b604482015260640162000171565b60006200023b60015490565b90506200024c600180546001019055565b60006200025d846016818862003718565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250600254604051631fa01dcb60e31b815295965090946001600160a01b03909116935063fd00ee589250620002c79150859060040162003798565b600060405180830381865afa158015620002e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200030f9190810190620038f1565b8051909150620003595760405162461bcd60e51b8152602060048201526014602482015273085a9cdbdb88195e1958dd5d194819985a5b195960621b604482015260640162000171565b620003878160400151604051806040016040528060068152602001656465706c6f7960d01b81525062000f93565b15620004f15760006001600160a01b031660038260600151604051620003ae919062003a10565b908152604051908190036020019020546001600160a01b031614620004005760405162461bcd60e51b8152602060048201526007602482015266216465706c6f7960c81b604482015260640162000171565b6200041a816060015182608001518360a001518662000fb8565b6003816060015160405162000430919062003a10565b9081526040519081900360200181205460608301516001600160a01b03909116917f329492a54e0d62511dc7c776ba7e30f08feb4d034c07931cacb563733442e83d916007916004916000916003916200048a9162003a10565b9081526040805160209281900383019020546001600160a01b0316835290820192909252016000205481548110620004c657620004c662003a2e565b9060005260206000209060070201604051620004e3919062003b05565b60405180910390a262000c35565b6200051d8160400151604051806040016040528060048152602001631b5a5b9d60e21b81525062000f93565b15620006a1576000600382606001516040516200053b919062003a10565b908152604051908190036020019020546001600160a01b03169050806200058d5760405162461bcd60e51b8152602060048201526005602482015264085b5a5b9d60da1b604482015260640162000171565b60c08201516040516340c10f1960e01b815233600482015260248101919091526001600160a01b038216906340c10f1990604401600060405180830381600087803b158015620005dc57600080fd5b505af1158015620005f1573d6000803e3d6000fd5b5050505062000605338360600151620012f9565b6200061c576200061a33836060015162001423565b505b336001600160a01b031660006001600160a01b03167fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6003856060015160405162000668919062003a10565b9081526040805191829003602090810183205460c08901516001600160a01b039091168452908301520160405180910390a35062000c35565b620006d18160400151604051806040016040528060088152602001673a3930b739b332b960c11b81525062000f93565b156200082b57600060038260600151604051620006ef919062003a10565b9081526040519081900360200181205460e084015160c08501516323b872dd60e01b84523360048501526001600160a01b039182166024850152604484015216915081906323b872dd906064016020604051808303816000875af11580156200075c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000782919062003b79565b50620007978260e001518360600151620012f9565b620007b257620007b08260e00151836060015162001423565b505b620007c282606001513362001475565b600003620007dc57620007da33836060015162001523565b505b8160e001516001600160a01b0316336001600160a01b03167fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6003856060015160405162000668919062003a10565b620008578160400151604051806040016040528060048152602001631b1a5cdd60e21b81525062000f93565b15620009795760006001600160a01b0316600382606001516040516200087e919062003a10565b908152604051908190036020019020546001600160a01b031603620008ce5760405162461bcd60e51b8152602060048201526005602482015264085b1a5cdd60da1b604482015260640162000171565b6000620008ea82606001518360c00151846101000151620017fd565b905080336001600160a01b0316600384606001516040516200090d919062003a10565b90815260405190819003602001812054606086015160c08701516101008801516001600160a01b03909316937f8d584e9d6b0fbea0b734760666eee515c84e7a67164fcb45777e83cf448ed062936200096a939291429062003b99565b60405180910390a45062000c35565b620009a78160400151604051806040016040528060068152602001651d5b9b1a5cdd60d21b81525062000f93565b1562000a675760006001600160a01b031660038260600151604051620009ce919062003a10565b908152604051908190036020019020546001600160a01b03161480159062000a1257506101208101516000908152600a60205260409020546001600160a01b031633145b62000a4a5760405162461bcd60e51b8152602060048201526007602482015266085d5b9b1a5cdd60ca1b604482015260640162000171565b62000a6081606001513383610120015162001aac565b5062000c35565b62000a9281604001516040518060400160405280600381526020016262757960e81b81525062000f93565b1562000c305760006001600160a01b03166003826060015160405162000ab9919062003a10565b908152604051908190036020019020546001600160a01b03161480159062000afd57506101208101516000908152600a60205260409020546001600160a01b031615155b62000b345760405162461bcd60e51b815260040162000171906020808252600490820152632162757960e01b604082015260600190565b6060810151610120820180516000908152600a6020526040902054905162000b6792916001600160a01b031690620021ee565b506060810151610120820180516000908152600a6020526040902054905162000b9b92916001600160a01b03169062001aac565b506101208101516000908152600a602052604090819020546060830151915133926001600160a01b03909216917fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f9160039162000bf89162003a10565b9081526040805191829003602090810183205460c08801516001600160a01b039091168452908301520160405180910390a362000c35565b600080fd5b6040805160006020820152016040516020818303038152906040529350505050915050805190602001f35b34801562000c6d57600080fd5b5062000c8562000c7f36600462003bca565b62002496565b60405162000c9a979695949392919062003be4565b60405180910390f35b34801562000cb057600080fd5b5062000cc862000cc236600462003c32565b6200258a565b60405162000c9a919062003798565b34801562000ce457600080fd5b5062000cef6200264c565b005b34801562000cfe57600080fd5b5062000cef62000d1036600462003c61565b620026e6565b34801562000d2357600080fd5b5062000d3b62000d3536600462003cf5565b6200271b565b60405162000c9a92919062003d98565b34801562000d5857600080fd5b5062000d7f62000d6a36600462003dbc565b60066020526000908152604090205460ff1681565b604051901515815260200162000c9a565b34801562000d9d57600080fd5b5062000cef6200291e565b34801562000db557600080fd5b506007545b60405190815260200162000c9a565b34801562000dd657600080fd5b5062000d7f62000de836600462003ddc565b620012f9565b34801562000dfb57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200162000c9a565b34801562000e2f57600080fd5b5062000e0962000e4136600462003bca565b600a602052600090815260409020546001600160a01b031681565b34801562000e6957600080fd5b5062000e8162000e7b36600462003e31565b62002936565b60405162000c9a919062003e82565b34801562000e9d57600080fd5b5062000eb562000eaf36600462003f38565b62002be4565b60405162000c9a92919062003f5b565b34801562000ed257600080fd5b5062000dba62000ee436600462003ffc565b62001475565b34801562000ef757600080fd5b5062000f0f62000f0936600462003c32565b62002f51565b60405162000c9a979695949392919062004048565b34801562000f3157600080fd5b5062000f0f62000f4336600462004097565b6200304e565b34801562000f5657600080fd5b5062000cef62000f6836600462003dbc565b6200307a565b34801562000f7b57600080fd5b5062000e8162000f8d366004620040df565b620030f9565b6000818051906020012083805190602001201490505b92915050565b80546001019055565b835160041462000ff35760405162461bcd60e51b8152602060048201526005602482015264217469636b60d81b604482015260640162000171565b60008311620010325760405162461bcd60e51b815260206004820152600a602482015269216d6178537570706c7960b01b604482015260640162000171565b60008211620010755760405162461bcd60e51b815260206004820152600e60248201526d08585b5bdd5b9d14195c935a5b9d60921b604482015260640162000171565b81831015620010c75760405162461bcd60e51b815260206004820152601960248201527f6d6178537570706c79203c20616d6f756e745065724d696e7400000000000000604482015260640162000171565b60006001600160a01b0316600385604051620010e4919062003a10565b908152604051908190036020019020546001600160a01b031614620011375760405162461bcd60e51b815260206004820152600860248201526719195c1b1bde595960c21b604482015260640162000171565b60008383306040516200114a90620035a1565b92835260208301919091526001600160a01b03166040820152606001604051809103906000f08015801562001183573d6000803e3d6000fd5b5090508060038660405162001199919062003a10565b90815260408051918290036020908101832080546001600160a01b039586166001600160a01b03199182161790915560e084018352858516845290830189815291830188905260608301879052608083018690523360a08401524260c0840152600780546001810182556000829052845191027fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68881018054929096169190921617845590519192839290917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68901906200127390826200416a565b5060408201516002820155606082015160038201556080820151600482015560a08201516005820180546001600160a01b0319166001600160a01b0390921691909117905560c090910151600690910155600754620012d5906001906200424c565b6001600160a01b039092166000908152600460205260409020919091555050505050565b6000805b6001600160a01b03841660009081526005602052604090205481101562001419576001600160a01b03841660009081526005602052604090208054620013f391908390811062001351576200135162003a2e565b906000526020600020018054620013689062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620013969062003a44565b8015620013e75780601f10620013bb57610100808354040283529160200191620013e7565b820191906000526020600020905b815481529060010190602001808311620013c957829003601f168201915b50505050508462000f93565b156200140457600191505062000fa9565b80620014108162004262565b915050620012fd565b5060009392505050565b6000620014318383620012f9565b6200146c576001600160a01b0383166000908152600560209081526040822080546001810182559083529120016200146a83826200416a565b505b50600192915050565b6000806003846040516200148a919062003a10565b908152604051908190036020019020546001600160a01b0316905080156200151c576040516370a0823160e01b81526001600160a01b0384811660048301528216906370a0823190602401602060405180830381865afa158015620014f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200151991906200427e565b91505b5092915050565b6000620015318383620012f9565b6200153f5750600062000fa9565b6001600160a01b03831660009081526005602052604081205462001566906001906200424c565b6001600160401b03811115620015805762001580620037b4565b604051908082528060200260200182016040528015620015b557816020015b60608152602001906001900390816200159f5790505b5090506000805b6001600160a01b038616600090815260056020526040902054811015620017c5576001600160a01b03861660009081526005602052604090208054620016b291908390811062001610576200161062003a2e565b906000526020600020018054620016279062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620016559062003a44565b8015620016a65780601f106200167a57610100808354040283529160200191620016a6565b820191906000526020600020905b8154815290600101906020018083116200168857829003601f168201915b50505050508662000f93565b620017b0576001600160a01b0386166000908152600560205260409020805482908110620016e457620016e462003a2e565b906000526020600020018054620016fb9062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620017299062003a44565b80156200177a5780601f106200174e576101008083540402835291602001916200177a565b820191906000526020600020905b8154815290600101906020018083116200175c57829003601f168201915b505050505083838151811062001794576200179462003a2e565b60200260200101819052508180620017ac9062004262565b9250505b80620017bc8162004262565b915050620015bc565b506001600160a01b03851660009081526005602090815260409091208351620017f192850190620035af565b50600195945050505050565b60006200180b848462003384565b620018515760405162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e742062616c616e63652160581b604482015260640162000171565b60006200185f84846200346c565b905060006040518060e00160405280878152602001838152602001336001600160a01b031681526020018681526020018581526020018686620018a3919062004298565b8152602001428152509050600886604051620018c0919062003a10565b908152604051602091819003820190208054600181018255600091825291902082518392600702909101908190620018f990826200416a565b506020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015560a0820151816005015560c08201518160060155505060016008876040516200196f919062003a10565b908152604051908190036020019020546200198b91906200424c565b6009876040516200199d919062003a10565b9081526040805160209281900383019020600086815290835281812093909355338352600b825282208054600181018255908352912082518392600702909101908190620019ec90826200416a565b506020828101516001838101919091556040808501516002850180546001600160a01b0319166001600160a01b03909216919091179055606085015160038501556080850151600485015560a0850151600585015560c090940151600690930192909255336000908152600b909152919091205462001a6c91906200424c565b336000818152600c60209081526040808320878452825280832094909455600a90529190912080546001600160a01b031916909117905550949350505050565b60008060098560405162001ac1919062003a10565b90815260408051602092819003830181206000878152935290822054925060089062001aef90889062003a10565b9081526020016040518091039020828154811062001b115762001b1162003a2e565b90600052602060002090600702016040518060e001604052908160008201805462001b3c9062003a44565b80601f016020809104026020016040519081016040528092919081815260200182805462001b6a9062003a44565b801562001bbb5780601f1062001b8f5761010080835404028352916020019162001bbb565b820191906000526020600020905b81548152906001019060200180831162001b9d57829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b03166040808301919091526003830154606083015260048301546080830152600583015460a083015260069092015460c0909101525190915060009060089062001c2590899062003a10565b9081526020016040518091039020600160088960405162001c47919062003a10565b9081526040519081900360200190205462001c6391906200424c565b8154811062001c765762001c7662003a2e565b906000526020600020906007020160010154905060088760405162001c9c919062003a10565b9081526020016040518091039020600160088960405162001cbe919062003a10565b9081526040519081900360200190205462001cda91906200424c565b8154811062001ced5762001ced62003a2e565b906000526020600020906007020160088860405162001d0d919062003a10565b9081526020016040518091039020848154811062001d2f5762001d2f62003a2e565b600091825260209091206007909102018062001d4c8382620042bb565b506001828101549082015560028083015490820180546001600160a01b0319166001600160a01b0390921691909117905560038083015490820155600480830154908201556005808301549082015560069182015491015560405160089062001db790899062003a10565b908152602001604051809103902080548062001dd75762001dd7620043a4565b6000828152602081206000199092019160078302019062001df982826200360c565b506000600182018190556002820180546001600160a01b0319169055600382018190556004820181905560058201819055600690910155905560405160099062001e4590899062003a10565b9081526040805191829003602090810183206000898152915290812055839060099062001e74908a9062003a10565b90815260408051602092819003830190206000858152908352818120939093556001600160a01b038916808452600c8352818420898552835281842054908452600b9092528220805491929162001ece906001906200424c565b8154811062001ee15762001ee162003a2e565b6000918252602080832060016007909302018201546001600160a01b038c168452600b909152604090922080549293509162001f1e91906200424c565b8154811062001f315762001f3162003a2e565b9060005260206000209060070201600b60008a6001600160a01b03166001600160a01b03168152602001908152602001600020838154811062001f785762001f7862003a2e565b600091825260209091206007909102018062001f958382620042bb565b506001828101549082015560028083015490820180546001600160a01b0319166001600160a01b03928316179055600380840154908301556004808401549083015560058084015490830155600692830154929091019190915588166000908152600b60205260409020805480620020115762002011620043a4565b600082815260208120600019909201916007830201906200203382826200360c565b506000600182018190556002820180546001600160a01b03199081169091556003830182905560048301829055600583018290556006909201819055919092556001600160a01b038a8116808352600c6020908152604080852087865282528085208890558c8552600a9091529092208054938416905591909116908190036200214c5787336001600160a01b031660038c604051620020d4919062003a10565b908152602001604051809103902060009054906101000a90046001600160a01b03166001600160a01b03167f541abee13d29b66545e8abd78329040d0c50041abfb698dc5918f2c021eed0938d89606001518a60800151426040516200213e949392919062003b99565b60405180910390a4620021de565b87896001600160a01b031660038c60405162002169919062003a10565b908152602001604051809103902060009054906101000a90046001600160a01b03166001600160a01b03167f874eea0681d026073b93b7c815b3106f2af99ac700ab040b0984fd1fdce0c67f8d338a606001518b6080015142604051620021d5959493929190620043ba565b60405180910390a45b5060019998505050505050505050565b60008060088560405162002203919062003a10565b908152602001604051809103902060098660405162002223919062003a10565b90815260200160405180910390206000858152602001908152602001600020548154811062002256576200225662003a2e565b90600052602060002090600702016040518060e0016040529081600082018054620022819062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620022af9062003a44565b8015620023005780601f10620022d45761010080835404028352916020019162002300565b820191906000526020600020905b815481529060010190602001808311620022e257829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b03166040820152600382015460608201526004820154608080830191909152600583015460a083015260069092015460c0909101528101519091503414620023a25760405162461bcd60e51b815260206004820152601660248201527521496e73756666696369656e742070617976616c756560501b604482015260640162000171565b600385604051620023b4919062003a10565b9081526040519081900360200181205460608301516323b872dd60e01b83526001600160a01b038781166004850152336024850152604484019190915216906323b872dd906064016020604051808303816000875af11580156200241c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002442919062003b79565b506001600160a01b0384166108fc6103e862002461346103e3620043fc565b6200246d919062004298565b6040518115909202916000818181858888f19350505050158015620017f1573d6000803e3d6000fd5b60078181548110620024a757600080fd5b6000918252602090912060079091020180546001820180546001600160a01b03909216935090620024d89062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620025069062003a44565b8015620025575780601f106200252b5761010080835404028352916020019162002557565b820191906000526020600020905b8154815290600101906020018083116200253957829003601f168201915b50505050600283015460038401546004850154600586015460069096015494959294919350916001600160a01b03169087565b60056020528160005260406000208181548110620025a757600080fd5b90600052602060002001600091509150508054620025c59062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620025f39062003a44565b8015620026445780601f10620026185761010080835404028352916020019162002644565b820191906000526020600020905b8154815290600101906020018083116200262657829003601f168201915b505050505081565b62002656620034e5565b60004711620026955760405162461bcd60e51b815260206004820152600a6024820152696e6f2062616c616e636560b01b604482015260640162000171565b47620026a96000546001600160a01b031690565b6001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015620026e2573d6000803e3d6000fd5b5050565b620026f0620034e5565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b620027256200364b565b6000806003846040516200273a919062003a10565b908152604051908190036020019020546001600160a01b03169050801562002918576001600160a01b0381166000908152600460205260409020546007805490919081106200278d576200278d62003a2e565b60009182526020918290206040805160e0810190915260079092020180546001600160a01b031682526001810180549293919291840191620027cf9062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620027fd9062003a44565b80156200284e5780601f1062002822576101008083540402835291602001916200284e565b820191906000526020600020905b8154815290600101906020018083116200283057829003601f168201915b505050505081526020016002820154815260200160038201548152602001600482015481526020016005820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016006820154815250509250806001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620028ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200291591906200427e565b91505b50915091565b62002928620034e5565b62002934600062003551565b565b6060600083116200295b5760405162461bcd60e51b8152600401620001719062004416565b600082116200297e5760405162461bcd60e51b8152600401620001719062004438565b6000826200298e6001866200424c565b6200299a9190620043fc565b90506000620029aa848362004458565b9050600886604051620029be919062003a10565b90815260405190819003602001902054811115620029fb57600886604051620029e8919062003a10565b9081526040519081900360200190205490505b62002a0782826200424c565b6001600160401b0381111562002a215762002a21620037b4565b60405190808252806020026020018201604052801562002a5e57816020015b62002a4a6200369a565b81526020019060019003908162002a405790505b509250815b8181101562002bda5760088760405162002a7e919062003a10565b9081526020016040518091039020818154811062002aa05762002aa062003a2e565b90600052602060002090600702016040518060e001604052908160008201805462002acb9062003a44565b80601f016020809104026020016040519081016040528092919081815260200182805462002af99062003a44565b801562002b4a5780601f1062002b1e5761010080835404028352916020019162002b4a565b820191906000526020600020905b81548152906001019060200180831162002b2c57829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b031660408201526003820154606082015260048201546080820152600582015460a082015260069091015460c0909101528462002ba685846200424c565b8151811062002bb95762002bb962003a2e565b6020026020010181905250808062002bd19062004262565b91505062002a63565b5050509392505050565b6060806000841162002c0a5760405162461bcd60e51b8152600401620001719062004416565b6000831162002c2d5760405162461bcd60e51b8152600401620001719062004438565b60008362002c3d6001876200424c565b62002c499190620043fc565b9050600062002c59858362004458565b60075490915081111562002c6c57506007545b62002c7882826200424c565b6001600160401b0381111562002c925762002c92620037b4565b60405190808252806020026020018201604052801562002ccf57816020015b62002cbb6200364b565b81526020019060019003908162002cb15790505b50935062002cde82826200424c565b6001600160401b0381111562002cf85762002cf8620037b4565b60405190808252806020026020018201604052801562002d22578160200160208202803683370190505b509250815b8181101562002f47576007818154811062002d465762002d4662003a2e565b60009182526020918290206040805160e0810190915260079092020180546001600160a01b03168252600181018054929391929184019162002d889062003a44565b80601f016020809104026020016040519081016040528092919081815260200182805462002db69062003a44565b801562002e075780601f1062002ddb5761010080835404028352916020019162002e07565b820191906000526020600020905b81548152906001019060200180831162002de957829003601f168201915b505050918352505060028201546020820152600382015460408201526004820154606082015260058201546001600160a01b0316608082015260069091015460a0909101528562002e5985846200424c565b8151811062002e6c5762002e6c62003a2e565b60200260200101819052506007818154811062002e8d5762002e8d62003a2e565b600091825260209182902060079091020154604080516318160ddd60e01b815290516001600160a01b03909216926318160ddd926004808401938290030181865afa15801562002ee1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f0791906200427e565b8462002f1485846200424c565b8151811062002f275762002f2762003a2e565b60209081029190910101528062002f3e8162004262565b91505062002d27565b5050509250929050565b600b602052816000526040600020818154811062002f6e57600080fd5b90600052602060002090600702016000915091505080600001805462002f949062003a44565b80601f016020809104026020016040519081016040528092919081815260200182805462002fc29062003a44565b8015620030135780601f1062002fe75761010080835404028352916020019162003013565b820191906000526020600020905b81548152906001019060200180831162002ff557829003601f168201915b50505060018401546002850154600386015460048701546005880154600690980154969793966001600160a01b039093169550909350919087565b8151602081840181018051600882529282019185019190912091905280548290811062002f6e57600080fd5b62003084620034e5565b6001600160a01b038116620030eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000171565b620030f68162003551565b50565b6060600083116200311e5760405162461bcd60e51b8152600401620001719062004416565b60008211620031415760405162461bcd60e51b8152600401620001719062004438565b600082620031516001866200424c565b6200315d9190620043fc565b905060006200316d848362004458565b6001600160a01b0387166000908152600b6020526040902054909150811115620031ac57506001600160a01b0385166000908152600b60205260409020545b620031b882826200424c565b6001600160401b03811115620031d257620031d2620037b4565b6040519080825280602002602001820160405280156200320f57816020015b620031fb6200369a565b815260200190600190039081620031f15790505b509250815b8181101562002bda576001600160a01b0387166000908152600b602052604090208054829081106200324a576200324a62003a2e565b90600052602060002090600702016040518060e0016040529081600082018054620032759062003a44565b80601f0160208091040260200160405190810160405280929190818152602001828054620032a39062003a44565b8015620032f45780601f10620032c857610100808354040283529160200191620032f4565b820191906000526020600020905b815481529060010190602001808311620032d657829003601f168201915b50505091835250506001820154602082015260028201546001600160a01b031660408201526003820154606082015260048201546080820152600582015460a082015260069091015460c090910152846200335085846200424c565b8151811062003363576200336362003a2e565b602002602001018190525080806200337b9062004262565b91505062003214565b600080805b336000908152600b60205260409020548110156200344957336000908152600b602052604090208054620033e9919083908110620033cb57620033cb62003a2e565b90600052602060002090600702016000018054620016279062003a44565b6200343457336000908152600b6020526040902080548290811062003412576200341262003a2e565b9060005260206000209060070201600301548262003431919062004458565b91505b80620034408162004262565b91505062003389565b5062003456838262004458565b62003462853362001475565b1015949350505050565b60006001600d600082825462003483919062004458565b9091555050600d5460408051602081018690529081018490526060808201929092523390911b6bffffffffffffffffffffffff1916608082015243609482015260b40160408051601f1981840301815291905280516020909101209392505050565b33620034f96000546001600160a01b031690565b6001600160a01b031614620029345760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000171565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610854806200446f83390190565b828054828255906000526020600020908101928215620035fa579160200282015b82811115620035fa5782518290620035e990826200416a565b5091602001919060010190620035d0565b5062003608929150620036e0565b5090565b5080546200361a9062003a44565b6000825580601f106200362b575050565b601f016020900490600052602060002090810190620030f6919062003701565b6040518060e0016040528060006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160006001600160a01b03168152602001600081525090565b6040518060e00160405280606081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081525090565b8082111562003608576000620036f782826200360c565b50600101620036e0565b5b8082111562003608576000815560010162003702565b600080858511156200372957600080fd5b838611156200373757600080fd5b5050820193919092039150565b60005b838110156200376157818101518382015260200162003747565b50506000910152565b600081518084526200378481602086016020860162003744565b601f01601f19169290920160200192915050565b602081526000620037ad60208301846200376a565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715620037f057620037f0620037b4565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620038215762003821620037b4565b604052919050565b8015158114620030f657600080fd5b8051620038458162003829565b919050565b60006001600160401b03821115620038665762003866620037b4565b50601f01601f191660200190565b600082601f8301126200388657600080fd5b81516200389d62003897826200384a565b620037f6565b818152846020838601011115620038b357600080fd5b620038c682602083016020870162003744565b949350505050565b6001600160a01b0381168114620030f657600080fd5b80516200384581620038ce565b6000602082840312156200390457600080fd5b81516001600160401b03808211156200391c57600080fd5b9083019061014082860312156200393257600080fd5b6200393c620037ca565b620039478362003838565b81526020830151828111156200395c57600080fd5b6200396a8782860162003874565b6020830152506040830151828111156200398357600080fd5b620039918782860162003874565b604083015250606083015182811115620039aa57600080fd5b620039b88782860162003874565b6060830152506080830151608082015260a083015160a082015260c083015160c0820152620039ea60e08401620038e4565b60e082015261010083810151908201526101209283015192810192909252509392505050565b6000825162003a2481846020870162003744565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062003a5957607f821691505b60208210810362003a7a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000815462003a8f8162003a44565b80855260206001838116801562003aaf576001811462003aca5762003afa565b60ff1985168884015283151560051b88018301955062003afa565b866000528260002060005b8581101562003af25781548a820186015290830190840162003ad5565b890184019650505b505050505092915050565b602080825282546001600160a01b03169082015260e06040820152600062003b3561010083016001850162003a80565b6002840154606084015260038401546080840152600484015460a084015260058401546001600160a01b031660c084015260069093015460e0909201919091525090565b60006020828403121562003b8c57600080fd5b8151620037ad8162003829565b60808152600062003bae60808301876200376a565b6020830195909552506040810192909252606090910152919050565b60006020828403121562003bdd57600080fd5b5035919050565b600060018060a01b03808a16835260e0602084015262003c0860e084018a6200376a565b60408401989098526060830196909652506080810193909352921660a082015260c0015292915050565b6000806040838503121562003c4657600080fd5b823562003c5381620038ce565b946020939093013593505050565b6000806040838503121562003c7557600080fd5b823562003c8281620038ce565b9150602083013562003c948162003829565b809150509250929050565b600082601f83011262003cb157600080fd5b813562003cc262003897826200384a565b81815284602083860101111562003cd857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121562003d0857600080fd5b81356001600160401b0381111562003d1f57600080fd5b620015198482850162003c9f565b600060018060a01b03808351168452602083015160e0602086015262003d5760e08601826200376a565b90506040840151604086015260608401516060860152608084015160808601528160a08501511660a086015260c084015160c0860152809250505092915050565b60408152600062003dad604083018562003d2d565b90508260208301529392505050565b60006020828403121562003dcf57600080fd5b8135620037ad81620038ce565b6000806040838503121562003df057600080fd5b823562003dfd81620038ce565b915060208301356001600160401b0381111562003e1957600080fd5b62003e278582860162003c9f565b9150509250929050565b60008060006060848603121562003e4757600080fd5b83356001600160401b0381111562003e5e57600080fd5b62003e6c8682870162003c9f565b9660208601359650604090950135949350505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101562003f2a57603f19898403018552815160e0815181865262003ed2828701826200376a565b838b0151878c0152898401516001600160a01b03168a880152606080850151908801526080808501519088015260a0808501519088015260c09384015193909601929092525050938601939086019060010162003ea9565b509098975050505050505050565b6000806040838503121562003f4c57600080fd5b50508035926020909101359150565b6000604082016040835280855180835260608501915060608160051b8601019250602080880160005b8381101562003fb657605f1988870301855262003fa386835162003d2d565b9550938201939082019060010162003f84565b50508584038187015286518085528782019482019350915060005b8281101562003fef5784518452938101939281019260010162003fd1565b5091979650505050505050565b600080604083850312156200401057600080fd5b82356001600160401b038111156200402757600080fd5b620040358582860162003c9f565b925050602083013562003c9481620038ce565b60e0815260006200405d60e083018a6200376a565b6020830198909852506001600160a01b039590951660408601526060850193909352608084019190915260a083015260c090910152919050565b60008060408385031215620040ab57600080fd5b82356001600160401b03811115620040c257600080fd5b620040d08582860162003c9f565b95602094909401359450505050565b600080600060608486031215620040f557600080fd5b83356200410281620038ce565b95602085013595506040909401359392505050565b601f8211156200416557600081815260208120601f850160051c81016020861015620041405750805b601f850160051c820191505b8181101562004161578281556001016200414c565b5050505b505050565b81516001600160401b03811115620041865762004186620037b4565b6200419e8162004197845462003a44565b8462004117565b602080601f831160018114620041d65760008415620041bd5750858301515b600019600386901b1c1916600185901b17855562004161565b600085815260208120601f198616915b828110156200420757888601518255948401946001909101908401620041e6565b5085821015620042265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000fa95762000fa962004236565b60006001820162004277576200427762004236565b5060010190565b6000602082840312156200429157600080fd5b5051919050565b600082620042b657634e487b7160e01b600052601260045260246000fd5b500490565b818103620042c7575050565b620042d3825462003a44565b6001600160401b03811115620042ed57620042ed620037b4565b620042fe8162004197845462003a44565b6000601f8211600181146200433557600083156200431c5750848201545b600019600385901b1c1916600184901b1784556200439d565b600085815260209020601f19841690600086815260209020845b838110156200437157828601548255600195860195909101906020016200434f565b5085831015620043905781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b634e487b7160e01b600052603160045260246000fd5b60a081526000620043cf60a08301886200376a565b6001600160a01b039690961660208301525060408101939093526060830191909152608090910152919050565b808202811582820484141762000fa95762000fa962004236565b60208082526008908201526710b8273ab6b132b960c11b604082015260600190565b602080825260069082015265217053697a6560d01b604082015260600190565b8082018082111562000fa95762000fa96200423656fe608060405234801561001057600080fd5b5060405161085438038061085483398101604081905261002f91610065565b6000928355600191909155600380546001600160a01b0319166001600160a01b03909216919091179055600255426006556100ab565b60008060006060848603121561007a57600080fd5b83516020850151604086015191945092506001600160a01b03811681146100a057600080fd5b809150509250925092565b61079a806100ba6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063736bf59111610071578063736bf591146101495780637a40624b1461015257806398f9724f1461015b578063a0c10c2d14610164578063c5cc6b6a1461016d578063f79a14141461019857600080fd5b806318160ddd146100b957806322f4596f146100d057806323b872dd146100d9578063313ce567146100fc57806340c10f191461010b57806370a0823114610120575b600080fd5b6008545b6040519081526020015b60405180910390f35b6100bd60005481565b6100ec6100e736600461065b565b6101a1565b60405190151581526020016100c7565b604051600081526020016100c7565b61011e610119366004610697565b6101b8565b005b6100bd61012e3660046106c1565b6001600160a01b031660009081526007602052604090205490565b6100bd60025481565b6100bd60065481565b6100bd60045481565b6100bd60055481565b600354610180906001600160a01b031681565b6040516001600160a01b0390911681526020016100c7565b6100bd60015481565b60006101ae8484846102d5565b5060019392505050565b6003546001600160a01b0316331461020f5760405162461bcd60e51b81526020600482015260156024820152741bdb9b1e48199858dd1bdc9e4818d85b881b5a5b9d605a1b60448201526064015b60405180910390fd5b600154819081111561025a5760405162461bcd60e51b8152602060048201526014602482015273185b5bdd5b9d08195e18d959591cc81b1a5b5a5d60621b6044820152606401610206565b6000548160025461026b91906106f9565b11156102af5760405162461bcd60e51b81526020600482015260136024820152721b585e081cdd5c1c1b1e48195e18d959591959606a1b6044820152606401610206565b6102b98382610567565b80600260008282546102cb91906106f9565b9091555050505050565b6001600160a01b03831661032b5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f206164647265737300006044820152606401610206565b6001600160a01b0382166103815760405162461bcd60e51b815260206004820152601c60248201527f7472616e7366657220746f20746865207a65726f2061646472657373000000006044820152606401610206565b6003546040516336b87bd760e11b81523360048201526001600160a01b0390911690636d70f7ae90602401602060405180830381865afa1580156103c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ed9190610712565b6104255760405162461bcd60e51b815260206004820152600960248201526810b7b832b930ba37b960b91b6044820152606401610206565b600081116104625760405162461bcd60e51b815260206004820152600a60248201526907472616e7366657220360b41b6044820152606401610206565b6001600160a01b038216600090815260076020526040902054600003610498576004805490600061049283610734565b91905055505b6001600160a01b038316600090815260076020526040902054818110156105015760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e6365006044820152606401610206565b6001600160a01b03848116600081815260076020526040808220868603815593871682528120805486019055525460000361054c57600480549060006105468361074d565b91905055505b6005805490600061055c83610734565b919050555050505050565b6001600160a01b0382166105bd5760405162461bcd60e51b815260206004820152601860248201527f6d696e7420746f20746865207a65726f206164647265737300000000000000006044820152606401610206565b6001600160a01b0382166000908152600760205260409020546000036105f357600480549060006105ed83610734565b91905055505b806008600082825461060591906106f9565b90915550506001600160a01b0382166000908152600760205260408120805483019055600580549161063683610734565b91905055505050565b80356001600160a01b038116811461065657600080fd5b919050565b60008060006060848603121561067057600080fd5b6106798461063f565b92506106876020850161063f565b9150604084013590509250925092565b600080604083850312156106aa57600080fd5b6106b38361063f565b946020939093013593505050565b6000602082840312156106d357600080fd5b6106dc8261063f565b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070c5761070c6106e3565b92915050565b60006020828403121561072457600080fd5b815180151581146106dc57600080fd5b600060018201610746576107466106e3565b5060010190565b60008161075c5761075c6106e3565b50600019019056fea2646970667358221220de42cb1efbd12f2d16301b3bf82343ed2650bbc8c94106f4d7fee9c4b28f694864736f6c63430008120033a264697066735822122031c6f820553cce66247edf440483f487c0816940f71a237d3ae060db28dee8e764736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000530adB2c270A1bA125f7C0b8Bc2B7d6E5f42cE7c
-----Decoded View---------------
Arg [0] : _jsonToolAddr (address): 0x530adB2c270A1bA125f7C0b8Bc2B7d6E5f42cE7c
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000530adB2c270A1bA125f7C0b8Bc2B7d6E5f42cE7c
Deployed Bytecode Sourcemap
22190:15077:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29743:8;;;22190:15077;;;25456:12;25489:10;25503:9;25489:23;25481:40;;;;-1:-1:-1;;;25481:40:0;;;;;;216:2:1;198:21;;;255:1;235:18;;;228:29;-1:-1:-1;;;288:2:1;273:18;;266:34;332:2;317:18;;14:327;25481:40:0;;;;;;;;;25540:66;25565:11;25573:2;25571:1;25565:5;;:11;:::i;:::-;25540:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25578:27:0;;;;;;;;;;;;-1:-1:-1;;;25578:27:0;;;;;-1:-1:-1;25540:17:0;;-1:-1:-1;25540:66:0:i;:::-;25532:86;;;;-1:-1:-1;;;25532:86:0;;884:2:1;25532:86:0;;;866:21:1;923:1;903:18;;;896:29;-1:-1:-1;;;941:18:1;;;934:37;988:18;;25532:86:0;682:330:1;25532:86:0;25629:10;25642:31;:21;4022:14;;3930:114;25642:31;25629:44;;25684:33;:21;4141:19;;4159:1;4141:19;;;4052:127;25684:33;25728:21;25759:29;:5;25765:2;25759:5;;:29;:::i;:::-;25728:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25845:9:0;;25836:48;;-1:-1:-1;;;25836:48:0;;25728:61;;-1:-1:-1;25728:61:0;;-1:-1:-1;;;;;25845:9:0;;;;-1:-1:-1;25836:39:0;;-1:-1:-1;25836:48:0;;-1:-1:-1;25728:61:0;;25836:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;25836:48:0;;;;;;;;;;;;:::i;:::-;25903:19;;25800:84;;-1:-1:-1;25895:52:0;;;;-1:-1:-1;;;25895:52:0;;5258:2:1;25895:52:0;;;5240:21:1;5297:2;5277:18;;;5270:30;-1:-1:-1;;;5316:18:1;;;5309:50;5376:18;;25895:52:0;5056:344:1;25895:52:0;25962:61;25980:7;:10;;;25991:31;;;;;;;;;;;;;-1:-1:-1;;;25991:31:0;;;25962:17;:61::i;:::-;25958:2775;;;26092:1;-1:-1:-1;;;;;26052:42:0;:14;26067:7;:12;;;26052:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;26052:28:0;:42;26044:61;;;;-1:-1:-1;;;26044:61:0;;5901:2:1;26044:61:0;;;5883:21:1;5940:1;5920:18;;;5913:29;-1:-1:-1;;;5958:18:1;;;5951:37;6005:18;;26044:61:0;5699:330:1;26044:61:0;26124:55;26136:7;:12;;;26150:7;:11;;;26163:7;:11;;;26176:2;26124:11;:55::i;:::-;26210:14;26225:7;:12;;;26210:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;26282:12;;;;-1:-1:-1;;;;;26210:28:0;;;;26203:95;;26239:11;;26251:15;;26210:28;;26267:14;;:28;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26267:28:0;26251:45;;;;;;;;;;-1:-1:-1;26251:45:0;;26239:58;;;;;;;;:::i;:::-;;;;;;;;;;;26203:95;;;;;;:::i;:::-;;;;;;;;25958:2775;;;26324:59;26342:7;:10;;;26353:29;;;;;;;;;;;;;-1:-1:-1;;;26353:29:0;;;26324:17;:59::i;:::-;26320:2413;;;26404:17;26424:14;26439:7;:12;;;26424:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;26424:28:0;;-1:-1:-1;26424:28:0;26471:41;;;;-1:-1:-1;;;26471:41:0;;8751:2:1;26471:41:0;;;8733:21:1;8790:1;8770:18;;;8763:29;-1:-1:-1;;;8808:18:1;;;8801:35;8853:18;;26471:41:0;8549:328:1;26471:41:0;26565:11;;;;26531:46;;-1:-1:-1;;;26531:46:0;;26553:10;26531:46;;;9056:51:1;9123:18;;;9116:34;;;;-1:-1:-1;;;;;26531:21:0;;;;;9029:18:1;;26531:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26600:38;26614:10;26625:7;:12;;;26600:13;:38::i;:::-;26596:122;;26662:36;26674:10;26685:7;:12;;;26662:11;:36::i;:::-;;26596:122;26761:10;-1:-1:-1;;;;;26741:72:0;26758:1;-1:-1:-1;;;;;26741:72:0;;26772:14;26787:7;:12;;;26772:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;26801:11;;;;-1:-1:-1;;;;;26772:28:0;;;9056:51:1;;9123:18;;;9116:34;9029:18;26741:72:0;;;;;;;26385:444;26320:2413;;;26838:63;26856:7;:10;;;26867:33;;;;;;;;;;;;;-1:-1:-1;;;26867:33:0;;;26838:17;:63::i;:::-;26834:1899;;;26922:17;26942:14;26957:7;:12;;;26942:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;27031:16;;;;27048:11;;;;-1:-1:-1;;;26989:71:0;;27019:10;26989:71;;;9401:34:1;-1:-1:-1;;;;;9471:15:1;;;9451:18;;;9444:43;9503:18;;;9496:34;26942:28:0;;-1:-1:-1;26942:28:0;;26989:29;;9336:18:1;;26989:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27083:44;27097:7;:16;;;27114:7;:12;;;27083:13;:44::i;:::-;27079:134;;27151:42;27163:7;:16;;;27180:7;:12;;;27151:11;:42::i;:::-;;27079:134;27234:38;27248:7;:12;;;27261:10;27234:13;:38::i;:::-;27274:1;27234:41;27231:127;;27299:39;27314:10;27325:7;:12;;;27299:14;:39::i;:::-;;27231:127;27401:7;:16;;;-1:-1:-1;;;;;27381:78:0;27390:10;-1:-1:-1;;;;;27381:78:0;;27418:14;27433:7;:12;;;27418:28;;;;;;:::i;26834:1899::-;27484:59;27502:7;:10;;;27513:29;;;;;;;;;;;;;-1:-1:-1;;;27513:29:0;;;27484:17;:59::i;:::-;27480:1253;;;27612:1;-1:-1:-1;;;;;27572:42:0;:14;27587:7;:12;;;27572:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;27572:28:0;:42;27564:59;;;;-1:-1:-1;;;27564:59:0;;9993:2:1;27564:59:0;;;9975:21:1;10032:1;10012:18;;;10005:29;-1:-1:-1;;;10050:18:1;;;10043:35;10095:18;;27564:59:0;9791:328:1;27564:59:0;27642:14;27659:52;27672:7;:12;;;27685:7;:11;;;27697:7;:13;;;27659:12;:52::i;:::-;27642:69;;27780:6;27769:10;-1:-1:-1;;;;;27735:107:0;27740:14;27755:7;:12;;;27740:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;27787:12;;;;27800:11;;;;27740:28;27812:13;;;-1:-1:-1;;;;;27740:28:0;;;;27735:107;;;;27787:12;27800:11;27826:15;;27735:107;:::i;:::-;;;;;;;;27545:313;27480:1253;;;27867:61;27885:7;:10;;;27896:31;;;;;;;;;;;;;-1:-1:-1;;;27896:31:0;;;27867:17;:61::i;:::-;27863:870;;;27997:1;-1:-1:-1;;;;;27957:42:0;:14;27972:7;:12;;;27957:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;27957:28:0;:42;;;;:111;;-1:-1:-1;28039:14:0;;;;28025:29;;;;:13;:29;;;;;;-1:-1:-1;;;;;28025:29:0;28058:10;28025:43;27957:111;27949:130;;;;-1:-1:-1;;;27949:130:0;;10766:2:1;27949:130:0;;;10748:21:1;10805:1;10785:18;;;10778:29;-1:-1:-1;;;10823:18:1;;;10816:37;10870:18;;27949:130:0;10564:330:1;27949:130:0;28098:50;28109:7;:12;;;28122:10;28133:7;:14;;;28098:10;:50::i;:::-;;27863:870;;;28173:58;28191:7;:10;;;28202:28;;;;;;;;;;;;;-1:-1:-1;;;28202:28:0;;;28173:17;:58::i;:::-;28169:564;;;28300:1;-1:-1:-1;;;;;28260:42:0;:14;28275:7;:12;;;28260:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;28260:28:0;:42;;;;:111;;-1:-1:-1;28342:14:0;;;;28369:1;28328:29;;;:13;:29;;;;;;-1:-1:-1;;;;;28328:29:0;:43;;28260:111;28252:127;;;;-1:-1:-1;;;28252:127:0;;;;;;11101:2:1;11083:21;;;11140:1;11120:18;;;11113:29;-1:-1:-1;;;11173:2:1;11158:18;;11151:34;11217:2;11202:18;;10899:327;28252:127:0;28407:12;;;;28434:14;;;;;28420:29;;;;:13;:29;;;;;;28450:14;;28398:67;;28407:12;-1:-1:-1;;;;;28420:29:0;;28398:8;:67::i;:::-;-1:-1:-1;28495:12:0;;;;28522:14;;;;;28508:29;;;;:13;:29;;;;;;28538:14;;28484:69;;28495:12;-1:-1:-1;;;;;28508:29:0;;28484:10;:69::i;:::-;-1:-1:-1;28600:14:0;;;;28586:29;;;;:13;:29;;;;;;;;28642:12;;;;28627:28;;28616:10;;-1:-1:-1;;;;;28586:29:0;;;;28577:91;;28627:14;;:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;28656:11;;;;-1:-1:-1;;;;;28627:28:0;;;9056:51:1;;9123:18;;;9116:34;9029:18;28577:91:0;;;;;;;28169:564;;;28709:8;;;28169:564;28750:13;;;28761:1;28750:13;;;11383:36:1;11356:18;28750:13:0;;;;;;;;;;;;28743:20;;;;;25399:3372;;;22190:15077;;;;;;22813:31;;;;;;;;;;-1:-1:-1;22813:31:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;22482:48;;;;;;;;;;-1:-1:-1;22482:48:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29787:201::-;;;;;;;;;;;;;:::i;:::-;;29996:129;;;;;;;;;;-1:-1:-1;29996:129:0;;;;;:::i;:::-;;:::i;30873:350::-;;;;;;;;;;-1:-1:-1;30873:350:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;22537:42::-;;;;;;;;;;-1:-1:-1;22537:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15210:14:1;;15203:22;15185:41;;15173:2;15158:18;22537:42:0;15045:187:1;21336:103:0;;;;;;;;;;;;;:::i;31231:99::-;;;;;;;;;;-1:-1:-1;31304:11:0;:18;31231:99;;;15383:25:1;;;15371:2;15356:18;31231:99:0;15237:177:1;32496:334:0;;;;;;;;;;-1:-1:-1;32496:334:0;;;;;:::i;:::-;;:::i;20690:87::-;;;;;;;;;;-1:-1:-1;20736:7:0;20763:6;-1:-1:-1;;;;;20763:6:0;20690:87;;;-1:-1:-1;;;;;16045:32:1;;;16027:51;;16015:2;16000:18;20690:87:0;15881:203:1;23179:48:0;;;;;;;;;;-1:-1:-1;23179:48:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;23179:48:0;;;31338:575;;;;;;;;;;-1:-1:-1;31338:575:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;30154:711::-;;;;;;;;;;-1:-1:-1;30154:711:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;33757:274::-;;;;;;;;;;-1:-1:-1;33757:274:0;;;;;:::i;:::-;;:::i;23234:47::-;;;;;;;;;;-1:-1:-1;23234:47:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;23057:46::-;;;;;;;;;;-1:-1:-1;23057:46:0;;;;;:::i;:::-;;:::i;21594:238::-;;;;;;;;;;-1:-1:-1;21594:238:0;;;;;:::i;:::-;;:::i;31921:567::-;;;;;;;;;;-1:-1:-1;31921:567:0;;;;;:::i;:::-;;:::i;17081:150::-;17156:4;17219:2;17203:20;;;;;;17195:2;17179:20;;;;;;:44;17172:51;;17081:150;;;;;:::o;4052:127::-;4141:19;;4159:1;4141:19;;;4052:127::o;28779:928::-;28960:4;28954:18;28976:1;28954:23;28946:41;;;;-1:-1:-1;;;28946:41:0;;21826:2:1;28946:41:0;;;21808:21:1;21865:1;21845:18;;;21838:29;-1:-1:-1;;;21883:18:1;;;21876:35;21928:18;;28946:41:0;21624:328:1;28946:41:0;29018:1;29006:9;:13;28998:36;;;;-1:-1:-1;;;28998:36:0;;22159:2:1;28998:36:0;;;22141:21:1;22198:2;22178:18;;;22171:30;-1:-1:-1;;;22217:18:1;;;22210:40;22267:18;;28998:36:0;21957:334:1;28998:36:0;29069:1;29053:13;:17;29045:44;;;;-1:-1:-1;;;29045:44:0;;22498:2:1;29045:44:0;;;22480:21:1;22537:2;22517:18;;;22510:30;-1:-1:-1;;;22556:18:1;;;22549:44;22610:18;;29045:44:0;22296:338:1;29045:44:0;29121:13;29108:9;:26;;29100:64;;;;-1:-1:-1;;;29100:64:0;;22841:2:1;29100:64:0;;;22823:21:1;22880:2;22860:18;;;22853:30;22919:27;22899:18;;;22892:55;22964:18;;29100:64:0;22639:349:1;29100:64:0;29215:1;-1:-1:-1;;;;;29183:34:0;:14;29198:4;29183:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;29183:20:0;:34;29175:55;;;;-1:-1:-1;;;29175:55:0;;23195:2:1;29175:55:0;;;23177:21:1;23234:1;23214:18;;;23207:29;-1:-1:-1;;;23252:18:1;;;23245:38;23300:18;;29175:55:0;22993:331:1;29175:55:0;29241:11;29265:9;29276:13;29299:4;29255:50;;;;;:::i;:::-;23531:25:1;;;23587:2;23572:18;;23565:34;;;;-1:-1:-1;;;;;23635:32:1;23630:2;23615:18;;23608:60;23519:2;23504:18;29255:50:0;;;;;;;;;;;;;;;;;;;;;;;29241:64;;29347:5;29316:14;29331:4;29316:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:37;;-1:-1:-1;;;;;29316:37:0;;;-1:-1:-1;;;;;;29316:37:0;;;;;;;29394:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29545:10;29394:202;;;;29570:15;29394:202;;;;29607:11;:27;;29316:37;29607:27;;;;29316:20;29607:27;;;;;;;;;;;;;;;;;;;;;;;;;29316:20;;;;29607:27;;;;;;;;;:::i;:::-;-1:-1:-1;29607:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29607:27:0;-1:-1:-1;;;;;29607:27:0;;;;;;;;;;;;;;;;;;;29679:11;:18;:20;;-1:-1:-1;;29679:20:0;:::i;:::-;-1:-1:-1;;;;;29645:31:0;;;;;;;:15;:31;;;;;:54;;;;-1:-1:-1;;;;;28779:928:0:o;32496:334::-;32575:4;;32592:151;-1:-1:-1;;;;;32616:20:0;;;;;;:12;:20;;;;;:27;32612:31;;32592:151;;;-1:-1:-1;;;;;32687:20:0;;;;;;:12;:20;;;;;:23;;32669:47;;32687:20;32708:1;;32687:23;;;;;;:::i;:::-;;;;;;;;32669:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32711:4;32669:17;:47::i;:::-;32665:67;;;32726:4;32719:11;;;;;32665:67;32645:3;;;;:::i;:::-;;;;32592:151;;;-1:-1:-1;32817:5:0;;32496:334;-1:-1:-1;;;32496:334:0:o;32838:211::-;32912:4;32934:26;32948:6;32955:4;32934:13;:26::i;:::-;32929:91;;-1:-1:-1;;;;;32977:20:0;;;;;;:12;:20;;;;;;;:31;;;;;;;;;;;;;;33003:4;32977:31;;:::i;:::-;;32929:91;-1:-1:-1;33037:4:0;32838:211;;;;:::o;33757:274::-;33836:19;33868:17;33888:14;33903:4;33888:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;33888:20:0;;-1:-1:-1;33923:23:0;;33919:105;;33977:35;;-1:-1:-1;;;33977:35:0;;-1:-1:-1;;;;;16045:32:1;;;33977:35:0;;;16027:51:1;33977:26:0;;;;;16000:18:1;;33977:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33963:49;;33919:105;33857:174;33757:274;;;;:::o;33057:692::-;33134:4;33156:26;33170:6;33177:4;33156:13;:26::i;:::-;33151:48;;-1:-1:-1;33192:5:0;33185:12;;33151:48;-1:-1:-1;;;;;33350:20:0;;33307:27;33350:20;;;:12;:20;;;;;:27;:31;;33380:1;;33350:31;:::i;:::-;-1:-1:-1;;;;;33337:45:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33307:75;;33393:9;33422;33417:219;-1:-1:-1;;;;;33441:20:0;;;;;;:12;:20;;;;;:27;33437:31;;33417:219;;;-1:-1:-1;;;;;33509:20:0;;;;;;:12;:20;;;;;:23;;33491:47;;33509:20;33530:1;;33509:23;;;;;;:::i;:::-;;;;;;;;33491:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33533:4;33491:17;:47::i;:::-;33486:139;;-1:-1:-1;;;;;33572:20:0;;;;;;:12;:20;;;;;:23;;33593:1;;33572:23;;;;;;:::i;:::-;;;;;;;;33555:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;33567:1;33555:14;;;;;;;;:::i;:::-;;;;;;:40;;;;33610:3;;;;;:::i;:::-;;;;33486:139;33470:3;;;;:::i;:::-;;;;33417:219;;;-1:-1:-1;;;;;;33685:20:0;;;;;;:12;:20;;;;;;;;:34;;;;;;;;:::i;:::-;-1:-1:-1;33737:4:0;;33057:692;-1:-1:-1;;;;;33057:692:0:o;34039:739::-;34125:7;34153:24;34168:4;34173:3;34153:14;:24::i;:::-;34145:58;;;;-1:-1:-1;;;34145:58:0;;26553:2:1;34145:58:0;;;26535:21:1;26592:2;26572:18;;;26565:30;-1:-1:-1;;;26611:18:1;;;26604:51;26672:18;;34145:58:0;26351:345:1;34145:58:0;34214:14;34231:22;34243:3;34247:5;34231:11;:22::i;:::-;34214:39;;34264:24;34291:176;;;;;;;;34314:4;34291:176;;;;34333:6;34291:176;;;;34354:10;-1:-1:-1;;;;;34291:176:0;;;;;34379:3;34291:176;;;;34397:5;34291:176;;;;34423:3;34417:5;:9;;;;:::i;:::-;34291:176;;;;34441:15;34291:176;;;34264:203;;34478:9;34488:4;34478:15;;;;;;:::i;:::-;;;;;;;;;;;;;;;:30;;;;;;;-1:-1:-1;34478:30:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34478:30:0;;;;;-1:-1:-1;;;;;34478:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34571:1;34548:9;34558:4;34548:15;;;;;;:::i;:::-;;;;;;;;;;;;;;:22;:24;;;;:::i;:::-;34519:14;34534:4;34519:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:28;;;;;;;;;;:53;;;;34595:10;34585:21;;:9;:21;;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34585:36:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34585:36:0;-1:-1:-1;;;;;34585:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34677:10;-1:-1:-1;34667:21:0;;;:9;:21;;;;;;;:28;:30;;34585:36;34667:30;:::i;:::-;34647:10;34632:26;;;;:14;:26;;;;;;;;:34;;;;;;;;:65;;;;34710:13;:21;;;;;;:34;;-1:-1:-1;;;;;;34710:34:0;;;;;;-1:-1:-1;34632:34:0;34039:739;-1:-1:-1;;;;34039:739:0:o;34786:1396::-;34877:4;34912:13;34928:14;34943:4;34928:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:28;;;;;;;;;;;-1:-1:-1;34998:9:0;;:15;;35008:4;;34998:15;:::i;:::-;;;;;;;;;;;;;35014:5;34998:22;;;;;;;;:::i;:::-;;;;;;;;;;;34967:53;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34967:53:0;;;-1:-1:-1;;34967:53:0;;;;;;;;;;;;-1:-1:-1;;;;;34967:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35053:15;34967:53;;-1:-1:-1;;;35053:9:0;;:15;;35063:4;;35053:15;:::i;:::-;;;;;;;;;;;;;35092:1;35069:9;35079:4;35069:15;;;;;;:::i;:::-;;;;;;;;;;;;;;:22;:24;;;;:::i;:::-;35053:41;;;;;;;;:::i;:::-;;;;;;;;;;;:48;;;35031:70;;35137:9;35147:4;35137:15;;;;;;:::i;:::-;;;;;;;;;;;;;35176:1;35153:9;35163:4;35153:15;;;;;;:::i;:::-;;;;;;;;;;;;;;:22;:24;;;;:::i;:::-;35137:41;;;;;;;;:::i;:::-;;;;;;;;;;;35112:9;35122:4;35112:15;;;;;;:::i;:::-;;;;;;;;;;;;;35128:5;35112:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:66;;:22;:66;:::i;:::-;-1:-1:-1;35112:66:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35112:66:0;-1:-1:-1;;;;;35112:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35189:15;;:9;;:15;;35199:4;;35189:15;:::i;:::-;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;35189:21:0;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;35189:21:0;;;;;;;;;;;;-1:-1:-1;;;;;;35189:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;35228:20;;:14;;:20;;35243:4;;35228:20;:::i;:::-;;;;;;;;;;;;;;;;;:28;;;;;;;;;35221:35;35301:5;;35267:14;;:20;;35282:4;;35267:20;:::i;:::-;;;;;;;;;;;;;;;;:33;;;;;;;;;;:39;;;;-1:-1:-1;;;;;35359:25:0;;;;;:14;:25;;;;;:33;;;;;;;;;35429:20;;;:9;:20;;;;;35450:27;;35359:33;;35267;35450:29;;35478:1;;35450:29;:::i;:::-;35429:51;;;;;;;;:::i;:::-;;;;;;;;;:58;:51;;;;;:58;;;-1:-1:-1;;;;;35532:20:0;;;;:9;:20;;;;;;;35553:27;;35429:58;;-1:-1:-1;35532:20:0;35553:29;;35429:58;35553:29;:::i;:::-;35532:51;;;;;;;;:::i;:::-;;;;;;;;;;;35498:9;:20;35508:9;-1:-1:-1;;;;;35498:20:0;-1:-1:-1;;;;;35498:20:0;;;;;;;;;;;;35519:9;35498:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:85;;:31;:85;:::i;:::-;-1:-1:-1;35498:85:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35498:85:0;-1:-1:-1;;;;;35498:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35594:20;;-1:-1:-1;35594:20:0;;;:9;:20;;;;;:26;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;35594:26:0;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;35594:26:0;;;;;;;;;;;;-1:-1:-1;;;;;;35594:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35638:25:0;;;;;;:14;:25;;;;;;;;:42;;;;;;;;35691:52;;;35772:21;;;:13;:21;;;;;;;;35804:28;;;;;35772:21;;;;;35846:20;;;35843:310;;35926:6;35915:10;-1:-1:-1;;;;;35887:105:0;35894:14;35909:4;35894:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35894:20:0;-1:-1:-1;;;;;35887:105:0;;35933:4;35938:13;:17;;;35956:13;:19;;;35976:15;35887:105;;;;;;;;;:::i;:::-;;;;;;;;35843:310;;;36064:6;36054:9;-1:-1:-1;;;;;36028:113:0;36033:14;36048:4;36033:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36033:20:0;-1:-1:-1;;;;;36028:113:0;;36071:4;36076:10;36087:13;:17;;;36105:13;:19;;;36125:15;36028:113;;;;;;;;;;:::i;:::-;;;;;;;;35843:310;-1:-1:-1;36170:4:0;;34786:1396;-1:-1:-1;;;;;;;;;34786:1396:0:o;36190:430::-;36279:4;36296:24;36323:9;36333:4;36323:15;;;;;;:::i;:::-;;;;;;;;;;;;;36339:14;36354:4;36339:20;;;;;;:::i;:::-;;;;;;;;;;;;;:28;36360:6;36339:28;;;;;;;;;;;;36323:45;;;;;;;;:::i;:::-;;;;;;;;;;;36296:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36296:72:0;;;-1:-1:-1;;36296:72:0;;;;;;;;;;;;-1:-1:-1;;;;;36296:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36387:14;;;36296:72;;-1:-1:-1;36405:9:0;36387:27;36379:62;;;;-1:-1:-1;;;36379:62:0;;29231:2:1;36379:62:0;;;29213:21:1;29270:2;29250:18;;;29243:30;-1:-1:-1;;;29289:18:1;;;29282:52;29351:18;;36379:62:0;29029:346:1;36379:62:0;36458:14;36473:4;36458:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;36515:12;;;;-1:-1:-1;;;36452:76:0;;-1:-1:-1;;;;;9419:15:1;;;36452:76:0;;;9401:34:1;36504:10:0;9451:18:1;;;9444:43;9503:18;;;9496:34;;;;36458:20:0;;36452:40;;9336:18:1;;36452:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;36539:27:0;;:51;36585:4;36567:15;:9;36579:3;36567:15;:::i;:::-;:22;;;;:::i;:::-;36539:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22813:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22813:31:0;;;;-1:-1:-1;22813:31:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;22813:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22813:31:0;-1:-1:-1;;;;;22813:31:0;;;:::o;22482:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29787:201::-;20576:13;:11;:13::i;:::-;29869:1:::1;29845:21;:25;29837:48;;;::::0;-1:-1:-1;;;29837:48:0;;29755:2:1;29837:48:0::1;::::0;::::1;29737:21:1::0;29794:2;29774:18;;;29767:30;-1:-1:-1;;;29813:18:1;;;29806:40;29863:18;;29837:48:0::1;29553:334:1::0;29837:48:0::1;29914:21;29954:7;20736::::0;20763:6;-1:-1:-1;;;;;20763:6:0;;20690:87;29954:7:::1;-1:-1:-1::0;;;;;29946:25:0::1;:34;29972:7;29946:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29826:162;29787:201::o:0;29996:129::-;20576:13;:11;:13::i;:::-;-1:-1:-1;;;;;30083:20:0;;;::::1;;::::0;;;:10:::1;:20;::::0;;;;:34;;-1:-1:-1;;30083:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29996:129::o;30873:350::-;30938:27;;:::i;:::-;30967:19;30999:17;31019:14;31034:4;31019:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;31019:20:0;;-1:-1:-1;31054:23:0;;31050:166;;-1:-1:-1;;;;;31118:26:0;;;;;;:15;:26;;;;;;31106:11;:39;;:11;;31118:26;31106:39;;;;;;:::i;:::-;;;;;;;;;;31094:51;;;;;;;;;31106:39;;;;;31094:51;;-1:-1:-1;;;;;31094:51:0;;;;;;;;;;31106:39;;31094:51;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31094:51:0;-1:-1:-1;;;;;31094:51:0;-1:-1:-1;;;;;31094:51:0;;;;;;;;;;;;;;;31180:9;-1:-1:-1;;;;;31174:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31160:44;;31050:166;30988:235;30873:350;;;:::o;21336:103::-;20576:13;:11;:13::i;:::-;21401:30:::1;21428:1;21401:18;:30::i;:::-;21336:103::o:0;31338:575::-;31434:29;31491:1;31484:4;:8;31476:29;;;;-1:-1:-1;;;31476:29:0;;;;;;;:::i;:::-;31535:1;31524:8;:12;31516:31;;;;-1:-1:-1;;;31516:31:0;;;;;;;:::i;:::-;31558:13;31587:8;31575;31582:1;31575:4;:8;:::i;:::-;31574:21;;;;:::i;:::-;31558:37;-1:-1:-1;31606:11:0;31620:16;31628:8;31558:37;31620:16;:::i;:::-;31606:30;;31657:9;31667:4;31657:15;;;;;;:::i;:::-;;;;;;;;;;;;;;:22;31651:28;;31647:89;;;31702:9;31712:4;31702:15;;;;;;:::i;:::-;;;;;;;;;;;;;;:22;;-1:-1:-1;31647:89:0;31775:11;31781:5;31775:3;:11;:::i;:::-;-1:-1:-1;;;;;31760:27:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;31746:41:0;-1:-1:-1;31815:5:0;31798:108;31826:3;31822:1;:7;31798:108;;;31876:9;31886:4;31876:15;;;;;;:::i;:::-;;;;;;;;;;;;;31892:1;31876:18;;;;;;;;:::i;:::-;;;;;;;;;;;31851:43;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31851:43:0;;;-1:-1:-1;;31851:43:0;;;;;;;;;;;;-1:-1:-1;;;;;31851:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;31863:9;31867:5;31863:1;:9;:::i;:::-;31851:22;;;;;;;;:::i;:::-;;;;;;:43;;;;31831:3;;;;;:::i;:::-;;;;31798:108;;;;31465:448;;31338:575;;;;;:::o;30154:711::-;30234:26;30262:30;30320:1;30313:4;:8;30305:29;;;;-1:-1:-1;;;30305:29:0;;;;;;;:::i;:::-;30364:1;30353:8;:12;30345:31;;;;-1:-1:-1;;;30345:31:0;;;;;;;:::i;:::-;30387:13;30416:8;30404;30411:1;30404:4;:8;:::i;:::-;30403:21;;;;:::i;:::-;30387:37;-1:-1:-1;30435:11:0;30449:16;30457:8;30387:37;30449:16;:::i;:::-;30486:11;:18;30435:30;;-1:-1:-1;30480:24:0;;30476:81;;;-1:-1:-1;30527:11:0;:18;30476:81;30593:11;30599:5;30593:3;:11;:::i;:::-;-1:-1:-1;;;;;30576:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;30567:38:0;-1:-1:-1;30646:11:0;30652:5;30646:3;:11;:::i;:::-;-1:-1:-1;;;;;30632:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30632:26:0;-1:-1:-1;30616:42:0;-1:-1:-1;30686:5:0;30669:189;30697:3;30693:1;:7;30669:189;;;30742:11;30754:1;30742:14;;;;;;;;:::i;:::-;;;;;;;;;;30722:34;;;;;;;;;30742:14;;;;;30722:34;;-1:-1:-1;;;;;30722:34:0;;;;;;;;;;30742:14;;30722:34;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30722:34:0;;;-1:-1:-1;;30722:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30722:34:0;;;;;;;;;;;;;;;:6;30729:9;30733:5;30729:1;:9;:::i;:::-;30722:17;;;;;;;;:::i;:::-;;;;;;:34;;;;30804:11;30816:1;30804:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:27;30798:48;;;-1:-1:-1;;;30798:48:0;;;;-1:-1:-1;;;;;30804:27:0;;;;30798:46;;:48;;;;;;;;;;30804:27;30798:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30771:13;30785:9;30789:5;30785:1;:9;:::i;:::-;30771:24;;;;;;;;:::i;:::-;;;;;;;;;;:75;30702:3;;;;:::i;:::-;;;;30669:189;;;;30294:571;;30154:711;;;;;:::o;23234:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23234:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23234:47:0;;;;-1:-1:-1;23234:47:0;;-1:-1:-1;23234:47:0;;;:::o;23057:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21594:238;20576:13;:11;:13::i;:::-;-1:-1:-1;;;;;21697:22:0;::::1;21675:110;;;::::0;-1:-1:-1;;;21675:110:0;;30894:2:1;21675:110:0::1;::::0;::::1;30876:21:1::0;30933:2;30913:18;;;30906:30;30972:34;30952:18;;;30945:62;-1:-1:-1;;;31023:18:1;;;31016:36;31069:19;;21675:110:0::1;30692:402:1::0;21675:110:0::1;21796:28;21815:8;21796:18;:28::i;:::-;21594:238:::0;:::o;31921:567::-;32009:29;32066:1;32059:4;:8;32051:29;;;;-1:-1:-1;;;32051:29:0;;;;;;;:::i;:::-;32110:1;32099:8;:12;32091:31;;;;-1:-1:-1;;;32091:31:0;;;;;;;:::i;:::-;32133:13;32162:8;32150;32157:1;32150:4;:8;:::i;:::-;32149:21;;;;:::i;:::-;32133:37;-1:-1:-1;32181:11:0;32195:16;32203:8;32133:37;32195:16;:::i;:::-;-1:-1:-1;;;;;32232:15:0;;;;;;:9;:15;;;;;:22;32181:30;;-1:-1:-1;32226:28:0;;32222:89;;;-1:-1:-1;;;;;;32277:15:0;;;;;;:9;:15;;;;;:22;32222:89;32350:11;32356:5;32350:3;:11;:::i;:::-;-1:-1:-1;;;;;32335:27:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;32321:41:0;-1:-1:-1;32390:5:0;32373:108;32401:3;32397:1;:7;32373:108;;;-1:-1:-1;;;;;32451:15:0;;;;;;:9;:15;;;;;:18;;32467:1;;32451:18;;;;;;:::i;:::-;;;;;;;;;;;32426:43;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32426:43:0;;;-1:-1:-1;;32426:43:0;;;;;;;;;;;;-1:-1:-1;;;;;32426:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;32438:9;32442:5;32438:1;:9;:::i;:::-;32426:22;;;;;;;;:::i;:::-;;;;;;:43;;;;32406:3;;;;;:::i;:::-;;;;32373:108;;36628:422;36707:4;;;36755:226;36789:10;36779:21;;;;:9;:21;;;;;:28;36775:32;;36755:226;;;36862:10;36852:21;;;;:9;:21;;;;;:24;;36834:53;;36852:21;36874:1;;36852:24;;;;;;:::i;:::-;;;;;;;;;;;:29;;36834:53;;;;;:::i;:::-;36829:141;;36936:10;36926:21;;;;:9;:21;;;;;:24;;36948:1;;36926:24;;;;;;:::i;:::-;;;;;;;;;;;:28;;;36917:8;:37;;;;:::i;:::-;36908:46;;36829:141;36809:3;;;;:::i;:::-;;;;36755:226;;;-1:-1:-1;37030:12:0;37039:3;37030:8;:12;:::i;:::-;36998:30;37012:4;37017:10;36998:13;:30::i;:::-;:44;;;36628:422;-1:-1:-1;;;;36628:422:0:o;37062:200::-;37127:7;37156:1;37147:5;;:10;;;;;;;:::i;:::-;;;;-1:-1:-1;;37220:5:0;;37193:59;;;;;;31340:19:1;;;31375:12;;;31368:28;;;31412:12;;;;31405:28;;;;37227:10:0;31467:15:1;;;-1:-1:-1;;31463:53:1;31449:12;;;31442:75;37239:12:0;31533:13:1;;;31526:29;31571:13;;37193:59:0;;;-1:-1:-1;;37193:59:0;;;;;;;;;37183:70;;37193:59;37183:70;;;;;37062:200;-1:-1:-1;;;37062:200:0:o;20855:130::-;20930:10;20919:7;20736;20763:6;-1:-1:-1;;;;;20763:6:0;;20690:87;20919:7;-1:-1:-1;;;;;20919:21:0;;20911:66;;;;-1:-1:-1;;;20911:66:0;;31797:2:1;20911:66:0;;;31779:21:1;;;31816:18;;;31809:30;31875:34;31855:18;;;31848:62;31927:18;;20911:66:0;31595:356:1;21992:191:0;22066:16;22085:6;;-1:-1:-1;;;;;22102:17:0;;;-1:-1:-1;;;;;;22102:17:0;;;;;;22135:40;;22085:6;;;;;;;22135:40;;22066:16;22135:40;22055:128;21992:191;:::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;346:331:1;451:9;462;504:8;492:10;489:24;486:44;;;526:1;523;516:12;486:44;555:6;545:8;542:20;539:40;;;575:1;572;565:12;539:40;-1:-1:-1;;601:23:1;;;646:25;;;;;-1:-1:-1;346:331:1:o;1017:250::-;1102:1;1112:113;1126:6;1123:1;1120:13;1112:113;;;1202:11;;;1196:18;1183:11;;;1176:39;1148:2;1141:10;1112:113;;;-1:-1:-1;;1259:1:1;1241:16;;1234:27;1017:250::o;1272:271::-;1314:3;1352:5;1346:12;1379:6;1374:3;1367:19;1395:76;1464:6;1457:4;1452:3;1448:14;1441:4;1434:5;1430:16;1395:76;:::i;:::-;1525:2;1504:15;-1:-1:-1;;1500:29:1;1491:39;;;;1532:4;1487:50;;1272:271;-1:-1:-1;;1272:271:1:o;1548:220::-;1697:2;1686:9;1679:21;1660:4;1717:45;1758:2;1747:9;1743:18;1735:6;1717:45;:::i;:::-;1709:53;1548:220;-1:-1:-1;;;1548:220:1:o;1773:127::-;1834:10;1829:3;1825:20;1822:1;1815:31;1865:4;1862:1;1855:15;1889:4;1886:1;1879:15;1905:255;1977:2;1971:9;2019:6;2007:19;;-1:-1:-1;;;;;2041:34:1;;2077:22;;;2038:62;2035:88;;;2103:18;;:::i;:::-;2139:2;2132:22;1905:255;:::o;2165:275::-;2236:2;2230:9;2301:2;2282:13;;-1:-1:-1;;2278:27:1;2266:40;;-1:-1:-1;;;;;2321:34:1;;2357:22;;;2318:62;2315:88;;;2383:18;;:::i;:::-;2419:2;2412:22;2165:275;;-1:-1:-1;2165:275:1:o;2445:118::-;2531:5;2524:13;2517:21;2510:5;2507:32;2497:60;;2553:1;2550;2543:12;2568:132;2644:13;;2666:28;2644:13;2666:28;:::i;:::-;2568:132;;;:::o;2705:187::-;2754:4;-1:-1:-1;;;;;2779:6:1;2776:30;2773:56;;;2809:18;;:::i;:::-;-1:-1:-1;2875:2:1;2854:15;-1:-1:-1;;2850:29:1;2881:4;2846:40;;2705:187::o;2897:443::-;2951:5;3004:3;2997:4;2989:6;2985:17;2981:27;2971:55;;3022:1;3019;3012:12;2971:55;3051:6;3045:13;3082:49;3098:32;3127:2;3098:32;:::i;:::-;3082:49;:::i;:::-;3156:2;3147:7;3140:19;3202:3;3195:4;3190:2;3182:6;3178:15;3174:26;3171:35;3168:55;;;3219:1;3216;3209:12;3168:55;3232:77;3306:2;3299:4;3290:7;3286:18;3279:4;3271:6;3267:17;3232:77;:::i;:::-;3327:7;2897:443;-1:-1:-1;;;;2897:443:1:o;3345:131::-;-1:-1:-1;;;;;3420:31:1;;3410:42;;3400:70;;3466:1;3463;3456:12;3481:138;3560:13;;3582:31;3560:13;3582:31;:::i;3624:1427::-;3719:6;3772:2;3760:9;3751:7;3747:23;3743:32;3740:52;;;3788:1;3785;3778:12;3740:52;3821:9;3815:16;-1:-1:-1;;;;;3891:2:1;3883:6;3880:14;3877:34;;;3907:1;3904;3897:12;3877:34;3930:22;;;;3986:6;3968:16;;;3964:29;3961:49;;;4006:1;4003;3996:12;3961:49;4032:22;;:::i;:::-;4077:30;4104:2;4077:30;:::i;:::-;4070:5;4063:45;4147:2;4143;4139:11;4133:18;4176:2;4166:8;4163:16;4160:36;;;4192:1;4189;4182:12;4160:36;4228:56;4276:7;4265:8;4261:2;4257:17;4228:56;:::i;:::-;4223:2;4216:5;4212:14;4205:80;;4324:2;4320;4316:11;4310:18;4353:2;4343:8;4340:16;4337:36;;;4369:1;4366;4359:12;4337:36;4405:56;4453:7;4442:8;4438:2;4434:17;4405:56;:::i;:::-;4400:2;4393:5;4389:14;4382:80;;4501:2;4497;4493:11;4487:18;4530:2;4520:8;4517:16;4514:36;;;4546:1;4543;4536:12;4514:36;4582:56;4630:7;4619:8;4615:2;4611:17;4582:56;:::i;:::-;4577:2;4570:5;4566:14;4559:80;;4686:3;4682:2;4678:12;4672:19;4666:3;4659:5;4655:15;4648:44;4739:3;4735:2;4731:12;4725:19;4719:3;4712:5;4708:15;4701:44;4792:3;4788:2;4784:12;4778:19;4772:3;4765:5;4761:15;4754:44;4831:43;4869:3;4865:2;4861:12;4831:43;:::i;:::-;4825:3;4814:15;;4807:68;4894:3;4935:11;;;4929:18;4913:14;;;4906:42;4967:3;5008:11;;;5002:18;4986:14;;;4979:42;;;;-1:-1:-1;4818:5:1;3624:1427;-1:-1:-1;;;3624:1427:1:o;5405:289::-;5536:3;5574:6;5568:13;5590:66;5649:6;5644:3;5637:4;5629:6;5625:17;5590:66;:::i;:::-;5672:16;;;;;5405:289;-1:-1:-1;;5405:289:1:o;6034:127::-;6095:10;6090:3;6086:20;6083:1;6076:31;6126:4;6123:1;6116:15;6150:4;6147:1;6140:15;6418:380;6497:1;6493:12;;;;6540;;;6561:61;;6615:4;6607:6;6603:17;6593:27;;6561:61;6668:2;6660:6;6657:14;6637:18;6634:38;6631:161;;6714:10;6709:3;6705:20;6702:1;6695:31;6749:4;6746:1;6739:15;6777:4;6774:1;6767:15;6631:161;;6418:380;;;:::o;6929:772::-;6979:3;7020:5;7014:12;7049:36;7075:9;7049:36;:::i;:::-;7094:19;;;7132:4;7155:1;7172:18;;;7199:146;;;;7359:1;7354:341;;;;7165:530;;7199:146;-1:-1:-1;;7241:24:1;;7227:12;;;7220:46;7313:14;;7306:22;7303:1;7299:30;7290:40;;7286:49;;;-1:-1:-1;7199:146:1;;7354:341;7385:5;7382:1;7375:16;7432:2;7429:1;7419:16;7457:1;7471:174;7485:6;7482:1;7479:13;7471:174;;;7572:14;;7554:11;;;7550:20;;7543:44;7615:16;;;;7500:10;;7471:174;;;7669:11;;7665:20;;;-1:-1:-1;;7165:530:1;;;;;;6929:772;;;;:::o;7706:838::-;7888:2;7870:21;;;7923:13;;-1:-1:-1;;;;;7919:39:1;7960:18;;;6363:44;8015:4;8010:2;7999:9;7995:18;7988:32;7851:4;8043:65;8103:3;8092:9;8088:19;8081:4;8073:6;8069:17;8043:65;:::i;:::-;8162:4;8150:17;;8144:24;8139:2;8124:18;;8117:52;8224:4;8212:17;;8206:24;8200:3;8185:19;;8178:53;8286:4;8274:17;;8268:24;8262:3;8247:19;;8240:53;8383:4;8371:17;;8365:24;-1:-1:-1;;;;;6262:36:1;8447:3;8432:19;;6363:44;8508:4;8496:17;;;8490:24;8483:4;8468:20;;;8461:54;;;;-1:-1:-1;8532:6:1;7706:838::o;9541:245::-;9608:6;9661:2;9649:9;9640:7;9636:23;9632:32;9629:52;;;9677:1;9674;9667:12;9629:52;9709:9;9703:16;9728:28;9750:5;9728:28;:::i;10124:435::-;10357:3;10346:9;10339:22;10320:4;10378:46;10419:3;10408:9;10404:19;10396:6;10378:46;:::i;:::-;10455:2;10440:18;;10433:34;;;;-1:-1:-1;10498:2:1;10483:18;;10476:34;;;;10541:2;10526:18;;;10519:34;10370:54;10124:435;-1:-1:-1;10124:435:1:o;11430:180::-;11489:6;11542:2;11530:9;11521:7;11517:23;11513:32;11510:52;;;11558:1;11555;11548:12;11510:52;-1:-1:-1;11581:23:1;;11430:180;-1:-1:-1;11430:180:1:o;11615:707::-;11895:4;11941:1;11937;11932:3;11928:11;11924:19;11982:2;11974:6;11970:15;11959:9;11952:34;12022:3;12017:2;12006:9;12002:18;11995:31;12043:46;12084:3;12073:9;12069:19;12061:6;12043:46;:::i;:::-;12120:2;12105:18;;12098:34;;;;12163:2;12148:18;;12141:34;;;;-1:-1:-1;12206:3:1;12191:19;;12184:35;;;;12256:15;;12250:3;12235:19;;12228:44;12303:3;12288:19;12281:35;12035:54;11615:707;-1:-1:-1;;11615:707:1:o;12327:315::-;12395:6;12403;12456:2;12444:9;12435:7;12431:23;12427:32;12424:52;;;12472:1;12469;12462:12;12424:52;12511:9;12498:23;12530:31;12555:5;12530:31;:::i;:::-;12580:5;12632:2;12617:18;;;;12604:32;;-1:-1:-1;;;12327:315:1:o;12647:382::-;12712:6;12720;12773:2;12761:9;12752:7;12748:23;12744:32;12741:52;;;12789:1;12786;12779:12;12741:52;12828:9;12815:23;12847:31;12872:5;12847:31;:::i;:::-;12897:5;-1:-1:-1;12954:2:1;12939:18;;12926:32;12967:30;12926:32;12967:30;:::i;:::-;13016:7;13006:17;;;12647:382;;;;;:::o;13034:464::-;13077:5;13130:3;13123:4;13115:6;13111:17;13107:27;13097:55;;13148:1;13145;13138:12;13097:55;13184:6;13171:20;13215:49;13231:32;13260:2;13231:32;:::i;13215:49::-;13289:2;13280:7;13273:19;13335:3;13328:4;13323:2;13315:6;13311:15;13307:26;13304:35;13301:55;;;13352:1;13349;13342:12;13301:55;13417:2;13410:4;13402:6;13398:17;13391:4;13382:7;13378:18;13365:55;13465:1;13440:16;;;13458:4;13436:27;13429:38;;;;13444:7;13034:464;-1:-1:-1;;;13034:464:1:o;13503:322::-;13572:6;13625:2;13613:9;13604:7;13600:23;13596:32;13593:52;;;13641:1;13638;13631:12;13593:52;13681:9;13668:23;-1:-1:-1;;;;;13706:6:1;13703:30;13700:50;;;13746:1;13743;13736:12;13700:50;13769;13811:7;13802:6;13791:9;13787:22;13769:50;:::i;13830:615::-;13883:3;13928:1;13924;13919:3;13915:11;13911:19;13969:2;13961:5;13955:12;13951:21;13946:3;13939:34;14019:4;14012:5;14008:16;14002:23;14057:4;14050;14045:3;14041:14;14034:28;14083:47;14124:4;14119:3;14115:14;14101:12;14083:47;:::i;:::-;14071:59;;14179:4;14172:5;14168:16;14162:23;14155:4;14150:3;14146:14;14139:47;14235:4;14228:5;14224:16;14218:23;14211:4;14206:3;14202:14;14195:47;14291:4;14284:5;14280:16;14274:23;14267:4;14262:3;14258:14;14251:47;14359:2;14351:4;14344:5;14340:16;14334:23;14330:32;14323:4;14318:3;14314:14;14307:56;14412:4;14405:5;14401:16;14395:23;14388:4;14383:3;14379:14;14372:47;14435:4;14428:11;;;;13830:615;;;;:::o;14450:338::-;14663:2;14652:9;14645:21;14626:4;14683:56;14735:2;14724:9;14720:18;14712:6;14683:56;:::i;:::-;14675:64;;14775:6;14770:2;14759:9;14755:18;14748:34;14450:338;;;;;:::o;14793:247::-;14852:6;14905:2;14893:9;14884:7;14880:23;14876:32;14873:52;;;14921:1;14918;14911:12;14873:52;14960:9;14947:23;14979:31;15004:5;14979:31;:::i;15419:457::-;15497:6;15505;15558:2;15546:9;15537:7;15533:23;15529:32;15526:52;;;15574:1;15571;15564:12;15526:52;15613:9;15600:23;15632:31;15657:5;15632:31;:::i;:::-;15682:5;-1:-1:-1;15738:2:1;15723:18;;15710:32;-1:-1:-1;;;;;15754:30:1;;15751:50;;;15797:1;15794;15787:12;15751:50;15820;15862:7;15853:6;15842:9;15838:22;15820:50;:::i;:::-;15810:60;;;15419:457;;;;;:::o;16089:458::-;16176:6;16184;16192;16245:2;16233:9;16224:7;16220:23;16216:32;16213:52;;;16261:1;16258;16251:12;16213:52;16301:9;16288:23;-1:-1:-1;;;;;16326:6:1;16323:30;16320:50;;;16366:1;16363;16356:12;16320:50;16389;16431:7;16422:6;16411:9;16407:22;16389:50;:::i;:::-;16379:60;16486:2;16471:18;;16458:32;;-1:-1:-1;16537:2:1;16522:18;;;16509:32;;16089:458;-1:-1:-1;;;;16089:458:1:o;16552:1503::-;16746:4;16775:2;16815;16804:9;16800:18;16845:2;16834:9;16827:21;16868:6;16903;16897:13;16934:6;16926;16919:22;16960:2;16950:12;;16993:2;16982:9;16978:18;16971:25;;17055:2;17045:6;17042:1;17038:14;17027:9;17023:30;17019:39;17093:2;17085:6;17081:15;17114:1;17124:902;17138:6;17135:1;17132:13;17124:902;;;17231:2;17227:7;17215:9;17207:6;17203:22;17199:36;17194:3;17187:49;17265:6;17259:13;17295:4;17338:2;17332:9;17369:2;17361:6;17354:18;17399:48;17443:2;17435:6;17431:15;17417:12;17399:48;:::i;:::-;17490:11;;;17484:18;17467:15;;;17460:43;17550:11;;;17544:18;-1:-1:-1;;;;;17540:44:1;17523:15;;;17516:69;17608:4;17655:11;;;17649:18;17632:15;;;17625:43;17691:4;17738:11;;;17732:18;17715:15;;;17708:43;17572:3;17821:11;;;17815:18;17798:15;;;17791:43;17857:4;17904:11;;;17898:18;17881:15;;;;17874:43;;;;-1:-1:-1;;18004:12:1;;;;17969:15;;;;17581:1;17153:9;17124:902;;;-1:-1:-1;18043:6:1;;16552:1503;-1:-1:-1;;;;;;;;16552:1503:1:o;18060:248::-;18128:6;18136;18189:2;18177:9;18168:7;18164:23;18160:32;18157:52;;;18205:1;18202;18195:12;18157:52;-1:-1:-1;;18228:23:1;;;18298:2;18283:18;;;18270:32;;-1:-1:-1;18060:248:1:o;18313:1379::-;18589:4;18637:2;18626:9;18622:18;18667:2;18656:9;18649:21;18690:6;18725;18719:13;18756:6;18748;18741:22;18794:2;18783:9;18779:18;18772:25;;18856:2;18846:6;18843:1;18839:14;18828:9;18824:30;18820:39;18806:53;;18878:4;18917:2;18909:6;18905:15;18938:1;18948:266;18962:6;18959:1;18956:13;18948:266;;;19055:2;19051:7;19039:9;19031:6;19027:22;19023:36;19018:3;19011:49;19083:51;19127:6;19118;19112:13;19083:51;:::i;:::-;19073:61;-1:-1:-1;19192:12:1;;;;19157:15;;;;18984:1;18977:9;18948:266;;;-1:-1:-1;;19250:22:1;;;19230:18;;;19223:50;19326:13;;19348:24;;;19430:15;;;;19390;;;-1:-1:-1;19326:13:1;-1:-1:-1;19465:1:1;19475:189;19491:8;19486:3;19483:17;19475:189;;;19560:15;;19546:30;;19637:17;;;;19598:14;;;;19519:1;19510:11;19475:189;;;-1:-1:-1;19681:5:1;;18313:1379;-1:-1:-1;;;;;;;18313:1379:1:o;19697:457::-;19775:6;19783;19836:2;19824:9;19815:7;19811:23;19807:32;19804:52;;;19852:1;19849;19842:12;19804:52;19892:9;19879:23;-1:-1:-1;;;;;19917:6:1;19914:30;19911:50;;;19957:1;19954;19947:12;19911:50;19980;20022:7;20013:6;20002:9;19998:22;19980:50;:::i;:::-;19970:60;;;20080:2;20069:9;20065:18;20052:32;20093:31;20118:5;20093:31;:::i;20159:677::-;20476:3;20465:9;20458:22;20439:4;20497:46;20538:3;20527:9;20523:19;20515:6;20497:46;:::i;:::-;20574:2;20559:18;;20552:34;;;;-1:-1:-1;;;;;;20622:32:1;;;;20617:2;20602:18;;20595:60;20686:2;20671:18;;20664:34;;;;20729:3;20714:19;;20707:35;;;;20642:3;20758:19;;20751:35;20817:3;20802:19;;;20795:35;20489:54;20159:677;-1:-1:-1;20159:677:1:o;20841:390::-;20919:6;20927;20980:2;20968:9;20959:7;20955:23;20951:32;20948:52;;;20996:1;20993;20986:12;20948:52;21036:9;21023:23;-1:-1:-1;;;;;21061:6:1;21058:30;21055:50;;;21101:1;21098;21091:12;21055:50;21124;21166:7;21157:6;21146:9;21142:22;21124:50;:::i;:::-;21114:60;21221:2;21206:18;;;;21193:32;;-1:-1:-1;;;;20841:390:1:o;21236:383::-;21313:6;21321;21329;21382:2;21370:9;21361:7;21357:23;21353:32;21350:52;;;21398:1;21395;21388:12;21350:52;21437:9;21424:23;21456:31;21481:5;21456:31;:::i;:::-;21506:5;21558:2;21543:18;;21530:32;;-1:-1:-1;21609:2:1;21594:18;;;21581:32;;21236:383;-1:-1:-1;;;21236:383:1:o;23679:545::-;23781:2;23776:3;23773:11;23770:448;;;23817:1;23842:5;23838:2;23831:17;23887:4;23883:2;23873:19;23957:2;23945:10;23941:19;23938:1;23934:27;23928:4;23924:38;23993:4;23981:10;23978:20;23975:47;;;-1:-1:-1;24016:4:1;23975:47;24071:2;24066:3;24062:12;24059:1;24055:20;24049:4;24045:31;24035:41;;24126:82;24144:2;24137:5;24134:13;24126:82;;;24189:17;;;24170:1;24159:13;24126:82;;;24130:3;;;23770:448;23679:545;;;:::o;24400:1352::-;24526:3;24520:10;-1:-1:-1;;;;;24545:6:1;24542:30;24539:56;;;24575:18;;:::i;:::-;24604:97;24694:6;24654:38;24686:4;24680:11;24654:38;:::i;:::-;24648:4;24604:97;:::i;:::-;24756:4;;24820:2;24809:14;;24837:1;24832:663;;;;25539:1;25556:6;25553:89;;;-1:-1:-1;25608:19:1;;;25602:26;25553:89;-1:-1:-1;;24357:1:1;24353:11;;;24349:24;24345:29;24335:40;24381:1;24377:11;;;24332:57;25655:81;;24802:944;;24832:663;6876:1;6869:14;;;6913:4;6900:18;;-1:-1:-1;;24868:20:1;;;24986:236;25000:7;24997:1;24994:14;24986:236;;;25089:19;;;25083:26;25068:42;;25181:27;;;;25149:1;25137:14;;;;25016:19;;24986:236;;;24990:3;25250:6;25241:7;25238:19;25235:201;;;25311:19;;;25305:26;-1:-1:-1;;25394:1:1;25390:14;;;25406:3;25386:24;25382:37;25378:42;25363:58;25348:74;;25235:201;-1:-1:-1;;;;;25482:1:1;25466:14;;;25462:22;25449:36;;-1:-1:-1;24400:1352:1:o;25757:127::-;25818:10;25813:3;25809:20;25806:1;25799:31;25849:4;25846:1;25839:15;25873:4;25870:1;25863:15;25889:128;25956:9;;;25977:11;;;25974:37;;;25991:18;;:::i;26022:135::-;26061:3;26082:17;;;26079:43;;26102:18;;:::i;:::-;-1:-1:-1;26149:1:1;26138:13;;26022:135::o;26162:184::-;26232:6;26285:2;26273:9;26264:7;26260:23;26256:32;26253:52;;;26301:1;26298;26291:12;26253:52;-1:-1:-1;26324:16:1;;26162:184;-1:-1:-1;26162:184:1:o;26701:217::-;26741:1;26767;26757:132;;26811:10;26806:3;26802:20;26799:1;26792:31;26846:4;26843:1;26836:15;26874:4;26871:1;26864:15;26757:132;-1:-1:-1;26903:9:1;;26701:217::o;26923:1431::-;27038:3;27032:4;27029:13;27026:26;;27045:5;;26923:1431::o;27026:26::-;27075:37;27107:3;27101:10;27075:37;:::i;:::-;-1:-1:-1;;;;;27127:6:1;27124:30;27121:56;;;27157:18;;:::i;:::-;27186:97;27276:6;27236:38;27268:4;27262:11;27236:38;:::i;27186:97::-;27309:1;27337:2;27329:6;27326:14;27354:1;27349:748;;;;28141:1;28158:6;28155:89;;;-1:-1:-1;28210:19:1;;;28204:26;28155:89;-1:-1:-1;;24357:1:1;24353:11;;;24349:24;24345:29;24335:40;24381:1;24377:11;;;24332:57;28257:81;;27319:1029;;27349:748;6876:1;6869:14;;;6913:4;6900:18;;-1:-1:-1;;27385:20:1;;;6876:1;6869:14;;;6913:4;6900:18;;27549:9;27571:251;27585:7;27582:1;27579:14;27571:251;;;27667:21;;;27661:28;27646:44;;27717:1;27790:18;;;;27745:15;;;;27608:4;27601:12;27571:251;;;27575:3;27850:6;27841:7;27838:19;27835:203;;;27911:21;;;27905:28;-1:-1:-1;;27996:1:1;27992:14;;;28008:3;27988:24;27984:37;27980:42;27965:58;27950:74;;27835:203;;;;28084:1;28075:6;28072:1;28068:14;28064:22;28058:4;28051:36;27319:1029;;;;26923:1431;;:::o;28359:127::-;28420:10;28415:3;28411:20;28408:1;28401:31;28451:4;28448:1;28441:15;28475:4;28472:1;28465:15;28491:533;28752:3;28741:9;28734:22;28715:4;28773:46;28814:3;28803:9;28799:19;28791:6;28773:46;:::i;:::-;-1:-1:-1;;;;;28855:32:1;;;;28850:2;28835:18;;28828:60;-1:-1:-1;28919:2:1;28904:18;;28897:34;;;;28962:2;28947:18;;28940:34;;;;29005:3;28990:19;;;28983:35;28765:54;28491:533;-1:-1:-1;28491:533:1:o;29380:168::-;29453:9;;;29484;;29501:15;;;29495:22;;29481:37;29471:71;;29522:18;;:::i;29892:331::-;30094:2;30076:21;;;30133:1;30113:18;;;30106:29;-1:-1:-1;;;30166:2:1;30151:18;;30144:38;30214:2;30199:18;;29892:331::o;30228:329::-;30430:2;30412:21;;;30469:1;30449:18;;;30442:29;-1:-1:-1;;;30502:2:1;30487:18;;30480:36;30548:2;30533:18;;30228:329::o;30562:125::-;30627:9;;;30648:10;;;30645:36;;;30661:18;;:::i
Swarm Source
ipfs://31c6f820553cce66247edf440483f487c0816940f71a237d3ae060db28dee8e7
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.218011 | 30.2778 | $6.6 |
Loading...
Loading
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.