Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PacketVerify
Compiler Version
v0.5.0+commit.1d4f565a
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2019-05-21
*/
pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;
// File: contracts/ECDSA.sol
// pragma solidity >=0.4.21 <0.6.0;
pragma solidity ^0.5.0;
/**
* @title Elliptic curve signature operations
* @dev Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d
* TODO Remove this library once solidity supports passing a signature to ecrecover.
* See https://github.com/ethereum/solidity/issues/864
*/
library ECDSA {
/**
* @dev Recover signer address from a message by using their signature
* @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
* @param signature bytes signature, the signature is generated using web3.eth.sign()
*/
function recover(bytes32 hash, bytes memory signature)
internal
pure
returns (address)
{
bytes32 r;
bytes32 s;
uint8 v;
// Check the signature length
if (signature.length != 65) {
return (address(0));
}
// Divide the signature in r, s and v variables
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
// solium-disable-next-line security/no-inline-assembly
assembly {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
// Version of signature should be 27 or 28, but 0 and 1 are also possible versions
if (v < 27) {
v += 27;
}
// If the version is correct return the signer address
if (v != 27 && v != 28) {
return (address(0));
} else {
// solium-disable-next-line arg-overflow
return ecrecover(hash, v, r, s);
}
}
/**
* toEthSignedMessageHash
* @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
* and hash the result
*/
function toEthSignedMessageHash(bytes32 hash)
internal
pure
returns (bytes32)
{
// 32 is the length in bytes of hash,
// enforced by the type signature above
return keccak256(
abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
);
}
}
// File: contracts/lib/RLPReader.sol
/*
* @author Hamdi Allam [email protected]
* Please reach out with any questions or concerns
*/
pragma solidity ^0.5.0;
library RLPReader {
uint8 constant STRING_SHORT_START = 0x80;
uint8 constant STRING_LONG_START = 0xb8;
uint8 constant LIST_SHORT_START = 0xc0;
uint8 constant LIST_LONG_START = 0xf8;
uint8 constant WORD_SIZE = 32;
struct RLPItem {
uint len;
uint memPtr;
}
/*
* @param item RLP encoded bytes
*/
function toRlpItem(bytes memory item) internal pure returns (RLPItem memory) {
uint memPtr;
assembly {
memPtr := add(item, 0x20)
}
return RLPItem(item.length, memPtr);
}
/*
* @param item RLP encoded bytes
*/
function rlpLen(RLPItem memory item) internal pure returns (uint) {
return item.len;
}
/*
* @param item RLP encoded bytes
*/
function payloadLen(RLPItem memory item) internal pure returns (uint) {
return item.len - _payloadOffset(item.memPtr);
}
/*
* @param item RLP encoded list in bytes
*/
function toList(RLPItem memory item) internal pure returns (RLPItem[] memory result) {
require(isList(item));
uint items = numItems(item);
result = new RLPItem[](items);
uint memPtr = item.memPtr + _payloadOffset(item.memPtr);
uint dataLen;
for (uint i = 0; i < items; i++) {
dataLen = _itemLength(memPtr);
result[i] = RLPItem(dataLen, memPtr);
memPtr = memPtr + dataLen;
}
}
// @return indicator whether encoded payload is a list. negate this function call for isData.
function isList(RLPItem memory item) internal pure returns (bool) {
if (item.len == 0) return false;
uint8 byte0;
uint memPtr = item.memPtr;
assembly {
byte0 := byte(0, mload(memPtr))
}
if (byte0 < LIST_SHORT_START)
return false;
return true;
}
/** RLPItem conversions into data types **/
// @returns raw rlp encoding in bytes
function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) {
bytes memory result = new bytes(item.len);
if (result.length == 0) return result;
uint ptr;
assembly {
ptr := add(0x20, result)
}
copy(item.memPtr, ptr, item.len);
return result;
}
// any non-zero byte is considered true
function toBoolean(RLPItem memory item) internal pure returns (bool) {
require(item.len == 1);
uint result;
uint memPtr = item.memPtr;
assembly {
result := byte(0, mload(memPtr))
}
return result == 0 ? false : true;
}
function toAddress(RLPItem memory item) internal pure returns (address) {
// 1 byte for the length prefix
require(item.len == 21);
return address(toUint(item));
}
function toUint(RLPItem memory item) internal pure returns (uint) {
require(item.len > 0 && item.len <= 33);
uint offset = _payloadOffset(item.memPtr);
uint len = item.len - offset;
uint result;
uint memPtr = item.memPtr + offset;
assembly {
result := mload(memPtr)
// shfit to the correct location if neccesary
if lt(len, 32) {
result := div(result, exp(256, sub(32, len)))
}
}
return result;
}
// enforces 32 byte length
function toUintStrict(RLPItem memory item) internal pure returns (uint) {
// one byte prefix
require(item.len == 33);
uint result;
uint memPtr = item.memPtr + 1;
assembly {
result := mload(memPtr)
}
return result;
}
function toBytes(RLPItem memory item) internal pure returns (bytes memory) {
require(item.len > 0);
uint offset = _payloadOffset(item.memPtr);
uint len = item.len - offset; // data length
bytes memory result = new bytes(len);
uint destPtr;
assembly {
destPtr := add(0x20, result)
}
copy(item.memPtr + offset, destPtr, len);
return result;
}
/*
* Private Helpers
*/
// @return number of payload items inside an encoded list.
function numItems(RLPItem memory item) private pure returns (uint) {
if (item.len == 0) return 0;
uint count = 0;
uint currPtr = item.memPtr + _payloadOffset(item.memPtr);
uint endPtr = item.memPtr + item.len;
while (currPtr < endPtr) {
currPtr = currPtr + _itemLength(currPtr); // skip over an item
count++;
}
return count;
}
// @return entire rlp item byte length
function _itemLength(uint memPtr) private pure returns (uint len) {
uint byte0;
assembly {
byte0 := byte(0, mload(memPtr))
}
if (byte0 < STRING_SHORT_START)
return 1;
else if (byte0 < STRING_LONG_START)
return byte0 - STRING_SHORT_START + 1;
else if (byte0 < LIST_SHORT_START) {
assembly {
let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is
memPtr := add(memPtr, 1) // skip over the first byte
/* 32 byte word size */
let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len
len := add(dataLen, add(byteLen, 1))
}
}
else if (byte0 < LIST_LONG_START) {
return byte0 - LIST_SHORT_START + 1;
}
else {
assembly {
let byteLen := sub(byte0, 0xf7)
memPtr := add(memPtr, 1)
let dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length
len := add(dataLen, add(byteLen, 1))
}
}
}
// @return number of bytes until the data
function _payloadOffset(uint memPtr) private pure returns (uint) {
uint byte0;
assembly {
byte0 := byte(0, mload(memPtr))
}
if (byte0 < STRING_SHORT_START)
return 0;
else if (byte0 < STRING_LONG_START || (byte0 >= LIST_SHORT_START && byte0 < LIST_LONG_START))
return 1;
else if (byte0 < LIST_SHORT_START) // being explicit
return byte0 - (STRING_LONG_START - 1) + 1;
else
return byte0 - (LIST_LONG_START - 1) + 1;
}
/*
* @param src Pointer to source
* @param dest Pointer to destination
* @param len Amount of memory to copy from the source
*/
function copy(uint src, uint dest, uint len) private pure {
if (len == 0) return;
// copy as many word sizes as possible
for (; len >= WORD_SIZE; len -= WORD_SIZE) {
assembly {
mstore(dest, mload(src))
}
src += WORD_SIZE;
dest += WORD_SIZE;
}
// left over bytes. Mask is used to remove unwanted bytes from the word
uint mask = 256 ** (WORD_SIZE - len) - 1;
assembly {
let srcpart := and(mload(src), not(mask)) // zero out src
let destpart := and(mload(dest), mask) // retrieve the bytes
mstore(dest, or(destpart, srcpart))
}
}
}
// File: contracts/lib/MsDecoder.sol
// pragma experimental ABIEncoderV2;
/*
* Used to proxy function calls to the RLPReader for testing
*/
library MsDecoder {
using RLPReader for bytes;
using RLPReader for uint;
using RLPReader for RLPReader.RLPItem;
struct Message {
address from;
address to;
bytes32 sessionID;
uint mType;
bytes content;
bytes signature;
// balance proof
bytes32 channelID;
uint256 balance;
uint256 nonce;
// hash of data related to transfer
uint256 amount;
bytes32 additionalHash;
bytes paymentSignature;
}
function decode(bytes memory data) internal view returns (Message[] memory) {
RLPReader.RLPItem[] memory messages = data.toRlpItem().toList();
Message[] memory ms = new Message[](messages.length);
RLPReader.RLPItem[] memory items;
for(uint i=0; i<messages.length; i++) {
items = messages[i].toList();
ms[i] = Message(items[0].toAddress(), items[1].toAddress(), toBytes32(items[2].toBytes()), items[3].toUint(), items[4].toBytes(), items[5].toBytes(), toBytes32(items[6].toBytes()), items[7].toUint(), items[8].toUint(), items[9].toUint(), toBytes32(items[10].toBytes()), items[11].toBytes());
}
return ms;
}
function toBytes32(bytes memory source) internal pure returns (bytes32 result) {
if (source.length == 0) {
return 0x0;
}
assembly {
result := mload(add(source, 32))
}
}
}
// File: contracts/PacketVerify.sol
// pragma experimental ABIEncoderV2;
contract PacketVerify {
using RLPReader for bytes;
using RLPReader for uint;
using RLPReader for RLPReader.RLPItem;
uint256 constant rate = 98;
struct State {
bytes32 prh;
address token;
uint256 amount;
address provider;
bytes32 pr;
address loser;
}
struct URHash {
bytes32 urh;
address user;
bytes32 urr;
uint256 m;
}
struct PSettle{
address user;
uint amount;
}
function verify (
bytes memory data
)
public
view
returns(string memory verifyResult, string memory gameInformation, address loser, address[5] memory users, bytes32[5] memory userSecretHashs, bytes32[5] memory userSecrets, uint[5] memory userModules, uint[5] memory userSettleAmounts) //0=success, 1xxx=invalid data, 2xxx=wrong result
{
MsDecoder.Message[] memory ms = MsDecoder.decode(data);
State memory s;
URHash[] memory urHash = new URHash[](5);
PSettle[] memory pSettle = new PSettle[](5);
uint idx = 0;
// provider start game message
if (ms[0].mType == 1) {
RLPReader.RLPItem[] memory items = ms[0].content.toRlpItem().toList();
s.prh = toBytes32(items[0].toBytes());
s.token = items[1].toAddress();
s.amount = items[2].toUint();
s.provider = ms[0].from;
gameInformation = string(abi.encodePacked("provider: ", addressToString(s.provider), ", token: ", addressToString(s.token), ", wager: ", uintToString(s.amount), ", provider secret hash: ", bytes32ToString(s.prh)));
// token = s.token;
} else {
verifyResult = "error(-1001): provider should send game information message first\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
// provider cancel game
for(uint i=1; i<ms.length; i++){
if(ms[i].mType == 6 && ms[i].from == s.provider){
if(verifyCancel(s, ms, i)){
verifyResult = "game canceled, refund success\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
} else {
verifyResult = "game canceled, refund failed\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
}
}
// provider send hash ready message
for(uint i=1; i<ms.length; i++){
if(ms[i].mType == 3 && ms[i].from == s.provider){
RLPReader.RLPItem[] memory items = ms[i].content.toRlpItem().toList();
for(uint k=0; k<5; k++) {
urHash[k].user = items[k].toAddress();
users[k] = items[k].toAddress();
}
idx = 0;
for(uint j=1; j<i&&idx<5; j++){
if(ms[j].mType == 2 && ms[j].to == s.provider && ms[j].from == urHash[idx].user && ms[j].amount == s.amount){
urHash[idx].urh = toBytes32(ms[j].content.toRlpItem().toList()[0].toBytes());
userSecretHashs[idx] = urHash[idx].urh;
idx++;
}
}
if(idx < 5){
verifyResult = "error(-1002): users provider picked was wrong\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
break;
}
}
if(urHash[0].user == address(0)) {
verifyResult = "error(-1003): provider did not pick users\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
// provider settle game
idx = 0;
for(uint i=1; i<ms.length&&idx<5; i++){
if(ms[i].mType == 5 && ms[i].from == s.provider){
if(idx == 0) {
s.pr = toBytes32(ms[i].content.toRlpItem().toList()[0].toBytes());
gameInformation = string(abi.encodePacked(gameInformation, ", provider secret: ", bytes32ToString(s.pr)));
if (keccak256(abi.encodePacked(s.pr)) != s.prh) {
verifyResult = "error(-1004): provider random was not matched with hash of random\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
} else if(toBytes32(ms[i].content.toRlpItem().toList()[0].toBytes()) != s.pr) {
verifyResult = "error(-1004): provider random was not matched with hash of random\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
pSettle[idx].user = ms[i].to;
pSettle[idx].amount = ms[i].amount;
userSettleAmounts[idx] = ms[i].amount;
idx++;
}
}
if(!verifyProviderSettle(urHash, pSettle)) {
verifyResult = "error(-1005): provider settle order was not matched with order of users\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
// provider send random message
for(uint i=1; i<ms.length; i++){
if(ms[i].mType == 4 && ms[i].from == s.provider){
RLPReader.RLPItem[] memory items = ms[i].content.toRlpItem().toList();
for(uint j=0; j<5; j++){
if(keccak256(abi.encodePacked(toBytes32(items[j].toBytes()))) != urHash[j].urh) {
verifyResult = "error(-1006): user random was not matched with hash of random\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
urHash[j].urr = toBytes32(items[j].toBytes());
userSecrets[j] = urHash[j].urr;
}
}
}
uint256 m = uint256(urHash[0].urr^urHash[1].urr^urHash[2].urr^urHash[3].urr^urHash[4].urr^s.pr)%100 + 100;
gameInformation = string(abi.encodePacked(gameInformation, ", module: ", uintToString(m)));
uint256 minRand = 0;
for (uint i=0; i<5; i++) {
// uint i = 4 - j;
// urHash[i].m = uint256(urHash[i].urr)%m;
urHash[i].m = selectNumber(uint256(urHash[i].urr)%(m-i) + 1, userModules, m);
userModules[i] = urHash[i].m;
if(i == 0) {
s.loser = urHash[i].user;
minRand = urHash[i].m;
} else if(urHash[i].m < minRand) {
minRand = urHash[i].m;
s.loser = urHash[i].user;
}
}
loser = s.loser;
// verify if settlement was correct
for (uint i=0; i<5; i++) {
if(pSettle[i].user == s.loser) {
if(pSettle[i].amount != (s.amount*rate/100)*urHash[i].m/(urHash[0].m+urHash[1].m+urHash[2].m+urHash[3].m+urHash[4].m)) {
verifyResult = "error(-1007): wrong settle amount\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
} else {
if(pSettle[i].amount != ((s.amount*rate/100)*urHash[i].m/(urHash[0].m+urHash[1].m+urHash[2].m+urHash[3].m+urHash[4].m)) + s.amount) {
verifyResult = "error(-1007): wrong settle amount\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
}
}
verifyResult = "Success!\n";
return (verifyResult, gameInformation, loser, users, userSecretHashs, userSecrets, userModules, userSettleAmounts);
}
function selectNumber(
uint rand,
uint[5] memory userModules,
uint module
)
internal
view
returns(uint)
{
uint temp = rand;
for(uint i = 1; i < module + 1; i++){
bool included = false;
for(uint j = 0; j < 5; j ++){
if(userModules[j] == i){
included = true;
break;
}
}
if(!included) {
temp --;
}
if(temp <= 0){
return i;
}
}
return module;
}
function verifyCancel (
State memory s,
MsDecoder.Message[] memory ms,
uint cIdx
)
internal
view
returns(bool)
{
address[] memory users = new address[](cIdx);
uint userLength = 0;
for(uint i=0; i<cIdx; i++) {
if(ms[i].mType == 2 && ms[i].to == s.provider && ms[i].amount == s.amount){
users[userLength] = ms[i].from;
userLength++;
}
}
uint idx = 0;
for(uint j=cIdx; j<ms.length&&idx<userLength; j++) {
if(ms[j].mType == 7 && ms[j].to == users[idx] && ms[j].amount == s.amount){
idx++;
}
}
if(idx < userLength) {
return false;
} else {
return true;
}
}
function verifyProviderSettle (
URHash[] memory urHash,
PSettle[] memory pSettle
)
internal
pure
returns(bool)
{
for(uint i=0; i<5; i++) {
uint j = 0;
while(urHash[i].user != pSettle[j].user && j<5) j++;
if(j==5) return false;
}
return true;
}
function toBytes32(
bytes memory source
)
internal
pure
returns (bytes32 result)
{
if (source.length == 0) {
return 0x0;
}
assembly {
result := mload(add(source, 32))
}
}
function addressToString(address _addr) internal pure returns(string memory) {
bytes32 value = bytes32(uint256(_addr));
bytes memory alphabet = "0123456789abcdef";
bytes memory str = new bytes(42);
str[0] = '0';
str[1] = 'x';
for (uint i = 0; i < 20; i++) {
str[2+i*2] = alphabet[uint(uint8(value[i + 12]) >> 4)];
str[3+i*2] = alphabet[uint(uint8(value[i + 12]) & 0x0f)];
}
return string(str);
}
function bytes32ToString(bytes32 value) internal view returns (string memory) {
bytes memory alphabet = "0123456789abcdef";
bytes memory str = new bytes(66);
str[0] = '0';
str[1] = 'x';
for (uint i = 0; i < 32; i++) {
str[2+i*2] = alphabet[uint(uint8(value[i]) >> 4)];
str[3+i*2] = alphabet[uint(uint8(value[i]) & 0x0f)];
}
return string(str);
}
function uintToString(uint _i) internal pure returns (string memory _uintAsString) {
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--] = byte(uint8(48 + _i % 10));
_i /= 10;
}
return string(bstr);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"data","type":"bytes"}],"name":"verify","outputs":[{"name":"verifyResult","type":"string"},{"name":"gameInformation","type":"string"},{"name":"loser","type":"address"},{"name":"users","type":"address[5]"},{"name":"userSecretHashs","type":"bytes32[5]"},{"name":"userSecrets","type":"bytes32[5]"},{"name":"userModules","type":"uint256[5]"},{"name":"userSettleAmounts","type":"uint256[5]"}],"payable":false,"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5061350e806100206000396000f3fe608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638e760afe14610046575b600080fd5b34801561005257600080fd5b5061006d6004803603610068919081019061315c565b61008a565b6040516100819897969594939291906132e1565b60405180910390f35b6060806000610097612ede565b61009f612f01565b6100a7612f01565b6100af612f24565b6100b7612f24565b60606100c28a611b25565b90506100cc612f47565b6060600560405190808252806020026020018201604052801561010957816020015b6100f6612fc6565b8152602001906001900390816100ee5790505b5090506060600560405190808252806020026020018201604052801561014957816020015b61013661300b565b81526020019060019003908161012e5790505b5090506000809050600185600081518110151561016257fe5b906020019060200201516060015114156104f35760606101a56101a087600081518110151561018d57fe5b9060200190602002015160800151611df9565b611e27565b90506101d06101cb8260008151811015156101bc57fe5b90602001906020020151611f04565b611f92565b8560000181815250506101fa8160018151811015156101eb57fe5b90602001906020020151611fb6565b856020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061025281600281518110151561024357fe5b90602001906020020151611fdb565b85604001818152505085600081518110151561026a57fe5b9060200190602002015160000151856060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102bc856060015161204e565b6102c9866020015161204e565b6102d687604001516123c7565b6102e38860000151612520565b60405160200180807f70726f76696465723a2000000000000000000000000000000000000000000000815250600a0185805190602001908083835b602083101515610343578051825260208201915060208101905060208303925061031e565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c20746f6b656e3a20000000000000000000000000000000000000000000000081525060090184805190602001908083835b6020831015156103be5780518252602082019150602081019050602083039250610399565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c2077616765723a20000000000000000000000000000000000000000000000081525060090183805190602001908083835b6020831015156104395780518252602082019150602081019050602083039250610414565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c2070726f76696465722073656372657420686173683a20000000000000000081525060180182805190602001908083835b6020831015156104b4578051825260208201915060208101905060208303925061048f565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040529c505061059a565b608060405190810160405280604281526020017f6572726f72282d31303031293a2070726f76696465722073686f756c6420736581526020017f6e642067616d6520696e666f726d6174696f6e206d657373616765206669727381526020017f740a0000000000000000000000000000000000000000000000000000000000008152509c508c8c8c8c8c8c8c8c9c509c509c509c509c509c509c509c505050505050611b1a565b6000600190505b85518110156106f757600686828151811015156105ba57fe5b906020019060200201516060015114801561061f5750846060015173ffffffffffffffffffffffffffffffffffffffff1686828151811015156105f957fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff16145b156106ea5761062f858783612873565b1561068f576040805190810160405280601e81526020017f67616d652063616e63656c65642c20726566756e6420737563636573730a00008152509d508d8d8d8d8d8d8d8d9d509d509d509d509d509d509d509d50505050505050611b1a565b6040805190810160405280601d81526020017f67616d652063616e63656c65642c20726566756e64206661696c65640a0000008152509d508d8d8d8d8d8d8d8d9d509d509d509d509d509d509d509d50505050505050611b1a565b80806001019150506105a1565b506000600190505b8551811015610b30576003868281518110151561071857fe5b906020019060200201516060015114801561077d5750846060015173ffffffffffffffffffffffffffffffffffffffff16868281518110151561075757fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff16145b15610b235760606107b06107ab888481518110151561079857fe5b9060200190602002015160800151611df9565b611e27565b905060008090505b60058110156108a1576107e182828151811015156107d257fe5b90602001906020020151611fb6565b86828151811015156107ef57fe5b906020019060200201516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061084f828281518110151561084057fe5b90602001906020020151611fb6565b8d8260058110151561085d57fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506107b8565b50600092506000600190505b82811080156108bc5750600584105b15610a9057600288828151811015156108d157fe5b90602001906020020151606001511480156109365750866060015173ffffffffffffffffffffffffffffffffffffffff16888281518110151561091057fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff16145b80156109a35750858481518110151561094b57fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff16888281518110151561097d57fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff16145b80156109ce5750866040015188828151811015156109bd57fe5b906020019060200201516101200151145b15610a8357610a27610a22610a05610a008b858151811015156109ed57fe5b9060200190602002015160800151611df9565b611e27565b6000815181101515610a1357fe5b90602001906020020151611f04565b611f92565b8685815181101515610a3557fe5b9060200190602002015160000181815250508584815181101515610a5557fe5b90602001906020020151600001518c85600581101515610a7157fe5b60200201818152505083806001019450505b80806001019150506108ad565b506005831015610b1d57606060405190810160405280602e81526020017f6572726f72282d31303032293a2075736572732070726f76696465722070696381526020017f6b6564207761732077726f6e670a0000000000000000000000000000000000008152509e508e8e8e8e8e8e8e8e9e509e509e509e509e509e509e509e5050505050505050611b1a565b50610b30565b80806001019150506106ff565b50600073ffffffffffffffffffffffffffffffffffffffff16836000815181101515610b5857fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff161415610c0357606060405190810160405280602a81526020017f6572726f72282d31303033293a2070726f766964657220646964206e6f74207081526020017f69636b2075736572730a000000000000000000000000000000000000000000008152509c508c8c8c8c8c8c8c8c9c509c509c509c509c509c509c509c505050505050611b1a565b600090506000600190505b855181108015610c1e5750600582105b156110d95760058682815181101515610c3357fe5b9060200190602002015160600151148015610c985750846060015173ffffffffffffffffffffffffffffffffffffffff168682815181101515610c7257fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff16145b156110cc576000821415610edf57610cfa610cf5610cd8610cd38985815181101515610cc057fe5b9060200190602002015160800151611df9565b611e27565b6000815181101515610ce657fe5b90602001906020020151611f04565b611f92565b8560800181815250508c610d118660800151612520565b6040516020018083805190602001908083835b602083101515610d495780518252602082019150602081019050602083039250610d24565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c2070726f7669646572207365637265743a200000000000000000000000000081525060130182805190602001908083835b602083101515610dc45780518252602082019150602081019050602083039250610d9f565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529c50846000015185608001516040516020018082815260200191505060405160208183030381529060405280519060200120141515610eda57608060405190810160405280604281526020017f6572726f72282d31303034293a2070726f76696465722072616e646f6d20776181526020017f73206e6f74206d61746368656420776974682068617368206f662072616e646f81526020017f6d0a0000000000000000000000000000000000000000000000000000000000008152509d508d8d8d8d8d8d8d8d9d509d509d509d509d509d509d509d50505050505050611b1a565b610fe8565b8460800151610f38610f33610f16610f118a86815181101515610efe57fe5b9060200190602002015160800151611df9565b611e27565b6000815181101515610f2457fe5b90602001906020020151611f04565b611f92565b141515610fe757608060405190810160405280604281526020017f6572726f72282d31303034293a2070726f76696465722072616e646f6d20776181526020017f73206e6f74206d61746368656420776974682068617368206f662072616e646f81526020017f6d0a0000000000000000000000000000000000000000000000000000000000008152509d508d8d8d8d8d8d8d8d9d509d509d509d509d509d509d509d50505050505050611b1a565b5b8581815181101515610ff657fe5b9060200190602002015160200151838381518110151561101257fe5b906020019060200201516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050858181518110151561106057fe5b906020019060200201516101200151838381518110151561107d57fe5b906020019060200201516020018181525050858181518110151561109d57fe5b90602001906020020151610120015187836005811015156110ba57fe5b60200201818152505081806001019250505b8080600101915050610c0e565b506110e48383612aef565b151561119157608060405190810160405280604881526020017f6572726f72282d31303035293a2070726f766964657220736574746c65206f7281526020017f64657220776173206e6f74206d6174636865642077697468206f72646572206f81526020017f662075736572730a0000000000000000000000000000000000000000000000008152509c508c8c8c8c8c8c8c8c9c509c509c509c509c509c509c509c505050505050611b1a565b6000600190505b85518110156113e757600486828151811015156111b157fe5b90602001906020020151606001511480156112165750846060015173ffffffffffffffffffffffffffffffffffffffff1686828151811015156111f057fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff16145b156113da576060611249611244888481518110151561123157fe5b9060200190602002015160800151611df9565b611e27565b905060008090505b60058110156113d757858181518110151561126857fe5b906020019060200201516000015161129e611299848481518110151561128a57fe5b90602001906020020151611f04565b611f92565b604051602001808281526020019150506040516020818303038152906040528051906020012014151561134f57606060405190810160405280603e81526020017f6572726f72282d31303036293a20757365722072616e646f6d20776173206e6f81526020017f74206d61746368656420776974682068617368206f662072616e646f6d0a00008152509f508f8f8f8f8f8f8f8f9f509f509f509f509f509f509f509f505050505050505050611b1a565b611377611372838381518110151561136357fe5b90602001906020020151611f04565b611f92565b868281518110151561138557fe5b90602001906020020151604001818152505085818151811015156113a557fe5b90602001906020020151604001518b826005811015156113c157fe5b6020020181815250508080600101915050611251565b50505b8080600101915050611198565b506000606480866080015186600481518110151561140157fe5b906020019060200201516040015187600381518110151561141e57fe5b906020019060200201516040015188600281518110151561143b57fe5b906020019060200201516040015189600181518110151561145857fe5b90602001906020020151604001518a600081518110151561147557fe5b906020019060200201516040015118181818186001900481151561149557fe5b060190508c6114a3826123c7565b6040516020018083805190602001908083835b6020831015156114db57805182526020820191506020810190506020830392506114b6565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c206d6f64756c653a2000000000000000000000000000000000000000000000815250600a0182805190602001908083835b6020831015156115565780518252602082019150602081019050602083039250611531565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529c50600080905060008090505b6005811015611750576115db600182850388848151811015156115b757fe5b9060200190602002015160400151600190048115156115d257fe5b06018b85612bb8565b86828151811015156115e957fe5b906020019060200201516060018181525050858181518110151561160957fe5b90602001906020020151606001518a8260058110151561162557fe5b60200201818152505060008114156116ad57858181518110151561164557fe5b90602001906020020151602001518760a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050858181518110151561169857fe5b90602001906020020151606001519150611743565b8186828151811015156116bc57fe5b906020019060200201516060015110156117425785818151811015156116de57fe5b9060200190602002015160600151915085818151811015156116fc57fe5b90602001906020020151602001518760a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5b8080600101915050611598565b508560a001519c5060008090505b6005811015611ac1578660a0015173ffffffffffffffffffffffffffffffffffffffff16858281518110151561179057fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff161415611936578560048151811015156117c957fe5b90602001906020020151606001518660038151811015156117e657fe5b906020019060200201516060015187600281518110151561180357fe5b906020019060200201516060015188600181518110151561182057fe5b906020019060200201516060015189600081518110151561183d57fe5b906020019060200201516060015101010101868281518110151561185d57fe5b9060200190602002015160600151606460628a604001510281151561187e57fe5b040281151561188957fe5b04858281518110151561189857fe5b906020019060200201516020015114151561193157606060405190810160405280602281526020017f6572726f72282d31303037293a2077726f6e6720736574746c6520616d6f756e81526020017f740a0000000000000000000000000000000000000000000000000000000000008152509f508f8f8f8f8f8f8f8f9f509f509f509f509f509f509f509f505050505050505050611b1a565b611ab4565b866040015186600481518110151561194a57fe5b906020019060200201516060015187600381518110151561196757fe5b906020019060200201516060015188600281518110151561198457fe5b90602001906020020151606001518960018151811015156119a157fe5b90602001906020020151606001518a60008151811015156119be57fe5b90602001906020020151606001510101010187838151811015156119de57fe5b9060200190602002015160600151606460628b60400151028115156119ff57fe5b0402811515611a0a57fe5b04018582815181101515611a1a57fe5b9060200190602002015160200151141515611ab357606060405190810160405280602281526020017f6572726f72282d31303037293a2077726f6e6720736574746c6520616d6f756e81526020017f740a0000000000000000000000000000000000000000000000000000000000008152509f508f8f8f8f8f8f8f8f9f509f509f509f509f509f509f509f505050505050505050611b1a565b5b808060010191505061175e565b506040805190810160405280600981526020017f53756363657373210a00000000000000000000000000000000000000000000008152509e508e8e8e8e8e8e8e8e9e509e509e509e509e509e509e509e50505050505050505b919395975091939597565b606080611b39611b3484611df9565b611e27565b905060608151604051908082528060200260200182016040528015611b7857816020015b611b6561303b565b815260200190600190039081611b5d5790505b509050606060008090505b8351811015611ded57611bac8482815181101515611b9d57fe5b90602001906020020151611e27565b915061018060405190810160405280611bdc846000815181101515611bcd57fe5b90602001906020020151611fb6565b73ffffffffffffffffffffffffffffffffffffffff168152602001611c18846001815181101515611c0957fe5b90602001906020020151611fb6565b73ffffffffffffffffffffffffffffffffffffffff168152602001611c5c611c57856002815181101515611c4857fe5b90602001906020020151611f04565b612c56565b8152602001611c82846003815181101515611c7357fe5b90602001906020020151611fdb565b8152602001611ca8846004815181101515611c9957fe5b90602001906020020151611f04565b8152602001611cce846005815181101515611cbf57fe5b90602001906020020151611f04565b8152602001611cfc611cf7856006815181101515611ce857fe5b90602001906020020151611f04565b612c56565b8152602001611d22846007815181101515611d1357fe5b90602001906020020151611fdb565b8152602001611d48846008815181101515611d3957fe5b90602001906020020151611fdb565b8152602001611d6e846009815181101515611d5f57fe5b90602001906020020151611fdb565b8152602001611d9c611d9785600a815181101515611d8857fe5b90602001906020020151611f04565b612c56565b8152602001611dc284600b815181101515611db357fe5b90602001906020020151611f04565b8152508382815181101515611dd357fe5b906020019060200201819052508080600101915050611b83565b50819350505050919050565b611e016130d2565b600060208301905060408051908101604052808451815260200182815250915050919050565b6060611e3282612c7a565b1515611e3d57600080fd5b6000611e4883612cc8565b905080604051908082528060200260200182016040528015611e8457816020015b611e716130ec565b815260200190600190039081611e695790505b5091506000611e968460200151612d39565b8460200151019050600080600090505b83811015611efb57611eb783612dc2565b91506040805190810160405280838152602001848152508582815181101515611edc57fe5b9060200190602002018190525081830192508080600101915050611ea6565b50505050919050565b606060008260000151111515611f1957600080fd5b6000611f288360200151612d39565b905060008184600001510390506060816040519080825280601f01601f191660200182016040528015611f6a5781602001600182028038833980820191505090505b5090506000816020019050611f86848760200151018285612e75565b81945050505050919050565b60008082511415611fa95760006001029050611fb1565b602082015190505b919050565b600060158260000151141515611fcb57600080fd5b611fd482611fdb565b9050919050565b6000808260000151118015611ff557506021826000015111155b151561200057600080fd5b600061200f8360200151612d39565b9050600081846000015103905060008083866020015101905080519150602083101561204257826020036101000a820491505b81945050505050919050565b606060008273ffffffffffffffffffffffffffffffffffffffff16600102905060606040805190810160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090506060602a6040519080825280601f01601f1916602001820160405280156120de5781602001600182028038833980820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110151561211157fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110151561217157fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060008090505b60148110156123bb5782600485600c84016020811015156121c457fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff16908060020a820491505060ff1681518110151561222657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826002830260020181518110151561228557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f85600c84016020811015156122c957fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff1681518110151561231f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826002830260030181518110151561237e57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506121a7565b50809350505050919050565b6060600082141561240f576040805190810160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061251b565b600082905060005b60008214151561243d578080600101915050600a8281151561243557fe5b049150612417565b6060816040519080825280601f01601f1916602001820160405280156124725781602001600182028038833980820191505090505b50905060006001830390505b60008614151561251357600a8681151561249457fe5b066030017f0100000000000000000000000000000000000000000000000000000000000000028282806001900393508151811015156124cf57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681151561250b57fe5b04955061247e565b819450505050505b919050565b6060806040805190810160405280601081526020017f30313233343536373839616263646566000000000000000000000000000000008152509050606060426040519080825280601f01601f1916602001820160405280156125915781602001600182028038833980820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811015156125c457fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110151561262457fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060008090505b602081101561286857826004868360208110151561267457fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff16908060020a820491505060ff168151811015156126d657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826002830260020181518110151561273557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f868360208110151561277657fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff168151811015156127cc57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826002830260030181518110151561282b57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061265a565b508092505050919050565b60006060826040519080825280602002602001820160405280156128a65781602001602082028038833980820191505090505b509050600080905060008090505b848110156129dd57600286828151811015156128cc57fe5b90602001906020020151606001511480156129315750866060015173ffffffffffffffffffffffffffffffffffffffff16868281518110151561290b57fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff16145b801561295c57508660400151868281518110151561294b57fe5b906020019060200201516101200151145b156129d057858181518110151561296f57fe5b9060200190602002015160000151838381518110151561298b57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081806001019250505b80806001019150506128b4565b50600080905060008590505b8651811080156129f857508282105b15612acb5760078782815181101515612a0d57fe5b9060200190602002015160600151148015612a8557508382815181101515612a3157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff168782815181101515612a5f57fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff16145b8015612ab0575087604001518782815181101515612a9f57fe5b906020019060200201516101200151145b15612abe5781806001019250505b80806001019150506129e9565b5081811015612ae05760009350505050612ae8565b600193505050505b9392505050565b600080600090505b6005811015612bac5760008090505b8381815181101515612b1457fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff168583815181101515612b4657fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff1614158015612b785750600581105b15612b8a578080600101915050612b06565b6005811415612b9e57600092505050612bb2565b508080600101915050612af7565b50600190505b92915050565b6000808490506000600190505b60018401811015612c4957600080905060008090505b6005811015612c1457828782600581101515612bf357fe5b60200201511415612c075760019150612c14565b8080600101915050612bdb565b50801515612c26578280600190039350505b600083111515612c3b57819350505050612c4f565b508080600101915050612bc5565b50829150505b9392505050565b60008082511415612c6d5760006001029050612c75565b602082015190505b919050565b60008082600001511415612c915760009050612cc3565b60008083602001519050805160001a915060c060ff168260ff161015612cbc57600092505050612cc3565b6001925050505b919050565b60008082600001511415612cdf5760009050612d34565b60008090506000612cf38460200151612d39565b84602001510190506000846000015185602001510190505b80821015612d2d57612d1c82612dc2565b820191508280600101935050612d0b565b8293505050505b919050565b600080825160001a9050608060ff16811015612d59576000915050612dbd565b60b860ff16811080612d7e575060c060ff168110158015612d7d575060f860ff1681105b5b15612d8d576001915050612dbd565b60c060ff16811015612dad5760018060b80360ff16820301915050612dbd565b60018060f80360ff168203019150505b919050565b600080825160001a9050608060ff16811015612de2576001915050612e70565b60b860ff16811015612e00576001608060ff16820301915050612e70565b60c060ff16811015612e305760b78103600184019350806020036101000a84510460018201810193505050612e6e565b60f860ff16811015612e4e57600160c060ff16820301915050612e70565b60f78103600184019350806020036101000a845104600182018101935050505b505b919050565b6000811415612e8357612ed9565b5b602060ff1681101515612eb55782518252602060ff1683019250602060ff1682019150602060ff1681039050612e84565b6000600182602060ff16036101000a03905080198451168184511681811785525050505b505050565b60a060405190810160405280600590602082028038833980820191505090505090565b60a060405190810160405280600590602082028038833980820191505090505090565b60a060405190810160405280600590602082028038833980820191505090505090565b60c06040519081016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60806040519081016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600081525090565b6040805190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b61018060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600080191681526020016000815260200160608152602001606081526020016000801916815260200160008152602001600081526020016000815260200160008019168152602001606081525090565b604080519081016040528060008152602001600081525090565b604080519081016040528060008152602001600081525090565b600082601f830112151561311957600080fd5b813561312c6131278261339e565b613371565b9150808252602083016020830185838301111561314857600080fd5b613153838284613481565b50505092915050565b60006020828403121561316e57600080fd5b600082013567ffffffffffffffff81111561318857600080fd5b61319484828501613106565b91505092915050565b6131a68161343b565b82525050565b6131b5816133e8565b6131be826133ca565b60005b828110156131f0576131d485835161319d565b6131dd82613414565b91506020850194506001810190506131c1565b5050505050565b613200816133f3565b613209826133d4565b60005b8281101561323b5761321f85835161328d565b61322882613421565b915060208501945060018101905061320c565b5050505050565b61324b816133fe565b613254826133de565b60005b828110156132865761326a8583516132d2565b6132738261342e565b9150602085019450600181019050613257565b5050505050565b6132968161344d565b82525050565b60006132a782613409565b8084526132bb816020860160208601613490565b6132c4816134c3565b602085010191505092915050565b6132db81613477565b82525050565b60006103808201905081810360008301526132fc818b61329c565b90508181036020830152613310818a61329c565b905061331f604083018961319d565b61332c60608301886131ac565b61333a6101008301876131f7565b6133486101a08301866131f7565b613356610240830185613242565b6133646102e0830184613242565b9998505050505050505050565b6000604051905081810181811067ffffffffffffffff8211171561339457600080fd5b8060405250919050565b600067ffffffffffffffff8211156133b557600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000819050919050565b6000819050919050565b600060059050919050565b600060059050919050565b600060059050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061344682613457565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134ae578082015181840152602081019050613493565b838111156134bd576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a72305820e7783d983890609b007d7a33e4bec02e14515de4fc3a8bad8a146c6f968cae6b6c6578706572696d656e74616cf50037
Deployed Bytecode
0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680638e760afe14610046575b600080fd5b34801561005257600080fd5b5061006d6004803603610068919081019061315c565b61008a565b6040516100819897969594939291906132e1565b60405180910390f35b6060806000610097612ede565b61009f612f01565b6100a7612f01565b6100af612f24565b6100b7612f24565b60606100c28a611b25565b90506100cc612f47565b6060600560405190808252806020026020018201604052801561010957816020015b6100f6612fc6565b8152602001906001900390816100ee5790505b5090506060600560405190808252806020026020018201604052801561014957816020015b61013661300b565b81526020019060019003908161012e5790505b5090506000809050600185600081518110151561016257fe5b906020019060200201516060015114156104f35760606101a56101a087600081518110151561018d57fe5b9060200190602002015160800151611df9565b611e27565b90506101d06101cb8260008151811015156101bc57fe5b90602001906020020151611f04565b611f92565b8560000181815250506101fa8160018151811015156101eb57fe5b90602001906020020151611fb6565b856020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061025281600281518110151561024357fe5b90602001906020020151611fdb565b85604001818152505085600081518110151561026a57fe5b9060200190602002015160000151856060019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102bc856060015161204e565b6102c9866020015161204e565b6102d687604001516123c7565b6102e38860000151612520565b60405160200180807f70726f76696465723a2000000000000000000000000000000000000000000000815250600a0185805190602001908083835b602083101515610343578051825260208201915060208101905060208303925061031e565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c20746f6b656e3a20000000000000000000000000000000000000000000000081525060090184805190602001908083835b6020831015156103be5780518252602082019150602081019050602083039250610399565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c2077616765723a20000000000000000000000000000000000000000000000081525060090183805190602001908083835b6020831015156104395780518252602082019150602081019050602083039250610414565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c2070726f76696465722073656372657420686173683a20000000000000000081525060180182805190602001908083835b6020831015156104b4578051825260208201915060208101905060208303925061048f565b6001836020036101000a0380198251168184511680821785525050505050509050019450505050506040516020818303038152906040529c505061059a565b608060405190810160405280604281526020017f6572726f72282d31303031293a2070726f76696465722073686f756c6420736581526020017f6e642067616d6520696e666f726d6174696f6e206d657373616765206669727381526020017f740a0000000000000000000000000000000000000000000000000000000000008152509c508c8c8c8c8c8c8c8c9c509c509c509c509c509c509c509c505050505050611b1a565b6000600190505b85518110156106f757600686828151811015156105ba57fe5b906020019060200201516060015114801561061f5750846060015173ffffffffffffffffffffffffffffffffffffffff1686828151811015156105f957fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff16145b156106ea5761062f858783612873565b1561068f576040805190810160405280601e81526020017f67616d652063616e63656c65642c20726566756e6420737563636573730a00008152509d508d8d8d8d8d8d8d8d9d509d509d509d509d509d509d509d50505050505050611b1a565b6040805190810160405280601d81526020017f67616d652063616e63656c65642c20726566756e64206661696c65640a0000008152509d508d8d8d8d8d8d8d8d9d509d509d509d509d509d509d509d50505050505050611b1a565b80806001019150506105a1565b506000600190505b8551811015610b30576003868281518110151561071857fe5b906020019060200201516060015114801561077d5750846060015173ffffffffffffffffffffffffffffffffffffffff16868281518110151561075757fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff16145b15610b235760606107b06107ab888481518110151561079857fe5b9060200190602002015160800151611df9565b611e27565b905060008090505b60058110156108a1576107e182828151811015156107d257fe5b90602001906020020151611fb6565b86828151811015156107ef57fe5b906020019060200201516020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061084f828281518110151561084057fe5b90602001906020020151611fb6565b8d8260058110151561085d57fe5b602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506107b8565b50600092506000600190505b82811080156108bc5750600584105b15610a9057600288828151811015156108d157fe5b90602001906020020151606001511480156109365750866060015173ffffffffffffffffffffffffffffffffffffffff16888281518110151561091057fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff16145b80156109a35750858481518110151561094b57fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff16888281518110151561097d57fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff16145b80156109ce5750866040015188828151811015156109bd57fe5b906020019060200201516101200151145b15610a8357610a27610a22610a05610a008b858151811015156109ed57fe5b9060200190602002015160800151611df9565b611e27565b6000815181101515610a1357fe5b90602001906020020151611f04565b611f92565b8685815181101515610a3557fe5b9060200190602002015160000181815250508584815181101515610a5557fe5b90602001906020020151600001518c85600581101515610a7157fe5b60200201818152505083806001019450505b80806001019150506108ad565b506005831015610b1d57606060405190810160405280602e81526020017f6572726f72282d31303032293a2075736572732070726f76696465722070696381526020017f6b6564207761732077726f6e670a0000000000000000000000000000000000008152509e508e8e8e8e8e8e8e8e9e509e509e509e509e509e509e509e5050505050505050611b1a565b50610b30565b80806001019150506106ff565b50600073ffffffffffffffffffffffffffffffffffffffff16836000815181101515610b5857fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff161415610c0357606060405190810160405280602a81526020017f6572726f72282d31303033293a2070726f766964657220646964206e6f74207081526020017f69636b2075736572730a000000000000000000000000000000000000000000008152509c508c8c8c8c8c8c8c8c9c509c509c509c509c509c509c509c505050505050611b1a565b600090506000600190505b855181108015610c1e5750600582105b156110d95760058682815181101515610c3357fe5b9060200190602002015160600151148015610c985750846060015173ffffffffffffffffffffffffffffffffffffffff168682815181101515610c7257fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff16145b156110cc576000821415610edf57610cfa610cf5610cd8610cd38985815181101515610cc057fe5b9060200190602002015160800151611df9565b611e27565b6000815181101515610ce657fe5b90602001906020020151611f04565b611f92565b8560800181815250508c610d118660800151612520565b6040516020018083805190602001908083835b602083101515610d495780518252602082019150602081019050602083039250610d24565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c2070726f7669646572207365637265743a200000000000000000000000000081525060130182805190602001908083835b602083101515610dc45780518252602082019150602081019050602083039250610d9f565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529c50846000015185608001516040516020018082815260200191505060405160208183030381529060405280519060200120141515610eda57608060405190810160405280604281526020017f6572726f72282d31303034293a2070726f76696465722072616e646f6d20776181526020017f73206e6f74206d61746368656420776974682068617368206f662072616e646f81526020017f6d0a0000000000000000000000000000000000000000000000000000000000008152509d508d8d8d8d8d8d8d8d9d509d509d509d509d509d509d509d50505050505050611b1a565b610fe8565b8460800151610f38610f33610f16610f118a86815181101515610efe57fe5b9060200190602002015160800151611df9565b611e27565b6000815181101515610f2457fe5b90602001906020020151611f04565b611f92565b141515610fe757608060405190810160405280604281526020017f6572726f72282d31303034293a2070726f76696465722072616e646f6d20776181526020017f73206e6f74206d61746368656420776974682068617368206f662072616e646f81526020017f6d0a0000000000000000000000000000000000000000000000000000000000008152509d508d8d8d8d8d8d8d8d9d509d509d509d509d509d509d509d50505050505050611b1a565b5b8581815181101515610ff657fe5b9060200190602002015160200151838381518110151561101257fe5b906020019060200201516000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050858181518110151561106057fe5b906020019060200201516101200151838381518110151561107d57fe5b906020019060200201516020018181525050858181518110151561109d57fe5b90602001906020020151610120015187836005811015156110ba57fe5b60200201818152505081806001019250505b8080600101915050610c0e565b506110e48383612aef565b151561119157608060405190810160405280604881526020017f6572726f72282d31303035293a2070726f766964657220736574746c65206f7281526020017f64657220776173206e6f74206d6174636865642077697468206f72646572206f81526020017f662075736572730a0000000000000000000000000000000000000000000000008152509c508c8c8c8c8c8c8c8c9c509c509c509c509c509c509c509c505050505050611b1a565b6000600190505b85518110156113e757600486828151811015156111b157fe5b90602001906020020151606001511480156112165750846060015173ffffffffffffffffffffffffffffffffffffffff1686828151811015156111f057fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff16145b156113da576060611249611244888481518110151561123157fe5b9060200190602002015160800151611df9565b611e27565b905060008090505b60058110156113d757858181518110151561126857fe5b906020019060200201516000015161129e611299848481518110151561128a57fe5b90602001906020020151611f04565b611f92565b604051602001808281526020019150506040516020818303038152906040528051906020012014151561134f57606060405190810160405280603e81526020017f6572726f72282d31303036293a20757365722072616e646f6d20776173206e6f81526020017f74206d61746368656420776974682068617368206f662072616e646f6d0a00008152509f508f8f8f8f8f8f8f8f9f509f509f509f509f509f509f509f505050505050505050611b1a565b611377611372838381518110151561136357fe5b90602001906020020151611f04565b611f92565b868281518110151561138557fe5b90602001906020020151604001818152505085818151811015156113a557fe5b90602001906020020151604001518b826005811015156113c157fe5b6020020181815250508080600101915050611251565b50505b8080600101915050611198565b506000606480866080015186600481518110151561140157fe5b906020019060200201516040015187600381518110151561141e57fe5b906020019060200201516040015188600281518110151561143b57fe5b906020019060200201516040015189600181518110151561145857fe5b90602001906020020151604001518a600081518110151561147557fe5b906020019060200201516040015118181818186001900481151561149557fe5b060190508c6114a3826123c7565b6040516020018083805190602001908083835b6020831015156114db57805182526020820191506020810190506020830392506114b6565b6001836020036101000a038019825116818451168082178552505050505050905001807f2c206d6f64756c653a2000000000000000000000000000000000000000000000815250600a0182805190602001908083835b6020831015156115565780518252602082019150602081019050602083039250611531565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529c50600080905060008090505b6005811015611750576115db600182850388848151811015156115b757fe5b9060200190602002015160400151600190048115156115d257fe5b06018b85612bb8565b86828151811015156115e957fe5b906020019060200201516060018181525050858181518110151561160957fe5b90602001906020020151606001518a8260058110151561162557fe5b60200201818152505060008114156116ad57858181518110151561164557fe5b90602001906020020151602001518760a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050858181518110151561169857fe5b90602001906020020151606001519150611743565b8186828151811015156116bc57fe5b906020019060200201516060015110156117425785818151811015156116de57fe5b9060200190602002015160600151915085818151811015156116fc57fe5b90602001906020020151602001518760a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5b8080600101915050611598565b508560a001519c5060008090505b6005811015611ac1578660a0015173ffffffffffffffffffffffffffffffffffffffff16858281518110151561179057fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff161415611936578560048151811015156117c957fe5b90602001906020020151606001518660038151811015156117e657fe5b906020019060200201516060015187600281518110151561180357fe5b906020019060200201516060015188600181518110151561182057fe5b906020019060200201516060015189600081518110151561183d57fe5b906020019060200201516060015101010101868281518110151561185d57fe5b9060200190602002015160600151606460628a604001510281151561187e57fe5b040281151561188957fe5b04858281518110151561189857fe5b906020019060200201516020015114151561193157606060405190810160405280602281526020017f6572726f72282d31303037293a2077726f6e6720736574746c6520616d6f756e81526020017f740a0000000000000000000000000000000000000000000000000000000000008152509f508f8f8f8f8f8f8f8f9f509f509f509f509f509f509f509f505050505050505050611b1a565b611ab4565b866040015186600481518110151561194a57fe5b906020019060200201516060015187600381518110151561196757fe5b906020019060200201516060015188600281518110151561198457fe5b90602001906020020151606001518960018151811015156119a157fe5b90602001906020020151606001518a60008151811015156119be57fe5b90602001906020020151606001510101010187838151811015156119de57fe5b9060200190602002015160600151606460628b60400151028115156119ff57fe5b0402811515611a0a57fe5b04018582815181101515611a1a57fe5b9060200190602002015160200151141515611ab357606060405190810160405280602281526020017f6572726f72282d31303037293a2077726f6e6720736574746c6520616d6f756e81526020017f740a0000000000000000000000000000000000000000000000000000000000008152509f508f8f8f8f8f8f8f8f9f509f509f509f509f509f509f509f505050505050505050611b1a565b5b808060010191505061175e565b506040805190810160405280600981526020017f53756363657373210a00000000000000000000000000000000000000000000008152509e508e8e8e8e8e8e8e8e9e509e509e509e509e509e509e509e50505050505050505b919395975091939597565b606080611b39611b3484611df9565b611e27565b905060608151604051908082528060200260200182016040528015611b7857816020015b611b6561303b565b815260200190600190039081611b5d5790505b509050606060008090505b8351811015611ded57611bac8482815181101515611b9d57fe5b90602001906020020151611e27565b915061018060405190810160405280611bdc846000815181101515611bcd57fe5b90602001906020020151611fb6565b73ffffffffffffffffffffffffffffffffffffffff168152602001611c18846001815181101515611c0957fe5b90602001906020020151611fb6565b73ffffffffffffffffffffffffffffffffffffffff168152602001611c5c611c57856002815181101515611c4857fe5b90602001906020020151611f04565b612c56565b8152602001611c82846003815181101515611c7357fe5b90602001906020020151611fdb565b8152602001611ca8846004815181101515611c9957fe5b90602001906020020151611f04565b8152602001611cce846005815181101515611cbf57fe5b90602001906020020151611f04565b8152602001611cfc611cf7856006815181101515611ce857fe5b90602001906020020151611f04565b612c56565b8152602001611d22846007815181101515611d1357fe5b90602001906020020151611fdb565b8152602001611d48846008815181101515611d3957fe5b90602001906020020151611fdb565b8152602001611d6e846009815181101515611d5f57fe5b90602001906020020151611fdb565b8152602001611d9c611d9785600a815181101515611d8857fe5b90602001906020020151611f04565b612c56565b8152602001611dc284600b815181101515611db357fe5b90602001906020020151611f04565b8152508382815181101515611dd357fe5b906020019060200201819052508080600101915050611b83565b50819350505050919050565b611e016130d2565b600060208301905060408051908101604052808451815260200182815250915050919050565b6060611e3282612c7a565b1515611e3d57600080fd5b6000611e4883612cc8565b905080604051908082528060200260200182016040528015611e8457816020015b611e716130ec565b815260200190600190039081611e695790505b5091506000611e968460200151612d39565b8460200151019050600080600090505b83811015611efb57611eb783612dc2565b91506040805190810160405280838152602001848152508582815181101515611edc57fe5b9060200190602002018190525081830192508080600101915050611ea6565b50505050919050565b606060008260000151111515611f1957600080fd5b6000611f288360200151612d39565b905060008184600001510390506060816040519080825280601f01601f191660200182016040528015611f6a5781602001600182028038833980820191505090505b5090506000816020019050611f86848760200151018285612e75565b81945050505050919050565b60008082511415611fa95760006001029050611fb1565b602082015190505b919050565b600060158260000151141515611fcb57600080fd5b611fd482611fdb565b9050919050565b6000808260000151118015611ff557506021826000015111155b151561200057600080fd5b600061200f8360200151612d39565b9050600081846000015103905060008083866020015101905080519150602083101561204257826020036101000a820491505b81945050505050919050565b606060008273ffffffffffffffffffffffffffffffffffffffff16600102905060606040805190810160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090506060602a6040519080825280601f01601f1916602001820160405280156120de5781602001600182028038833980820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110151561211157fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110151561217157fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060008090505b60148110156123bb5782600485600c84016020811015156121c457fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff16908060020a820491505060ff1681518110151561222657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826002830260020181518110151561228557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f85600c84016020811015156122c957fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff1681518110151561231f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826002830260030181518110151561237e57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506121a7565b50809350505050919050565b6060600082141561240f576040805190810160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061251b565b600082905060005b60008214151561243d578080600101915050600a8281151561243557fe5b049150612417565b6060816040519080825280601f01601f1916602001820160405280156124725781602001600182028038833980820191505090505b50905060006001830390505b60008614151561251357600a8681151561249457fe5b066030017f0100000000000000000000000000000000000000000000000000000000000000028282806001900393508151811015156124cf57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681151561250b57fe5b04955061247e565b819450505050505b919050565b6060806040805190810160405280601081526020017f30313233343536373839616263646566000000000000000000000000000000008152509050606060426040519080825280601f01601f1916602001820160405280156125915781602001600182028038833980820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811015156125c457fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110151561262457fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060008090505b602081101561286857826004868360208110151561267457fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff16908060020a820491505060ff168151811015156126d657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826002830260020181518110151561273557fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f868360208110151561277657fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090041660ff168151811015156127cc57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002826002830260030181518110151561282b57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061265a565b508092505050919050565b60006060826040519080825280602002602001820160405280156128a65781602001602082028038833980820191505090505b509050600080905060008090505b848110156129dd57600286828151811015156128cc57fe5b90602001906020020151606001511480156129315750866060015173ffffffffffffffffffffffffffffffffffffffff16868281518110151561290b57fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff16145b801561295c57508660400151868281518110151561294b57fe5b906020019060200201516101200151145b156129d057858181518110151561296f57fe5b9060200190602002015160000151838381518110151561298b57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081806001019250505b80806001019150506128b4565b50600080905060008590505b8651811080156129f857508282105b15612acb5760078782815181101515612a0d57fe5b9060200190602002015160600151148015612a8557508382815181101515612a3157fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff168782815181101515612a5f57fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff16145b8015612ab0575087604001518782815181101515612a9f57fe5b906020019060200201516101200151145b15612abe5781806001019250505b80806001019150506129e9565b5081811015612ae05760009350505050612ae8565b600193505050505b9392505050565b600080600090505b6005811015612bac5760008090505b8381815181101515612b1457fe5b906020019060200201516000015173ffffffffffffffffffffffffffffffffffffffff168583815181101515612b4657fe5b906020019060200201516020015173ffffffffffffffffffffffffffffffffffffffff1614158015612b785750600581105b15612b8a578080600101915050612b06565b6005811415612b9e57600092505050612bb2565b508080600101915050612af7565b50600190505b92915050565b6000808490506000600190505b60018401811015612c4957600080905060008090505b6005811015612c1457828782600581101515612bf357fe5b60200201511415612c075760019150612c14565b8080600101915050612bdb565b50801515612c26578280600190039350505b600083111515612c3b57819350505050612c4f565b508080600101915050612bc5565b50829150505b9392505050565b60008082511415612c6d5760006001029050612c75565b602082015190505b919050565b60008082600001511415612c915760009050612cc3565b60008083602001519050805160001a915060c060ff168260ff161015612cbc57600092505050612cc3565b6001925050505b919050565b60008082600001511415612cdf5760009050612d34565b60008090506000612cf38460200151612d39565b84602001510190506000846000015185602001510190505b80821015612d2d57612d1c82612dc2565b820191508280600101935050612d0b565b8293505050505b919050565b600080825160001a9050608060ff16811015612d59576000915050612dbd565b60b860ff16811080612d7e575060c060ff168110158015612d7d575060f860ff1681105b5b15612d8d576001915050612dbd565b60c060ff16811015612dad5760018060b80360ff16820301915050612dbd565b60018060f80360ff168203019150505b919050565b600080825160001a9050608060ff16811015612de2576001915050612e70565b60b860ff16811015612e00576001608060ff16820301915050612e70565b60c060ff16811015612e305760b78103600184019350806020036101000a84510460018201810193505050612e6e565b60f860ff16811015612e4e57600160c060ff16820301915050612e70565b60f78103600184019350806020036101000a845104600182018101935050505b505b919050565b6000811415612e8357612ed9565b5b602060ff1681101515612eb55782518252602060ff1683019250602060ff1682019150602060ff1681039050612e84565b6000600182602060ff16036101000a03905080198451168184511681811785525050505b505050565b60a060405190810160405280600590602082028038833980820191505090505090565b60a060405190810160405280600590602082028038833980820191505090505090565b60a060405190810160405280600590602082028038833980820191505090505090565b60c06040519081016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60806040519081016040528060008019168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008019168152602001600081525090565b6040805190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b61018060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600080191681526020016000815260200160608152602001606081526020016000801916815260200160008152602001600081526020016000815260200160008019168152602001606081525090565b604080519081016040528060008152602001600081525090565b604080519081016040528060008152602001600081525090565b600082601f830112151561311957600080fd5b813561312c6131278261339e565b613371565b9150808252602083016020830185838301111561314857600080fd5b613153838284613481565b50505092915050565b60006020828403121561316e57600080fd5b600082013567ffffffffffffffff81111561318857600080fd5b61319484828501613106565b91505092915050565b6131a68161343b565b82525050565b6131b5816133e8565b6131be826133ca565b60005b828110156131f0576131d485835161319d565b6131dd82613414565b91506020850194506001810190506131c1565b5050505050565b613200816133f3565b613209826133d4565b60005b8281101561323b5761321f85835161328d565b61322882613421565b915060208501945060018101905061320c565b5050505050565b61324b816133fe565b613254826133de565b60005b828110156132865761326a8583516132d2565b6132738261342e565b9150602085019450600181019050613257565b5050505050565b6132968161344d565b82525050565b60006132a782613409565b8084526132bb816020860160208601613490565b6132c4816134c3565b602085010191505092915050565b6132db81613477565b82525050565b60006103808201905081810360008301526132fc818b61329c565b90508181036020830152613310818a61329c565b905061331f604083018961319d565b61332c60608301886131ac565b61333a6101008301876131f7565b6133486101a08301866131f7565b613356610240830185613242565b6133646102e0830184613242565b9998505050505050505050565b6000604051905081810181811067ffffffffffffffff8211171561339457600080fd5b8060405250919050565b600067ffffffffffffffff8211156133b557600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000819050919050565b6000819050919050565b600060059050919050565b600060059050919050565b600060059050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061344682613457565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134ae578082015181840152602081019050613493565b838111156134bd576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a72305820e7783d983890609b007d7a33e4bec02e14515de4fc3a8bad8a146c6f968cae6b6c6578706572696d656e74616cf50037
Deployed Bytecode Sourcemap
11800:12078:0:-;;;;;;;;;;;;;;;;;;;;;;;;12333:7902;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12333:7902:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12432:26;12460:29;12491:13;12506:23;;:::i;:::-;12531:33;;:::i;:::-;12566:29;;:::i;:::-;12597:26;;:::i;:::-;12625:32;;:::i;:::-;12725:29;12757:22;12774:4;12757:16;:22::i;:::-;12725:54;;12790:14;;:::i;:::-;12815:22;12853:1;12840:15;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;12815:40;;12866:24;12907:1;12893:16;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;12866:43;;12920:8;12931:1;12920:12;;13002:1;12987:2;12990:1;12987:5;;;;;;;;;;;;;;;;;;:11;;;:16;12983:803;;;13020:32;13055:34;:25;:2;13058:1;13055:5;;;;;;;;;;;;;;;;;;:13;;;:23;:25::i;:::-;:32;:34::i;:::-;13020:69;;13112:29;13122:18;:5;13128:1;13122:8;;;;;;;;;;;;;;;;;;:16;:18::i;:::-;13112:9;:29::i;:::-;13104:1;:5;;:37;;;;;13166:20;:5;13172:1;13166:8;;;;;;;;;;;;;;;;;;:18;:20::i;:::-;13156:1;:7;;:30;;;;;;;;;;;13212:17;:5;13218:1;13212:8;;;;;;;;;;;;;;;;;;:15;:17::i;:::-;13201:1;:8;;:28;;;;;13257:2;13260:1;13257:5;;;;;;;;;;;;;;;;;;:10;;;13244:1;:10;;:23;;;;;;;;;;;13338:27;13354:1;:10;;;13338:15;:27::i;:::-;13380:24;13396:1;:7;;;13380:15;:24::i;:::-;13419:22;13432:1;:8;;;13419:12;:22::i;:::-;13471;13487:1;:5;;;13471:15;:22::i;:::-;13307:187;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13307:187:0;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13307:187:0;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13307:187:0;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;13307:187:0;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13307:187:0;;;13282:213;;12983:803;;;;13561:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13668:12;13682:15;13699:5;13706;13713:15;13730:11;13743;13756:17;13660:114;;;;;;;;;;;;;;;;;;;;;;;12983:803;13833:6;13840:1;13833:8;;13829:630;13845:2;:9;13843:1;:11;13829:630;;;13893:1;13878:2;13881:1;13878:5;;;;;;;;;;;;;;;;;;:11;;;:16;:44;;;;;13912:1;:10;;;13898:24;;:2;13901:1;13898:5;;;;;;;;;;;;;;;;;;:10;;;:24;;;13878:44;13875:573;;;13945:22;13958:1;13961:2;13965:1;13945:12;:22::i;:::-;13942:491;;;13991:48;;;;;;;;;;;;;;;;;;;;14070:12;14084:15;14101:5;14108;14115:15;14132:11;14145;14158:17;14062:114;;;;;;;;;;;;;;;;;;;;;;;;13942:491;14225:47;;;;;;;;;;;;;;;;;;;;14303:12;14317:15;14334:5;14341;14348:15;14365:11;14378;14391:17;14295:114;;;;;;;;;;;;;;;;;;;;;;;;13875:573;13856:3;;;;;;;13829:630;;;;14518:6;14525:1;14518:8;;14514:1131;14530:2;:9;14528:1;:11;14514:1131;;;14579:1;14564:2;14567:1;14564:5;;;;;;;;;;;;;;;;;;:11;;;:16;:44;;;;;14598:1;:10;;;14584:24;;:2;14587:1;14584:5;;;;;;;;;;;;;;;;;;:10;;;:24;;;14564:44;14561:1073;;;14628:32;14663:34;:25;:2;14666:1;14663:5;;;;;;;;;;;;;;;;;;:13;;;:23;:25::i;:::-;:32;:34::i;:::-;14628:69;;14720:6;14727:1;14720:8;;14716:158;14732:1;14730;:3;14716:158;;;14780:20;:5;14786:1;14780:8;;;;;;;;;;;;;;;;;;:18;:20::i;:::-;14763:6;14770:1;14763:9;;;;;;;;;;;;;;;;;;:14;;:37;;;;;;;;;;;14834:20;:5;14840:1;14834:8;;;;;;;;;;;;;;;;;;:18;:20::i;:::-;14823:5;14829:1;14823:8;;;;;;;;;;;;:31;;;;;;;;;;;14735:3;;;;;;;14716:158;;;;14898:1;14892:7;;14922:6;14929:1;14922:8;;14918:404;14934:1;14932;:3;:10;;;;;14941:1;14937:3;:5;14932:10;14918:404;;;14989:1;14974:2;14977:1;14974:5;;;;;;;;;;;;;;;;;;:11;;;:16;:42;;;;;15006:1;:10;;;14994:22;;:2;14997:1;14994:5;;;;;;;;;;;;;;;;;;:8;;;:22;;;14974:42;:76;;;;;15034:6;15041:3;15034:11;;;;;;;;;;;;;;;;;;:16;;;15020:30;;:2;15023:1;15020:5;;;;;;;;;;;;;;;;;;:10;;;:30;;;14974:76;:104;;;;;15070:1;:8;;;15054:2;15057:1;15054:5;;;;;;;;;;;;;;;;;;:12;;;:24;14974:104;14971:332;;;15124:58;15134:47;:34;:25;:2;15137:1;15134:5;;;;;;;;;;;;;;;;;;:13;;;:23;:25::i;:::-;:32;:34::i;:::-;15169:1;15134:37;;;;;;;;;;;;;;;;;;:45;:47::i;:::-;15124:9;:58::i;:::-;15106:6;15113:3;15106:11;;;;;;;;;;;;;;;;;;:15;;:76;;;;;15232:6;15239:3;15232:11;;;;;;;;;;;;;;;;;;:15;;;15209;15225:3;15209:20;;;;;;;;;;;;:38;;;;;15274:5;;;;;;;14971:332;14944:3;;;;;;;14918:404;;;;15349:1;15343:3;:7;15340:255;;;15374:64;;;;;;;;;;;;;;;;;;;;;;;;;15469:12;15483:15;15500:5;15507;15514:15;15531:11;15544;15557:17;15461:114;;;;;;;;;;;;;;;;;;;;;;;;;15340:255;15613:5;;;14561:1073;14541:3;;;;;;;14514:1131;;;;15684:1;15658:28;;:6;15665:1;15658:9;;;;;;;;;;;;;;;;;;:14;;;:28;;;15655:249;;;15703:60;;;;;;;;;;;;;;;;;;;;;;;;;15786:12;15800:15;15817:5;15824;15831:15;15848:11;15861;15874:17;15778:114;;;;;;;;;;;;;;;;;;;;;;;15655:249;15953:1;15947:7;;15969:6;15976:1;15969:8;;15965:1262;15981:2;:9;15979:1;:11;:18;;;;;15996:1;15992:3;:5;15979:18;15965:1262;;;16036:1;16021:2;16024:1;16021:5;;;;;;;;;;;;;;;;;;:11;;;:16;:44;;;;;16055:1;:10;;;16041:24;;:2;16044:1;16041:5;;;;;;;;;;;;;;;;;;:10;;;:24;;;16021:44;16018:1198;;;16095:1;16088:3;:8;16085:936;;;16128:58;16138:47;:34;:25;:2;16141:1;16138:5;;;;;;;;;;;;;;;;;;:13;;;:23;:25::i;:::-;:32;:34::i;:::-;16173:1;16138:37;;;;;;;;;;;;;;;;;;:45;:47::i;:::-;16128:9;:58::i;:::-;16121:1;:4;;:65;;;;;16251:15;16291:21;16307:1;:4;;;16291:15;:21::i;:::-;16234:79;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16234:79:0;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16234:79:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16234:79:0;;;16209:105;;16378:1;:5;;;16368:1;:4;;;16351:22;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16351:22:0;;;16341:33;;;;;;:42;;16337:324;;;16412:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16531:12;16545:15;16562:5;16569;16576:15;16593:11;16606;16619:17;16523:114;;;;;;;;;;;;;;;;;;;;;;;;16337:324;16085:936;;;16751:1;:4;;;16689:58;16699:47;:34;:25;:2;16702:1;16699:5;;;;;;;;;;;;;;;;;;:13;;;:23;:25::i;:::-;:32;:34::i;:::-;16734:1;16699:37;;;;;;;;;;;;;;;;;;:45;:47::i;:::-;16689:9;:58::i;:::-;:66;;16686:335;;;16780:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16895:12;16909:15;16926:5;16933;16940:15;16957:11;16970;16983:17;16887:114;;;;;;;;;;;;;;;;;;;;;;;;16686:335;16085:936;17059:2;17062:1;17059:5;;;;;;;;;;;;;;;;;;:8;;;17039:7;17047:3;17039:12;;;;;;;;;;;;;;;;;;:17;;:28;;;;;;;;;;;17108:2;17111:1;17108:5;;;;;;;;;;;;;;;;;;:12;;;17086:7;17094:3;17086:12;;;;;;;;;;;;;;;;;;:19;;:34;;;;;17164:2;17167:1;17164:5;;;;;;;;;;;;;;;;;;:12;;;17139:17;17157:3;17139:22;;;;;;;;;;;;:37;;;;;17195:5;;;;;;;16018:1198;15999:3;;;;;;;15965:1262;;;;17241:37;17262:6;17270:7;17241:20;:37::i;:::-;17240:38;17237:289;;;17295:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17408:12;17422:15;17439:5;17446;17453:15;17470:11;17483;17496:17;17400:114;;;;;;;;;;;;;;;;;;;;;;;17237:289;17581:6;17588:1;17581:8;;17577:765;17593:2;:9;17591:1;:11;17577:765;;;17641:1;17626:2;17629:1;17626:5;;;;;;;;;;;;;;;;;;:11;;;:16;:44;;;;;17660:1;:10;;;17646:24;;:2;17649:1;17646:5;;;;;;;;;;;;;;;;;;:10;;;:24;;;17626:44;17623:708;;;17690:32;17725:34;:25;:2;17728:1;17725:5;;;;;;;;;;;;;;;;;;:13;;;:23;:25::i;:::-;:32;:34::i;:::-;17690:69;;17782:6;17789:1;17782:8;;17778:538;17794:1;17792;:3;17778:538;;;17889:6;17896:1;17889:9;;;;;;;;;;;;;;;;;;:13;;;17854:29;17864:18;:5;17870:1;17864:8;;;;;;;;;;;;;;;;;;:16;:18::i;:::-;17854:9;:29::i;:::-;17837:47;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17837:47:0;;;17827:58;;;;;;:75;;17824:352;;;17931:80;;;;;;;;;;;;;;;;;;;;;;;;;18046:12;18060:15;18077:5;18084;18091:15;18108:11;18121;18134:17;18038:114;;;;;;;;;;;;;;;;;;;;;;;;;;17824:352;18214:29;18224:18;:5;18230:1;18224:8;;;;;;;;;;;;;;;;;;:16;:18::i;:::-;18214:9;:29::i;:::-;18198:6;18205:1;18198:9;;;;;;;;;;;;;;;;;;:13;;:45;;;;;18283:6;18290:1;18283:9;;;;;;;;;;;;;;;;;;:13;;;18266:11;18278:1;18266:14;;;;;;;;;;;;:30;;;;;17797:3;;;;;;;17778:538;;;;17623:708;;17604:3;;;;;;;17577:765;;;;18352:9;18454:3;18448;18442:1;:4;;;18428:6;18435:1;18428:9;;;;;;;;;;;;;;;;;;:13;;;18414:6;18421:1;18414:9;;;;;;;;;;;;;;;;;;:13;;;18400:6;18407:1;18400:9;;;;;;;;;;;;;;;;;;:13;;;18386:6;18393:1;18386:9;;;;;;;;;;;;;;;;;;:13;;;18372:6;18379:1;18372:9;;;;;;;;;;;;;;;;;;:13;;;:27;:41;:55;:69;:74;18364:83;;;:87;;;;;;;;:93;18352:105;;18510:15;18541;18554:1;18541:12;:15::i;:::-;18493:64;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18493:64:0;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18493:64:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;18493:64:0;;;18468:90;;18569:15;18587:1;18569:19;;18604:6;18611:1;18604:8;;18599:514;18616:1;18614;:3;18599:514;;;18741:62;18785:1;18780;18778;:3;18762:6;18769:1;18762:9;;;;;;;;;;;;;;;;;;:13;;;18754:22;;;:28;;;;;;;;:32;18788:11;18801:1;18741:12;:62::i;:::-;18727:6;18734:1;18727:9;;;;;;;;;;;;;;;;;;:11;;:76;;;;;18835:6;18842:1;18835:9;;;;;;;;;;;;;;;;;;:11;;;18818;18830:1;18818:14;;;;;;;;;;;;:28;;;;;18869:1;18864;:6;18861:241;;;18901:6;18908:1;18901:9;;;;;;;;;;;;;;;;;;:14;;;18891:1;:7;;:24;;;;;;;;;;;18944:6;18951:1;18944:9;;;;;;;;;;;;;;;;;;:11;;;18934:21;;18861:241;;;18994:7;18980:6;18987:1;18980:9;;;;;;;;;;;;;;;;;;:11;;;:21;18977:125;;;19032:6;19039:1;19032:9;;;;;;;;;;;;;;;;;;:11;;;19022:21;;19072:6;19079:1;19072:9;;;;;;;;;;;;;;;;;;:14;;;19062:1;:7;;:24;;;;;;;;;;;18977:125;18861:241;18619:3;;;;;;;18599:514;;;;19131:1;:7;;;19123:15;;19199:6;19206:1;19199:8;;19194:871;19211:1;19209;:3;19194:871;;;19256:1;:7;;;19237:26;;:7;19245:1;19237:10;;;;;;;;;;;;;;;;;;:15;;;:26;;;19234:820;;;19389:6;19396:1;19389:9;;;;;;;;;;;;;;;;;;:11;;;19377:6;19384:1;19377:9;;;;;;;;;;;;;;;;;;:11;;;19365:6;19372:1;19365:9;;;;;;;;;;;;;;;;;;:11;;;19353:6;19360:1;19353:9;;;;;;;;;;;;;;;;;;:11;;;19341:6;19348:1;19341:9;;;;;;;;;;;;;;;;;;:11;;;:23;:35;:47;:59;19328:6;19335:1;19328:9;;;;;;;;;;;;;;;;;;:11;;;19323:3;11962:2;19309:1;:8;;;:13;:17;;;;;;;;19308:31;:93;;;;;;;;19287:7;19295:1;19287:10;;;;;;;;;;;;;;;;;;:17;;;:114;;19284:351;;;19426:52;;;;;;;;;;;;;;;;;;;;;;;;;19509:12;19523:15;19540:5;19547;19554:15;19571:11;19584;19597:17;19501:114;;;;;;;;;;;;;;;;;;;;;;;;;;19284:351;19234:820;;;19797:1;:8;;;19781:6;19788:1;19781:9;;;;;;;;;;;;;;;;;;:11;;;19769:6;19776:1;19769:9;;;;;;;;;;;;;;;;;;:11;;;19757:6;19764:1;19757:9;;;;;;;;;;;;;;;;;;:11;;;19745:6;19752:1;19745:9;;;;;;;;;;;;;;;;;;:11;;;19733:6;19740:1;19733:9;;;;;;;;;;;;;;;;;;:11;;;:23;:35;:47;:59;19720:6;19727:1;19720:9;;;;;;;;;;;;;;;;;;:11;;;19715:3;11962:2;19701:1;:8;;;:13;:17;;;;;;;;19700:31;:93;;;;;;;;19699:106;19678:7;19686:1;19678:10;;;;;;;;;;;;;;;;;;:17;;;:127;;19675:364;;;19830:52;;;;;;;;;;;;;;;;;;;;;;;;;19913:12;19927:15;19944:5;19951;19958:15;19975:11;19988;20001:17;19905:114;;;;;;;;;;;;;;;;;;;;;;;;;;19675:364;19234:820;19214:3;;;;;;;19194:871;;;;20075:27;;;;;;;;;;;;;;;;;;;;20121:12;20135:15;20152:5;20159;20166:15;20183:11;20196;20209:17;20113:114;;;;;;;;;;;;;;;;;;;;;;;12333:7902;;;;;;;;;;:::o;10771:692::-;10829:16;10858:35;10896:25;:16;:4;:14;:16::i;:::-;:23;:25::i;:::-;10858:63;;10932:19;10968:8;:15;10954:30;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10932:52;;10995:32;11042:6;11049:1;11042:8;;11038:398;11054:8;:15;11052:1;:17;11038:398;;;11099:20;:8;11108:1;11099:11;;;;;;;;;;;;;;;;;;:18;:20::i;:::-;11091:28;;11142:282;;;;;;;;;11150:20;:5;11156:1;11150:8;;;;;;;;;;;;;;;;;;:18;:20::i;:::-;11142:282;;;;;;11172:20;:5;11178:1;11172:8;;;;;;;;;;;;;;;;;;:18;:20::i;:::-;11142:282;;;;;;11194:29;11204:18;:5;11210:1;11204:8;;;;;;;;;;;;;;;;;;:16;:18::i;:::-;11194:9;:29::i;:::-;11142:282;;;;11225:17;:5;11231:1;11225:8;;;;;;;;;;;;;;;;;;:15;:17::i;:::-;11142:282;;;;11244:18;:5;11250:1;11244:8;;;;;;;;;;;;;;;;;;:16;:18::i;:::-;11142:282;;;;11264:18;:5;11270:1;11264:8;;;;;;;;;;;;;;;;;;:16;:18::i;:::-;11142:282;;;;11284:29;11294:18;:5;11300:1;11294:8;;;;;;;;;;;;;;;;;;:16;:18::i;:::-;11284:9;:29::i;:::-;11142:282;;;;11315:17;:5;11321:1;11315:8;;;;;;;;;;;;;;;;;;:15;:17::i;:::-;11142:282;;;;11334:17;:5;11340:1;11334:8;;;;;;;;;;;;;;;;;;:15;:17::i;:::-;11142:282;;;;11353:17;:5;11359:1;11353:8;;;;;;;;;;;;;;;;;;:15;:17::i;:::-;11142:282;;;;11372:30;11382:19;:5;11388:2;11382:9;;;;;;;;;;;;;;;;;;:17;:19::i;:::-;11372:9;:30::i;:::-;11142:282;;;;11404:19;:5;11410:2;11404:9;;;;;;;;;;;;;;;;;;:17;:19::i;:::-;11142:282;;;11134:2;11137:1;11134:5;;;;;;;;;;;;;;;;;:290;;;;11071:3;;;;;;;11038:398;;;;11453:2;11446:9;;;;;10771:692;;;:::o;2788:225::-;2849:14;;:::i;:::-;2876:11;2942:4;2936;2932:15;2922:25;;2977:28;;;;;;;;;2985:4;:11;2977:28;;;;2998:6;2977:28;;;2970:35;;;2788:225;;;:::o;3438:487::-;3498:23;3542:12;3549:4;3542:6;:12::i;:::-;3534:21;;;;;;;;3568:10;3581:14;3590:4;3581:8;:14::i;:::-;3568:27;;3629:5;3615:20;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3606:29;;3648:11;3676:27;3691:4;:11;;;3676:14;:27::i;:::-;3662:4;:11;;;:41;3648:55;;3714:12;3742:6;3751:1;3742:10;;3737:181;3758:5;3754:1;:9;3737:181;;;3795:19;3807:6;3795:11;:19::i;:::-;3785:29;;3841:24;;;;;;;;;3849:7;3841:24;;;;3858:6;3841:24;;;3829:6;3836:1;3829:9;;;;;;;;;;;;;;;;;:36;;;;3899:7;3890:6;:16;3881:25;;3765:3;;;;;;;3737:181;;;;3438:487;;;;;;:::o;6282:445::-;6343:12;6387:1;6376:4;:8;;;:12;6368:21;;;;;;;;6402:11;6416:27;6431:4;:11;;;6416:14;:27::i;:::-;6402:41;;6454:8;6476:6;6465:4;:8;;;:17;6454:28;;6508:19;6540:3;6530:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;6530:14:0;;;;6508:36;;6557:12;6625:6;6619:4;6615:17;6604:28;;6655:40;6674:6;6660:4;:11;;;:20;6682:7;6691:3;6655:4;:40::i;:::-;6713:6;6706:13;;;;;;6282:445;;;:::o;22125:287::-;22234:14;22288:1;22271:6;:13;:18;22267:61;;;22313:3;22306:10;;;;;;22267:61;22390:2;22382:6;22378:15;22372:22;22362:32;;22347:58;;;;:::o;5181:196::-;5244:7;5325:2;5313:4;:8;;;:14;5305:23;;;;;;;;5356:12;5363:4;5356:6;:12::i;:::-;5341:28;;5181:196;;;:::o;5385:549::-;5445:4;5481:1;5470:4;:8;;;:12;:30;;;;;5498:2;5486:4;:8;;;:14;;5470:30;5462:39;;;;;;;;5514:11;5528:27;5543:4;:11;;;5528:14;:27::i;:::-;5514:41;;5566:8;5588:6;5577:4;:8;;;:17;5566:28;;5607:11;5629;5657:6;5643:4;:11;;;:20;5629:34;;5714:6;5708:13;5698:23;;5807:2;5802:3;5799:11;5796:2;;;5869:3;5865:2;5861:12;5856:3;5852:22;5844:6;5840:35;5830:45;;5796:2;5920:6;5913:13;;;;;;5385:549;;;:::o;22422:504::-;22484:13;22510;22542:5;22534:14;;22526:23;;22510:39;;22560:21;:42;;;;;;;;;;;;;;;;;;;;22619:16;22648:2;22638:13;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;22638:13:0;;;;22619:32;;22662:12;:3;22666:1;22662:6;;;;;;;;;;;;;;:12;;;;;;;;;;;22685;:3;22689:1;22685:6;;;;;;;;;;;;;;:12;;;;;;;;;;;22713:6;22722:1;22713:10;;22708:182;22729:2;22725:1;:6;22708:182;;;22766:8;22804:1;22786:5;22796:2;22792:1;:6;22786:13;;;;;;;;;;;;22780:20;;;:25;;;52:12:-1;49:1;45:20;29:14;25:41;7:59;;22780:25:0;22775:31;;22766:41;;;;;;;;;;;;;;;;;;;;22753:3;22761:1;22759;:3;22757:1;:5;22753:10;;;;;;;;;;;;;;:54;;;;;;;;;;;22835:8;22872:4;22855:5;22865:2;22861:1;:6;22855:13;;;;;;;;;;;;22849:20;;;:27;22844:33;;22835:43;;;;;;;;;;;;;;;;;;;;22822:3;22830:1;22828;:3;22826:1;:5;22822:10;;;;;;;;;;;;;;:56;;;;;;;;;;;22733:3;;;;;;;22708:182;;;;22914:3;22900:18;;;;;22422:504;;;:::o;23389:486::-;23443:27;23493:1;23487:2;:7;23483:50;;;23511:10;;;;;;;;;;;;;;;;;;;;;;23483:50;23543:6;23552:2;23543:11;;23565:8;23584:69;23596:1;23591;:6;;23584:69;;;23614:5;;;;;;;23639:2;23634:7;;;;;;;;;;;23584:69;;;23663:17;23693:3;23683:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;23683:14:0;;;;23663:34;;23708:6;23723:1;23717:3;:7;23708:16;;23735:103;23748:1;23742:2;:7;;23735:103;;;23799:2;23794;:7;;;;;;;;23789:2;:12;23778:25;;23766:4;23771:3;;;;;;;23766:9;;;;;;;;;;;;;;:37;;;;;;;;;;;23824:2;23818:8;;;;;;;;;;;23735:103;;;23862:4;23848:19;;;;;;23389:486;;;;:::o;22938:439::-;23001:13;23027:21;:42;;;;;;;;;;;;;;;;;;;;23080:16;23109:2;23099:13;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;23099:13:0;;;;23080:32;;23123:12;:3;23127:1;23123:6;;;;;;;;;;;;;;:12;;;;;;;;;;;23146;:3;23150:1;23146:6;;;;;;;;;;;;;;:12;;;;;;;;;;;23174:6;23183:1;23174:10;;23169:172;23190:2;23186:1;:6;23169:172;;;23227:8;23260:1;23247:5;23253:1;23247:8;;;;;;;;;;;;23241:15;;;:20;;;52:12:-1;49:1;45:20;29:14;25:41;7:59;;23241:20:0;23236:26;;23227:36;;;;;;;;;;;;;;;;;;;;23214:3;23222:1;23220;:3;23218:1;:5;23214:10;;;;;;;;;;;;;;:49;;;;;;;;;;;23291:8;23323:4;23311:5;23317:1;23311:8;;;;;;;;;;;;23305:15;;;:22;23300:28;;23291:38;;;;;;;;;;;;;;;;;;;;23278:3;23286:1;23284;:3;23282:1;:5;23278:10;;;;;;;;;;;;;;:51;;;;;;;;;;;23194:3;;;;;;;23169:172;;;;23365:3;23351:18;;;;22938:439;;;:::o;20899:840::-;21063:4;21085:22;21124:4;21110:19;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;21110:19:0;;;;21085:44;;21140:15;21158:1;21140:19;;21174:6;21181:1;21174:8;;21170:224;21186:4;21184:1;:6;21170:224;;;21230:1;21215:2;21218:1;21215:5;;;;;;;;;;;;;;;;;;:11;;;:16;:42;;;;;21247:1;:10;;;21235:22;;:2;21238:1;21235:5;;;;;;;;;;;;;;;;;;:8;;;:22;;;21215:42;:71;;;;;21278:1;:8;;;21262:2;21265:1;21262:5;;;;;;;;;;;;;;;;;;:12;;;:24;21215:71;21212:171;;;21326:2;21329:1;21326:5;;;;;;;;;;;;;;;;;;:10;;;21306:5;21312:10;21306:17;;;;;;;;;;;;;;;;;:30;;;;;;;;;;;21355:12;;;;;;;21212:171;21192:3;;;;;;;21170:224;;;;21404:8;21415:1;21404:12;;21431:6;21438:4;21431:11;;21427:191;21446:2;:9;21444:1;:11;:27;;;;;21461:10;21457:3;:14;21444:27;21427:191;;;21511:1;21496:2;21499:1;21496:5;;;;;;;;;;;;;;;;;;:11;;;:16;:42;;;;;21528:5;21534:3;21528:10;;;;;;;;;;;;;;;;;;21516:22;;:2;21519:1;21516:5;;;;;;;;;;;;;;;;;;:8;;;:22;;;21496:42;:70;;;;;21558:1;:8;;;21542:2;21545:1;21542:5;;;;;;;;;;;;;;;;;;:12;;;:24;21496:70;21493:114;;;21586:5;;;;;;;21493:114;21473:3;;;;;;;21427:191;;;;21637:10;21631:3;:16;21628:104;;;21671:5;21664:12;;;;;;;21628:104;21716:4;21709:11;;;;;20899:840;;;;;;:::o;21747:370::-;21903:4;21929:6;21936:1;21929:8;;21925:163;21941:1;21939;:3;21925:163;;;21964:6;21973:1;21964:10;;21989:51;22013:7;22021:1;22013:10;;;;;;;;;;;;;;;;;;:15;;;21995:33;;:6;22002:1;21995:9;;;;;;;;;;;;;;;;;;:14;;;:33;;;;:40;;;;;22034:1;22032;:3;21995:40;21989:51;;;22037:3;;;;;;;21989:51;;;22061:1;22058;:4;22055:21;;;22071:5;22064:12;;;;;;22055:21;21925:163;21944:3;;;;;;;21925:163;;;;22105:4;22098:11;;21747:370;;;;;:::o;20243:648::-;20400:4;20422:9;20434:4;20422:16;;20453:6;20462:1;20453:10;;20449:411;20478:1;20469:6;:10;20465:1;:14;20449:411;;;20502:13;20518:5;20502:21;;20542:6;20551:1;20542:10;;20538:171;20558:1;20554;:5;20538:171;;;20606:1;20588:11;20600:1;20588:14;;;;;;;;;;;;;:19;20585:109;;;20642:4;20631:15;;20669:5;;20585:109;20561:4;;;;;;;20538:171;;;;20727:8;20726:9;20723:56;;;20756:7;;;;;;;;20723:56;20804:1;20796:4;:9;;20793:56;;;20832:1;20825:8;;;;;;;20793:56;20449:411;20481:3;;;;;;;20449:411;;;;20877:6;20870:13;;;20243:648;;;;;;:::o;11471:235::-;11534:14;11582:1;11565:6;:13;:18;11561:61;;;11607:3;11600:10;;;;;;11561:61;11684:2;11676:6;11672:15;11666:22;11656:32;;11641:58;;;;:::o;4032:342::-;4092:4;4125:1;4113:4;:8;;;:13;4109:31;;;4135:5;4128:12;;;;4109:31;4153:11;4175;4189:4;:11;;;4175:25;;4258:6;4252:13;4249:1;4244:22;4235:31;;2565:4;4293:24;;:5;:24;;;4289:55;;;4339:5;4332:12;;;;;;4289:55;4362:4;4355:11;;;;4032:342;;;;:::o;6840:422::-;6901:4;6934:1;6922:4;:8;;;:13;6918:27;;;6944:1;6937:8;;;;6918:27;6958:10;6971:1;6958:14;;6983:12;7012:27;7027:4;:11;;;7012:14;:27::i;:::-;6998:4;:11;;;:41;6983:56;;7050:11;7078:4;:8;;;7064:4;:11;;;:22;7050:36;;7097:133;7114:6;7104:7;:16;7097:133;;;7156:20;7168:7;7156:11;:20::i;:::-;7146:7;:30;7136:40;;7211:7;;;;;;;7097:133;;;7249:5;7242:12;;;;;6840:422;;;;:::o;8633:552::-;8692:4;8709:10;8777:6;8771:13;8768:1;8763:22;8754:31;;2471:4;8812:26;;:5;:26;8808:369;;;8861:1;8854:8;;;;;8808:369;2518:4;8882:25;;:5;:25;:83;;;;2565:4;8912:25;;:5;:25;;:52;;;;;2612:4;8941:23;;:5;:23;8912:52;8882:83;8878:299;;;8987:1;8980:8;;;;;8878:299;2565:4;9008:24;;:5;:24;9004:173;;;9107:1;9102;2518:4;9082:21;9073:31;;:5;:31;:35;9066:42;;;;;9004:173;9176:1;9171;2612:4;9153:19;9144:29;;:5;:29;:33;9137:40;;;8633:552;;;;:::o;7314:1264::-;7370:8;7391:10;7459:6;7453:13;7450:1;7445:22;7436:31;;2471:4;7494:26;;:5;:26;7490:1081;;;7542:1;7535:8;;;;;7490:1081;2518:4;7573:25;;:5;:25;7569:1002;;;7649:1;2471:4;7620:26;;:5;:26;:30;7613:37;;;;;7569:1002;2565:4;7672:24;;:5;:24;7668:903;;;7767:4;7760:5;7756:16;7847:1;7839:6;7835:14;7825:24;;8005:7;8001:2;7997:16;7992:3;7988:26;7979:6;7973:13;7969:46;8099:1;8090:7;8086:15;8077:7;8073:29;8066:36;;7722:395;;;;;2612:4;8149:23;;:5;:23;8145:426;;;8223:1;2565:4;8196:24;;:5;:24;:28;8189:35;;;;;8145:426;8323:4;8316:5;8312:16;8368:1;8360:6;8356:14;8346:24;;8441:7;8437:2;8433:16;8428:3;8424:26;8415:6;8409:13;8405:46;8542:1;8533:7;8529:15;8520:7;8516:29;8509:36;;8278:282;;7668:903;7314:1264;;;;;:::o;9346:717::-;9426:1;9419:3;:8;9415:21;;;9429:7;;9415:21;9496:201;2652:2;9503:16;;:3;:16;;9496:201;;;9601:3;9595:10;9589:4;9582:24;2652:2;9637:16;;;;;;2652:2;9668:17;;;;;;2652:2;9521:16;;;;;;9496:201;;;9790:9;9829:1;9822:3;2652:2;9810:15;;;9802:3;:24;:28;9790:40;;9900:4;9896:9;9890:3;9884:10;9880:26;9969:4;9962;9956:11;9952:22;10036:7;10026:8;10023:21;10017:4;10010:35;9850:206;;;;;;;:::o;11800:12078::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11800:12078:0;;;;:::o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11800:12078:0;;;;:::o;:::-;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;11800:12078:0;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;6:440:-1:-;;107:3;100:4;92:6;88:17;84:27;77:35;74:2;;;125:1;122;115:12;74:2;162:6;149:20;184:64;199:48;240:6;199:48;;;184:64;;;175:73;;268:6;261:5;254:21;304:4;296:6;292:17;337:4;330:5;326:16;372:3;363:6;358:3;354:16;351:25;348:2;;;389:1;386;379:12;348:2;399:41;433:6;428:3;423;399:41;;;67:379;;;;;;;;454:345;;567:2;555:9;546:7;542:23;538:32;535:2;;;583:1;580;573:12;535:2;646:1;635:9;631:17;618:31;669:18;661:6;658:30;655:2;;;701:1;698;691:12;655:2;721:62;775:7;766:6;755:9;751:22;721:62;;;711:72;;597:192;529:270;;;;;806:110;879:31;904:5;879:31;;;874:3;867:44;861:55;;;956:521;1079:52;1125:5;1079:52;;;1177:54;1225:5;1177:54;;;1252:1;1237:228;1262:6;1259:1;1256:13;1237:228;;;1302:53;1351:3;1342:6;1336:13;1302:53;;;1372:58;1423:6;1372:58;;;1362:68;;1453:4;1448:3;1444:14;1437:21;;1284:1;1281;1277:9;1272:14;;1237:228;;;1241:14;1058:419;;;;;1518:521;1641:52;1687:5;1641:52;;;1739:54;1787:5;1739:54;;;1814:1;1799:228;1824:6;1821:1;1818:13;1799:228;;;1864:53;1913:3;1904:6;1898:13;1864:53;;;1934:58;1985:6;1934:58;;;1924:68;;2015:4;2010:3;2006:14;1999:21;;1846:1;1843;1839:9;1834:14;;1799:228;;;1803:14;1620:419;;;;;2080:521;2203:52;2249:5;2203:52;;;2301:54;2349:5;2301:54;;;2376:1;2361:228;2386:6;2383:1;2380:13;2361:228;;;2426:53;2475:3;2466:6;2460:13;2426:53;;;2496:58;2547:6;2496:58;;;2486:68;;2577:4;2572:3;2568:14;2561:21;;2408:1;2405;2401:9;2396:14;;2361:228;;;2365:14;2182:419;;;;;2609:110;2682:31;2707:5;2682:31;;;2677:3;2670:44;2664:55;;;2726:300;;2828:39;2861:5;2828:39;;;2884:6;2879:3;2872:19;2896:63;2952:6;2945:4;2940:3;2936:14;2929:4;2922:5;2918:16;2896:63;;;2991:29;3013:6;2991:29;;;2984:4;2979:3;2975:14;2971:50;2964:57;;2808:218;;;;;;3033:110;3106:31;3131:5;3106:31;;;3101:3;3094:44;3088:55;;;3150:1541;;3724:3;3713:9;3709:19;3701:27;;3775:9;3769:4;3765:20;3761:1;3750:9;3746:17;3739:47;3800:68;3863:4;3854:6;3800:68;;;3792:76;;3916:9;3910:4;3906:20;3901:2;3890:9;3886:18;3879:48;3941:68;4004:4;3995:6;3941:68;;;3933:76;;4020:62;4078:2;4067:9;4063:18;4054:6;4020:62;;;4093:108;4197:2;4186:9;4182:18;4173:6;4093:108;;;4212:109;4316:3;4305:9;4301:19;4292:6;4212:109;;;4332;4436:3;4425:9;4421:19;4412:6;4332:109;;;4452;4556:3;4545:9;4541:19;4532:6;4452:109;;;4572;4676:3;4665:9;4661:19;4652:6;4572:109;;;3695:996;;;;;;;;;;;;4698:256;;4760:2;4754:9;4744:19;;4798:4;4790:6;4786:17;4897:6;4885:10;4882:22;4861:18;4849:10;4846:34;4843:62;4840:2;;;4918:1;4915;4908:12;4840:2;4938:10;4934:2;4927:22;4738:216;;;;;4961:258;;5104:18;5096:6;5093:30;5090:2;;;5136:1;5133;5126:12;5090:2;5180:4;5176:9;5169:4;5161:6;5157:17;5153:33;5145:41;;5209:4;5203;5199:15;5191:23;;5027:192;;;;5228:108;;5323:6;5312:17;;5304:32;;;;5347:108;;5442:6;5431:17;;5423:32;;;;5466:108;;5561:6;5550:17;;5542:32;;;;5583:96;;5671:3;5661:13;;5655:24;;;;5686:96;;5774:3;5764:13;;5758:24;;;;5789:96;;5877:3;5867:13;;5861:24;;;;5892:92;;5973:5;5967:12;5957:22;;5951:33;;;;5992:120;;6101:4;6093:6;6089:17;6078:28;;6071:41;;;;6121:120;;6230:4;6222:6;6218:17;6207:28;;6200:41;;;;6250:120;;6359:4;6351:6;6347:17;6336:28;;6329:41;;;;6378:105;;6447:31;6472:5;6447:31;;;6436:42;;6430:53;;;;6490:79;;6559:5;6548:16;;6542:27;;;;6576:128;;6656:42;6649:5;6645:54;6634:65;;6628:76;;;;6711:79;;6780:5;6769:16;;6763:27;;;;6798:145;6879:6;6874:3;6869;6856:30;6935:1;6926:6;6921:3;6917:16;6910:27;6849:94;;;;6952:268;7017:1;7024:101;7038:6;7035:1;7032:13;7024:101;;;7114:1;7109:3;7105:11;7099:18;7095:1;7090:3;7086:11;7079:39;7060:2;7057:1;7053:10;7048:15;;7024:101;;;7140:6;7137:1;7134:13;7131:2;;;7205:1;7196:6;7191:3;7187:16;7180:27;7131:2;7001:219;;;;;7228:97;;7316:2;7312:7;7307:2;7300:5;7296:14;7292:28;7282:38;;7276:49;;;
Swarm Source
bzzr://e7783d983890609b007d7a33e4bec02e14515de4fc3a8bad8a146c6f968cae6b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.