Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DragonGenetics
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-11-29
*/
pragma solidity 0.4.25;
library SafeMath8 {
function mul(uint8 a, uint8 b) internal pure returns (uint8) {
if (a == 0) {
return 0;
}
uint8 c = a * b;
assert(c / a == b);
return c;
}
function div(uint8 a, uint8 b) internal pure returns (uint8) {
return a / b;
}
function sub(uint8 a, uint8 b) internal pure returns (uint8) {
assert(b <= a);
return a - b;
}
function add(uint8 a, uint8 b) internal pure returns (uint8) {
uint8 c = a + b;
assert(c >= a);
return c;
}
function pow(uint8 a, uint8 b) internal pure returns (uint8) {
if (a == 0) return 0;
if (b == 0) return 1;
uint8 c = a ** b;
assert(c / (a ** (b - 1)) == a);
return c;
}
}
library SafeMath16 {
function mul(uint16 a, uint16 b) internal pure returns (uint16) {
if (a == 0) {
return 0;
}
uint16 c = a * b;
assert(c / a == b);
return c;
}
function div(uint16 a, uint16 b) internal pure returns (uint16) {
return a / b;
}
function sub(uint16 a, uint16 b) internal pure returns (uint16) {
assert(b <= a);
return a - b;
}
function add(uint16 a, uint16 b) internal pure returns (uint16) {
uint16 c = a + b;
assert(c >= a);
return c;
}
function pow(uint16 a, uint16 b) internal pure returns (uint16) {
if (a == 0) return 0;
if (b == 0) return 1;
uint16 c = a ** b;
assert(c / (a ** (b - 1)) == a);
return c;
}
}
library SafeMath256 {
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
function pow(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
if (b == 0) return 1;
uint256 c = a ** b;
assert(c / (a ** (b - 1)) == a);
return c;
}
}
library SafeConvert {
function toUint8(uint256 _value) internal pure returns (uint8) {
assert(_value <= 255);
return uint8(_value);
}
function toUint16(uint256 _value) internal pure returns (uint16) {
assert(_value <= 2**16 - 1);
return uint16(_value);
}
function toUint32(uint256 _value) internal pure returns (uint32) {
assert(_value <= 2**32 - 1);
return uint32(_value);
}
}
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
function _validateAddress(address _addr) internal pure {
require(_addr != address(0), "invalid address");
}
constructor() public {
owner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == owner, "not a contract owner");
_;
}
function transferOwnership(address newOwner) public onlyOwner {
_validateAddress(newOwner);
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
contract Controllable is Ownable {
mapping(address => bool) controllers;
modifier onlyController {
require(_isController(msg.sender), "no controller rights");
_;
}
function _isController(address _controller) internal view returns (bool) {
return controllers[_controller];
}
function _setControllers(address[] _controllers) internal {
for (uint256 i = 0; i < _controllers.length; i++) {
_validateAddress(_controllers[i]);
controllers[_controllers[i]] = true;
}
}
}
contract Upgradable is Controllable {
address[] internalDependencies;
address[] externalDependencies;
function getInternalDependencies() public view returns(address[]) {
return internalDependencies;
}
function getExternalDependencies() public view returns(address[]) {
return externalDependencies;
}
function setInternalDependencies(address[] _newDependencies) public onlyOwner {
for (uint256 i = 0; i < _newDependencies.length; i++) {
_validateAddress(_newDependencies[i]);
}
internalDependencies = _newDependencies;
}
function setExternalDependencies(address[] _newDependencies) public onlyOwner {
externalDependencies = _newDependencies;
_setControllers(_newDependencies);
}
}
contract Getter {
function getDragonParents(uint256) external view returns (uint256[2]) {}
}
//////////////CONTRACT//////////////
contract DragonUtils {
using SafeMath8 for uint8;
using SafeMath256 for uint256;
using SafeConvert for uint256;
function _getActiveGene(uint8[16] _gene) internal pure returns (uint8[3] gene) {
uint8 _index = _getActiveGeneIndex(_gene); // find active gene
for (uint8 i = 0; i < 3; i++) {
gene[i] = _gene[i + (_index * 4)]; // get all data for this gene
}
}
function _getActiveGeneIndex(uint8[16] _gene) internal pure returns (uint8) {
return _gene[3] >= _gene[7] ? 0 : 1;
}
// returns 10 active genes (one for each part of the body) with the next structure:
// each gene is an array of 3 elements:
// 0 - type of dragon
// 1 - gene type
// 2 - gene level
function _getActiveGenes(uint8[16][10] _genome) internal pure returns (uint8[30] genome) {
uint8[3] memory _activeGene;
for (uint8 i = 0; i < 10; i++) {
_activeGene = _getActiveGene(_genome[i]);
genome[i * 3] = _activeGene[0];
genome[i * 3 + 1] = _activeGene[1];
genome[i * 3 + 2] = _activeGene[2];
}
}
function _getIndexAndFactor(uint8 _counter) internal pure returns (uint8 index, uint8 factor) {
if (_counter < 44) index = 0;
else if (_counter < 88) index = 1;
else if (_counter < 132) index = 2;
else index = 3;
factor = _counter.add(1) % 4 == 0 ? 10 : 100;
}
function _parseGenome(uint256[4] _composed) internal pure returns (uint8[16][10] parsed) {
uint8 counter = 160; // 40 genes with 4 values in each one
uint8 _factor;
uint8 _index;
for (uint8 i = 0; i < 10; i++) {
for (uint8 j = 0; j < 16; j++) {
counter = counter.sub(1);
// _index - index of value in genome array where current gene is stored
// _factor - denominator that determines the number of digits
(_index, _factor) = _getIndexAndFactor(counter);
parsed[9 - i][15 - j] = (_composed[_index] % _factor).toUint8();
_composed[_index] /= _factor;
}
}
}
function _composeGenome(uint8[16][10] _parsed) internal pure returns (uint256[4] composed) {
uint8 counter = 0;
uint8 _index;
uint8 _factor;
for (uint8 i = 0; i < 10; i++) {
for (uint8 j = 0; j < 16; j++) {
(_index, _factor) = _getIndexAndFactor(counter);
composed[_index] = composed[_index].mul(_factor);
composed[_index] = composed[_index].add(_parsed[i][j]);
counter = counter.add(1);
}
}
}
}
contract DragonGenetics is Upgradable, DragonUtils {
using SafeMath16 for uint16;
using SafeMath256 for uint256;
Getter getter;
uint8 constant MUTATION_CHANCE = 1; // 10%
uint16[7] genesWeights = [300, 240, 220, 190, 25, 15, 10];
// choose pair
function _chooseGen(uint8 _random, uint8[16] _array1, uint8[16] _array2) internal pure returns (uint8[16] gen) {
uint8 x = _random.div(2);
uint8 y = _random % 2;
for (uint8 j = 0; j < 2; j++) {
for (uint8 k = 0; k < 4; k++) {
gen[k.add(j.mul(8))] = _array1[k.add(j.mul(4)).add(x.mul(8))];
gen[k.add(j.mul(2).add(1).mul(4))] = _array2[k.add(j.mul(4)).add(y.mul(8))];
}
}
}
function _getParents(uint256 _id) internal view returns (uint256[2]) {
if (_id != 0) {
return getter.getDragonParents(_id);
}
return [uint256(0), uint256(0)];
}
function _checkInbreeding(uint256[2] memory _parents) internal view returns (uint8 chance) {
uint8 _relatives;
uint8 i;
uint256[2] memory _parents_1_1 = _getParents(_parents[0]);
uint256[2] memory _parents_1_2 = _getParents(_parents[1]);
// check grandparents
if (_parents_1_1[0] != 0 && (_parents_1_1[0] == _parents_1_2[0] || _parents_1_1[0] == _parents_1_2[1])) {
_relatives = _relatives.add(1);
}
if (_parents_1_1[1] != 0 && (_parents_1_1[1] == _parents_1_2[0] || _parents_1_1[1] == _parents_1_2[1])) {
_relatives = _relatives.add(1);
}
// check parents and grandparents
if (_parents[0] == _parents_1_2[0] || _parents[0] == _parents_1_2[1]) {
_relatives = _relatives.add(1);
}
if (_parents[1] == _parents_1_1[0] || _parents[1] == _parents_1_1[1]) {
_relatives = _relatives.add(1);
}
if (_relatives >= 2) return 8; // 80% chance of a bad mutation
if (_relatives == 1) chance = 7; // 70% chance
// check grandparents and great-grandparents
uint256[12] memory _ancestors;
uint256[2] memory _parents_2_1 = _getParents(_parents_1_1[0]);
uint256[2] memory _parents_2_2 = _getParents(_parents_1_1[1]);
uint256[2] memory _parents_2_3 = _getParents(_parents_1_2[0]);
uint256[2] memory _parents_2_4 = _getParents(_parents_1_2[1]);
for (i = 0; i < 2; i++) {
_ancestors[i.mul(6).add(0)] = _parents_1_1[i];
_ancestors[i.mul(6).add(1)] = _parents_1_2[i];
_ancestors[i.mul(6).add(2)] = _parents_2_1[i];
_ancestors[i.mul(6).add(3)] = _parents_2_2[i];
_ancestors[i.mul(6).add(4)] = _parents_2_3[i];
_ancestors[i.mul(6).add(5)] = _parents_2_4[i];
}
for (i = 0; i < 12; i++) {
for (uint8 j = i.add(1); j < 12; j++) {
if (_ancestors[i] != 0 && _ancestors[i] == _ancestors[j]) {
_relatives = _relatives.add(1);
_ancestors[j] = 0;
}
if (_relatives > 2 || (_relatives == 2 && chance == 0)) return 8; // 80% chance
}
}
if (_relatives == 1 && chance == 0) return 5; // 50% chance
}
function _mutateGene(uint8[16] _gene, uint8 _genType) internal pure returns (uint8[16]) {
uint8 _index = _getActiveGeneIndex(_gene);
_gene[_index.mul(4).add(1)] = _genType; // new gene type
_gene[_index.mul(4).add(2)] = 1; // reset level
return _gene;
}
// select one of 16 variations
function _calculateGen(
uint8[16] _momGen,
uint8[16] _dadGen,
uint8 _random
) internal pure returns (uint8[16] gen) {
if (_random < 4) {
return _chooseGen(_random, _momGen, _momGen);
} else if (_random < 8) {
return _chooseGen(_random.sub(4), _momGen, _dadGen);
} else if (_random < 12) {
return _chooseGen(_random.sub(8), _dadGen, _dadGen);
} else {
return _chooseGen(_random.sub(12), _dadGen, _momGen);
}
}
function _calculateGenome(
uint8[16][10] memory _momGenome,
uint8[16][10] memory _dadGenome,
uint8 _uglinessChance,
uint256 _seed_
) internal pure returns (uint8[16][10] genome) {
uint256 _seed = _seed_;
uint256 _random;
uint8 _mutationChance = _uglinessChance == 0 ? MUTATION_CHANCE : _uglinessChance;
uint8 _geneType;
for (uint8 i = 0; i < 10; i++) {
(_random, _seed) = _getSpecialRandom(_seed, 4);
genome[i] = _calculateGen(_momGenome[i], _dadGenome[i], (_random % 16).toUint8());
(_random, _seed) = _getSpecialRandom(_seed, 1);
if (_random < _mutationChance) {
_geneType = 0;
if (_uglinessChance == 0) {
(_random, _seed) = _getSpecialRandom(_seed, 2);
_geneType = (_random % 9).add(1).toUint8(); // [1..9]
}
genome[i] = _mutateGene(genome[i], _geneType);
}
}
}
// 40 points in sum
function _calculateDragonTypes(uint8[16][10] _genome) internal pure returns (uint8[11] dragonTypesArray) {
uint8 _dragonType;
for (uint8 i = 0; i < 10; i++) {
for (uint8 j = 0; j < 4; j++) {
_dragonType = _genome[i][j.mul(4)];
dragonTypesArray[_dragonType] = dragonTypesArray[_dragonType].add(1);
}
}
}
function createGenome(
uint256[2] _parents,
uint256[4] _momGenome,
uint256[4] _dadGenome,
uint256 _seed
) external view returns (
uint256[4] genome,
uint8[11] dragonTypes
) {
uint8 _uglinessChance = _checkInbreeding(_parents);
uint8[16][10] memory _parsedGenome = _calculateGenome(
_parseGenome(_momGenome),
_parseGenome(_dadGenome),
_uglinessChance,
_seed
);
genome = _composeGenome(_parsedGenome);
dragonTypes = _calculateDragonTypes(_parsedGenome);
}
function _getWeightedRandom(uint256 _random) internal view returns (uint8) {
uint16 _weight;
for (uint8 i = 1; i < 7; i++) {
_weight = _weight.add(genesWeights[i.sub(1)]);
if (_random < _weight) return i;
}
return 7;
}
function _generateGen(uint8 _dragonType, uint256 _random) internal view returns (uint8[16]) {
uint8 _geneType = _getWeightedRandom(_random); // [1..7]
return [
_dragonType, _geneType, 1, 1,
_dragonType, _geneType, 1, 0,
_dragonType, _geneType, 1, 0,
_dragonType, _geneType, 1, 0
];
}
// max 4 digits
function _getSpecialRandom(
uint256 _seed_,
uint8 _digits
) internal pure returns (uint256, uint256) {
uint256 _base = 10;
uint256 _seed = _seed_;
uint256 _random = _seed % _base.pow(_digits);
_seed = _seed.div(_base.pow(_digits));
return (_random, _seed);
}
function createGenomeForGenesis(uint8 _dragonType, uint256 _seed_) external view returns (uint256[4]) {
uint256 _seed = _seed_;
uint8[16][10] memory _genome;
uint256 _random;
for (uint8 i = 0; i < 10; i++) {
(_random, _seed) = _getSpecialRandom(_seed, 3);
_genome[i] = _generateGen(_dragonType, _random);
}
return _composeGenome(_genome);
}
function setInternalDependencies(address[] _newDependencies) public onlyOwner {
super.setInternalDependencies(_newDependencies);
getter = Getter(_newDependencies[0]);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"name":"_parents","type":"uint256[2]"},{"name":"_momGenome","type":"uint256[4]"},{"name":"_dadGenome","type":"uint256[4]"},{"name":"_seed","type":"uint256"}],"name":"createGenome","outputs":[{"name":"genome","type":"uint256[4]"},{"name":"dragonTypes","type":"uint8[11]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_dragonType","type":"uint8"},{"name":"_seed_","type":"uint256"}],"name":"createGenomeForGenesis","outputs":[{"name":"","type":"uint256[4]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setExternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setInternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getExternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]Contract Creation Code
608060405260e06040519081016040528061012c61ffff16815260200160f061ffff16815260200160dc61ffff16815260200160be61ffff168152602001601961ffff168152602001600f61ffff168152602001600a61ffff1681525060059060076200006e929190620000b5565b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200018d565b826007600f01601090048101928215620001465791602002820160005b838211156200011457835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302620000d2565b8015620001445782816101000a81549061ffff021916905560020160208160010104928301926001030262000114565b505b50905062000155919062000159565b5090565b6200018a91905b808211156200018657600081816101000a81549061ffff02191690555060010162000160565b5090565b90565b6122f5806200019d6000396000f30060806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806329e3ebe414610093578063574f00051461014957806365fc1253146101bf57806369c0ad93146102255780638da5cb5b1461028b578063b75c4f80146102e2578063e6458f6e1461034e578063f2fde38b146103ba575b600080fd5b34801561009f57600080fd5b506100dc600480360381019080806040019091929192908060800190919291929080608001909192919290803590602001909291905050506103fd565b6040518083600460200280838360005b838110156101075780820151818401526020810190506100ec565b5050505090500182600b60200280838360005b8381101561013557808201518184015260208101905061011a565b505050509050019250505060405180910390f35b34801561015557600080fd5b50610181600480360381019080803560ff169060200190929190803590602001909291905050506104d0565b6040518082600460200280838360005b838110156101ac578082015181840152602081019050610191565b5050505090500191505060405180910390f35b3480156101cb57600080fd5b5061022360048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610551565b005b34801561023157600080fd5b5061028960048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610638565b005b34801561029757600080fd5b506102a0610761565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102ee57600080fd5b506102f7610786565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561033a57808201518184015260208101905061031f565b505050509050019250505060405180910390f35b34801561035a57600080fd5b50610363610814565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103a657808201518184015260208101905061038b565b505050509050019250505060405180910390f35b3480156103c657600080fd5b506103fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108a2565b005b6104056120f8565b61040d61211b565b600061041761213f565b6104458860028060200260405190810160405280929190826002602002808284378201915050505050610a2d565b91506104ad61047888600480602002604051908101604052809291908260046020028082843782019150505050506110ee565b6104a688600480602002604051908101604052809291908260046020028082843782019150505050506110ee565b8488611208565b90506104b881611376565b93506104c3816114ad565b9250505094509492505050565b6104d86120f8565b60006104e261213f565b600080859350600090505b600a8160ff16101561053c5761050484600361158e565b809550819350505061051687836115fa565b838260ff16600a8110151561052757fe5b602002018190525080806001019150506104ed565b61054583611376565b94505050505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610615576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b806003908051906020019061062b92919061216e565b50610635816116d3565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61070581611781565b80600081518110151561071457fe5b90602001906020020151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600280548060200260200160405190810160405280929190818152602001828054801561080a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116107c0575b5050505050905090565b6060600380548060200260200160405190810160405280929190818152602001828054801561089857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161084e575b5050505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610966576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61096f8161189d565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000610a3a6121f8565b610a426121f8565b610a4a61221a565b610a526121f8565b610a5a6121f8565b610a626121f8565b610a6a6121f8565b6000610a888c6000600281101515610a7e57fe5b6020020151611945565b9750610aa68c6001600281101515610a9c57fe5b6020020151611945565b96506000886000600281101515610ab957fe5b602002015114158015610b215750866000600281101515610ad657fe5b6020020151886000600281101515610aea57fe5b60200201511480610b205750866001600281101515610b0557fe5b6020020151886000600281101515610b1957fe5b6020020151145b5b15610b4057610b3d60018b60ff16611a4e90919063ffffffff16565b99505b6000886001600281101515610b5157fe5b602002015114158015610bb95750866000600281101515610b6e57fe5b6020020151886001600281101515610b8257fe5b60200201511480610bb85750866001600281101515610b9d57fe5b6020020151886001600281101515610bb157fe5b6020020151145b5b15610bd857610bd560018b60ff16611a4e90919063ffffffff16565b99505b866000600281101515610be757fe5b60200201518c6000600281101515610bfb57fe5b60200201511480610c315750866001600281101515610c1657fe5b60200201518c6000600281101515610c2a57fe5b6020020151145b15610c5057610c4d60018b60ff16611a4e90919063ffffffff16565b99505b876000600281101515610c5f57fe5b60200201518c6001600281101515610c7357fe5b60200201511480610ca95750876001600281101515610c8e57fe5b60200201518c6001600281101515610ca257fe5b6020020151145b15610cc857610cc560018b60ff16611a4e90919063ffffffff16565b99505b60028a60ff16101515610cde5760089a506110df565b60018a60ff161415610cef5760079a505b610d0b886000600281101515610d0157fe5b6020020151611945565b9450610d29886001600281101515610d1f57fe5b6020020151611945565b9350610d47876000600281101515610d3d57fe5b6020020151611945565b9250610d65876001600281101515610d5b57fe5b6020020151611945565b9150600098505b60028960ff161015610fad57878960ff16600281101515610d8957fe5b602002015186610dbc6000610dab60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610dcb57fe5b602002018181525050868960ff16600281101515610de557fe5b602002015186610e186001610e0760068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610e2757fe5b602002018181525050848960ff16600281101515610e4157fe5b602002015186610e746002610e6360068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610e8357fe5b602002018181525050838960ff16600281101515610e9d57fe5b602002015186610ed06003610ebf60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610edf57fe5b602002018181525050828960ff16600281101515610ef957fe5b602002015186610f2c6004610f1b60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610f3b57fe5b602002018181525050818960ff16600281101515610f5557fe5b602002015186610f886005610f7760068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610f9757fe5b6020020181815250508880600101995050610d6c565b600098505b600c8960ff1610156110ba57610fd560018a60ff16611a4e90919063ffffffff16565b90505b600c8160ff1610156110ad576000868a60ff16600c81101515610ff757fe5b6020020151141580156110335750858160ff16600c8110151561101657fe5b6020020151868a60ff16600c8110151561102c57fe5b6020020151145b1561106e5761104f60018b60ff16611a4e90919063ffffffff16565b99506000868260ff16600c8110151561106457fe5b6020020181815250505b60028a60ff161180611092575060028a60ff16148015611091575060008b60ff16145b5b156110a05760089a506110df565b8080600101915050610fd8565b8880600101995050610fb2565b60018a60ff161480156110d0575060008b60ff16145b156110de5760059a506110df565b5b50505050505050505050919050565b6110f661213f565b600080600080600060a09450600091505b600a8260ff1610156111fe57600090505b60108160ff1610156111f15761113b60018660ff16611abc90919063ffffffff16565b945061114685611adb565b809550819450505061117a8460ff16888560ff1660048110151561116657fe5b602002015181151561117457fe5b06611b65565b868360090360ff16600a8110151561118e57fe5b602002015182600f0360ff166010811015156111a657fe5b602002019060ff16908160ff16815250508360ff16878460ff166004811015156111cc57fe5b602002018181518115156111dc57fe5b04915081815250508080600101915050611118565b8180600101925050611107565b5050505050919050565b61121061213f565b600080600080600086945060008860ff161461122c578761122f565b60015b9250600090505b600a8160ff1610156113695761124d85600461158e565b809650819550505061129e8a8260ff16600a8110151561126957fe5b60200201518a8360ff16600a8110151561127f57fe5b602002015161129960108881151561129357fe5b06611b65565b611b7c565b868260ff16600a811015156112af57fe5b60200201819052506112c285600161158e565b80965081955050508260ff1684101561135c576000915060008860ff161415611323576112f085600261158e565b809650819550505061132061131b600160098781151561130c57fe5b06611c3590919063ffffffff16565b611b65565b91505b611342868260ff16600a8110151561133757fe5b602002015183611c53565b868260ff16600a8110151561135357fe5b60200201819052505b8080600101915050611236565b5050505050949350505050565b61137e6120f8565b6000806000806000809450600091505b600a8260ff1610156114a357600090505b60108160ff161015611496576113b485611adb565b80945081955050506113e78360ff16878660ff166004811015156113d457fe5b6020020151611d1190919063ffffffff16565b868560ff166004811015156113f857fe5b602002018181525050611456878360ff16600a8110151561141557fe5b60200201518260ff1660108110151561142a57fe5b602002015160ff16878660ff1660048110151561144357fe5b6020020151611c3590919063ffffffff16565b868560ff1660048110151561146757fe5b60200201818152505061148760018660ff16611a4e90919063ffffffff16565b9450808060010191505061139f565b818060010192505061138e565b5050505050919050565b6114b561211b565b60008060008091505b600a8260ff16101561158657600090505b60048160ff16101561157957848260ff16600a811015156114ec57fe5b602002015161150860048360ff16611a7290919063ffffffff16565b60ff1660108110151561151757fe5b6020020151925061154a6001858560ff16600b8110151561153457fe5b602002015160ff16611a4e90919063ffffffff16565b848460ff16600b8110151561155b57fe5b602002019060ff16908160ff168152505080806001019150506114cf565b81806001019250506114be565b505050919050565b6000806000806000600a92508691506115b38660ff1684611d4c90919063ffffffff16565b828115156115bd57fe5b0690506115e86115d98760ff1685611d4c90919063ffffffff16565b83611d9e90919063ffffffff16565b91508082945094505050509250929050565b61160261223e565b600061160d83611db4565b9050610200604051908101604052808560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600160ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681525091505092915050565b60008090505b815181101561177d5761170282828151811015156116f357fe5b9060200190602002015161189d565b6001806000848481518110151561171557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506116d9565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611847576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b815181101561188257611875828281518110151561186657fe5b9060200190602002015161189d565b808060010191505061184c565b816002908051906020019061189892919061216e565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b61194d6121f8565b600082141515611a2f57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663515f1843836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156119e757600080fd5b505af11580156119fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506040811015611a2057600080fd5b81019080919050509050611a49565b604080519081016040528060008152602001600081525090505b919050565b60008082840190508360ff168160ff1610151515611a6857fe5b8091505092915050565b60008060008460ff161415611a8a5760009150611ab5565b82840290508260ff168460ff168260ff16811515611aa457fe5b0460ff16141515611ab157fe5b8091505b5092915050565b60008260ff168260ff1611151515611ad057fe5b818303905092915050565b600080602c8360ff161015611af35760009150611b24565b60588360ff161015611b085760019150611b23565b60848360ff161015611b1d5760029150611b22565b600391505b5b5b60006004611b3f60018660ff16611a4e90919063ffffffff16565b60ff16811515611b4b57fe5b0660ff1614611b5b576064611b5e565b600a5b9050915091565b600060ff8211151515611b7457fe5b819050919050565b611b8461223e565b60048260ff161015611ba257611b9b828586611e51565b9050611c2e565b60088260ff161015611bd657611bcf611bc860048460ff16611abc90919063ffffffff16565b8585611e51565b9050611c2e565b600c8260ff161015611c0a57611c03611bfc60088460ff16611abc90919063ffffffff16565b8485611e51565b9050611c2e565b611c2b611c24600c8460ff16611abc90919063ffffffff16565b8486611e51565b90505b9392505050565b6000808284019050838110151515611c4957fe5b8091505092915050565b611c5b61223e565b6000611c668461206f565b90508284611c976001611c8660048660ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611ca657fe5b602002019060ff16908160ff1681525050600184611ce76002611cd660048660ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611cf657fe5b602002019060ff16908160ff16815250508391505092915050565b6000806000841415611d265760009150611d45565b8284029050828482811515611d3757fe5b04141515611d4157fe5b8091505b5092915050565b6000806000841415611d615760009150611d97565b6000831415611d735760019150611d97565b82840a90508360018403850a82811515611d8957fe5b04141515611d9357fe5b8091505b5092915050565b60008183811515611dab57fe5b04905092915050565b6000806000600190505b60078160ff161015611e4557611e226005611de660018460ff16611abc90919063ffffffff16565b60ff16600781101515611df557fe5b601091828204019190066002029054906101000a900461ffff168361ffff166120b690919063ffffffff16565b91508161ffff16841015611e3857809250611e4a565b8080600101915050611dbe565b600792505b5050919050565b611e5961223e565b600080600080611e7660028960ff166120dc90919063ffffffff16565b935060028860ff16811515611e8757fe5b069250600091505b60028260ff16101561206457600090505b60048160ff1610156120575786611f04611ec760088760ff16611a7290919063ffffffff16565b611ef3611ee160048760ff16611a7290919063ffffffff16565b8560ff16611a4e90919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611f1357fe5b602002015185611f45611f3360088660ff16611a7290919063ffffffff16565b8460ff16611a4e90919063ffffffff16565b60ff16601081101515611f5457fe5b602002019060ff16908160ff168152505085611fbd611f8060088660ff16611a7290919063ffffffff16565b611fac611f9a60048760ff16611a7290919063ffffffff16565b8560ff16611a4e90919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611fcc57fe5b60200201518561202a61201860046120076001611ff660028a60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16611a7290919063ffffffff16565b8460ff16611a4e90919063ffffffff16565b60ff1660108110151561203957fe5b602002019060ff16908160ff16815250508080600101915050611ea0565b8180600101925050611e8f565b505050509392505050565b600081600760108110151561208057fe5b602002015160ff1682600360108110151561209757fe5b602002015160ff1610156120ac5760016120af565b60005b9050919050565b60008082840190508361ffff168161ffff16101515156120d257fe5b8091505092915050565b60008160ff168360ff168115156120ef57fe5b04905092915050565b608060405190810160405280600490602082028038833980820191505090505090565b61016060405190810160405280600b90602082028038833980820191505090505090565b61140060405190810160405280600a905b612158612262565b8152602001906001900390816121505790505090565b8280548282559060005260206000209081019282156121e7579160200282015b828111156121e65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061218e565b5b5090506121f49190612286565b5090565b6040805190810160405280600290602082028038833980820191505090505090565b61018060405190810160405280600c90602082028038833980820191505090505090565b61020060405190810160405280601090602082028038833980820191505090505090565b61020060405190810160405280601090602082028038833980820191505090505090565b6122c691905b808211156122c257600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161228c565b5090565b905600a165627a7a72305820af6b427757548232cf809372b5d42285cbaa36261bf20a0f2a5239be94f547950029
Deployed Bytecode
0x60806040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806329e3ebe414610093578063574f00051461014957806365fc1253146101bf57806369c0ad93146102255780638da5cb5b1461028b578063b75c4f80146102e2578063e6458f6e1461034e578063f2fde38b146103ba575b600080fd5b34801561009f57600080fd5b506100dc600480360381019080806040019091929192908060800190919291929080608001909192919290803590602001909291905050506103fd565b6040518083600460200280838360005b838110156101075780820151818401526020810190506100ec565b5050505090500182600b60200280838360005b8381101561013557808201518184015260208101905061011a565b505050509050019250505060405180910390f35b34801561015557600080fd5b50610181600480360381019080803560ff169060200190929190803590602001909291905050506104d0565b6040518082600460200280838360005b838110156101ac578082015181840152602081019050610191565b5050505090500191505060405180910390f35b3480156101cb57600080fd5b5061022360048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610551565b005b34801561023157600080fd5b5061028960048036038101908080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610638565b005b34801561029757600080fd5b506102a0610761565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102ee57600080fd5b506102f7610786565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561033a57808201518184015260208101905061031f565b505050509050019250505060405180910390f35b34801561035a57600080fd5b50610363610814565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103a657808201518184015260208101905061038b565b505050509050019250505060405180910390f35b3480156103c657600080fd5b506103fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506108a2565b005b6104056120f8565b61040d61211b565b600061041761213f565b6104458860028060200260405190810160405280929190826002602002808284378201915050505050610a2d565b91506104ad61047888600480602002604051908101604052809291908260046020028082843782019150505050506110ee565b6104a688600480602002604051908101604052809291908260046020028082843782019150505050506110ee565b8488611208565b90506104b881611376565b93506104c3816114ad565b9250505094509492505050565b6104d86120f8565b60006104e261213f565b600080859350600090505b600a8160ff16101561053c5761050484600361158e565b809550819350505061051687836115fa565b838260ff16600a8110151561052757fe5b602002018190525080806001019150506104ed565b61054583611376565b94505050505092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610615576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b806003908051906020019061062b92919061216e565b50610635816116d3565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156106fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61070581611781565b80600081518110151561071457fe5b90602001906020020151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600280548060200260200160405190810160405280929190818152602001828054801561080a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116107c0575b5050505050905090565b6060600380548060200260200160405190810160405280929190818152602001828054801561089857602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161084e575b5050505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610966576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61096f8161189d565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000610a3a6121f8565b610a426121f8565b610a4a61221a565b610a526121f8565b610a5a6121f8565b610a626121f8565b610a6a6121f8565b6000610a888c6000600281101515610a7e57fe5b6020020151611945565b9750610aa68c6001600281101515610a9c57fe5b6020020151611945565b96506000886000600281101515610ab957fe5b602002015114158015610b215750866000600281101515610ad657fe5b6020020151886000600281101515610aea57fe5b60200201511480610b205750866001600281101515610b0557fe5b6020020151886000600281101515610b1957fe5b6020020151145b5b15610b4057610b3d60018b60ff16611a4e90919063ffffffff16565b99505b6000886001600281101515610b5157fe5b602002015114158015610bb95750866000600281101515610b6e57fe5b6020020151886001600281101515610b8257fe5b60200201511480610bb85750866001600281101515610b9d57fe5b6020020151886001600281101515610bb157fe5b6020020151145b5b15610bd857610bd560018b60ff16611a4e90919063ffffffff16565b99505b866000600281101515610be757fe5b60200201518c6000600281101515610bfb57fe5b60200201511480610c315750866001600281101515610c1657fe5b60200201518c6000600281101515610c2a57fe5b6020020151145b15610c5057610c4d60018b60ff16611a4e90919063ffffffff16565b99505b876000600281101515610c5f57fe5b60200201518c6001600281101515610c7357fe5b60200201511480610ca95750876001600281101515610c8e57fe5b60200201518c6001600281101515610ca257fe5b6020020151145b15610cc857610cc560018b60ff16611a4e90919063ffffffff16565b99505b60028a60ff16101515610cde5760089a506110df565b60018a60ff161415610cef5760079a505b610d0b886000600281101515610d0157fe5b6020020151611945565b9450610d29886001600281101515610d1f57fe5b6020020151611945565b9350610d47876000600281101515610d3d57fe5b6020020151611945565b9250610d65876001600281101515610d5b57fe5b6020020151611945565b9150600098505b60028960ff161015610fad57878960ff16600281101515610d8957fe5b602002015186610dbc6000610dab60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610dcb57fe5b602002018181525050868960ff16600281101515610de557fe5b602002015186610e186001610e0760068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610e2757fe5b602002018181525050848960ff16600281101515610e4157fe5b602002015186610e746002610e6360068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610e8357fe5b602002018181525050838960ff16600281101515610e9d57fe5b602002015186610ed06003610ebf60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610edf57fe5b602002018181525050828960ff16600281101515610ef957fe5b602002015186610f2c6004610f1b60068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610f3b57fe5b602002018181525050818960ff16600281101515610f5557fe5b602002015186610f886005610f7760068e60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16600c81101515610f9757fe5b6020020181815250508880600101995050610d6c565b600098505b600c8960ff1610156110ba57610fd560018a60ff16611a4e90919063ffffffff16565b90505b600c8160ff1610156110ad576000868a60ff16600c81101515610ff757fe5b6020020151141580156110335750858160ff16600c8110151561101657fe5b6020020151868a60ff16600c8110151561102c57fe5b6020020151145b1561106e5761104f60018b60ff16611a4e90919063ffffffff16565b99506000868260ff16600c8110151561106457fe5b6020020181815250505b60028a60ff161180611092575060028a60ff16148015611091575060008b60ff16145b5b156110a05760089a506110df565b8080600101915050610fd8565b8880600101995050610fb2565b60018a60ff161480156110d0575060008b60ff16145b156110de5760059a506110df565b5b50505050505050505050919050565b6110f661213f565b600080600080600060a09450600091505b600a8260ff1610156111fe57600090505b60108160ff1610156111f15761113b60018660ff16611abc90919063ffffffff16565b945061114685611adb565b809550819450505061117a8460ff16888560ff1660048110151561116657fe5b602002015181151561117457fe5b06611b65565b868360090360ff16600a8110151561118e57fe5b602002015182600f0360ff166010811015156111a657fe5b602002019060ff16908160ff16815250508360ff16878460ff166004811015156111cc57fe5b602002018181518115156111dc57fe5b04915081815250508080600101915050611118565b8180600101925050611107565b5050505050919050565b61121061213f565b600080600080600086945060008860ff161461122c578761122f565b60015b9250600090505b600a8160ff1610156113695761124d85600461158e565b809650819550505061129e8a8260ff16600a8110151561126957fe5b60200201518a8360ff16600a8110151561127f57fe5b602002015161129960108881151561129357fe5b06611b65565b611b7c565b868260ff16600a811015156112af57fe5b60200201819052506112c285600161158e565b80965081955050508260ff1684101561135c576000915060008860ff161415611323576112f085600261158e565b809650819550505061132061131b600160098781151561130c57fe5b06611c3590919063ffffffff16565b611b65565b91505b611342868260ff16600a8110151561133757fe5b602002015183611c53565b868260ff16600a8110151561135357fe5b60200201819052505b8080600101915050611236565b5050505050949350505050565b61137e6120f8565b6000806000806000809450600091505b600a8260ff1610156114a357600090505b60108160ff161015611496576113b485611adb565b80945081955050506113e78360ff16878660ff166004811015156113d457fe5b6020020151611d1190919063ffffffff16565b868560ff166004811015156113f857fe5b602002018181525050611456878360ff16600a8110151561141557fe5b60200201518260ff1660108110151561142a57fe5b602002015160ff16878660ff1660048110151561144357fe5b6020020151611c3590919063ffffffff16565b868560ff1660048110151561146757fe5b60200201818152505061148760018660ff16611a4e90919063ffffffff16565b9450808060010191505061139f565b818060010192505061138e565b5050505050919050565b6114b561211b565b60008060008091505b600a8260ff16101561158657600090505b60048160ff16101561157957848260ff16600a811015156114ec57fe5b602002015161150860048360ff16611a7290919063ffffffff16565b60ff1660108110151561151757fe5b6020020151925061154a6001858560ff16600b8110151561153457fe5b602002015160ff16611a4e90919063ffffffff16565b848460ff16600b8110151561155b57fe5b602002019060ff16908160ff168152505080806001019150506114cf565b81806001019250506114be565b505050919050565b6000806000806000600a92508691506115b38660ff1684611d4c90919063ffffffff16565b828115156115bd57fe5b0690506115e86115d98760ff1685611d4c90919063ffffffff16565b83611d9e90919063ffffffff16565b91508082945094505050509250929050565b61160261223e565b600061160d83611db4565b9050610200604051908101604052808560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600160ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681526020018560ff1660ff1681526020018260ff1660ff168152602001600160ff168152602001600060ff1681525091505092915050565b60008090505b815181101561177d5761170282828151811015156116f357fe5b9060200190602002015161189d565b6001806000848481518110151561171557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506116d9565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611847576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b815181101561188257611875828281518110151561186657fe5b9060200190602002015161189d565b808060010191505061184c565b816002908051906020019061189892919061216e565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b61194d6121f8565b600082141515611a2f57600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663515f1843836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156119e757600080fd5b505af11580156119fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506040811015611a2057600080fd5b81019080919050509050611a49565b604080519081016040528060008152602001600081525090505b919050565b60008082840190508360ff168160ff1610151515611a6857fe5b8091505092915050565b60008060008460ff161415611a8a5760009150611ab5565b82840290508260ff168460ff168260ff16811515611aa457fe5b0460ff16141515611ab157fe5b8091505b5092915050565b60008260ff168260ff1611151515611ad057fe5b818303905092915050565b600080602c8360ff161015611af35760009150611b24565b60588360ff161015611b085760019150611b23565b60848360ff161015611b1d5760029150611b22565b600391505b5b5b60006004611b3f60018660ff16611a4e90919063ffffffff16565b60ff16811515611b4b57fe5b0660ff1614611b5b576064611b5e565b600a5b9050915091565b600060ff8211151515611b7457fe5b819050919050565b611b8461223e565b60048260ff161015611ba257611b9b828586611e51565b9050611c2e565b60088260ff161015611bd657611bcf611bc860048460ff16611abc90919063ffffffff16565b8585611e51565b9050611c2e565b600c8260ff161015611c0a57611c03611bfc60088460ff16611abc90919063ffffffff16565b8485611e51565b9050611c2e565b611c2b611c24600c8460ff16611abc90919063ffffffff16565b8486611e51565b90505b9392505050565b6000808284019050838110151515611c4957fe5b8091505092915050565b611c5b61223e565b6000611c668461206f565b90508284611c976001611c8660048660ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611ca657fe5b602002019060ff16908160ff1681525050600184611ce76002611cd660048660ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611cf657fe5b602002019060ff16908160ff16815250508391505092915050565b6000806000841415611d265760009150611d45565b8284029050828482811515611d3757fe5b04141515611d4157fe5b8091505b5092915050565b6000806000841415611d615760009150611d97565b6000831415611d735760019150611d97565b82840a90508360018403850a82811515611d8957fe5b04141515611d9357fe5b8091505b5092915050565b60008183811515611dab57fe5b04905092915050565b6000806000600190505b60078160ff161015611e4557611e226005611de660018460ff16611abc90919063ffffffff16565b60ff16600781101515611df557fe5b601091828204019190066002029054906101000a900461ffff168361ffff166120b690919063ffffffff16565b91508161ffff16841015611e3857809250611e4a565b8080600101915050611dbe565b600792505b5050919050565b611e5961223e565b600080600080611e7660028960ff166120dc90919063ffffffff16565b935060028860ff16811515611e8757fe5b069250600091505b60028260ff16101561206457600090505b60048160ff1610156120575786611f04611ec760088760ff16611a7290919063ffffffff16565b611ef3611ee160048760ff16611a7290919063ffffffff16565b8560ff16611a4e90919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611f1357fe5b602002015185611f45611f3360088660ff16611a7290919063ffffffff16565b8460ff16611a4e90919063ffffffff16565b60ff16601081101515611f5457fe5b602002019060ff16908160ff168152505085611fbd611f8060088660ff16611a7290919063ffffffff16565b611fac611f9a60048760ff16611a7290919063ffffffff16565b8560ff16611a4e90919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16601081101515611fcc57fe5b60200201518561202a61201860046120076001611ff660028a60ff16611a7290919063ffffffff16565b60ff16611a4e90919063ffffffff16565b60ff16611a7290919063ffffffff16565b8460ff16611a4e90919063ffffffff16565b60ff1660108110151561203957fe5b602002019060ff16908160ff16815250508080600101915050611ea0565b8180600101925050611e8f565b505050509392505050565b600081600760108110151561208057fe5b602002015160ff1682600360108110151561209757fe5b602002015160ff1610156120ac5760016120af565b60005b9050919050565b60008082840190508361ffff168161ffff16101515156120d257fe5b8091505092915050565b60008160ff168360ff168115156120ef57fe5b04905092915050565b608060405190810160405280600490602082028038833980820191505090505090565b61016060405190810160405280600b90602082028038833980820191505090505090565b61140060405190810160405280600a905b612158612262565b8152602001906001900390816121505790505090565b8280548282559060005260206000209081019282156121e7579160200282015b828111156121e65782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061218e565b5b5090506121f49190612286565b5090565b6040805190810160405280600290602082028038833980820191505090505090565b61018060405190810160405280600c90602082028038833980820191505090505090565b61020060405190810160405280601090602082028038833980820191505090505090565b61020060405190810160405280601090602082028038833980820191505090505090565b6122c691905b808211156122c257600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161228c565b5090565b905600a165627a7a72305820af6b427757548232cf809372b5d42285cbaa36261bf20a0f2a5239be94f547950029
Swarm Source
bzzr://af6b427757548232cf809372b5d42285cbaa36261bf20a0f2a5239be94f54795
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.