Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Metadata
Compiler Version
v0.8.12+commit.f00d7308
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.12; import "@openzeppelin/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/Base64.sol"; // Assets & Layers import "../lib_constants/TraitDefs.sol"; import "../lib_env/Mainnet.sol"; // Internal Extensions import "../extensions/Owner.sol"; struct TraitOptions { uint8 accessories; uint8 background; uint8 belly; uint8 clothing; uint8 eyes; uint8 faceAccessory; uint8 footwear; uint8 hat; uint8 jewelry; uint8 locale; uint8 mouth; uint8 nose; uint8 species; } interface IAnimationUtility { function animationURI(uint256 dna) external view returns (bytes memory); } interface ITraitsUtility { function getOption(uint8 traitDef, uint256 dna) external pure returns (uint8); } interface ITraitOptionsLabel { function getLabel(uint8 optionNum) external pure returns (string memory); } contract Metadata is Owner { using Strings for uint256; mapping(uint8 => address) public traitOptionLabelContracts; address traitsUtility; address animationUtility; string baseImageURI = "https://www.mergebears.com/api/bears/"; constructor() { // pre-link traitOptionLabel contracts traitOptionLabelContracts[TraitDefs.ACCESSORIES] = Mainnet .TraitOptionLabelsAccessories; traitOptionLabelContracts[TraitDefs.BACKGROUND] = Mainnet .TraitOptionLabelsBackground; traitOptionLabelContracts[TraitDefs.BELLY] = Mainnet.TraitOptionLabelsBelly; traitOptionLabelContracts[TraitDefs.CLOTHING] = Mainnet .TraitOptionLabelsClothing; traitOptionLabelContracts[TraitDefs.EYES] = Mainnet.TraitOptionLabelsEyes; traitOptionLabelContracts[TraitDefs.FACE_ACCESSORY] = Mainnet .TraitOptionLabelsFaceAccessory; traitOptionLabelContracts[TraitDefs.FOOTWEAR] = Mainnet .TraitOptionLabelsFootwear; traitOptionLabelContracts[TraitDefs.HAT] = Mainnet.TraitOptionLabelsHat; traitOptionLabelContracts[TraitDefs.JEWELRY] = Mainnet .TraitOptionLabelsJewelry; traitOptionLabelContracts[TraitDefs.LOCALE] = Mainnet .TraitOptionLabelsLocale; traitOptionLabelContracts[TraitDefs.MOUTH] = Mainnet.TraitOptionLabelsMouth; traitOptionLabelContracts[TraitDefs.NOSE] = Mainnet.TraitOptionLabelsNose; traitOptionLabelContracts[TraitDefs.SPECIES] = Mainnet .TraitOptionLabelsSpecies; // Utility linker traitsUtility = Mainnet.TraitsUtility; animationUtility = Mainnet.Animation; } function setTraitOptionLabelContract( uint8 traitDefId, address traitOptionLabelContract ) external onlyOwner { traitOptionLabelContracts[traitDefId] = traitOptionLabelContract; } function setTraitsUtility(address traitsUtilityContract) external onlyOwner { traitsUtility = traitsUtilityContract; } function setAnimationUtility(address animationContract) external onlyOwner { animationUtility = animationContract; } function setBaseImageURI(string memory newURI) external onlyOwner { baseImageURI = newURI; } function getTraitOptions(uint256 dna) internal view returns (TraitOptions memory) { TraitOptions memory traitOptions; traitOptions.eyes = ITraitsUtility(traitsUtility).getOption( TraitDefs.EYES, dna ); traitOptions.faceAccessory = ITraitsUtility(traitsUtility).getOption( TraitDefs.FACE_ACCESSORY, dna ); traitOptions.hat = ITraitsUtility(traitsUtility).getOption( TraitDefs.HAT, dna ); traitOptions.mouth = ITraitsUtility(traitsUtility).getOption( TraitDefs.MOUTH, dna ); traitOptions.nose = ITraitsUtility(traitsUtility).getOption( TraitDefs.NOSE, dna ); traitOptions.accessories = ITraitsUtility(traitsUtility).getOption( TraitDefs.ACCESSORIES, dna ); traitOptions.background = ITraitsUtility(traitsUtility).getOption( TraitDefs.BACKGROUND, dna ); traitOptions.belly = ITraitsUtility(traitsUtility).getOption( TraitDefs.BELLY, dna ); traitOptions.clothing = ITraitsUtility(traitsUtility).getOption( TraitDefs.CLOTHING, dna ); traitOptions.footwear = ITraitsUtility(traitsUtility).getOption( TraitDefs.FOOTWEAR, dna ); traitOptions.jewelry = ITraitsUtility(traitsUtility).getOption( TraitDefs.JEWELRY, dna ); traitOptions.locale = ITraitsUtility(traitsUtility).getOption( TraitDefs.LOCALE, dna ); traitOptions.species = ITraitsUtility(traitsUtility).getOption( TraitDefs.SPECIES, dna ); return traitOptions; } function getAttribute(uint8 traitDefId, uint8 traitOptionNum) internal view returns (string memory) { string memory traitType; string memory value = ITraitOptionsLabel( traitOptionLabelContracts[traitDefId] ).getLabel(traitOptionNum); if (traitDefId == TraitDefs.SPECIES) { traitType = "Species"; } else if (traitDefId == TraitDefs.LOCALE) { traitType = "Locale"; } else if (traitDefId == TraitDefs.BELLY) { traitType = "Belly"; } else if (traitDefId == TraitDefs.EYES) { traitType = "Eyes"; } else if (traitDefId == TraitDefs.MOUTH) { traitType = "Mouth"; } else if (traitDefId == TraitDefs.NOSE) { traitType = "Nose"; } else if (traitDefId == TraitDefs.CLOTHING) { traitType = "Clothing"; } else if (traitDefId == TraitDefs.HAT) { traitType = "Hat"; } else if (traitDefId == TraitDefs.JEWELRY) { traitType = "Jewelry"; } else if (traitDefId == TraitDefs.FOOTWEAR) { traitType = "Footwear"; } else if (traitDefId == TraitDefs.ACCESSORIES) { traitType = "Accessories"; } else if (traitDefId == TraitDefs.FACE_ACCESSORY) { traitType = "Face Accessory"; } else if (traitDefId == TraitDefs.BACKGROUND) { traitType = "Background"; } return string.concat( '{ "trait_type": "', traitType, '",', '"value":"', value, '"}' ); } function getAttributes(uint256 dna) internal view returns (string memory) { string memory attributes = ""; // get trait defs from dna TraitOptions memory traitOptions = getTraitOptions(dna); attributes = string.concat( attributes, getAttribute(TraitDefs.SPECIES, traitOptions.species), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.LOCALE, traitOptions.locale), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.BELLY, traitOptions.belly), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.EYES, traitOptions.eyes), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.MOUTH, traitOptions.mouth), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.NOSE, traitOptions.nose), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.CLOTHING, traitOptions.clothing), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.HAT, traitOptions.hat), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.JEWELRY, traitOptions.jewelry), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.FOOTWEAR, traitOptions.footwear), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.ACCESSORIES, traitOptions.accessories), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.FACE_ACCESSORY, traitOptions.faceAccessory), "," ); attributes = string.concat( attributes, getAttribute(TraitDefs.BACKGROUND, traitOptions.background) ); //must return JSONified array return string.concat("[", attributes, "]"); } function getAnimationURI(uint256 dna) public view returns (string memory) { return string(IAnimationUtility(animationUtility).animationURI(dna)); } function getMetadataFromDNA(uint256 dna, uint256 tokenId) public view returns (string memory) { // prettier-ignore return string( abi.encodePacked( "data:application/json;base64,", Base64.encode( abi.encodePacked( "{", '"name":"MergeBears #', tokenId.toString(), '",', '"external_url":"https://www.mergebears.com",', '"image":', string.concat('"', baseImageURI, tokenId.toString(), '",'), '"animation_url":"', IAnimationUtility(animationUtility).animationURI(dna), '",', '"attributes":', getAttributes(dna), "}" ) ) ) ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol) pragma solidity ^0.8.0; /** * @dev Provides a set of functions to operate with Base64 strings. * * _Available since v4.5._ */ library Base64 { /** * @dev Base64 Encoding/Decoding Table */ string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /** * @dev Converts a `bytes` to its Bytes64 `string` representation. */ function encode(bytes memory data) internal pure returns (string memory) { /** * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol */ if (data.length == 0) return ""; // Loads the table into memory string memory table = _TABLE; // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter // and split into 4 numbers of 6 bits. // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up // - `data.length + 2` -> Round up // - `/ 3` -> Number of 3-bytes chunks // - `4 *` -> 4 characters for each chunk string memory result = new string(4 * ((data.length + 2) / 3)); /// @solidity memory-safe-assembly assembly { // Prepare the lookup table (skip the first "length" byte) let tablePtr := add(table, 1) // Prepare result pointer, jump over length let resultPtr := add(result, 32) // Run over the input, 3 bytes at a time for { let dataPtr := data let endPtr := add(data, mload(data)) } lt(dataPtr, endPtr) { } { // Advance 3 bytes dataPtr := add(dataPtr, 3) let input := mload(dataPtr) // To write each character, shift the 3 bytes (18 bits) chunk // 4 times in blocks of 6 bits for each character (18, 12, 6, 0) // and apply logical AND with 0x3F which is the number of // the previous character in the ASCII table prior to the Base64 Table // The result is then added to the table to get the character to write, // and finally write it in the result pointer but with a left shift // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F)))) resultPtr := add(resultPtr, 1) // Advance mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F)))) resultPtr := add(resultPtr, 1) // Advance } // When data `bytes` is not exactly 3 bytes long // it is padded with `=` characters at the end switch mod(mload(data), 3) case 1 { mstore8(sub(resultPtr, 1), 0x3d) mstore8(sub(resultPtr, 2), 0x3d) } case 2 { mstore8(sub(resultPtr, 1), 0x3d) } } return result; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; library TraitDefs { uint8 constant SPECIES = 0; uint8 constant LOCALE = 1; uint8 constant BELLY = 2; uint8 constant ARMS = 3; uint8 constant EYES = 4; uint8 constant MOUTH = 5; uint8 constant NOSE = 6; uint8 constant CLOTHING = 7; uint8 constant HAT = 8; uint8 constant JEWELRY = 9; uint8 constant FOOTWEAR = 10; uint8 constant ACCESSORIES = 11; uint8 constant FACE_ACCESSORY = 12; uint8 constant BACKGROUND = 13; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; library Mainnet { address constant ACCESSORIES = 0x72b7596E59CfB97661D68024b3c5C587fBc3F0D3; address constant ARMS = 0x7e10747a91E45F0fD0C97b763BCcB61030806a69; address constant BELLY = 0xf398b7504F01c198942D278EAB8715f0A03D55cb; address constant CLOTHINGA = 0x324E15FbDaC47DaF13EaB1fD06C4467D4C7008f9; address constant CLOTHINGB = 0x927858Ed8FF2F3E9a09CE9Ca5E9B13523e574fa2; address constant EYES = 0x12b538733eFc80BD5D25769AF34B2dA63911BEf8; address constant FACE = 0xa8cA38F3BBE56001bE7E3F9768C6e4A0fC2D79cF; address constant FEET = 0xE6d17Ff2D51c02f49005B5046f499715aE7E6FF3; address constant FOOTWEAR = 0x4384ccFf9bf4e1448976310045144e3B7d17e851; address constant HAT = 0xB1A63A1a745E49417BB6E3B226C47af7319664cB; address constant HEAD = 0x76Bcf1b35632f59693f8E7D348FcC293aE90f888; address constant JEWELRY = 0x151E97911b357fF8EF690107Afbcf6ecBd52D982; address constant MOUTH = 0x16Ba2C192391A400b6B6Ee5E46901C737d83Df9D; address constant NOSE = 0x6f3cdF8dc2D1915aaAE804325d2c550b959E6B47; address constant SPECIAL_CLOTHING = 0x228dc46360537d24139Ee81AFb9235FA2C0CdA07; address constant SPECIAL_FACE = 0x7713D096937d98CDA86Fc80EF10dcAb77367068c; // Trait Option Labels address constant TraitOptionLabelsAccessories = 0x7db2Ae5Da12b6891ED08944690B3f4468F68AA71; address constant TraitOptionLabelsBackground = 0x1Dea31e5497f80dE9F4802508D98288ffF834cd9; address constant TraitOptionLabelsBelly = 0xDa97bDb87956fE1D370ab279eF5327c7751D0Bd4; address constant TraitOptionLabelsClothing = 0x42C328934037521E1E08ee3c3E0142aB7E9e8534; address constant TraitOptionLabelsEyes = 0x4acDa10ff43430Ae90eF328555927e9FcFd4904A; address constant TraitOptionLabelsFaceAccessory = 0xfAD91b20182Ad3907074E0043c1212EaE1F7dfaE; address constant TraitOptionLabelsFootwear = 0x435B753316d4bfeF7BB755c3f4fAC202aACaA209; address constant TraitOptionLabelsHat = 0x220d2C51332aafd76261E984e4DA1a43C361A62f; address constant TraitOptionLabelsJewelry = 0x8f69858BD253AcedFFd99479C05Aa37305919ec1; address constant TraitOptionLabelsLocale = 0x13c0B8289bEb260145e981c3201CC2A046F1b83D; address constant TraitOptionLabelsMouth = 0xcb03ebEabc285616CF4aEa7de1333D53f0789141; address constant TraitOptionLabelsNose = 0x03774BA2E684D0872dA02a7da98AfcbebF9E61b2; address constant TraitOptionLabelsSpecies = 0x9FAe2ceBDbfDA7EAeEC3647c16FAE2a4e715e5CA; address constant OptionSpecies = 0x5438ae4D244C4a8eAc6Cf9e64D211c19B5835a91; address constant OptionAccessories = 0x1097750D85A2132CAf2DE3be2B97fE56C7DB0bCA; address constant OptionClothing = 0xF0B8294279a35bE459cfc257776521A5E46Da0d1; address constant OptionLocale = 0xa0F6DdB7B3F114F18073867aE4B740D0AF786721; address constant OptionHat = 0xf7C17dB875d8C4ccE301E2c6AF07ab7621204223; address constant OptionFaceAccessory = 0x07E0b24A4070bC0e8198154e430dC9B2FB9B4721; address constant OptionFootwear = 0x31b2E83d6fb1d7b9d5C4cdb5ec295167d3525eFF; address constant OptionJewelry = 0x9ba79b1fa5A19d31E6cCeEA7De6712992080644B; address constant OptionBackground = 0xC3c5a361d09C54C59340a8aB069b0796C962D2AE; address constant OptionBelly = 0xEDf3bAdbb0371bb95dedF567E1a947a0841C5Cc5; address constant OptionEyes = 0x4aBeBaBb4F4Fb7A9440E05cBebc55E5Cd160A3aA; address constant OptionMouth = 0x9801A9da73fBe2D889c4847BCE25C751Ce334332; address constant OptionNose = 0x22116E7ff81752f7b61b4c1d3E0966033939b50f; // Utility Contracts address constant TraitsUtility = 0xc81Ee07619c8ff65f0E19A214e43b1fd55051FE2; address constant Animation = 0x30490f71D70da2C4a96fCCe3C0DBf26eA9B257E3; address constant Metadata = 0xA75A58a87BC9Bf862291a2788aeccab8b83E2771; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; contract Owner { address _owner; constructor() { _owner = msg.sender; } modifier setOwner(address owner_) { require(msg.sender == _owner); _owner = _owner; _; } modifier onlyOwner() { require(msg.sender == _owner); _; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"dna","type":"uint256"}],"name":"getAnimationURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"dna","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getMetadataFromDNA","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"animationContract","type":"address"}],"name":"setAnimationUtility","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseImageURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"traitDefId","type":"uint8"},{"internalType":"address","name":"traitOptionLabelContract","type":"address"}],"name":"setTraitOptionLabelContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"traitsUtilityContract","type":"address"}],"name":"setTraitsUtility","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"traitOptionLabelContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260405180606001604052806025815260200162003328602591396004908051906020019062000035929190620006bc565b503480156200004357600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737db2ae5da12b6891ed08944690b3f4468f68aa7160016000600b60ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731dea31e5497f80de9f4802508d98288fff834cd960016000600d60ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073da97bdb87956fe1d370ab279ef5327c7751d0bd460016000600260ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507342c328934037521e1e08ee3c3e0142ab7e9e853460016000600760ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734acda10ff43430ae90ef328555927e9fcfd4904a60016000600460ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fad91b20182ad3907074e0043c1212eae1f7dfae60016000600c60ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073435b753316d4bfef7bb755c3f4fac202aacaa20960016000600a60ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073220d2c51332aafd76261e984e4da1a43c361a62f60016000600860ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738f69858bd253acedffd99479c05aa37305919ec160016000600960ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507313c0b8289beb260145e981c3201cc2a046f1b83d60016000600160ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073cb03ebeabc285616cf4aea7de1333d53f078914160016000600560ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507303774ba2e684d0872da02a7da98afcbebf9e61b260016000600660ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739fae2cebdbfda7eaeec3647c16fae2a4e715e5ca600160008060ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c81ee07619c8ff65f0e19a214e43b1fd55051fe2600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507330490f71d70da2c4a96fcce3c0dbf26ea9b257e3600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620007d1565b828054620006ca906200079b565b90600052602060002090601f016020900481019282620006ee57600085556200073a565b82601f106200070957805160ff19168380011785556200073a565b828001600101855582156200073a579182015b82811115620007395782518255916020019190600101906200071c565b5b5090506200074991906200074d565b5090565b5b80821115620007685760008160009055506001016200074e565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007b457607f821691505b60208210811415620007cb57620007ca6200076c565b5b50919050565b612b4780620007e16000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638647ca761161005b5780638647ca76146100ea57806398e601f414610106578063a3ac887414610136578063ee2674d7146101665761007d565b8063020c6e6414610082578063657449411461009e5780636c5b5cd6146100ce575b600080fd5b61009c60048036038101906100979190611b0f565b610182565b005b6100b860048036038101906100b39190611b75565b61021e565b6040516100c59190611bb1565b60405180910390f35b6100e860048036038101906100e39190611bcc565b610251565b005b61010460048036038101906100ff9190611d52565b610305565b005b610120600480360381019061011b9190611dd1565b610377565b60405161012d9190611e86565b60405180910390f35b610150600480360381019061014b9190611ea8565b610421565b60405161015d9190611e86565b60405180910390f35b610180600480360381019061017b9190611b0f565b610552565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101da57600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a957600080fd5b80600160008460ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461035d57600080fd5b806004908051906020019061037392919061196b565b5050565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635209ec17836040518263ffffffff1660e01b81526004016103d49190611ef7565b600060405180830381865afa1580156103f1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061041a9190611fb3565b9050919050565b606061052b61042f836105ee565b600461043a856105ee565b60405160200161044b929190612179565b604051602081830303815290604052600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635209ec17876040518263ffffffff1660e01b81526004016104b59190611ef7565b600060405180830381865afa1580156104d2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104fb9190611fb3565b6105048761074f565b6040516020016105179493929190612488565b604051602081830303815290604052610a2a565b60405160200161053b9190612575565b604051602081830303815290604052905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105aa57600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000821415610636576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061074a565b600082905060005b60008214610668578080610651906125c6565b915050600a82610661919061263e565b915061063e565b60008167ffffffffffffffff81111561068457610683611c27565b5b6040519080825280601f01601f1916602001820160405280156106b65781602001600182028036833780820191505090505b5090505b60008514610743576001826106cf919061266f565b9150600a856106de91906126a3565b60306106ea91906126d4565b60f81b818381518110610700576106ff61272a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561073c919061263e565b94506106ba565b8093505050505b919050565b60606000604051806020016040528060008152509050600061077084610b8e565b905081610783600083610180015161149c565b60405160200161079492919061277f565b6040516020818303038152906040529150816107b6600183610120015161149c565b6040516020016107c792919061277f565b6040516020818303038152906040529150816107e86002836040015161149c565b6040516020016107f992919061277f565b60405160208183030381529060405291508161081a6004836080015161149c565b60405160200161082b92919061277f565b60405160208183030381529060405291508161084d600583610140015161149c565b60405160200161085e92919061277f565b604051602081830303815290604052915081610880600683610160015161149c565b60405160200161089192919061277f565b6040516020818303038152906040529150816108b26007836060015161149c565b6040516020016108c392919061277f565b6040516020818303038152906040529150816108e460088360e0015161149c565b6040516020016108f592919061277f565b604051602081830303815290604052915081610917600983610100015161149c565b60405160200161092892919061277f565b604051602081830303815290604052915081610949600a8360c0015161149c565b60405160200161095a92919061277f565b60405160208183030381529060405291508161097b600b836000015161149c565b60405160200161098c92919061277f565b6040516020818303038152906040529150816109ad600c8360a0015161149c565b6040516020016109be92919061277f565b6040516020818303038152906040529150816109df600d836020015161149c565b6040516020016109f09291906127b2565b604051602081830303815290604052915081604051602001610a129190612822565b60405160208183030381529060405292505050919050565b6060600082511415610a4d57604051806020016040528060008152509050610b89565b6000604051806060016040528060408152602001612ad26040913990506000600360028551610a7c91906126d4565b610a86919061263e565b6004610a929190612857565b67ffffffffffffffff811115610aab57610aaa611c27565b5b6040519080825280601f01601f191660200182016040528015610add5781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015610b49576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050610aee565b5050600386510660018114610b655760028114610b7857610b80565b603d6001830353603d6002830353610b80565b603d60018303535b50505080925050505b919050565b610b966119f1565b610b9e6119f1565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6004856040518363ffffffff1660e01b8152600401610bfc9291906128c0565b602060405180830381865afa158015610c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3d91906128fe565b816080019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b600c856040518363ffffffff1660e01b8152600401610cac9291906128c0565b602060405180830381865afa158015610cc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ced91906128fe565b8160a0019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6008856040518363ffffffff1660e01b8152600401610d5c9291906128c0565b602060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9d91906128fe565b8160e0019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6005856040518363ffffffff1660e01b8152600401610e0c9291906128c0565b602060405180830381865afa158015610e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4d91906128fe565b81610140019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6006856040518363ffffffff1660e01b8152600401610ebd9291906128c0565b602060405180830381865afa158015610eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efe91906128fe565b81610160019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b600b856040518363ffffffff1660e01b8152600401610f6e9291906128c0565b602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf91906128fe565b816000019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b600d856040518363ffffffff1660e01b815260040161101e9291906128c0565b602060405180830381865afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f91906128fe565b816020019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6002856040518363ffffffff1660e01b81526004016110ce9291906128c0565b602060405180830381865afa1580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f91906128fe565b816040019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6007856040518363ffffffff1660e01b815260040161117e9291906128c0565b602060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf91906128fe565b816060019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b600a856040518363ffffffff1660e01b815260040161122e9291906128c0565b602060405180830381865afa15801561124b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126f91906128fe565b8160c0019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6009856040518363ffffffff1660e01b81526004016112de9291906128c0565b602060405180830381865afa1580156112fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131f91906128fe565b81610100019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6001856040518363ffffffff1660e01b815260040161138f9291906128c0565b602060405180830381865afa1580156113ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d091906128fe565b81610120019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6000856040518363ffffffff1660e01b81526004016114409291906128c0565b602060405180830381865afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148191906128fe565b81610180019060ff16908160ff168152505080915050919050565b6060806000600160008660ff1660ff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1dcc020856040518263ffffffff1660e01b8152600401611513919061292b565b600060405180830381865afa158015611530573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061155991906129b6565b9050600060ff168560ff1614156115a7576040518060400160405280600781526020017f5370656369657300000000000000000000000000000000000000000000000000815250915061193f565b600160ff168560ff1614156115f3576040518060400160405280600681526020017f4c6f63616c650000000000000000000000000000000000000000000000000000815250915061193e565b600260ff168560ff16141561163f576040518060400160405280600581526020017f42656c6c79000000000000000000000000000000000000000000000000000000815250915061193d565b600460ff168560ff16141561168b576040518060400160405280600481526020017f4579657300000000000000000000000000000000000000000000000000000000815250915061193c565b600560ff168560ff1614156116d7576040518060400160405280600581526020017f4d6f757468000000000000000000000000000000000000000000000000000000815250915061193b565b600660ff168560ff161415611723576040518060400160405280600481526020017f4e6f736500000000000000000000000000000000000000000000000000000000815250915061193a565b600760ff168560ff16141561176f576040518060400160405280600881526020017f436c6f7468696e670000000000000000000000000000000000000000000000008152509150611939565b600860ff168560ff1614156117bb576040518060400160405280600381526020017f48617400000000000000000000000000000000000000000000000000000000008152509150611938565b600960ff168560ff161415611807576040518060400160405280600781526020017f4a6577656c7279000000000000000000000000000000000000000000000000008152509150611937565b600a60ff168560ff161415611853576040518060400160405280600881526020017f466f6f74776561720000000000000000000000000000000000000000000000008152509150611936565b600b60ff168560ff16141561189f576040518060400160405280600b81526020017f4163636573736f726965730000000000000000000000000000000000000000008152509150611935565b600c60ff168560ff1614156118eb576040518060400160405280600e81526020017f46616365204163636573736f72790000000000000000000000000000000000008152509150611934565b600d60ff168560ff161415611933576040518060400160405280600a81526020017f4261636b67726f756e640000000000000000000000000000000000000000000081525091505b5b5b5b5b5b5b5b5b5b5b5b5b8181604051602001611952929190612a71565b6040516020818303038152906040529250505092915050565b82805461197790612051565b90600052602060002090601f01602090048101928261199957600085556119e0565b82601f106119b257805160ff19168380011785556119e0565b828001600101855582156119e0579182015b828111156119df5782518255916020019190600101906119c4565b5b5090506119ed9190611a80565b5090565b604051806101a00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff1681525090565b5b80821115611a99576000816000905550600101611a81565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611adc82611ab1565b9050919050565b611aec81611ad1565b8114611af757600080fd5b50565b600081359050611b0981611ae3565b92915050565b600060208284031215611b2557611b24611aa7565b5b6000611b3384828501611afa565b91505092915050565b600060ff82169050919050565b611b5281611b3c565b8114611b5d57600080fd5b50565b600081359050611b6f81611b49565b92915050565b600060208284031215611b8b57611b8a611aa7565b5b6000611b9984828501611b60565b91505092915050565b611bab81611ad1565b82525050565b6000602082019050611bc66000830184611ba2565b92915050565b60008060408385031215611be357611be2611aa7565b5b6000611bf185828601611b60565b9250506020611c0285828601611afa565b9150509250929050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c5f82611c16565b810181811067ffffffffffffffff82111715611c7e57611c7d611c27565b5b80604052505050565b6000611c91611a9d565b9050611c9d8282611c56565b919050565b600067ffffffffffffffff821115611cbd57611cbc611c27565b5b611cc682611c16565b9050602081019050919050565b82818337600083830152505050565b6000611cf5611cf084611ca2565b611c87565b905082815260208101848484011115611d1157611d10611c11565b5b611d1c848285611cd3565b509392505050565b600082601f830112611d3957611d38611c0c565b5b8135611d49848260208601611ce2565b91505092915050565b600060208284031215611d6857611d67611aa7565b5b600082013567ffffffffffffffff811115611d8657611d85611aac565b5b611d9284828501611d24565b91505092915050565b6000819050919050565b611dae81611d9b565b8114611db957600080fd5b50565b600081359050611dcb81611da5565b92915050565b600060208284031215611de757611de6611aa7565b5b6000611df584828501611dbc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e38578082015181840152602081019050611e1d565b83811115611e47576000848401525b50505050565b6000611e5882611dfe565b611e628185611e09565b9350611e72818560208601611e1a565b611e7b81611c16565b840191505092915050565b60006020820190508181036000830152611ea08184611e4d565b905092915050565b60008060408385031215611ebf57611ebe611aa7565b5b6000611ecd85828601611dbc565b9250506020611ede85828601611dbc565b9150509250929050565b611ef181611d9b565b82525050565b6000602082019050611f0c6000830184611ee8565b92915050565b600067ffffffffffffffff821115611f2d57611f2c611c27565b5b611f3682611c16565b9050602081019050919050565b6000611f56611f5184611f12565b611c87565b905082815260208101848484011115611f7257611f71611c11565b5b611f7d848285611e1a565b509392505050565b600082601f830112611f9a57611f99611c0c565b5b8151611faa848260208601611f43565b91505092915050565b600060208284031215611fc957611fc8611aa7565b5b600082015167ffffffffffffffff811115611fe757611fe6611aac565b5b611ff384828501611f85565b91505092915050565b7f2200000000000000000000000000000000000000000000000000000000000000815250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061206957607f821691505b6020821081141561207d5761207c612022565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546120b081612051565b6120ba8186612083565b945060018216600081146120d557600181146120e657612119565b60ff19831686528186019350612119565b6120ef8561208e565b60005b83811015612111578154818901526001820191506020810190506120f2565b838801955050505b50505092915050565b600061212d82611dfe565b6121378185612083565b9350612147818560208601611e1a565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000815250565b600061218482611ffc565b60018201915061219482856120a3565b91506121a08284612122565b91506121ab82612153565b6002820191508190509392505050565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b60006121f1600183612083565b91506121fc826121bb565b600182019050919050565b7f226e616d65223a224d6572676542656172732023000000000000000000000000600082015250565b600061223d601483612083565b915061224882612207565b601482019050919050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b6000612289600283612083565b915061229482612253565b600282019050919050565b7f2265787465726e616c5f75726c223a2268747470733a2f2f7777772e6d65726760008201527f6562656172732e636f6d222c0000000000000000000000000000000000000000602082015250565b60006122fb602c83612083565b91506123068261229f565b602c82019050919050565b7f22696d616765223a000000000000000000000000000000000000000000000000600082015250565b6000612347600883612083565b915061235282612311565b600882019050919050565b7f22616e696d6174696f6e5f75726c223a22000000000000000000000000000000600082015250565b6000612393601183612083565b915061239e8261235d565b601182019050919050565b600081519050919050565b600081905092915050565b60006123ca826123a9565b6123d481856123b4565b93506123e4818560208601611e1a565b80840191505092915050565b7f2261747472696275746573223a00000000000000000000000000000000000000600082015250565b6000612426600d83612083565b9150612431826123f0565b600d82019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000612472600183612083565b915061247d8261243c565b600182019050919050565b6000612493826121e4565b915061249e82612230565b91506124aa8287612122565b91506124b58261227c565b91506124c0826122ee565b91506124cb8261233a565b91506124d78286612122565b91506124e282612386565b91506124ee82856123bf565b91506124f98261227c565b915061250482612419565b91506125108284612122565b915061251b82612465565b915081905095945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b600061255f601d83612083565b915061256a82612529565b601d82019050919050565b600061258082612552565b915061258c8284612122565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006125d182611d9b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561260457612603612597565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061264982611d9b565b915061265483611d9b565b9250826126645761266361260f565b5b828204905092915050565b600061267a82611d9b565b915061268583611d9b565b92508282101561269857612697612597565b5b828203905092915050565b60006126ae82611d9b565b91506126b983611d9b565b9250826126c9576126c861260f565b5b828206905092915050565b60006126df82611d9b565b91506126ea83611d9b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561271f5761271e612597565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2c00000000000000000000000000000000000000000000000000000000000000815250565b600061278b8285612122565b91506127978284612122565b91506127a282612759565b6001820191508190509392505050565b60006127be8285612122565b91506127ca8284612122565b91508190509392505050565b7f5b00000000000000000000000000000000000000000000000000000000000000815250565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b600061282d826127d6565b60018201915061283d8284612122565b9150612848826127fc565b60018201915081905092915050565b600061286282611d9b565b915061286d83611d9b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156128a6576128a5612597565b5b828202905092915050565b6128ba81611b3c565b82525050565b60006040820190506128d560008301856128b1565b6128e26020830184611ee8565b9392505050565b6000815190506128f881611b49565b92915050565b60006020828403121561291457612913611aa7565b5b6000612922848285016128e9565b91505092915050565b600060208201905061294060008301846128b1565b92915050565b600061295961295484611ca2565b611c87565b90508281526020810184848401111561297557612974611c11565b5b612980848285611e1a565b509392505050565b600082601f83011261299d5761299c611c0c565b5b81516129ad848260208601612946565b91505092915050565b6000602082840312156129cc576129cb611aa7565b5b600082015167ffffffffffffffff8111156129ea576129e9611aac565b5b6129f684828501612988565b91505092915050565b7f7b202274726169745f74797065223a2022000000000000000000000000000000815250565b7f2276616c7565223a220000000000000000000000000000000000000000000000815250565b7f227d000000000000000000000000000000000000000000000000000000000000815250565b6000612a7c826129ff565b601182019150612a8c8285612122565b9150612a9782612153565b600282019150612aa682612a25565b600982019150612ab68284612122565b9150612ac182612a4b565b600282019150819050939250505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220cb6046ae39e42eadb793b2ce7720efd5e90f68b209d6fd7fe30f47f0bf63b6b764736f6c634300080c003368747470733a2f2f7777772e6d6572676562656172732e636f6d2f6170692f62656172732f
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638647ca761161005b5780638647ca76146100ea57806398e601f414610106578063a3ac887414610136578063ee2674d7146101665761007d565b8063020c6e6414610082578063657449411461009e5780636c5b5cd6146100ce575b600080fd5b61009c60048036038101906100979190611b0f565b610182565b005b6100b860048036038101906100b39190611b75565b61021e565b6040516100c59190611bb1565b60405180910390f35b6100e860048036038101906100e39190611bcc565b610251565b005b61010460048036038101906100ff9190611d52565b610305565b005b610120600480360381019061011b9190611dd1565b610377565b60405161012d9190611e86565b60405180910390f35b610150600480360381019061014b9190611ea8565b610421565b60405161015d9190611e86565b60405180910390f35b610180600480360381019061017b9190611b0f565b610552565b005b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101da57600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a957600080fd5b80600160008460ff1660ff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461035d57600080fd5b806004908051906020019061037392919061196b565b5050565b6060600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635209ec17836040518263ffffffff1660e01b81526004016103d49190611ef7565b600060405180830381865afa1580156103f1573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061041a9190611fb3565b9050919050565b606061052b61042f836105ee565b600461043a856105ee565b60405160200161044b929190612179565b604051602081830303815290604052600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635209ec17876040518263ffffffff1660e01b81526004016104b59190611ef7565b600060405180830381865afa1580156104d2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906104fb9190611fb3565b6105048761074f565b6040516020016105179493929190612488565b604051602081830303815290604052610a2a565b60405160200161053b9190612575565b604051602081830303815290604052905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105aa57600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000821415610636576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061074a565b600082905060005b60008214610668578080610651906125c6565b915050600a82610661919061263e565b915061063e565b60008167ffffffffffffffff81111561068457610683611c27565b5b6040519080825280601f01601f1916602001820160405280156106b65781602001600182028036833780820191505090505b5090505b60008514610743576001826106cf919061266f565b9150600a856106de91906126a3565b60306106ea91906126d4565b60f81b818381518110610700576106ff61272a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561073c919061263e565b94506106ba565b8093505050505b919050565b60606000604051806020016040528060008152509050600061077084610b8e565b905081610783600083610180015161149c565b60405160200161079492919061277f565b6040516020818303038152906040529150816107b6600183610120015161149c565b6040516020016107c792919061277f565b6040516020818303038152906040529150816107e86002836040015161149c565b6040516020016107f992919061277f565b60405160208183030381529060405291508161081a6004836080015161149c565b60405160200161082b92919061277f565b60405160208183030381529060405291508161084d600583610140015161149c565b60405160200161085e92919061277f565b604051602081830303815290604052915081610880600683610160015161149c565b60405160200161089192919061277f565b6040516020818303038152906040529150816108b26007836060015161149c565b6040516020016108c392919061277f565b6040516020818303038152906040529150816108e460088360e0015161149c565b6040516020016108f592919061277f565b604051602081830303815290604052915081610917600983610100015161149c565b60405160200161092892919061277f565b604051602081830303815290604052915081610949600a8360c0015161149c565b60405160200161095a92919061277f565b60405160208183030381529060405291508161097b600b836000015161149c565b60405160200161098c92919061277f565b6040516020818303038152906040529150816109ad600c8360a0015161149c565b6040516020016109be92919061277f565b6040516020818303038152906040529150816109df600d836020015161149c565b6040516020016109f09291906127b2565b604051602081830303815290604052915081604051602001610a129190612822565b60405160208183030381529060405292505050919050565b6060600082511415610a4d57604051806020016040528060008152509050610b89565b6000604051806060016040528060408152602001612ad26040913990506000600360028551610a7c91906126d4565b610a86919061263e565b6004610a929190612857565b67ffffffffffffffff811115610aab57610aaa611c27565b5b6040519080825280601f01601f191660200182016040528015610add5781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015610b49576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050610aee565b5050600386510660018114610b655760028114610b7857610b80565b603d6001830353603d6002830353610b80565b603d60018303535b50505080925050505b919050565b610b966119f1565b610b9e6119f1565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6004856040518363ffffffff1660e01b8152600401610bfc9291906128c0565b602060405180830381865afa158015610c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3d91906128fe565b816080019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b600c856040518363ffffffff1660e01b8152600401610cac9291906128c0565b602060405180830381865afa158015610cc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ced91906128fe565b8160a0019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6008856040518363ffffffff1660e01b8152600401610d5c9291906128c0565b602060405180830381865afa158015610d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9d91906128fe565b8160e0019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6005856040518363ffffffff1660e01b8152600401610e0c9291906128c0565b602060405180830381865afa158015610e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4d91906128fe565b81610140019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6006856040518363ffffffff1660e01b8152600401610ebd9291906128c0565b602060405180830381865afa158015610eda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efe91906128fe565b81610160019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b600b856040518363ffffffff1660e01b8152600401610f6e9291906128c0565b602060405180830381865afa158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf91906128fe565b816000019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b600d856040518363ffffffff1660e01b815260040161101e9291906128c0565b602060405180830381865afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f91906128fe565b816020019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6002856040518363ffffffff1660e01b81526004016110ce9291906128c0565b602060405180830381865afa1580156110eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110f91906128fe565b816040019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6007856040518363ffffffff1660e01b815260040161117e9291906128c0565b602060405180830381865afa15801561119b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111bf91906128fe565b816060019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b600a856040518363ffffffff1660e01b815260040161122e9291906128c0565b602060405180830381865afa15801561124b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126f91906128fe565b8160c0019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6009856040518363ffffffff1660e01b81526004016112de9291906128c0565b602060405180830381865afa1580156112fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131f91906128fe565b81610100019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6001856040518363ffffffff1660e01b815260040161138f9291906128c0565b602060405180830381865afa1580156113ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d091906128fe565b81610120019060ff16908160ff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf89d7b6000856040518363ffffffff1660e01b81526004016114409291906128c0565b602060405180830381865afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148191906128fe565b81610180019060ff16908160ff168152505080915050919050565b6060806000600160008660ff1660ff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1dcc020856040518263ffffffff1660e01b8152600401611513919061292b565b600060405180830381865afa158015611530573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061155991906129b6565b9050600060ff168560ff1614156115a7576040518060400160405280600781526020017f5370656369657300000000000000000000000000000000000000000000000000815250915061193f565b600160ff168560ff1614156115f3576040518060400160405280600681526020017f4c6f63616c650000000000000000000000000000000000000000000000000000815250915061193e565b600260ff168560ff16141561163f576040518060400160405280600581526020017f42656c6c79000000000000000000000000000000000000000000000000000000815250915061193d565b600460ff168560ff16141561168b576040518060400160405280600481526020017f4579657300000000000000000000000000000000000000000000000000000000815250915061193c565b600560ff168560ff1614156116d7576040518060400160405280600581526020017f4d6f757468000000000000000000000000000000000000000000000000000000815250915061193b565b600660ff168560ff161415611723576040518060400160405280600481526020017f4e6f736500000000000000000000000000000000000000000000000000000000815250915061193a565b600760ff168560ff16141561176f576040518060400160405280600881526020017f436c6f7468696e670000000000000000000000000000000000000000000000008152509150611939565b600860ff168560ff1614156117bb576040518060400160405280600381526020017f48617400000000000000000000000000000000000000000000000000000000008152509150611938565b600960ff168560ff161415611807576040518060400160405280600781526020017f4a6577656c7279000000000000000000000000000000000000000000000000008152509150611937565b600a60ff168560ff161415611853576040518060400160405280600881526020017f466f6f74776561720000000000000000000000000000000000000000000000008152509150611936565b600b60ff168560ff16141561189f576040518060400160405280600b81526020017f4163636573736f726965730000000000000000000000000000000000000000008152509150611935565b600c60ff168560ff1614156118eb576040518060400160405280600e81526020017f46616365204163636573736f72790000000000000000000000000000000000008152509150611934565b600d60ff168560ff161415611933576040518060400160405280600a81526020017f4261636b67726f756e640000000000000000000000000000000000000000000081525091505b5b5b5b5b5b5b5b5b5b5b5b5b8181604051602001611952929190612a71565b6040516020818303038152906040529250505092915050565b82805461197790612051565b90600052602060002090601f01602090048101928261199957600085556119e0565b82601f106119b257805160ff19168380011785556119e0565b828001600101855582156119e0579182015b828111156119df5782518255916020019190600101906119c4565b5b5090506119ed9190611a80565b5090565b604051806101a00160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff1681525090565b5b80821115611a99576000816000905550600101611a81565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611adc82611ab1565b9050919050565b611aec81611ad1565b8114611af757600080fd5b50565b600081359050611b0981611ae3565b92915050565b600060208284031215611b2557611b24611aa7565b5b6000611b3384828501611afa565b91505092915050565b600060ff82169050919050565b611b5281611b3c565b8114611b5d57600080fd5b50565b600081359050611b6f81611b49565b92915050565b600060208284031215611b8b57611b8a611aa7565b5b6000611b9984828501611b60565b91505092915050565b611bab81611ad1565b82525050565b6000602082019050611bc66000830184611ba2565b92915050565b60008060408385031215611be357611be2611aa7565b5b6000611bf185828601611b60565b9250506020611c0285828601611afa565b9150509250929050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c5f82611c16565b810181811067ffffffffffffffff82111715611c7e57611c7d611c27565b5b80604052505050565b6000611c91611a9d565b9050611c9d8282611c56565b919050565b600067ffffffffffffffff821115611cbd57611cbc611c27565b5b611cc682611c16565b9050602081019050919050565b82818337600083830152505050565b6000611cf5611cf084611ca2565b611c87565b905082815260208101848484011115611d1157611d10611c11565b5b611d1c848285611cd3565b509392505050565b600082601f830112611d3957611d38611c0c565b5b8135611d49848260208601611ce2565b91505092915050565b600060208284031215611d6857611d67611aa7565b5b600082013567ffffffffffffffff811115611d8657611d85611aac565b5b611d9284828501611d24565b91505092915050565b6000819050919050565b611dae81611d9b565b8114611db957600080fd5b50565b600081359050611dcb81611da5565b92915050565b600060208284031215611de757611de6611aa7565b5b6000611df584828501611dbc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e38578082015181840152602081019050611e1d565b83811115611e47576000848401525b50505050565b6000611e5882611dfe565b611e628185611e09565b9350611e72818560208601611e1a565b611e7b81611c16565b840191505092915050565b60006020820190508181036000830152611ea08184611e4d565b905092915050565b60008060408385031215611ebf57611ebe611aa7565b5b6000611ecd85828601611dbc565b9250506020611ede85828601611dbc565b9150509250929050565b611ef181611d9b565b82525050565b6000602082019050611f0c6000830184611ee8565b92915050565b600067ffffffffffffffff821115611f2d57611f2c611c27565b5b611f3682611c16565b9050602081019050919050565b6000611f56611f5184611f12565b611c87565b905082815260208101848484011115611f7257611f71611c11565b5b611f7d848285611e1a565b509392505050565b600082601f830112611f9a57611f99611c0c565b5b8151611faa848260208601611f43565b91505092915050565b600060208284031215611fc957611fc8611aa7565b5b600082015167ffffffffffffffff811115611fe757611fe6611aac565b5b611ff384828501611f85565b91505092915050565b7f2200000000000000000000000000000000000000000000000000000000000000815250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061206957607f821691505b6020821081141561207d5761207c612022565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b600081546120b081612051565b6120ba8186612083565b945060018216600081146120d557600181146120e657612119565b60ff19831686528186019350612119565b6120ef8561208e565b60005b83811015612111578154818901526001820191506020810190506120f2565b838801955050505b50505092915050565b600061212d82611dfe565b6121378185612083565b9350612147818560208601611e1a565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000815250565b600061218482611ffc565b60018201915061219482856120a3565b91506121a08284612122565b91506121ab82612153565b6002820191508190509392505050565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b60006121f1600183612083565b91506121fc826121bb565b600182019050919050565b7f226e616d65223a224d6572676542656172732023000000000000000000000000600082015250565b600061223d601483612083565b915061224882612207565b601482019050919050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b6000612289600283612083565b915061229482612253565b600282019050919050565b7f2265787465726e616c5f75726c223a2268747470733a2f2f7777772e6d65726760008201527f6562656172732e636f6d222c0000000000000000000000000000000000000000602082015250565b60006122fb602c83612083565b91506123068261229f565b602c82019050919050565b7f22696d616765223a000000000000000000000000000000000000000000000000600082015250565b6000612347600883612083565b915061235282612311565b600882019050919050565b7f22616e696d6174696f6e5f75726c223a22000000000000000000000000000000600082015250565b6000612393601183612083565b915061239e8261235d565b601182019050919050565b600081519050919050565b600081905092915050565b60006123ca826123a9565b6123d481856123b4565b93506123e4818560208601611e1a565b80840191505092915050565b7f2261747472696275746573223a00000000000000000000000000000000000000600082015250565b6000612426600d83612083565b9150612431826123f0565b600d82019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000612472600183612083565b915061247d8261243c565b600182019050919050565b6000612493826121e4565b915061249e82612230565b91506124aa8287612122565b91506124b58261227c565b91506124c0826122ee565b91506124cb8261233a565b91506124d78286612122565b91506124e282612386565b91506124ee82856123bf565b91506124f98261227c565b915061250482612419565b91506125108284612122565b915061251b82612465565b915081905095945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b600061255f601d83612083565b915061256a82612529565b601d82019050919050565b600061258082612552565b915061258c8284612122565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006125d182611d9b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561260457612603612597565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061264982611d9b565b915061265483611d9b565b9250826126645761266361260f565b5b828204905092915050565b600061267a82611d9b565b915061268583611d9b565b92508282101561269857612697612597565b5b828203905092915050565b60006126ae82611d9b565b91506126b983611d9b565b9250826126c9576126c861260f565b5b828206905092915050565b60006126df82611d9b565b91506126ea83611d9b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561271f5761271e612597565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2c00000000000000000000000000000000000000000000000000000000000000815250565b600061278b8285612122565b91506127978284612122565b91506127a282612759565b6001820191508190509392505050565b60006127be8285612122565b91506127ca8284612122565b91508190509392505050565b7f5b00000000000000000000000000000000000000000000000000000000000000815250565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b600061282d826127d6565b60018201915061283d8284612122565b9150612848826127fc565b60018201915081905092915050565b600061286282611d9b565b915061286d83611d9b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156128a6576128a5612597565b5b828202905092915050565b6128ba81611b3c565b82525050565b60006040820190506128d560008301856128b1565b6128e26020830184611ee8565b9392505050565b6000815190506128f881611b49565b92915050565b60006020828403121561291457612913611aa7565b5b6000612922848285016128e9565b91505092915050565b600060208201905061294060008301846128b1565b92915050565b600061295961295484611ca2565b611c87565b90508281526020810184848401111561297557612974611c11565b5b612980848285611e1a565b509392505050565b600082601f83011261299d5761299c611c0c565b5b81516129ad848260208601612946565b91505092915050565b6000602082840312156129cc576129cb611aa7565b5b600082015167ffffffffffffffff8111156129ea576129e9611aac565b5b6129f684828501612988565b91505092915050565b7f7b202274726169745f74797065223a2022000000000000000000000000000000815250565b7f2276616c7565223a220000000000000000000000000000000000000000000000815250565b7f227d000000000000000000000000000000000000000000000000000000000000815250565b6000612a7c826129ff565b601182019150612a8c8285612122565b9150612a9782612153565b600282019150612aa682612a25565b600982019150612ab68284612122565b9150612ac182612a4b565b600282019150819050939250505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220cb6046ae39e42eadb793b2ce7720efd5e90f68b209d6fd7fe30f47f0bf63b6b764736f6c634300080c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.