Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
Barcode
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-28 */ // SPDX-License-Identifier: MIT // Author: tycoon.eth pragma solidity ^0.8.19; /*** ___. \_ |__ _____ _______ | __ \\__ \\_ __ \ | \_\ \/ __ \| | \/ |___ (____ /__| \/ \/ .___ ____ ____ __| _/____ _/ ___\/ _ \ / __ |/ __ \ \ \__( <_> ) /_/ \ ___/ \___ >____/\____ |\___ > \/ \/ \/ Generate barcodes SVGs on-chain. Limitations: Code-128 Character set C only. **/ contract Barcode { using DynamicBufferLib for DynamicBufferLib.DynamicBuffer; mapping(bytes32 => bytes11) public barMap; bytes13 constant stopCode = "1100011101011"; constructor() { // Lookup table of Character Set C of Code-128 barMap["00"] = "11011001100"; barMap["01"] = "11001101100"; barMap["02"] = "11001100110"; barMap["03"] = "10010011000"; barMap["04"] = "10010001100"; barMap["05"] = "10001001100"; barMap["06"] = "10011001000"; barMap["07"] = "10011000100"; barMap["08"] = "10001100100"; barMap["09"] = "11001001000"; barMap["10"] = "11001000100"; barMap["11"] = "11000100100"; barMap["12"] = "10110011100"; barMap["13"] = "10011011100"; barMap["14"] = "10011001110"; barMap["15"] = "10111001100"; barMap["16"] = "10011101100"; barMap["17"] = "10011100110"; barMap["18"] = "11001110010"; barMap["19"] = "11001011100"; barMap["20"] = "11001001110"; barMap["21"] = "11011100100"; barMap["22"] = "11001110100"; barMap["23"] = "11101101110"; barMap["24"] = "11101001100"; barMap["25"] = "11100101100"; barMap["26"] = "11100100110"; barMap["27"] = "11101100100"; barMap["28"] = "11100110100"; barMap["29"] = "11100110010"; barMap["30"] = "11011011000"; barMap["31"] = "11011000110"; barMap["32"] = "11000110110"; barMap["33"] = "10100011000"; barMap["34"] = "10001011000"; barMap["35"] = "10001000110"; barMap["36"] = "10110001000"; barMap["37"] = "10001101000"; barMap["38"] = "10001100010"; barMap["39"] = "11010001000"; barMap["40"] = "11000101000"; barMap["41"] = "11000100010"; barMap["42"] = "10110111000"; barMap["43"] = "10110001110"; barMap["44"] = "10001101110"; barMap["45"] = "10111011000"; barMap["46"] = "10111000110"; barMap["47"] = "10001110110"; barMap["48"] = "11101110110"; barMap["49"] = "11010001110"; barMap["50"] = "11000101110"; barMap["51"] = "11011101000"; barMap["52"] = "11011100010"; barMap["53"] = "11011101110"; barMap["54"] = "11101011000"; barMap["55"] = "11101000110"; barMap["56"] = "11100010110"; barMap["57"] = "11101101000"; barMap["58"] = "11101100010"; barMap["59"] = "11100011010"; barMap["60"] = "11101111010"; barMap["61"] = "11001000010"; barMap["62"] = "11110001010"; barMap["63"] = "10100110000"; barMap["64"] = "10100001100"; barMap["65"] = "10010110000"; barMap["66"] = "10010000110"; barMap["67"] = "10000101100"; barMap["68"] = "10000100110"; barMap["69"] = "10110010000"; barMap["70"] = "10110000100"; barMap["71"] = "10011010000"; barMap["72"] = "10011000010"; barMap["73"] = "10000110100"; barMap["74"] = "10000110010"; barMap["75"] = "11000010010"; barMap["76"] = "11001010000"; barMap["77"] = "11110111010"; barMap["78"] = "11000010100"; barMap["79"] = "10001111010"; barMap["80"] = "10100111100"; barMap["81"] = "10010111100"; barMap["82"] = "10010011110"; barMap["83"] = "10111100100"; barMap["84"] = "10011110100"; barMap["85"] = "10011110010"; barMap["86"] = "11110100100"; barMap["87"] = "11110010100"; barMap["88"] = "11110010010"; barMap["89"] = "11011011110"; barMap["90"] = "11011110110"; barMap["91"] = "11110110110"; barMap["92"] = "10101111000"; barMap["93"] = "10100011110"; barMap["94"] = "10001011110"; barMap["95"] = "10111101000"; barMap["96"] = "10111100010"; barMap["97"] = "11110101000"; barMap["98"] = "11110100010"; barMap["99"] = "10111011110"; barMap["100"] = "10111101110"; // code B barMap["101"] = "11101011110"; // code A barMap["102"] = "11110101110"; // FNC1 barMap["103"] = "11010000100"; // START A barMap["104"] = "11010010000"; // START B barMap["105"] = "11010011100"; // START C } /** * @dev draw returns the SVG string that renders a barcode * @param _in the number to draw as a barcode * @param _x x position of the SVG * @param _y y position of the SVG * @param _color a 3 byte hex code of the background color * @param _height height in pixels, min 20 * @param _barWidth width of bars, recommended: 2 */ function draw( uint256 _in, string memory _x, string memory _y, string memory _color, uint16 _height, uint8 _barWidth) view external returns (string memory) { bytes memory digits = bytes(toString(_in)); bytes memory out = abi.encodePacked(barMap["105"]); // charset-C if (digits.length % 2 == 1) { digits = abi.encodePacked( "0", digits); // prepend 0 so that it's even } uint256 pos; // position when parsing digits uint256 n; // value of character uint256 sum = 105; // checksum, starting with set-C code, 105 uint256 i = 1; // position, used for the checksum bytes32 k; // lookup key bytes memory b = "00"; // buffer used to build the lookup-key while (pos < digits.length) { b[0] = digits[pos]; b[1] = digits[pos+1]; assembly { k := mload(add(b, 32)) // convert b to k (bytes32) } out = abi.encodePacked( out, barMap[k]); n = (uint8(digits[pos]) - 48) * 10;// convert to int, big n += uint8(digits[pos+1]) - 48; // convert to int, small sum = sum + (n*i); // add to checksum pos+=2; i++; } sum = sum % 103; // checksum b = bytes(toString(sum)); if (sum < 10) { b = abi.encodePacked("0", b); // pad with "0" } assembly { k := mload(add(b, 32)) // convert b to k (bytes32) } out = abi.encodePacked( out, barMap[k], stopCode); return string(_render( out, bytes(_x), bytes(_y), bytes(_color), _height, _barWidth) ); } /** * _render */ function _render( bytes memory _in, bytes memory _x, bytes memory _y, bytes memory _color, uint16 _height, uint8 _barWidth ) internal pure returns (bytes memory) { require (_height > 19, "_height too small"); DynamicBufferLib.DynamicBuffer memory result; uint256 pos = 0; uint256 i = 0; uint256 n = 0; bytes memory width = bytes(toString((_in.length * _barWidth) + 24)); // auto-width bytes memory height = bytes(toString(uint256(_height))); result.append('<svg id="solbarcode" x="', _x, 'px" y="'); result.append(_y, 'px" width="', width); result.append('px" height="', height,'px" viewBox="0 0 '); result.append(width,' ', height); result.append('" xmlns="http://www.w3.org/2000/svg" version="1.1"><rect x="0" y="0" width="'); result.append(width,'" height="', height); result.append('" style="fill:#',_color,';"/> <g transform="translate(12, 10)" style="fill:#0;">'); while (pos < _in.length) { if (_in[pos] == "1") { i++; // count the black bars if (n > 0) { n =0; } } else { if (i>0) { // result.append( ' <rect x="', bytes(toString(pos * _barWidth - (i * _barWidth))), '" y="0" width="'); result.append( bytes(toString(i * _barWidth)), '" height="', bytes(toString(_height - 20))); result.append('"/>'); i=0; } n++; } pos++; } if (i>0) { result.append( ' <rect x="', bytes(toString(pos * _barWidth - (i * _barWidth))), '" y="0" width="'); result.append( bytes(toString(i * _barWidth)), '" height="', bytes(toString(_height - 20))); result.append('"/>'); } result.append('</g></svg>'); return (result.data); } function toString(uint256 value) public pure returns (string memory) { // Inspired by openzeppelin's implementation - MIT licence // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol#L15 // this version removes the decimals counting uint8 count; if (value == 0) { return "0"; } uint256 digits = 31; // bytes and strings are big endian, so working on the buffer from right to left // this means we won't need to reverse the string later bytes memory buffer = new bytes(32); while (value != 0) { buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; digits -= 1; count++; } uint256 temp; assembly { temp := mload(add(buffer, 32)) temp := shl(mul(sub(32,count),8), temp) mstore(add(buffer, 32), temp) mstore(buffer, count) } return string(buffer); } } /** * DynamicBufferLib adapted from * https://github.com/Vectorized/solady/blob/main/src/utils/DynamicBufferLib.sol */ library DynamicBufferLib { /// @dev Type to represent a dynamic buffer in memory. /// You can directly assign to `data`, and the `append` function will /// take care of the memory allocation. struct DynamicBuffer { bytes data; } /// @dev Appends `data` to `buffer`. /// Returns the same buffer, so that it can be used for function chaining. function append(DynamicBuffer memory buffer, bytes memory data) internal pure returns (DynamicBuffer memory) { /// @solidity memory-safe-assembly assembly { if mload(data) { let w := not(31) let bufferData := mload(buffer) let bufferDataLength := mload(bufferData) let newBufferDataLength := add(mload(data), bufferDataLength) // Some random prime number to multiply `capacity`, so that // we know that the `capacity` is for a dynamic buffer. // Selected to be larger than any memory pointer realistically. let prime := 1621250193422201 let capacity := mload(add(bufferData, w)) // Extract `capacity`, and set it to 0, if it is not a multiple of `prime`. capacity := mul(div(capacity, prime), iszero(mod(capacity, prime))) // Expand / Reallocate memory if required. // Note that we need to allocate an exta word for the length, and // and another extra word as a safety word (giving a total of 0x40 bytes). // Without the safety word, the data at the next free memory word can be overwritten, // because the backwards copying can exceed the buffer space used for storage. for {} iszero(lt(newBufferDataLength, capacity)) {} { // Approximately double the memory with a heuristic, // ensuring more than enough space for the combined data, // rounding up to the next multiple of 32. let newCapacity := and(add(capacity, add(or(capacity, newBufferDataLength), 32)), w) // If next word after current buffer is not eligible for use. if iszero(eq(mload(0x40), add(bufferData, add(0x40, capacity)))) { // Set the `newBufferData` to point to the word after capacity. let newBufferData := add(mload(0x40), 0x20) // Reallocate the memory. mstore(0x40, add(newBufferData, add(0x40, newCapacity))) // Store the `newBufferData`. mstore(buffer, newBufferData) // Copy `bufferData` one word at a time, backwards. for { let o := and(add(bufferDataLength, 32), w) } 1 {} { mstore(add(newBufferData, o), mload(add(bufferData, o))) o := add(o, w) // `sub(o, 0x20)`. if iszero(o) { break } } // Store the `capacity` multiplied by `prime` in the word before the `length`. mstore(add(newBufferData, w), mul(prime, newCapacity)) // Assign `newBufferData` to `bufferData`. bufferData := newBufferData break } // Expand the memory. mstore(0x40, add(bufferData, add(0x40, newCapacity))) // Store the `capacity` multiplied by `prime` in the word before the `length`. mstore(add(bufferData, w), mul(prime, newCapacity)) break } // Initalize `output` to the next empty position in `bufferData`. let output := add(bufferData, bufferDataLength) // Copy `data` one word at a time, backwards. for { let o := and(add(mload(data), 32), w) } 1 {} { mstore(add(output, o), mload(add(data, o))) o := add(o, w) // `sub(o, 0x20)`. if iszero(o) { break } } // Zeroize the word after the buffer. mstore(add(add(bufferData, 0x20), newBufferDataLength), 0) // Store the `newBufferDataLength`. mstore(bufferData, newBufferDataLength) } } return buffer; } /* /// @dev Appends `data0`, `data1` to `buffer`. /// Returns the same buffer, so that it can be used for function chaining. function append(DynamicBuffer memory buffer, bytes memory data0, bytes memory data1) internal pure returns (DynamicBuffer memory) { return append(append(buffer, data0), data1); } */ /// @dev Appends `data0`, `data1`, `data2` to `buffer`. /// Returns the same buffer, so that it can be used for function chaining. function append( DynamicBuffer memory buffer, bytes memory data0, bytes memory data1, bytes memory data2 ) internal pure returns (DynamicBuffer memory) { return append(append(append(buffer, data0), data1), data2); } /* /// @dev Appends `data0`, `data1`, `data2`, `data3` to `buffer`. /// Returns the same buffer, so that it can be used for function chaining. function append( DynamicBuffer memory buffer, bytes memory data0, bytes memory data1, bytes memory data2, bytes memory data3 ) internal pure returns (DynamicBuffer memory) { return append(append(append(append(buffer, data0), data1), data2), data3); } /// @dev Appends `data0`, `data1`, `data2`, `data3`, `data4` to `buffer`. /// Returns the same buffer, so that it can be used for function chaining. function append( DynamicBuffer memory buffer, bytes memory data0, bytes memory data1, bytes memory data2, bytes memory data3, bytes memory data4 ) internal pure returns (DynamicBuffer memory) { append(append(append(append(buffer, data0), data1), data2), data3); return append(buffer, data4); } /// @dev Appends `data0`, `data1`, `data2`, `data3`, `data4`, `data5` to `buffer`. /// Returns the same buffer, so that it can be used for function chaining. function append( DynamicBuffer memory buffer, bytes memory data0, bytes memory data1, bytes memory data2, bytes memory data3, bytes memory data4, bytes memory data5 ) internal pure returns (DynamicBuffer memory) { append(append(append(append(buffer, data0), data1), data2), data3); return append(append(buffer, data4), data5); } /// @dev Appends `data0`, `data1`, `data2`, `data3`, `data4`, `data5`, `data6` to `buffer`. /// Returns the same buffer, so that it can be used for function chaining. function append( DynamicBuffer memory buffer, bytes memory data0, bytes memory data1, bytes memory data2, bytes memory data3, bytes memory data4, bytes memory data5, bytes memory data6 ) internal pure returns (DynamicBuffer memory) { append(append(append(append(buffer, data0), data1), data2), data3); return append(append(append(buffer, data4), data5), data6); } */ }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"barMap","outputs":[{"internalType":"bytes11","name":"","type":"bytes11"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_in","type":"uint256"},{"internalType":"string","name":"_x","type":"string"},{"internalType":"string","name":"_y","type":"string"},{"internalType":"string","name":"_color","type":"string"},{"internalType":"uint16","name":"_height","type":"uint16"},{"internalType":"uint8","name":"_barWidth","type":"uint8"}],"name":"draw","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"toString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600060208190527fda5eac8ddc4124069287d1d89cadf786b4eff362b013902aadcd7305d548d0a980546001600160581b03199081166a3131303131303031313030179091557fc6ec34ed29344609ae53eead5e1ad0638f7703a6865d024bc3f968e5348f4be1805482166a31313030313130313130301790557facaa7019ee7c48409c807fcb6ecad36613e62b5d8bb5909d20a47722c76042b6805482166a31313030313130303131301790557fdcfc64a378eaa1cbdd8aa8db174c870e892aacffe3a40e5e2487c7487aec928f805482166a31303031303031313030301790557fb6fc6fa2f7bd903fcfe7c54cb856cc15c9474f450728131092e461bae42070ee805482166a31303031303030313130301790557f45a9dbad1845c3c1736710ce99b18dce30f439494295dfd509fe3354713205ea805482166a31303030313030313130301790557f0fb8ba52584d32e595b1f19ed62ad86e914beae218fece37034df08b41693ab0805482166a31303031313030313030301790557fe6883c7abc337b957dcce1462c72510fd1d69be0638af73626982d1815a9efca805482166a31303031313030303130301790557fac96fcfe1f0166ae42f54b8741f01619df7a5a81afca726e0f1fbc3071c5e9a0805482166a31303030313130303130301790557feb4f460b075774bd1bfe169f3e5f0cf293df0be9312abc97e7a990a404fd33f6805482166a31313030313030313030301790557fd5719d08f2bc7524618438daee5023d2ee13c4096f9502706d21f05a062b476d805482166a31313030313030303130301790557feffa5881d09a2971a5a4f5b9fee8e91193c34e19e71bb90a99f533359813a9f6805482166a31313030303130303130301790557f94c2f5f5539b23babc5a5c52ad9ead08c5b13d11b18a2db251c1cc7fd0fdcb40805482166a31303131303031313130301790557f17a86bcb0e27e09828027a2d0710ed284d6f24ee092b9f90af7c4ff397a419c8805482166a31303031313031313130301790557f836d11624bfa94333019e1697bd2d4bc80684ab5d8341233b16728f1606207d9805482166a31303031313030313131301790557fe76c7fd19fb69d9cbc96c4b6d0eb7503c4a4c04e0ad4a54eb2549187653c94ff805482166a31303131313030313130301790557fcb874c43a592bf8c51160c059523e1cd2862db6db91b0f52ae336a98e93621be805482166a31303031313130313130301790557fe4ce2b34e6936dbc805a4302371621d887deb2686315a11d77357f9bce8f1c44805482166a31303031313130303131301790557f4a5372265c337d807cb2bddb2de265b5910240ad9b70731b3b5d96f5d2376e99805482166a31313030313131303031301790557fccf21eeb9445378242d90c097d430c98b02a39fc77f14fbfdd7cd8d5df5adffd805482166a31313030313031313130301790557fd8d1fe366415c1f7477b7da02378bd14b85929dff53e1edf86bbbc896303b221805482166a31313030313030313131301790557f8cb5c72e644b44f4abe0ddcb3772f0f88618d6f97a153fff16cbd81fe137774d805482166a31313031313130303130301790557f0779ebf05217971a883c1c7f1d44dc4b09ab27e491c59b2267e2a267e8ff6fef805482166a31313030313131303130301790557f917a9a7213abe17bf33a0450bd0a9cae3670c4846a4822e199e1afce8b2ab7b2805482166a31313130313130313131301790557f067c4736ddeca90c7006cc172b153c6e8fc9aa6c9f0aa723afcc747a3294227b805482166a31313130313030313130301790557fdb3502e37fb35a52293afcc10c0f1a3ec384e293f2f0c303f655ace549f63748805482166a31313130303130313130301790557ffbea51d597db6325487bdbd38d989a2e69f54a5e9bc7d86335e13be2372af4bb805482166a31313130303130303131301790557f644f930ae12a4cc9359ebd0e20c8ade1297bfc05cec7403fb54ae72c5796cd7d805482166a31313130313130303130301790557f37089ce624bca8bcd38fe35dbf5bf8299a4d4a8e60b3769fb608290b6772b1ec805482166a31313130303131303130301790557f51a35cdd6accf761f8ec867f374a946c2a2d4922ec5d98daf3f48b329b2077f4805482166a31313130303131303031301790557f5ef00ac9f1eaf1889d0c2906f7f1ee9e90461d078431a8ec594757d5924b8c77805482166a31313031313031313030301790557f6bb3c3bb02019ff44a21eb2ea9d3692207fd5ae1000c007f2ccf6d7705205a03805482166a31313031313030303131301790557f15cf172891e5e8976171c598239bf006a0525edcfead3c11a89bcb585b9533f9805482166a31313030303131303131301790557f5e6ff77b013e919763c2873e4e80c4f936a576d1103d0708e4323b50cc5bfe06805482166a31303130303031313030301790557f1a1208b7664853a0e6165a4b8988195ea86088febd9649ce793750d85cc688f7805482166a31303030313031313030301790557f58ebae74e5e6d04224ad71156844211fd9cccd946ef77d796e22a26a4c4698f5805482166a31303030313030303131301790557f18f0ec316620bfd30edc5d5cbb9a371aee7021294cd632e94c1568f928c7de03805482166a31303131303030313030301790557fc0cfa494df28d722d558598edd98ae4580a846ff985c26ef9dcd99ba4b62be6c805482166a31303030313130313030301790557f3d27ebf52142a4348e66ce1cedcaa9da21f032f8a2bca1192f8c59ba07161838805482166a31303030313130303031301790557f4686205d07411075652cf58aa96df401a34988ffc586b325d49202bfc28eb9a8805482166a31313031303030313030301790557f1a23c05b03ac3b4bf5fe0319ed9aac636d699b3bd0c0db04d93cbed3dd6994aa805482166a31313030303130313030301790557f639f887baeb6f8a3d87706b6a77ee460fb3e6a43465d1c2f02b20439669bd6a5805482166a31313030303130303031301790557fa7ee27ab715a3f3a73ebc36ae3e5f6927c1b62f0a1b715752239bda0490c6a10805482166a31303131303131313030301790557f3e9e18aa58476b809f44f684e6ff5e520319d7203ef4e401c3eac6d1f8593baa805482166a31303131303030313131301790557f695550e90126e381b8e9efaaacc1f785f22aed06f3a95a54ce618f5da99be93d805482166a31303030313130313131301790557fab9c9330b25da96cf3a317e6b9c0fdf31992115fe7ba2ded084e64f2ae3fe2f0805482166a31303131313031313030301790557fb53854f5372c2a8f0a8e8a4757ebed388dad183a75a3daa0c536acdff2e1c423805482166a31303131313030303131301790557ff14d1b9dece8d9bd4c27f614071dd858d32e3aa5d74d33f6a66668924ea4661c805482166a31303030313131303131301790557f2384487f0f38aa9f4e931a4b0e0eb12f89b75c5e5c1b3c710ead7ad979a6fac5805482166a31313130313131303131301790557f97dc22a7408d4ce108dbebe75b7232ea4e4af9d357239c83eb2d44ed5dd5b3bc805482166a31313031303030313131301790557f80b2045fe7df63e911469d8aa8a5e9c8778b66a59ca595ff7ddf57dc341d029f805482166a31313030303130313131301790557f82df37241b6eaffc0cfb1744bb4bf4977cb63a6864b6f9c38cfebe7b28642954805482166a31313031313130313030301790557f1da19ae930df586a10221ba0972fef40d934ad2e4089e4df55165dcf427bbe6f805482166a31313031313130303031301790557fce77a70e06e8bfbed4eb00f7560cf092f71cedd016b04a7e673090f2b56e5c45805482166a31313031313130313131301790557f0ce841940881fca25815b3295ac6d078bc10630a9ea92ea471b4710e7c52cb4a805482166a31313130313031313030301790557f6184f314ef140b377b4d5681aea795d107bd115b5bc034c6ccf793ce5c59fceb805482166a31313130313030303131301790557f77eec4bae365550a7cfff9a3e22f538234fde74e00375dcd494b58b682d40511805482166a31313130303031303131301790557f9482cbbd4163c4cb87d0be292a0a91ec81f666221124fafea39932b6b64ac1eb805482166a31313130313130313030301790557fba0be93a1df0860ad96404736a89ea43634832e225882f9e86dc34bdc493ff9c80546a31313130313130303031309083161790557f396b4b8fbfcc6772ffcaf074f6b33fd17426fc2d62535d280d56f2cb5ca1841e805482166a31313130303031313031301790557f52e63a232e3bf422d34967ffd6bdecc81e47af77ff9772dbc5146c8ecf0134c0805482166a31313130313131313031301790557f0c67191292e8036f424d7e8dcd83c172d4633aec3001953a931e8926d6cc8d89805482166a31313030313030303031301790557fda97e01b241ed48199b69fcb168418a74ad3164c0468e4f75c44196fe5b65707805482166a31313131303030313031301790557f194d3addc9dd908d61a13ecb9d0efbec05c1285e5870b4d01874a3cbb3bea470805482166a31303130303131303030301790557faef0b6d86d250d3957f2673c14e85377f59d73c8c82fc4c4e625eedd0867265b805482166a31303130303030313130301790557fc6104dacf81804a2628dbea0859f17f5f84c08c67683b5727fd902ca93af1b9c805482166a31303031303131303030301790557f5a2fa7195073f08573f7a24d2c0085275cd26eb6e3fe658d96de188b42e3f230805482166a31303031303030303131301790557f0e5b9872d5b4e7bbefd05f5c519bb66abf1862b275df3f6aa087ae6de66bfd93805482166a31303030303130313130301790557fbbf788ca626349288dbe7769c6f0e62a7d28b9b91be8bd0c7fea9ec368c138b1805482166a31303030303130303131301790557fced084f0651de812c0b677a36137d5bad6ef3d24098909716ab7814cf31842b2805482166a31303131303031303030301790557fb6a0d908b8a7d4609b62feb09adbd6969f0cddbb137d28b59a7d7e01e3ef67a4805482166a31303131303030303130301790557f7edc12e84aef553661d7a4ddf6f8f0900cd7936fbfc7d4a070278143792eb845805482166a31303031313031303030301790557f6d05537c1b700c394d789ba924e37b6cace0488a04abbbeada4db4259a6420fd805482166a31303031313030303031301790557fc74f198f31d5559bec6f92fd085fd9d85778a9130f097931f88fd6a576df7062805482166a31303030303131303130301790557f6a141c3bdc5d0fcc2bad0c1e614dd145c793faccb7729952b10a032068b61a9c805482166a31303030303131303031301790557fc8f06a088fb7182851e40a23a29168c415a6b37ac863804965c8095080f1113c805482166a31313030303031303031301790557fb13727bb0996df8866ecd2d17c8de3a600563cc67eadb3e97b4ac0e5c60b29b8805482166a31313030313031303030301790557f12073fbe61c0b72805458c0bc0d4b2c1c2c7c778042f9f1f3bab64a2c249725e805482166a31313131303131313031301790557f48eb5df2f0d6292db0deda644e0e1976c3e05552394029a200202c9a6d64b45f805482166a31313030303031303130301790557f78f9d794c679503ccba2bdaf8166038a616a4ea39d9eccbcecde2d1c154f2e2a805482166a31303030313131313031301790557f08a6ac83c67a9cfa1a8fb48cc11497c39558a644352603e23e0ef62d9f3454e1805482166a31303130303131313130301790557f1f7a55db325fb660275f7689ece34aeb5ad5d477781c1a2ef38981992fed133e805482166a31303031303131313130301790557fc19ab865929c1b149b696dd8c9b1d483c37db8a044defee60f3c695e77b4920c805482166a31303031303031313131301790557f7c2b5dcbca672f8de143756fc8ebc66e07dfb9c0aae91c1bddce49fba0803b6a805482166a31303131313130303130301790557f4160e02c0be568c6171e3cfc3a9752aefa0a30c564ab5cb829bba13b97c6c502805482166a31303031313131303130301790557f146592dbc99345dcc3d81f9f9dcaa0ecd9a463e9aa8a502422e6168360093e49805482166a31303031313131303031301790557f48600bc714c006a7d3e475229eaceee750f0f37ad9cfec1c6ab08da83707f0f0805482166a31313131303130303130301790557f1d711cdc7bb97de71efa352a9dbfff1f451d04ae2bfc4ce6e5807921926d75ec805482166a31313131303031303130301790557fb7ce03b049d9989bc89b8c65483eacf0d88c4fd915f282aca7bc03d5eaff89bc805482166a31313131303031303031301790557f4c601714fc8adc14f491b311674711c4085f807dce8005a5cee95a4b726e76ae805482166a31313031313031313131301790557f0364f94e181ce90621c0469e5016060e0ed2fa93f8a6d1fb10a5dded391908bb805482166a31313031313131303131301790557fd3007f67315a3dab659abc0ba46add5dea6f8b38937b0284082c40e6d482be7c805482166a31313131303131303131301790557f3bdcf1bb487f72fdcb8ce70ff1928c39065ce3ef1e77e0db7c699d4925cef7b9805482166a31303130313131313030301790557fe7927f18273f915741c0a145130542f820f985590729aa0af5c08ada6480452a805482166a31303130303031313131301790557f8ccf818fe4ccbd6c62eb5b85f15caba3963466bafd36f2bd2122c16943cba317805482166a31303030313031313131301790557fc8407e33b1f7c8935f5c9855ba832d3f91641d04ebddb2753561d6dcbc7b8cdc805482166a31303131313130313030301790557fe4cd42e6e3abb8014d3b44dbbb8ab943fb7373582dd42d29f78e4e26511f98b3805482166a31303131313130303031301790557fa178d97cb76ca4cdbb58094825c340064f8a730b442bcd9bb2408f6526ca08c4805482166a31313131303130313030301790557fe5d223f70807c797d236fca72e8a48a07900c7422a0f807ef9a14ba450d8dc50805482166a31313131303130303031301790557fa22001102b0d8a093bbd76b83b36219a5da3e89632f0220e6d2cc15b7e608f1b805482166a31303131313031313131301790557f359583f6bdb70b11dce508fc42159c65a6ad27e4bd875c8a146a5300f4aafae0805482166a31303131313130313131301790557edeca629bdbce4905735140e174899c5f2bf39dbbae9e3dadc481d24a1025ac805482166a31313130313031313131301790557fcf137d94488fdf28d747b6df1c6029740c8864f3e53139e4f1925c322ebeb02a805482166a31313131303130313131301790557f285da429954831dd9613ae41279d17b57b06868b0c2270121b0a63c867c5ecdd805482166a31313031303030303130301790557f541922dd5ef162f04ffa9e56539f67d2691ef54acad32253163bca0562a88640805482166a31313031303031303030301790556231303560e81b82527f5a47718f65604cde3d716158c35e67477f84358d1ddec12b5042b570b52de19380549091166a3131303130303131313030179055610ec09081906115c590396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80636900a3ae146100465780639b0ab2511461006f578063b01ec9aa14610082575b600080fd5b610059610054366004610a48565b6100be565b6040516100669190610a85565b60405180910390f35b61005961007d366004610b71565b6101a1565b6100a5610090366004610a48565b60006020819052908152604090205460a81b81565b6040516001600160a81b03199091168152602001610066565b60606000826000036100e95750506040805180820190915260018152600360fc1b6020820152919050565b604080516020808252818301909252601f91600091906020820181803683370190505090505b841561018357610120600a86610c42565b61012b906030610c6c565b60f81b81838151811061014057610140610c7f565b60200101906001600160f81b031916908160001a905350610162600a86610c95565b945061016f600183610ca9565b91508261017b81610cbc565b93505061010f565b60208181018051918590036008029190911b90529182525092915050565b606060006101ae886100be565b6231303560e81b600090815260208181527f5a47718f65604cde3d716158c35e67477f84358d1ddec12b5042b570b52de1935460405193945091926102079260a81b91016001600160a81b0319919091168152600b0190565b6040516020818303038152906040529050600282516102269190610c42565b600103610250578160405160200161023e9190610cdb565b60405160208183030381529060405291505b604080518082019091526002815261030360f41b6020820152600090819060699060019083905b87518610156104005787868151811061029257610292610c7f565b602001015160f81c60f81b816000815181106102b0576102b0610c7f565b60200101906001600160f81b031916908160001a905350876102d3876001610c6c565b815181106102e3576102e3610c7f565b602001015160f81c60f81b8160018151811061030157610301610c7f565b60200101906001600160f81b031916908160001a9053506020818101516000818152808352604090819020549051919450610345928a9260a89290921b9101610d04565b6040516020818303038152906040529650603088878151811061036a5761036a610c7f565b016020015161037c919060f81c610d33565b61038790600a610d4c565b60ff16945060308861039a886001610c6c565b815181106103aa576103aa610c7f565b01602001516103bc919060f81c610d33565b6103c99060ff1686610c6c565b94506103d58386610d6f565b6103df9085610c6c565b93506103ec600287610c6c565b9550826103f881610d86565b935050610277565b61040b606785610c42565b9350610416846100be565b9050600a84101561044457806040516020016104329190610cdb565b60405160208183030381529060405290505b6020818101516000818152808352604090819020549051919450610483928a9260a89290921b916c3131303030313131303130313160981b9101610d9f565b60405160208183030381529060405296506104a2878f8f8f8f8f6104b5565b9f9e505050505050505050505050505050565b606060138361ffff16116105035760405162461bcd60e51b815260206004820152601160248201527017da195a59da1d081d1bdbc81cdb585b1b607a1b604482015260640160405180910390fd5b6040805160208101909152606081526000806000806105368760ff168d5161052b9190610d6f565b610054906018610c6c565b905060006105478961ffff166100be565b90506105b46040518060400160405280601881526020017f3c7376672069643d22736f6c626172636f64652220783d2200000000000000008152508d60405180604001604052806007815260200166383c11103c9e9160c91b8152508961093f909392919063ffffffff16565b5060408051808201909152600b81526a383c11103bb4b23a341e9160a91b60208201526105e59087908d908561093f565b5061064a6040518060400160405280600c81526020016b383c11103432b4b3b43a1e9160a11b81525082604051806040016040528060118152602001700383c11103b34b2bba137bc1e911810181607d1b8152508961093f909392919063ffffffff16565b506040805180820190915260018152600160fd1b602082015261067190879084908461093f565b506106956040518060800160405280604c8152602001610e08604c91398790610973565b5060408051808201909152600a81526911103432b4b3b43a1e9160b11b60208201526106c590879084908461093f565b506107146040518060400160405280600f81526020016e22207374796c653d2266696c6c3a2360881b8152508b604051806060016040528060378152602001610e54603791398992919061093f565b505b8c51851015610889578c858151811061073157610731610c7f565b01602001516001600160f81b031916603160f81b03610767578361075481610d86565b945050821561076257600092505b610877565b83156108695760408051808201909152600a815269101e3932b1ba103c1e9160b11b60208201526107e8906107b96107a260ff8c1688610d6f565b6107af60ff8d168a610d6f565b6100549190610ca9565b60408051808201909152600f81526e11103c9e911811103bb4b23a341e9160891b60208201528992919061093f565b5061083d6107fc61005460ff8b1687610d6f565b60408051808201909152600a81526911103432b4b3b43a1e9160b11b602082015261083461082b60148e610dec565b61ffff166100be565b8992919061093f565b5060408051808201909152600381526211179f60e91b6020820152610863908790610973565b50600093505b8261087381610d86565b9350505b8461088181610d86565b955050610716565b83156109005760408051808201909152600a815269101e3932b1ba103c1e9160b11b60208201526108c4906107b96107a260ff8c1688610d6f565b506108d86107fc61005460ff8b1687610d6f565b5060408051808201909152600381526211179f60e91b60208201526108fe908790610973565b505b60408051808201909152600a8152691e17b39f1e17b9bb339f60b11b602082015261092c908790610973565b505093519b9a5050505050505050505050565b60408051602081019091526060815261096a61096461095e8787610973565b85610973565b83610973565b95945050505050565b604080516020810190915260608152815115610a3f57601f1983518051808551016605c284b9def7798484015181810615828204029050808310610a12578560208483170182011681604001860160405114610a0057602060405101816040018101604052808b528760208701165b87810151828201528801806109e25750908302818801529450610a12565b80604001860160405280830287870152505b505085519183019160200184165b8681015183820152840180610a20575060008382016020015290915250505b50815b92915050565b600060208284031215610a5a57600080fd5b5035919050565b60005b83811015610a7c578181015183820152602001610a64565b50506000910152565b6020815260008251806020840152610aa4816040850160208701610a61565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610adf57600080fd5b813567ffffffffffffffff80821115610afa57610afa610ab8565b604051601f8301601f19908116603f01168101908282118183101715610b2257610b22610ab8565b81604052838152866020858801011115610b3b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff81168114610b6c57600080fd5b919050565b60008060008060008060c08789031215610b8a57600080fd5b86359550602087013567ffffffffffffffff80821115610ba957600080fd5b610bb58a838b01610ace565b96506040890135915080821115610bcb57600080fd5b610bd78a838b01610ace565b95506060890135915080821115610bed57600080fd5b50610bfa89828a01610ace565b935050608087013561ffff81168114610c1257600080fd5b9150610c2060a08801610b5b565b90509295509295509295565b634e487b7160e01b600052601260045260246000fd5b600082610c5157610c51610c2c565b500690565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a4257610a42610c56565b634e487b7160e01b600052603260045260246000fd5b600082610ca457610ca4610c2c565b500490565b81810381811115610a4257610a42610c56565b600060ff821660ff8103610cd257610cd2610c56565b60010192915050565b600360fc1b815260008251610cf7816001850160208701610a61565b9190910160010192915050565b60008351610d16818460208801610a61565b6001600160a81b03199390931691909201908152600b0192915050565b60ff8281168282160390811115610a4257610a42610c56565b60ff8181168382160290811690818114610d6857610d68610c56565b5092915050565b8082028115828204841417610a4257610a42610c56565b600060018201610d9857610d98610c56565b5060010190565b60008451610db1818460208901610a61565b6001600160a81b0319949094169190930190815272ffffffffffffffffffffffffffffffffffffff1991909116600b82015260180192915050565b61ffff828116828216039080821115610d6857610d68610c5656fe2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076657273696f6e3d22312e31223e3c7265637420783d22302220793d2230222077696474683d223b222f3e203c67207472616e73666f726d3d227472616e736c6174652831322c2031302922207374796c653d2266696c6c3a23303b223ea2646970667358221220cd943455c4012394483f0cd29b818aa1538c03ce6e4e79bdce50bdb1bfa7834364736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100415760003560e01c80636900a3ae146100465780639b0ab2511461006f578063b01ec9aa14610082575b600080fd5b610059610054366004610a48565b6100be565b6040516100669190610a85565b60405180910390f35b61005961007d366004610b71565b6101a1565b6100a5610090366004610a48565b60006020819052908152604090205460a81b81565b6040516001600160a81b03199091168152602001610066565b60606000826000036100e95750506040805180820190915260018152600360fc1b6020820152919050565b604080516020808252818301909252601f91600091906020820181803683370190505090505b841561018357610120600a86610c42565b61012b906030610c6c565b60f81b81838151811061014057610140610c7f565b60200101906001600160f81b031916908160001a905350610162600a86610c95565b945061016f600183610ca9565b91508261017b81610cbc565b93505061010f565b60208181018051918590036008029190911b90529182525092915050565b606060006101ae886100be565b6231303560e81b600090815260208181527f5a47718f65604cde3d716158c35e67477f84358d1ddec12b5042b570b52de1935460405193945091926102079260a81b91016001600160a81b0319919091168152600b0190565b6040516020818303038152906040529050600282516102269190610c42565b600103610250578160405160200161023e9190610cdb565b60405160208183030381529060405291505b604080518082019091526002815261030360f41b6020820152600090819060699060019083905b87518610156104005787868151811061029257610292610c7f565b602001015160f81c60f81b816000815181106102b0576102b0610c7f565b60200101906001600160f81b031916908160001a905350876102d3876001610c6c565b815181106102e3576102e3610c7f565b602001015160f81c60f81b8160018151811061030157610301610c7f565b60200101906001600160f81b031916908160001a9053506020818101516000818152808352604090819020549051919450610345928a9260a89290921b9101610d04565b6040516020818303038152906040529650603088878151811061036a5761036a610c7f565b016020015161037c919060f81c610d33565b61038790600a610d4c565b60ff16945060308861039a886001610c6c565b815181106103aa576103aa610c7f565b01602001516103bc919060f81c610d33565b6103c99060ff1686610c6c565b94506103d58386610d6f565b6103df9085610c6c565b93506103ec600287610c6c565b9550826103f881610d86565b935050610277565b61040b606785610c42565b9350610416846100be565b9050600a84101561044457806040516020016104329190610cdb565b60405160208183030381529060405290505b6020818101516000818152808352604090819020549051919450610483928a9260a89290921b916c3131303030313131303130313160981b9101610d9f565b60405160208183030381529060405296506104a2878f8f8f8f8f6104b5565b9f9e505050505050505050505050505050565b606060138361ffff16116105035760405162461bcd60e51b815260206004820152601160248201527017da195a59da1d081d1bdbc81cdb585b1b607a1b604482015260640160405180910390fd5b6040805160208101909152606081526000806000806105368760ff168d5161052b9190610d6f565b610054906018610c6c565b905060006105478961ffff166100be565b90506105b46040518060400160405280601881526020017f3c7376672069643d22736f6c626172636f64652220783d2200000000000000008152508d60405180604001604052806007815260200166383c11103c9e9160c91b8152508961093f909392919063ffffffff16565b5060408051808201909152600b81526a383c11103bb4b23a341e9160a91b60208201526105e59087908d908561093f565b5061064a6040518060400160405280600c81526020016b383c11103432b4b3b43a1e9160a11b81525082604051806040016040528060118152602001700383c11103b34b2bba137bc1e911810181607d1b8152508961093f909392919063ffffffff16565b506040805180820190915260018152600160fd1b602082015261067190879084908461093f565b506106956040518060800160405280604c8152602001610e08604c91398790610973565b5060408051808201909152600a81526911103432b4b3b43a1e9160b11b60208201526106c590879084908461093f565b506107146040518060400160405280600f81526020016e22207374796c653d2266696c6c3a2360881b8152508b604051806060016040528060378152602001610e54603791398992919061093f565b505b8c51851015610889578c858151811061073157610731610c7f565b01602001516001600160f81b031916603160f81b03610767578361075481610d86565b945050821561076257600092505b610877565b83156108695760408051808201909152600a815269101e3932b1ba103c1e9160b11b60208201526107e8906107b96107a260ff8c1688610d6f565b6107af60ff8d168a610d6f565b6100549190610ca9565b60408051808201909152600f81526e11103c9e911811103bb4b23a341e9160891b60208201528992919061093f565b5061083d6107fc61005460ff8b1687610d6f565b60408051808201909152600a81526911103432b4b3b43a1e9160b11b602082015261083461082b60148e610dec565b61ffff166100be565b8992919061093f565b5060408051808201909152600381526211179f60e91b6020820152610863908790610973565b50600093505b8261087381610d86565b9350505b8461088181610d86565b955050610716565b83156109005760408051808201909152600a815269101e3932b1ba103c1e9160b11b60208201526108c4906107b96107a260ff8c1688610d6f565b506108d86107fc61005460ff8b1687610d6f565b5060408051808201909152600381526211179f60e91b60208201526108fe908790610973565b505b60408051808201909152600a8152691e17b39f1e17b9bb339f60b11b602082015261092c908790610973565b505093519b9a5050505050505050505050565b60408051602081019091526060815261096a61096461095e8787610973565b85610973565b83610973565b95945050505050565b604080516020810190915260608152815115610a3f57601f1983518051808551016605c284b9def7798484015181810615828204029050808310610a12578560208483170182011681604001860160405114610a0057602060405101816040018101604052808b528760208701165b87810151828201528801806109e25750908302818801529450610a12565b80604001860160405280830287870152505b505085519183019160200184165b8681015183820152840180610a20575060008382016020015290915250505b50815b92915050565b600060208284031215610a5a57600080fd5b5035919050565b60005b83811015610a7c578181015183820152602001610a64565b50506000910152565b6020815260008251806020840152610aa4816040850160208701610a61565b601f01601f19169190910160400192915050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610adf57600080fd5b813567ffffffffffffffff80821115610afa57610afa610ab8565b604051601f8301601f19908116603f01168101908282118183101715610b2257610b22610ab8565b81604052838152866020858801011115610b3b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff81168114610b6c57600080fd5b919050565b60008060008060008060c08789031215610b8a57600080fd5b86359550602087013567ffffffffffffffff80821115610ba957600080fd5b610bb58a838b01610ace565b96506040890135915080821115610bcb57600080fd5b610bd78a838b01610ace565b95506060890135915080821115610bed57600080fd5b50610bfa89828a01610ace565b935050608087013561ffff81168114610c1257600080fd5b9150610c2060a08801610b5b565b90509295509295509295565b634e487b7160e01b600052601260045260246000fd5b600082610c5157610c51610c2c565b500690565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a4257610a42610c56565b634e487b7160e01b600052603260045260246000fd5b600082610ca457610ca4610c2c565b500490565b81810381811115610a4257610a42610c56565b600060ff821660ff8103610cd257610cd2610c56565b60010192915050565b600360fc1b815260008251610cf7816001850160208701610a61565b9190910160010192915050565b60008351610d16818460208801610a61565b6001600160a81b03199390931691909201908152600b0192915050565b60ff8281168282160390811115610a4257610a42610c56565b60ff8181168382160290811690818114610d6857610d68610c56565b5092915050565b8082028115828204841417610a4257610a42610c56565b600060018201610d9857610d98610c56565b5060010190565b60008451610db1818460208901610a61565b6001600160a81b0319949094169190930190815272ffffffffffffffffffffffffffffffffffffff1991909116600b82015260180192915050565b61ffff828116828216039080821115610d6857610d68610c5656fe2220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076657273696f6e3d22312e31223e3c7265637420783d22302220793d2230222077696474683d223b222f3e203c67207472616e73666f726d3d227472616e736c6174652831322c2031302922207374796c653d2266696c6c3a23303b223ea2646970667358221220cd943455c4012394483f0cd29b818aa1538c03ce6e4e79bdce50bdb1bfa7834364736f6c63430008130033
Deployed Bytecode Sourcemap
457:10384:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9764:1074;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5314:2094;;;;;;:::i;:::-;;:::i;545:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3270:47:1;;;3252:66;;3240:2;3225:18;545:41:0;3106:218:1;9764:1074:0;9818:13;10078:11;10104:5;10113:1;10104:10;10100:53;;-1:-1:-1;;10131:10:0;;;;;;;;;;;;-1:-1:-1;;;10131:10:0;;;;;9764:1074;-1:-1:-1;9764:1074:0:o;10100:53::-;10370:13;;;10380:2;10370:13;;;;;;;;;10180:2;;10163:14;;10370:13;;;;;;;;;;;-1:-1:-1;10370:13:0;10348:35;;10394:176;10401:10;;10394:176;;10471:10;10479:2;10471:5;:10;:::i;:::-;10458:24;;:2;:24;:::i;:::-;10445:39;;10428:6;10435;10428:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;10428:56:0;;;;;;;;-1:-1:-1;10499:11:0;10508:2;10499:11;;:::i;:::-;;-1:-1:-1;10525:11:0;10535:1;10525:11;;:::i;:::-;;-1:-1:-1;10551:7:0;;;;:::i;:::-;;;;10394:176;;;10653:2;10641:15;;;10635:22;;10687:13;;;;10701:1;10683:20;10679:31;;;;10724:29;;10767:21;;;-1:-1:-1;10645:6:0;9764:1074;-1:-1:-1;;9764:1074:0:o;5314:2094::-;5510:13;5536:19;5564:13;5573:3;5564:8;:13::i;:::-;-1:-1:-1;;;5589:16:0;5638:13;;;;;;;;;;5621:31;5536:42;;-1:-1:-1;5589:16:0;;5621:31;;5638:13;;;5621:31;-1:-1:-1;;;;;;4551:47:1;;;;4539:60;;4624:2;4615:12;;4410:223;5621:31:0;;;;;;;;;;;;;5589:63;;5698:1;5682:6;:13;:17;;;;:::i;:::-;5703:1;5682:22;5678:159;;5770:6;5730:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;5721:56;;5678:159;6233:21;;;;;;;;;;;;-1:-1:-1;;;6233:21:0;;;;5847:11;;;;6011:3;;6100:1;;5847:11;;6320:544;6333:6;:13;6327:3;:19;6320:544;;;6370:6;6377:3;6370:11;;;;;;;;:::i;:::-;;;;;;;;;6363:1;6365;6363:4;;;;;;;;:::i;:::-;;;;:18;-1:-1:-1;;;;;6363:18:0;;;;;;;;-1:-1:-1;6403:6:0;6410:5;:3;6414:1;6410:5;:::i;:::-;6403:13;;;;;;;;:::i;:::-;;;;;;;;;6396:1;6398;6396:4;;;;;;;;:::i;:::-;;;;:20;-1:-1:-1;;;;;6396:20:0;;;;;;;;-1:-1:-1;6477:2:0;6470:10;;;6464:17;6592:6;:9;;;;;;;;;;;;6552:50;;6464:17;;-1:-1:-1;6552:50:0;;6587:3;;6592:9;;;;;;6552:50;;:::i;:::-;;;;;;;;;;;;;6546:56;;6643:2;6628:6;6635:3;6628:11;;;;;;;;:::i;:::-;;;;;6622:23;;;6628:11;;6622:23;:::i;:::-;6621:30;;6649:2;6621:30;:::i;:::-;6617:34;;;-1:-1:-1;6716:2:0;6699:6;6706:5;:3;6710:1;6706:5;:::i;:::-;6699:13;;;;;;;;:::i;:::-;;;;;6693:25;;;6699:13;;6693:25;:::i;:::-;6688:30;;;;;;:::i;:::-;;-1:-1:-1;6774:3:0;6776:1;6688:30;6774:3;:::i;:::-;6767:11;;:3;:11;:::i;:::-;6761:17;-1:-1:-1;6828:6:0;6833:1;6828:6;;:::i;:::-;;-1:-1:-1;6849:3:0;;;;:::i;:::-;;;;6320:544;;;6880:9;6886:3;6880;:9;:::i;:::-;6874:15;;6922:13;6931:3;6922:8;:13::i;:::-;6912:24;;6957:2;6951:3;:8;6947:90;;;7002:1;6980:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;6976:28;;6947:90;7089:2;7082:10;;;7076:17;7196:6;:9;;;;;;;;;;;;7160:56;;7076:17;;-1:-1:-1;7160:56:0;;7191:3;;7196:9;;;;;;-1:-1:-1;;;7207:8:0;7160:56;;:::i;:::-;;;;;;;;;;;;;7154:62;;7241:148;7263:3;7287:2;7311;7335:6;7357:7;7379:9;7241:7;:148::i;:::-;7227:173;5314:2094;-1:-1:-1;;;;;;;;;;;;;;;5314:2094:0:o;7448:2308::-;7651:12;7695:2;7685:7;:12;;;7676:43;;;;-1:-1:-1;;;7676:43:0;;6939:2:1;7676:43:0;;;6921:21:1;6978:2;6958:18;;;6951:30;-1:-1:-1;;;6997:18:1;;;6990:47;7054:18;;7676:43:0;;;;;;;;-1:-1:-1;;;;;;;;;;;;7785:11:0;7811:9;7835;7859:18;7886:39;7909:9;7896:22;;:3;:10;:22;;;;:::i;:::-;7895:29;;7922:2;7895:29;:::i;7886:39::-;7859:67;;7951:19;7979:26;7996:7;7988:16;;7979:8;:26::i;:::-;7951:55;;8017:56;;;;;;;;;;;;;;;;;;8059:2;8017:56;;;;;;;;;;;;;-1:-1:-1;;;8017:56:0;;;:6;:13;;:56;;;;;;:::i;:::-;-1:-1:-1;8084:39:0;;;;;;;;;;;;-1:-1:-1;;;8084:39:0;;;;;;:6;;8098:2;;8117:5;8084:13;:39::i;:::-;;8134:57;;;;;;;;;;;;;;-1:-1:-1;;;8134:57:0;;;8164:6;8134:57;;;;;;;;;;;;;-1:-1:-1;;;8134:57:0;;;:6;:13;;:57;;;;;;:::i;:::-;-1:-1:-1;8202:32:0;;;;;;;;;;;;-1:-1:-1;;;8202:32:0;;;;;;:6;;8216:5;;8227:6;8202:13;:32::i;:::-;;8245:93;;;;;;;;;;;;;;;;;;:6;;:13;:93::i;:::-;-1:-1:-1;8349:41:0;;;;;;;;;;;;-1:-1:-1;;;8349:41:0;;;;;;:6;;8363:5;;8383:6;8349:13;:41::i;:::-;;8401:97;;;;;;;;;;;;;;-1:-1:-1;;;8401:97:0;;;8433:6;8401:97;;;;;;;;;;;;;;;;;:6;;:97;;:13;:97::i;:::-;;8509:783;8522:3;:10;8516:3;:16;8509:783;;;8553:3;8557;8553:8;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;8553:8:0;-1:-1:-1;;;8553:15:0;8549:712;;8589:3;;;;:::i;:::-;;-1:-1:-1;;8643:5:0;;8639:58;;8676:1;8673:4;;8639:58;8549:712;;;8741:3;;8737:487;;8772:174;;;;;;;;;;;;-1:-1:-1;;;8772:174:0;;;;;;8857:43;8885:13;;;;:1;:13;:::i;:::-;8866:15;;;;:3;:15;:::i;:::-;:33;;;;:::i;8857:43::-;8772:174;;;;;;;;;;;;-1:-1:-1;;;8772:174:0;;;;:6;;:174;;:13;:174::i;:::-;-1:-1:-1;8969:166:0;9015:23;9024:13;;;;:1;:13;:::i;9015:23::-;8969:166;;;;;;;;;;;;-1:-1:-1;;;8969:166:0;;;;9111:22;9120:12;9130:2;9120:7;:12;:::i;:::-;9111:22;;:8;:22::i;:::-;8969:6;;:166;;:13;:166::i;:::-;-1:-1:-1;9158:20:0;;;;;;;;;;;;-1:-1:-1;;;9158:20:0;;;;;;:6;;:13;:20::i;:::-;;9203:1;9201:3;;8737:487;9242:3;;;;:::i;:::-;;;;8549:712;9275:5;;;;:::i;:::-;;;;8509:783;;;9306:3;;9302:378;;9326:150;;;;;;;;;;;;-1:-1:-1;;;9326:150:0;;;;;;9395:43;9423:13;;;;:1;:13;:::i;9326:150::-;-1:-1:-1;9491:142:0;9529:23;9538:13;;;;:1;:13;:::i;9491:142::-;-1:-1:-1;9648:20:0;;;;;;;;;;;;-1:-1:-1;;;9648:20:0;;;;;;:6;;:13;:20::i;:::-;;9302:378;9690:27;;;;;;;;;;;;-1:-1:-1;;;9690:27:0;;;;;;:6;;:13;:27::i;:::-;-1:-1:-1;;9736:11:0;;;7448:2308;-1:-1:-1;;;;;;;;;;;7448:2308:0:o;16006:270::-;-1:-1:-1;;;;;;;;;;;;16217:51:0;16224:36;16231:21;16238:6;16246:5;16231:6;:21::i;:::-;16254:5;16224:6;:36::i;:::-;16262:5;16217:6;:51::i;:::-;16210:58;16006:270;-1:-1:-1;;;;;16006:270:0:o;11360:4133::-;-1:-1:-1;;;;;;;;;;;;11577:4:0;11571:11;11568:3883;;;11615:2;11611:7;11660:6;11654:13;11715:10;11709:17;11788:16;11781:4;11775:11;11771:34;12055:16;12127:1;12115:10;12111:18;12105:25;12298:5;12288:8;12284:20;12277:28;12269:5;12259:8;12255:20;12251:55;12239:67;;12778:8;12757:19;12754:33;12740:2007;;13123:1;13117:2;13095:19;13085:8;13082:33;13078:42;13068:8;13064:57;13060:65;13280:8;13274:4;13270:19;13258:10;13254:36;13247:4;13241:11;13238:53;13228:1190;;13443:4;13436;13430:11;13426:22;13563:11;13557:4;13553:22;13538:13;13534:42;13528:4;13521:56;13669:13;13661:6;13654:29;13828:1;13823:2;13805:16;13801:25;13797:33;13782:285;13905:18;;;13899:25;13876:21;;;13869:56;13960:9;;14018:22;13782:285;14018:22;-1:-1:-1;14223:23:0;;;14200:21;;;14193:54;14204:13;-1:-1:-1;14390:5:0;;13228:1190;14518:11;14512:4;14508:22;14496:10;14492:39;14486:4;14479:53;14688:11;14681:5;14677:23;14673:1;14661:10;14657:18;14650:51;;12740:2007;-1:-1:-1;;14991:11:0;;14858:33;;;;15004:2;14987:20;14983:28;;14968:235;15071:12;;;15065:19;15049:14;;;15042:43;15112:9;;15162:22;14968:235;15162:22;-1:-1:-1;15328:1:0;15279:47;;;15299:4;15279:47;15272:58;15397:39;;;-1:-1:-1;;11568:3883:0;-1:-1:-1;15479:6:0;11360:4133;;;;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:250::-;284:1;294:113;308:6;305:1;302:13;294:113;;;384:11;;;378:18;365:11;;;358:39;330:2;323:10;294:113;;;-1:-1:-1;;441:1:1;423:16;;416:27;199:250::o;454:396::-;603:2;592:9;585:21;566:4;635:6;629:13;678:6;673:2;662:9;658:18;651:34;694:79;766:6;761:2;750:9;746:18;741:2;733:6;729:15;694:79;:::i;:::-;834:2;813:15;-1:-1:-1;;809:29:1;794:45;;;;841:2;790:54;;454:396;-1:-1:-1;;454:396:1:o;855:127::-;916:10;911:3;907:20;904:1;897:31;947:4;944:1;937:15;971:4;968:1;961:15;987:719;1030:5;1083:3;1076:4;1068:6;1064:17;1060:27;1050:55;;1101:1;1098;1091:12;1050:55;1137:6;1124:20;1163:18;1200:2;1196;1193:10;1190:36;;;1206:18;;:::i;:::-;1281:2;1275:9;1249:2;1335:13;;-1:-1:-1;;1331:22:1;;;1355:2;1327:31;1323:40;1311:53;;;1379:18;;;1399:22;;;1376:46;1373:72;;;1425:18;;:::i;:::-;1465:10;1461:2;1454:22;1500:2;1492:6;1485:18;1546:3;1539:4;1534:2;1526:6;1522:15;1518:26;1515:35;1512:55;;;1563:1;1560;1553:12;1512:55;1627:2;1620:4;1612:6;1608:17;1601:4;1593:6;1589:17;1576:54;1674:1;1667:4;1662:2;1654:6;1650:15;1646:26;1639:37;1694:6;1685:15;;;;;;987:719;;;;:::o;1711:156::-;1777:20;;1837:4;1826:16;;1816:27;;1806:55;;1857:1;1854;1847:12;1806:55;1711:156;;;:::o;1872:1044::-;2003:6;2011;2019;2027;2035;2043;2096:3;2084:9;2075:7;2071:23;2067:33;2064:53;;;2113:1;2110;2103:12;2064:53;2149:9;2136:23;2126:33;;2210:2;2199:9;2195:18;2182:32;2233:18;2274:2;2266:6;2263:14;2260:34;;;2290:1;2287;2280:12;2260:34;2313:50;2355:7;2346:6;2335:9;2331:22;2313:50;:::i;:::-;2303:60;;2416:2;2405:9;2401:18;2388:32;2372:48;;2445:2;2435:8;2432:16;2429:36;;;2461:1;2458;2451:12;2429:36;2484:52;2528:7;2517:8;2506:9;2502:24;2484:52;:::i;:::-;2474:62;;2589:2;2578:9;2574:18;2561:32;2545:48;;2618:2;2608:8;2605:16;2602:36;;;2634:1;2631;2624:12;2602:36;;2657:52;2701:7;2690:8;2679:9;2675:24;2657:52;:::i;:::-;2647:62;;;2759:3;2748:9;2744:19;2731:33;2804:6;2797:5;2793:18;2786:5;2783:29;2773:57;;2826:1;2823;2816:12;2773:57;2849:5;-1:-1:-1;2873:37:1;2905:3;2890:19;;2873:37;:::i;:::-;2863:47;;1872:1044;;;;;;;;:::o;3329:127::-;3390:10;3385:3;3381:20;3378:1;3371:31;3421:4;3418:1;3411:15;3445:4;3442:1;3435:15;3461:112;3493:1;3519;3509:35;;3524:18;;:::i;:::-;-1:-1:-1;3558:9:1;;3461:112::o;3578:127::-;3639:10;3634:3;3630:20;3627:1;3620:31;3670:4;3667:1;3660:15;3694:4;3691:1;3684:15;3710:125;3775:9;;;3796:10;;;3793:36;;;3809:18;;:::i;3840:127::-;3901:10;3896:3;3892:20;3889:1;3882:31;3932:4;3929:1;3922:15;3956:4;3953:1;3946:15;3972:120;4012:1;4038;4028:35;;4043:18;;:::i;:::-;-1:-1:-1;4077:9:1;;3972:120::o;4097:128::-;4164:9;;;4185:11;;;4182:37;;;4199:18;;:::i;4230:175::-;4267:3;4311:4;4304:5;4300:16;4340:4;4331:7;4328:17;4325:43;;4348:18;;:::i;:::-;4397:1;4384:15;;4230:175;-1:-1:-1;;4230:175:1:o;4638:429::-;-1:-1:-1;;;4893:3:1;4886:16;4868:3;4931:6;4925:13;4947:74;5014:6;5010:1;5005:3;5001:11;4994:4;4986:6;4982:17;4947:74;:::i;:::-;5041:16;;;;5059:1;5037:24;;4638:429;-1:-1:-1;;4638:429:1:o;5072:422::-;5229:3;5267:6;5261:13;5283:66;5342:6;5337:3;5330:4;5322:6;5318:17;5283:66;:::i;:::-;-1:-1:-1;;;;;;5410:47:1;;;;5371:16;;;;5396:62;;;5485:2;5474:14;;5072:422;-1:-1:-1;;5072:422:1:o;5499:151::-;5589:4;5582:12;;;5568;;;5564:31;;5607:14;;5604:40;;;5624:18;;:::i;5655:225::-;5759:4;5738:12;;;5752;;;5734:31;5785:22;;;;5826:24;;;5816:58;;5854:18;;:::i;:::-;5816:58;5655:225;;;;:::o;5885:168::-;5958:9;;;5989;;6006:15;;;6000:22;;5986:37;5976:71;;6027:18;;:::i;6058:135::-;6097:3;6118:17;;;6115:43;;6138:18;;:::i;:::-;-1:-1:-1;6185:1:1;6174:13;;6058:135::o;6198:534::-;6383:3;6421:6;6415:13;6437:66;6496:6;6491:3;6484:4;6476:6;6472:17;6437:66;:::i;:::-;-1:-1:-1;;;;;;6564:47:1;;;;6525:16;;;;6550:62;;;-1:-1:-1;;6644:51:1;;;;6639:2;6628:14;;6621:75;6723:2;6712:14;;6198:534;-1:-1:-1;;6198:534:1:o;7083:171::-;7151:6;7190:10;;;7178;;;7174:27;;7213:12;;;7210:38;;;7228:18;;:::i
Swarm Source
ipfs://cd943455c4012394483f0cd29b818aa1538c03ce6e4e79bdce50bdb1bfa78343
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.