POL Price: $0.181917 (+1.48%)
Gas: 30 GWei
 

Overview

POL Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 POL

POL Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set LUT3_4268525902022-04-07 12:59:301106 days ago1649336370IN
0x134Cc78D...f65794088
0 POL0.0712842839.71645723
Set LUT3_3268525862022-04-07 12:59:221106 days ago1649336362IN
0x134Cc78D...f65794088
0 POL0.0888434539.71645723
Set LUT3_2268525822022-04-07 12:59:141106 days ago1649336354IN
0x134Cc78D...f65794088
0 POL0.0888447239.71645723
Set LUT3_1268525772022-04-07 12:59:041106 days ago1649336344IN
0x134Cc78D...f65794088
0 POL0.0976229339.71645723
Set LUT2268525732022-04-07 12:58:561106 days ago1649336336IN
0x134Cc78D...f65794088
0 POL0.0888434539.71645723
Set LUT1268525682022-04-07 12:58:461106 days ago1649336326IN
0x134Cc78D...f65794088
0 POL0.0887299439.71645723

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeciMath

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : DeciMath.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.5.16;

contract DeciMath {
    // Abbreviation: DP stands for 'Decimal Places'

    uint constant TEN38 = 10**38;
    uint constant TEN30 = 10**30;
    uint constant TEN20 = 10**20;
    uint constant TEN19 = 10**19;
    uint constant TEN18 = 10**18;
    uint constant TEN17 = 10**17;
    uint constant TEN12 = 10**12;
    uint constant TEN11 = 10**11;
    uint constant TEN10 = 10**10;
    uint constant TEN9 = 10**9;
    uint constant TEN8 = 10**8;
    uint constant TEN7 = 10**7;

    // ln(2) - used in ln(x). 30 DP.
    uint constant LN2 = 693147180559945309417232121458;

    // 1 / ln(2) - used in exp(x). 30 DP.
    uint constant ONE_OVER_LN2 = 1442695040888963407359924681002;

    /***** LOOKUP TABLES *****/

    // Lookup table arrays (LUTs) for log_2(x)
    uint[100] public table_log_2;
    uint[100] public table2_log_2;

    // Lookup table for pow2(). Table contains 39 arrays, each array contains 10 uint slots.
    uint[10][39] public table_pow2;

    // LUT flags
    bool LUT1_isSet = false;
    bool LUT2_isSet = false;
    bool LUT3_1_isSet = false;
    bool LUT3_2_isSet = false;
    bool LUT3_3_isSet = false;
    bool LUT3_4_isSet = false;

    /******  BASIC MATH OPERATORS ******/

    // Integer math operators. Identical to Zeppelin's SafeMath
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "uint overflow from multiplication");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "division by zero");
        uint256 c = a / b;
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "uint underflow from subtraction");
        uint256 c = a - b;
        return c;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "uint overflow from multiplication");
        return c;
    }

    // Basic decimal math operators. Inputs and outputs are uint representations of fixed-point decimals.

    // 18 Decimal places
    function decMul18(uint x, uint y) public pure returns (uint decProd) {
        uint prod_xy = mul(x, y);
        decProd = add(prod_xy, TEN18 / 2) / TEN18;
    }

    function decDiv18(uint x, uint y) public pure returns (uint decQuotient) {
        uint prod_xTEN18 = mul(x, TEN18);
        decQuotient = add(prod_xTEN18, y / 2) / y;
    }

    // 30 Decimal places
    function decMul30(uint x, uint y) public pure returns (uint decProd) {
        uint prod_xy = mul(x, y);
        decProd = add(prod_xy, TEN30 / 2) / TEN30;
    }

    // 38 Decimal places
    function decMul38(uint x, uint y) public pure returns (uint decProd) {
        uint prod_xy = mul(x, y);
        decProd = add(prod_xy, TEN38 / 2) / TEN38;
    }

    /****** HELPER FUNCTIONS ******/

    function convert38To18DP(uint x) public pure returns (uint y) {
        uint digit = (x % TEN20) / TEN19; // grab 20th digit from-right
        return chopAndRound(x, digit, 20);
    }

    function convert38To30DP(uint x) public pure returns (uint y) {
        uint digit = (x % TEN8) / TEN7; // grab 8th digit from-right
        return chopAndRound(x, digit, 8);
    }

    function convert30To20DP(uint x) public pure returns (uint y) {
        uint digit = (x % TEN10) / TEN9; // grab 10th digit from-right
        return chopAndRound(x, digit, 10);
    }

    function convert30To18DP(uint x) public pure returns (uint y) {
        uint digit = (x % TEN12) / TEN11; // grab 12th digit from-right
        return chopAndRound(x, digit, 12);
    }

    // Chop the last digits, and round the resulting number
    function chopAndRound(
        uint num,
        uint digit,
        uint positionOfChop
    ) public pure returns (uint chopped) {
        if (digit < 5) {
            chopped = div(num, 10**positionOfChop); // round down
        } else if (digit >= 5) {
            chopped = div(num, 10**positionOfChop) + 1; // round up
        }
        return chopped;
    }

    // return the floor of a fixed-point 20DP number
    function floor(uint x) public pure returns (uint num) {
        num = x - (x % TEN20);
        return num;
    }

    function countDigits(uint num) public view returns (uint) {
        uint digits = 0;

        while (num != 0) {
            num /= 10; // When num < 10, yields 0 due to EVM floor division
            digits++;
        }
        return digits;
    }

    /****** MATH FUNCTIONS ******/

    // b^x for integer exponent. Use highly performant 'exponentiation-by-squaring' algorithm. O(log(n)) operations.

    // b^x - integer base, integer exponent
    function powBySquare(uint x, uint n) public pure returns (uint) {
        if (n == 0) return 1;

        uint y = 1;

        while (n > 1)
            if (n % 2 == 0) {
                x = mul(x, x);
                n = n / 2;
            } else if (n % 2 != 0) {
                y = mul(x, y);
                x = mul(x, x);
                n = (n - 1) / 2;
            }
        return mul(x, y);
    }

    // b^x - fixed-point 18 DP base, integer exponent
    function powBySquare18(uint base, uint n) public pure returns (uint) {
        if (n == 0) return TEN18;

        uint y = TEN18;

        while (n > 1) {
            if (n % 2 == 0) {
                base = decMul18(base, base);
                n = n / 2;
            } else if (n % 2 != 0) {
                y = decMul18(base, y);
                base = decMul18(base, base);
                n = (n - 1) / 2;
            }
        }
        return decMul18(base, y);
    }

    // b^x - fixed-point 38 DP base, integer exponent n
    function powBySquare38(uint base, uint n) public pure returns (uint) {
        if (n == 0) return TEN38;

        uint y = TEN38;

        while (n > 1) {
            if (n % 2 == 0) {
                base = decMul38(base, base);
                n = n / 2;
            } else if (n % 2 != 0) {
                y = decMul38(base, y);
                base = decMul38(base, base);
                n = (n - 1) / 2;
            }
        }
        return decMul38(base, y);
    }

    /* exp(x) function. Input 18 DP, output 18 DP.  Uses identities:

    A) e^x = 2^(x / ln(2))

    and

    B) 2^y = (2^r) * 2^(y - r); where r = floor(y) - 1, and (y - r) is in range [1,2[

    */
    function exp(uint x) public view returns (uint num) {
        uint intExponent; // 20 DP
        uint decExponent; // 20 DP
        uint coefficient; // 38 DP

        x = mul(x, TEN12); // make x 30DP
        x = decMul30(ONE_OVER_LN2, x);
        x = convert30To20DP(x);

        // if x < 1, do: (2^-1) * 2^(1 + x)
        if (x < TEN20 && x >= 0) {
            decExponent = add(TEN20, x);
            coefficient = TEN38 / 2;
            num = decMul38(coefficient, pow2(decExponent));
        }
        // Use identity B)
        else {
            intExponent = floor(x) - TEN20;
            decExponent = x - intExponent; // decimal exponent in range [1,2[
            coefficient = powBySquare(2, div(intExponent, TEN20));
            num = mul(coefficient, pow2(decExponent)); //  use normal mul to avoid overflow, as coeff. is an int
        }

        return convert38To18DP(num);
    }

    // Base-2 logarithm function, for x in range [1,2[. For use in ln(x). Input 18 DP, output 30 DP.
    function log_2(uint x, uint accuracy) public view _onlyLUT1andLUT2AreSet returns (uint) {
        require(x >= TEN18 && x < 2 * TEN18, "input x must be within range [1,2[");
        uint prod = mul(x, TEN20); // make x 38 DP
        uint newProd = TEN38;
        uint output = 0;

        for (uint i = 1; i <= accuracy; i++) {
            newProd = decMul38(table_log_2[i], prod);

            if (newProd >= TEN38) {
                prod = newProd;
                output += table2_log_2[i];
            }
        }
        return convert38To30DP(output);
    }

    // pow2(x) function, for use in exp(x). Uses 2D-array LUT. Valid for x in range [1,2[. Input 20DP, output 38DP
    function pow2(uint x) public view _onlyLUT3isSet returns (uint) {
        require(x >= TEN20 && x < 2 * TEN20, "input x must be within range [1,2[");
        uint x_38dp = x * TEN18;
        uint prod = 2 * TEN38;
        uint fractPart = x_38dp % TEN38;
        uint digitsLength = countDigits(fractPart);

        // loop backwards through mantissa digits - multiply each by the Lookup-table value
        for (uint i = 0; i < digitsLength; i++) {
            uint digit = (fractPart % (10**(i + 1))) / (10**i); // grab the i'th digit from right

            if (digit == 0) continue; // Save gas - skip the step if digit = 0 and there would be no resultant change to prod

            // computer i'th term, and new product
            uint term = table_pow2[37 - i][digit];
            prod = decMul38(prod, term);
        }
        return prod;
    }

    /* Natural log function ln(x). Input 18 DP, output 18 DP. Uses identities:

    A) ln(x) = log_2(x) * ln(2)

    and

    B) log_2(x) = log_2(2^q * y)           y in range [1,2[
                = q + log_2(y)

    The algorithm finds q and y by repeated division by powers-of-two.
    */
    function ln(uint x, uint accuracy) public view returns (uint) {
        require(x >= TEN18, "input must be >= 1");
        uint count = 0; // track
        uint TWO = mul(TEN18, 2);

        /* Calculate q. Use branches to divide by powers-of-two, until output is in range [1,2[. Branch approach is more performant
        than simple successive division by 2. As max input of ln(x) is ~= 2^132, starting division at 2^30 yields sufficiently few operations for large x. */
        while (x >= 2 * TEN18) {
            if (x >= 1073741824 * TEN18) {
                // start at 2^30
                x = decDiv18(x, 1073741824 * TEN18);
                count += 30;
            } else if (x >= 1048576 * TEN18) {
                x = decDiv18(x, 1048576 * TEN18);
                count += 20;
            } else if (x >= 32768 * TEN18) {
                x = decDiv18(x, 32768 * TEN18);
                count += 15;
            } else if (x >= 1024 * TEN18) {
                x = decDiv18(x, 1024 * TEN18);
                count += 10;
            } else if (x >= 512 * TEN18) {
                x = decDiv18(x, 512 * TEN18);
                count += 9;
            } else if (x >= 256 * TEN18) {
                x = decDiv18(x, 256 * TEN18);
                count += 8;
            } else if (x >= 128 * TEN18) {
                x = decDiv18(x, 128 * TEN18);
                count += 7;
            } else if (x >= 64 * TEN18) {
                x = decDiv18(x, 64 * TEN18);
                count += 6;
            } else if (x >= 32 * TEN18) {
                x = decDiv18(x, 32 * TEN18);
                count += 5;
            } else if (x >= 16 * TEN18) {
                x = decDiv18(x, 16 * TEN18);
                count += 4;
            } else if (x >= 8 * TEN18) {
                x = decDiv18(x, 8 * TEN18);
                count += 3;
            } else if (x >= 4 * TEN18) {
                x = decDiv18(x, 4 * TEN18);
                count += 2;
            } else if (x >= 2 * TEN18) {
                x = decDiv18(x, 2 * TEN18);
                count += 1;
            }
        }

        uint q = count * TEN30;
        uint output = decMul30(LN2, add(q, log_2(x, accuracy)));

        return convert30To18DP(output);
    }

    /* pow(b, x) function for 18 DP base and exponent. Output 18 DP.

    Uses identity:  b^x = exp (x * ln(b)).

    For b < 1, rewrite b^x as:
    b^x = exp( x * (-ln(1/b)) ) = 1/exp(x * ln(1/b)).

     Thus, we avoid passing argument y < 1 to ln(y), and z < 0 to exp(z).   */
    function pow(uint base, uint x) public view returns (uint power) {
        if (base >= TEN18) {
            return exp(decMul18(x, ln(base, 70)));
        }

        if (base < TEN18) {
            uint exponent = decMul18(x, ln(decDiv18(TEN18, base), 70));
            return decDiv18(TEN18, exp(exponent));
        }
    }

    // Taylor series implementation of exp(x) - lower accuracy and higher gas cost than exp(x). 18 DP input and output.
    function exp_taylor(uint x) public pure returns (uint) {
        uint tolerance = 1;
        uint term = TEN18;
        uint sum = TEN18;
        uint i = 0;

        while (term > tolerance) {
            i += TEN18;
            term = decDiv18(decMul18(term, x), i);
            sum += term;
        }
        return sum;
    }

    /* Lookup Tables (LUTs). 38 DP fixed-point numbers. */

    // LUT1 for log_2(x). The i'th term is 1/(2^(1/2^i))
    function setLUT1() public {
        table_log_2[0] = 0;
        table_log_2[1] = 70710678118654752440084436210484903928;
        table_log_2[2] = 84089641525371454303112547623321489504;
        table_log_2[3] = 91700404320467123174354159479414442804;
        table_log_2[4] = 95760328069857364693630563514791544393;
        table_log_2[5] = 97857206208770013450916112581343574560;
        table_log_2[6] = 98922801319397548412912495906558366777;
        table_log_2[7] = 99459942348363317565247768622216631446;
        table_log_2[8] = 99729605608547012625765991384792260112;
        table_log_2[9] = 99864711289097017358812131808592040806;
        table_log_2[10] = 99932332750265075236028365984373804116;
        table_log_2[11] = 99966160649624368394219686876281565561;
        table_log_2[12] = 99983078893192906311748078019767389868;
        table_log_2[13] = 99991539088661349753372497156418872723;
        table_log_2[14] = 99995769454843113254396753730099797524;
        table_log_2[15] = 99997884705049192982650067113039327478;
        table_log_2[16] = 99998942346931446424221059225315431670;
        table_log_2[17] = 99999471172067428300770241277030532519;
        table_log_2[18] = 99999735585684139498225234636504270993;
        table_log_2[19] = 99999867792754675970531776759801063698;
        table_log_2[20] = 99999933896355489526178052900624509795;
        table_log_2[21] = 99999966948172282646511738368820575117;
        table_log_2[22] = 99999983474084775793885880947314828005;
        table_log_2[23] = 99999991737042046514572235133214264694;
        table_log_2[24] = 99999995868520937911689915196095249000;
        table_log_2[25] = 99999997934260447619445466250978583193;
        table_log_2[26] = 99999998967130218475622805194415901619;
        table_log_2[27] = 99999999483565107904286413727651274869;
        table_log_2[28] = 99999999741782553618761958785587923503;
        table_log_2[29] = 99999999870891276726035667265628464908;
        table_log_2[30] = 99999999935445638342181505587572099682;
        table_log_2[31] = 99999999967722819165881670780794171827;
        table_log_2[32] = 99999999983861409581638564886938948308;
        table_log_2[33] = 99999999991930704790493714817578668739;
        table_log_2[34] = 99999999995965352395165465502313349139;
        table_log_2[35] = 99999999997982676197562384774537267778;
        table_log_2[36] = 99999999998991338098776105393113730880;
        table_log_2[37] = 99999999999495669049386780948018133274;
        table_log_2[38] = 99999999999747834524693072536874382794;
        table_log_2[39] = 99999999999873917262346456784153520336;
        table_log_2[40] = 99999999999936958631173208521005842390;
        table_log_2[41] = 99999999999968479315586599292735191749;
        table_log_2[42] = 99999999999984239657793298404425663513;
        table_log_2[43] = 99999999999992119828896648891727348666;
        table_log_2[44] = 99999999999996059914448324368242303560;
        table_log_2[45] = 99999999999998029957224162164715809087;
        table_log_2[46] = 99999999999999014978612081077506568870;
        table_log_2[47] = 99999999999999507489306040537540450517;
        table_log_2[48] = 99999999999999753744653020268467016779;
        table_log_2[49] = 99999999999999876872326510134157706270;
        table_log_2[50] = 99999999999999938436163255067059902605;
        table_log_2[51] = 99999999999999969218081627533525213670;
        table_log_2[52] = 99999999999999984609040813766761422427;
        table_log_2[53] = 99999999999999992304520406883380415111;
        table_log_2[54] = 99999999999999996152260203441690133530;
        table_log_2[55] = 99999999999999998076130101720845048259;
        table_log_2[56] = 99999999999999999038065050860422519503;
        table_log_2[57] = 99999999999999999519032525430211258595;
        table_log_2[58] = 99999999999999999759516262715105629008;
        table_log_2[59] = 99999999999999999879758131357552814432;
        table_log_2[60] = 99999999999999999939879065678776407198;
        table_log_2[61] = 99999999999999999969939532839388203594;
        table_log_2[62] = 99999999999999999984969766419694101796;
        table_log_2[63] = 99999999999999999992484883209847050898;
        table_log_2[64] = 99999999999999999996242441604923525449;
        table_log_2[65] = 99999999999999999998121220802461762724;
        table_log_2[66] = 99999999999999999999060610401230881362;
        table_log_2[67] = 99999999999999999999530305200615440681;
        table_log_2[68] = 99999999999999999999765152600307720341;
        table_log_2[69] = 99999999999999999999882576300153860170;
        table_log_2[70] = 99999999999999999999941288150076930085;
        table_log_2[71] = 99999999999999999999970644075038465043;
        table_log_2[72] = 99999999999999999999985322037519232521;
        table_log_2[73] = 99999999999999999999992661018759616261;
        table_log_2[74] = 99999999999999999999996330509379808130;
        table_log_2[75] = 99999999999999999999998165254689904065;
        table_log_2[76] = 99999999999999999999999082627344952033;
        table_log_2[77] = 99999999999999999999999541313672476016;
        table_log_2[78] = 99999999999999999999999770656836238008;
        table_log_2[79] = 99999999999999999999999885328418119004;
        table_log_2[80] = 99999999999999999999999942664209059502;
        table_log_2[81] = 99999999999999999999999971332104529751;
        table_log_2[82] = 99999999999999999999999985666052264876;
        table_log_2[83] = 99999999999999999999999992833026132438;
        table_log_2[84] = 99999999999999999999999996416513066219;
        table_log_2[85] = 99999999999999999999999998208256533109;
        table_log_2[86] = 99999999999999999999999999104128266555;
        table_log_2[87] = 99999999999999999999999999552064133277;
        table_log_2[88] = 99999999999999999999999999776032066639;
        table_log_2[89] = 99999999999999999999999999888016033319;
        table_log_2[90] = 99999999999999999999999999944008016660;
        table_log_2[91] = 99999999999999999999999999972004008330;
        table_log_2[92] = 99999999999999999999999999986002004165;
        table_log_2[93] = 99999999999999999999999999993001002082;
        table_log_2[94] = 99999999999999999999999999996500501041;
        table_log_2[95] = 99999999999999999999999999998250250521;
        table_log_2[96] = 99999999999999999999999999999125125260;
        table_log_2[97] = 99999999999999999999999999999562562630;
        table_log_2[98] = 99999999999999999999999999999781281315;
        table_log_2[99] = 99999999999999999999999999999890640658;

        LUT1_isSet = true;
    }

    // LUT2 for log_2(x). The i'th term is 1/(2^i)
    function setLUT2() public {
        table2_log_2[0] = 200000000000000000000000000000000000000;
        table2_log_2[1] = 50000000000000000000000000000000000000;
        table2_log_2[2] = 25000000000000000000000000000000000000;
        table2_log_2[3] = 12500000000000000000000000000000000000;
        table2_log_2[4] = 6250000000000000000000000000000000000;
        table2_log_2[5] = 3125000000000000000000000000000000000;
        table2_log_2[6] = 1562500000000000000000000000000000000;
        table2_log_2[7] = 781250000000000000000000000000000000;
        table2_log_2[8] = 390625000000000000000000000000000000;
        table2_log_2[9] = 195312500000000000000000000000000000;
        table2_log_2[10] = 97656250000000000000000000000000000;
        table2_log_2[11] = 48828125000000000000000000000000000;
        table2_log_2[12] = 24414062500000000000000000000000000;
        table2_log_2[13] = 12207031250000000000000000000000000;
        table2_log_2[14] = 6103515625000000000000000000000000;
        table2_log_2[15] = 3051757812500000000000000000000000;
        table2_log_2[16] = 1525878906250000000000000000000000;
        table2_log_2[17] = 762939453125000000000000000000000;
        table2_log_2[18] = 381469726562500000000000000000000;
        table2_log_2[19] = 190734863281250000000000000000000;
        table2_log_2[20] = 95367431640625000000000000000000;
        table2_log_2[21] = 47683715820312500000000000000000;
        table2_log_2[22] = 23841857910156250000000000000000;
        table2_log_2[23] = 11920928955078125000000000000000;
        table2_log_2[24] = 5960464477539062500000000000000;
        table2_log_2[25] = 2980232238769531250000000000000;
        table2_log_2[26] = 1490116119384765625000000000000;
        table2_log_2[27] = 745058059692382812500000000000;
        table2_log_2[28] = 372529029846191406250000000000;
        table2_log_2[29] = 186264514923095703125000000000;
        table2_log_2[30] = 93132257461547851562500000000;
        table2_log_2[31] = 46566128730773925781250000000;
        table2_log_2[32] = 23283064365386962890625000000;
        table2_log_2[33] = 11641532182693481445312500000;
        table2_log_2[34] = 5820766091346740722656250000;
        table2_log_2[35] = 2910383045673370361328125000;
        table2_log_2[36] = 1455191522836685180664062500;
        table2_log_2[37] = 727595761418342590332031250;
        table2_log_2[38] = 363797880709171295166015625;
        table2_log_2[39] = 181898940354585647583007812;
        table2_log_2[40] = 90949470177292823791503906;
        table2_log_2[41] = 45474735088646411895751953;
        table2_log_2[42] = 22737367544323205947875976;
        table2_log_2[43] = 11368683772161602973937988;
        table2_log_2[44] = 5684341886080801486968994;
        table2_log_2[45] = 2842170943040400743484497;
        table2_log_2[46] = 1421085471520200371742248;
        table2_log_2[47] = 710542735760100185871124;
        table2_log_2[48] = 355271367880050092935562;
        table2_log_2[49] = 177635683940025046467781;
        table2_log_2[50] = 88817841970012523233890;
        table2_log_2[51] = 44408920985006261616945;
        table2_log_2[52] = 22204460492503130808472;
        table2_log_2[53] = 11102230246251565404236;
        table2_log_2[54] = 5551115123125782702118;
        table2_log_2[55] = 2775557561562891351059;
        table2_log_2[56] = 1387778780781445675529;
        table2_log_2[57] = 693889390390722837764;
        table2_log_2[58] = 346944695195361418882;
        table2_log_2[59] = 173472347597680709441;
        table2_log_2[60] = 86736173798840354720;
        table2_log_2[61] = 43368086899420177360;
        table2_log_2[62] = 21684043449710088680;
        table2_log_2[63] = 10842021724855044340;
        table2_log_2[64] = 5421010862427522170;
        table2_log_2[65] = 2710505431213761085;
        table2_log_2[66] = 1355252715606880542;
        table2_log_2[67] = 677626357803440271;
        table2_log_2[68] = 338813178901720135;
        table2_log_2[69] = 169406589450860067;
        table2_log_2[70] = 84703294725430033;
        table2_log_2[71] = 42351647362715016;
        table2_log_2[72] = 21175823681357508;
        table2_log_2[73] = 10587911840678754;
        table2_log_2[74] = 5293955920339377;
        table2_log_2[75] = 2646977960169688;
        table2_log_2[76] = 1323488980084844;
        table2_log_2[77] = 661744490042422;
        table2_log_2[78] = 330872245021211;
        table2_log_2[79] = 165436122510605;
        table2_log_2[80] = 82718061255302;
        table2_log_2[81] = 41359030627651;
        table2_log_2[82] = 20679515313825;
        table2_log_2[83] = 10339757656912;
        table2_log_2[84] = 5169878828456;
        table2_log_2[85] = 2584939414228;
        table2_log_2[86] = 1292469707114;
        table2_log_2[87] = 646234853557;
        table2_log_2[88] = 323117426778;
        table2_log_2[89] = 161558713389;
        table2_log_2[90] = 80779356694;
        table2_log_2[91] = 40389678347;
        table2_log_2[92] = 20194839173;
        table2_log_2[93] = 10097419586;
        table2_log_2[94] = 5048709793;
        table2_log_2[95] = 2524354896;
        table2_log_2[96] = 1262177448;
        table2_log_2[97] = 631088724;
        table2_log_2[98] = 315544362;
        table2_log_2[99] = 157772181;

        LUT2_isSet = true;
    }

    /* LUT for pow2() function. Table contains 39 arrays, each array contains 10 uint slots.

    table_pow2[i][d] = (2^(1 / 10^(i + 1))) ** d.
    d ranges from 0 to 9.

    LUT-setting is split into four separate setter functions to keep gas costs under block limit.
    */
    function setLUT3_1() public {
        table_pow2[0][0] = 100000000000000000000000000000000000000;
        table_pow2[0][1] = 107177346253629316421300632502334202291;
        table_pow2[0][2] = 114869835499703500679862694677792758944;
        table_pow2[0][3] = 123114441334491628449939306916774310988;
        table_pow2[0][4] = 131950791077289425937400197122964013303;
        table_pow2[0][5] = 141421356237309504880168872420969807857;
        table_pow2[0][6] = 151571656651039808234725980130644523868;
        table_pow2[0][7] = 162450479271247104521941876555056330257;
        table_pow2[0][8] = 174110112659224827827254003495949219796;
        table_pow2[0][9] = 186606598307361483196268653229988433405;
        table_pow2[1][0] = 100000000000000000000000000000000000000;
        table_pow2[1][1] = 100695555005671880883269821411323978545;
        table_pow2[1][2] = 101395947979002913869016599962823042584;
        table_pow2[1][3] = 102101212570719324976409517478306437354;
        table_pow2[1][4] = 102811382665606650934634495879263497655;
        table_pow2[1][5] = 103526492384137750434778819421124619773;
        table_pow2[1][6] = 104246576084112139095471141872690784007;
        table_pow2[1][7] = 104971668362306726904934732174028851665;
        table_pow2[1][8] = 105701804056138037449949421408611430989;
        table_pow2[1][9] = 106437018245335988793865835140404338206;
        table_pow2[2][0] = 100000000000000000000000000000000000000;
        table_pow2[2][1] = 100069338746258063253756863930385919571;
        table_pow2[2][2] = 100138725571133452908322477441877746756;
        table_pow2[2][3] = 100208160507963279436035132489114568295;
        table_pow2[2][4] = 100277643590107768843673305907248072983;
        table_pow2[2][5] = 100347174850950278700477431086959080340;
        table_pow2[2][6] = 100416754323897314177285298995922943429;
        table_pow2[2][7] = 100486382042378544096788794597976421668;
        table_pow2[2][8] = 100556058039846816994919680064517944020;
        table_pow2[2][9] = 100625782349778177193372141519657470417;
        table_pow2[3][0] = 100000000000000000000000000000000000000;
        table_pow2[3][1] = 100006931712037656919243991260264256542;
        table_pow2[3][2] = 100013863904561631568466376833067115945;
        table_pow2[3][3] = 100020796577605229875592540103010552992;
        table_pow2[3][4] = 100027729731201760077218879711834041246;
        table_pow2[3][5] = 100034663365384532718772839985089028270;
        table_pow2[3][6] = 100041597480186860654672952451661760537;
        table_pow2[3][7] = 100048532075642059048488888456913382370;
        table_pow2[3][8] = 100055467151783445373101522870206286485;
        table_pow2[3][9] = 100062402708644339410863008887585747065;
        table_pow2[4][0] = 100000000000000000000000000000000000000;
        table_pow2[4][1] = 100000693149582830565320908980056168150;
        table_pow2[4][2] = 100001386303970224572423685307245831542;
        table_pow2[4][3] = 100002079463162215324119782522433627138;
        table_pow2[4][4] = 100002772627158836123451492465145260129;
        table_pow2[4][5] = 100003465795960120273691946873622208121;
        table_pow2[4][6] = 100004158969566101078345118984887516084;
        table_pow2[4][7] = 100004852147976811841145825134822682163;
        table_pow2[4][8] = 100005545331192285866059726358255634403;
        table_pow2[4][9] = 100006238519212556457283329989059798485;
        table_pow2[5][0] = 100000000000000000000000000000000000000;
        table_pow2[5][1] = 100000069314742078650777263622740703038;
        table_pow2[5][2] = 100000138629532202636248826052225815048;
        table_pow2[5][3] = 100000207944370371989717187112633071811;
        table_pow2[5][4] = 100000277259256586744484869711682067979;
        table_pow2[5][5] = 100000346574190846933854419840650257373;
        table_pow2[5][6] = 100000415889173152591128406574388953292;
        table_pow2[5][7] = 100000485204203503749609422071339328833;
        table_pow2[5][8] = 100000554519281900442600081573548417222;
        table_pow2[5][9] = 100000623834408342703403023406685112154;
        table_pow2[6][0] = 100000000000000000000000000000000000000;
        table_pow2[6][1] = 100000006931472045825965603683996211583;
        table_pow2[6][2] = 100000013862944572104978428035962521332;
        table_pow2[6][3] = 100000020794417578837071775524560348874;
        table_pow2[6][4] = 100000027725891066022278948620759465140;
        table_pow2[6][5] = 100000034657365033660633249797837992529;
        table_pow2[6][6] = 100000041588839481752167981531382405066;
        table_pow2[6][7] = 100000048520314410296916446299287528561;
        table_pow2[6][8] = 100000055451789819294911946581756540768;
        table_pow2[6][9] = 100000062383265708746187784861300971552;
        table_pow2[7][0] = 100000000000000000000000000000000000000;
        table_pow2[7][1] = 100000000693147182962210384558650120894;
        table_pow2[7][2] = 100000001386294370728950941601779822006;
        table_pow2[7][3] = 100000002079441563300221704431854648481;
        table_pow2[7][4] = 100000002772588760676022706351340376300;
        table_pow2[7][5] = 100000003465735962856353980662703012279;
        table_pow2[7][6] = 100000004158883169841215560668408794069;
        table_pow2[7][7] = 100000004852030381630607479670924190156;
        table_pow2[7][8] = 100000005545177598224529770972715899860;
        table_pow2[7][9] = 100000006238324819622982467876250853339;
        table_pow2[8][0] = 100000000000000000000000000000000000000;
        table_pow2[8][1] = 100000000069314718080017181643183694247;
        table_pow2[8][2] = 100000000138629436208079664711489996172;
        table_pow2[8][3] = 100000000207944154384187449238221371011;
        table_pow2[8][4] = 100000000277258872608340535256680284018;
        table_pow2[8][5] = 100000000346573590880538922800169200474;
        table_pow2[8][6] = 100000000415888309200782611901990585682;
        table_pow2[8][7] = 100000000485203027569071602595446904968;
        table_pow2[8][8] = 100000000554517745985405894913840623680;
        table_pow2[8][9] = 100000000623832464449785488890474207190;
        table_pow2[9][0] = 100000000000000000000000000000000000000;
        table_pow2[9][1] = 100000000006931471805839679601136972338;
        table_pow2[9][2] = 100000000013862943612159812216225448565;
        table_pow2[9][3] = 100000000020794415418960397845298731148;
        table_pow2[9][4] = 100000000027725887226241436488390122551;
        table_pow2[9][5] = 100000000034657359034002928145532925240;
        table_pow2[9][6] = 100000000041588830842244872816760441679;
        table_pow2[9][7] = 100000000048520302650967270502105974334;
        table_pow2[9][8] = 100000000055451774460170121201602825670;
        table_pow2[9][9] = 100000000062383246269853424915284298153;
        table_pow2[10][0] = 100000000000000000000000000000000000000;
        table_pow2[10][1] = 100000000000693147180562347574486828679;
        table_pow2[10][2] = 100000000001386294361129499679112872675;
        table_pow2[10][3] = 100000000002079441541701456313878165290;
        table_pow2[10][4] = 100000000002772588722278217478782739826;
        table_pow2[10][5] = 100000000003465735902859783173826629587;
        table_pow2[10][6] = 100000000004158883083446153399009867874;
        table_pow2[10][7] = 100000000004852030264037328154332487990;
        table_pow2[10][8] = 100000000005545177444633307439794523238;
        table_pow2[10][9] = 100000000006238324625234091255396006920;

        LUT3_1_isSet = true;
    }

    function setLUT3_2() public {
        table_pow2[11][0] = 100000000000000000000000000000000000000;
        table_pow2[11][1] = 100000000000069314718056018553592419128;
        table_pow2[11][2] = 100000000000138629436112085152486230109;
        table_pow2[11][3] = 100000000000207944154168199796681432977;
        table_pow2[11][4] = 100000000000277258872224362486178027765;
        table_pow2[11][5] = 100000000000346573590280573220976014506;
        table_pow2[11][6] = 100000000000415888308336832001075393234;
        table_pow2[11][7] = 100000000000485203026393138826476163982;
        table_pow2[11][8] = 100000000000554517744449493697178326784;
        table_pow2[11][9] = 100000000000623832462505896613181881671;
        table_pow2[12][0] = 100000000000000000000000000000000000000;
        table_pow2[12][1] = 100000000000006931471805599693320679280;
        table_pow2[12][2] = 100000000000013862943611199867094372479;
        table_pow2[12][3] = 100000000000020794415416800521321079596;
        table_pow2[12][4] = 100000000000027725887222401656000800631;
        table_pow2[12][5] = 100000000000034657359028003271133535584;
        table_pow2[12][6] = 100000000000041588830833605366719284456;
        table_pow2[12][7] = 100000000000048520302639207942758047246;
        table_pow2[12][8] = 100000000000055451774444810999249823955;
        table_pow2[12][9] = 100000000000062383246250414536194614582;
        table_pow2[13][0] = 100000000000000000000000000000000000000;
        table_pow2[13][1] = 100000000000000693147180559947711682302;
        table_pow2[13][2] = 100000000000001386294361119900227894743;
        table_pow2[13][3] = 100000000000002079441541679857548637323;
        table_pow2[13][4] = 100000000000002772588722239819673910042;
        table_pow2[13][5] = 100000000000003465735902799786603712900;
        table_pow2[13][6] = 100000000000004158883083359758338045898;
        table_pow2[13][7] = 100000000000004852030263919734876909035;
        table_pow2[13][8] = 100000000000005545177444479716220302311;
        table_pow2[13][9] = 100000000000006238324625039702368225726;
        table_pow2[14][0] = 100000000000000000000000000000000000000;
        table_pow2[14][1] = 100000000000000069314718055994554964374;
        table_pow2[14][2] = 100000000000000138629436111989157974049;
        table_pow2[14][3] = 100000000000000207944154167983809029026;
        table_pow2[14][4] = 100000000000000277258872223978508129304;
        table_pow2[14][5] = 100000000000000346573590279973255274883;
        table_pow2[14][6] = 100000000000000415888308335968050465764;
        table_pow2[14][7] = 100000000000000485203026391962893701947;
        table_pow2[14][8] = 100000000000000554517744447957784983430;
        table_pow2[14][9] = 100000000000000623832462503952724310215;
        table_pow2[15][0] = 100000000000000000000000000000000000000;
        table_pow2[15][1] = 100000000000000006931471805599453334399;
        table_pow2[15][2] = 100000000000000013862943611198907149251;
        table_pow2[15][3] = 100000000000000020794415416798361444556;
        table_pow2[15][4] = 100000000000000027725887222397816220313;
        table_pow2[15][5] = 100000000000000034657359027997271476524;
        table_pow2[15][6] = 100000000000000041588830833596727213188;
        table_pow2[15][7] = 100000000000000048520302639196183430305;
        table_pow2[15][8] = 100000000000000055451774444795640127875;
        table_pow2[15][9] = 100000000000000062383246250395097305898;
        table_pow2[16][0] = 100000000000000000000000000000000000000;
        table_pow2[16][1] = 100000000000000000693147180559945311819;
        table_pow2[16][2] = 100000000000000001386294361119890628444;
        table_pow2[16][3] = 100000000000000002079441541679835949872;
        table_pow2[16][4] = 100000000000000002772588722239781276105;
        table_pow2[16][5] = 100000000000000003465735902799726607143;
        table_pow2[16][6] = 100000000000000004158883083359671942985;
        table_pow2[16][7] = 100000000000000004852030263919617283632;
        table_pow2[16][8] = 100000000000000005545177444479562629083;
        table_pow2[16][9] = 100000000000000006238324625039507979339;
        table_pow2[17][0] = 100000000000000000000000000000000000000;
        table_pow2[17][1] = 100000000000000000069314718055994530966;
        table_pow2[17][2] = 100000000000000000138629436111989061980;
        table_pow2[17][3] = 100000000000000000207944154167983593041;
        table_pow2[17][4] = 100000000000000000277258872223978124151;
        table_pow2[17][5] = 100000000000000000346573590279972655309;
        table_pow2[17][6] = 100000000000000000415888308335967186515;
        table_pow2[17][7] = 100000000000000000485203026391961717769;
        table_pow2[17][8] = 100000000000000000554517744447956249071;
        table_pow2[17][9] = 100000000000000000623832462503950780421;
        table_pow2[18][0] = 100000000000000000000000000000000000000;
        table_pow2[18][1] = 100000000000000000006931471805599453094;
        table_pow2[18][2] = 100000000000000000013862943611198906189;
        table_pow2[18][3] = 100000000000000000020794415416798359285;
        table_pow2[18][4] = 100000000000000000027725887222397812381;
        table_pow2[18][5] = 100000000000000000034657359027997265477;
        table_pow2[18][6] = 100000000000000000041588830833596718574;
        table_pow2[18][7] = 100000000000000000048520302639196171671;
        table_pow2[18][8] = 100000000000000000055451774444795624769;
        table_pow2[18][9] = 100000000000000000062383246250395077867;
        table_pow2[19][0] = 100000000000000000000000000000000000000;
        table_pow2[19][1] = 100000000000000000000693147180559945309;
        table_pow2[19][2] = 100000000000000000001386294361119890619;
        table_pow2[19][3] = 100000000000000000002079441541679835928;
        table_pow2[19][4] = 100000000000000000002772588722239781238;
        table_pow2[19][5] = 100000000000000000003465735902799726547;
        table_pow2[19][6] = 100000000000000000004158883083359671857;
        table_pow2[19][7] = 100000000000000000004852030263919617166;
        table_pow2[19][8] = 100000000000000000005545177444479562475;
        table_pow2[19][9] = 100000000000000000006238324625039507785;
        table_pow2[20][0] = 100000000000000000000000000000000000000;
        table_pow2[20][1] = 100000000000000000000069314718055994531;
        table_pow2[20][2] = 100000000000000000000138629436111989062;
        table_pow2[20][3] = 100000000000000000000207944154167983593;
        table_pow2[20][4] = 100000000000000000000277258872223978124;
        table_pow2[20][5] = 100000000000000000000346573590279972655;
        table_pow2[20][6] = 100000000000000000000415888308335967186;
        table_pow2[20][7] = 100000000000000000000485203026391961717;
        table_pow2[20][8] = 100000000000000000000554517744447956248;
        table_pow2[20][9] = 100000000000000000000623832462503950778;

        LUT3_2_isSet = true;
    }

    function setLUT3_3() public {
        table_pow2[21][0] = 100000000000000000000000000000000000000;
        table_pow2[21][1] = 100000000000000000000006931471805599453;
        table_pow2[21][2] = 100000000000000000000013862943611198906;
        table_pow2[21][3] = 100000000000000000000020794415416798359;
        table_pow2[21][4] = 100000000000000000000027725887222397812;
        table_pow2[21][5] = 100000000000000000000034657359027997265;
        table_pow2[21][6] = 100000000000000000000041588830833596719;
        table_pow2[21][7] = 100000000000000000000048520302639196172;
        table_pow2[21][8] = 100000000000000000000055451774444795625;
        table_pow2[21][9] = 100000000000000000000062383246250395078;
        table_pow2[22][0] = 100000000000000000000000000000000000000;
        table_pow2[22][1] = 100000000000000000000000693147180559945;
        table_pow2[22][2] = 100000000000000000000001386294361119891;
        table_pow2[22][3] = 100000000000000000000002079441541679836;
        table_pow2[22][4] = 100000000000000000000002772588722239781;
        table_pow2[22][5] = 100000000000000000000003465735902799727;
        table_pow2[22][6] = 100000000000000000000004158883083359672;
        table_pow2[22][7] = 100000000000000000000004852030263919617;
        table_pow2[22][8] = 100000000000000000000005545177444479562;
        table_pow2[22][9] = 100000000000000000000006238324625039508;
        table_pow2[23][0] = 100000000000000000000000000000000000000;
        table_pow2[23][1] = 100000000000000000000000069314718055995;
        table_pow2[23][2] = 100000000000000000000000138629436111989;
        table_pow2[23][3] = 100000000000000000000000207944154167984;
        table_pow2[23][4] = 100000000000000000000000277258872223978;
        table_pow2[23][5] = 100000000000000000000000346573590279973;
        table_pow2[23][6] = 100000000000000000000000415888308335967;
        table_pow2[23][7] = 100000000000000000000000485203026391962;
        table_pow2[23][8] = 100000000000000000000000554517744447956;
        table_pow2[23][9] = 100000000000000000000000623832462503951;
        table_pow2[24][0] = 100000000000000000000000000000000000000;
        table_pow2[24][1] = 100000000000000000000000006931471805599;
        table_pow2[24][2] = 100000000000000000000000013862943611199;
        table_pow2[24][3] = 100000000000000000000000020794415416798;
        table_pow2[24][4] = 100000000000000000000000027725887222398;
        table_pow2[24][5] = 100000000000000000000000034657359027997;
        table_pow2[24][6] = 100000000000000000000000041588830833597;
        table_pow2[24][7] = 100000000000000000000000048520302639196;
        table_pow2[24][8] = 100000000000000000000000055451774444796;
        table_pow2[24][9] = 100000000000000000000000062383246250395;
        table_pow2[25][0] = 100000000000000000000000000000000000000;
        table_pow2[25][1] = 100000000000000000000000000693147180560;
        table_pow2[25][2] = 100000000000000000000000001386294361120;
        table_pow2[25][3] = 100000000000000000000000002079441541680;
        table_pow2[25][4] = 100000000000000000000000002772588722240;
        table_pow2[25][5] = 100000000000000000000000003465735902800;
        table_pow2[25][6] = 100000000000000000000000004158883083360;
        table_pow2[25][7] = 100000000000000000000000004852030263920;
        table_pow2[25][8] = 100000000000000000000000005545177444480;
        table_pow2[25][9] = 100000000000000000000000006238324625040;
        table_pow2[26][0] = 100000000000000000000000000000000000000;
        table_pow2[26][1] = 100000000000000000000000000069314718056;
        table_pow2[26][2] = 100000000000000000000000000138629436112;
        table_pow2[26][3] = 100000000000000000000000000207944154168;
        table_pow2[26][4] = 100000000000000000000000000277258872224;
        table_pow2[26][5] = 100000000000000000000000000346573590280;
        table_pow2[26][6] = 100000000000000000000000000415888308336;
        table_pow2[26][7] = 100000000000000000000000000485203026392;
        table_pow2[26][8] = 100000000000000000000000000554517744448;
        table_pow2[26][9] = 100000000000000000000000000623832462504;
        table_pow2[27][0] = 100000000000000000000000000000000000000;
        table_pow2[27][1] = 100000000000000000000000000006931471806;
        table_pow2[27][2] = 100000000000000000000000000013862943611;
        table_pow2[27][3] = 100000000000000000000000000020794415417;
        table_pow2[27][4] = 100000000000000000000000000027725887222;
        table_pow2[27][5] = 100000000000000000000000000034657359028;
        table_pow2[27][6] = 100000000000000000000000000041588830834;
        table_pow2[27][7] = 100000000000000000000000000048520302639;
        table_pow2[27][8] = 100000000000000000000000000055451774445;
        table_pow2[27][9] = 100000000000000000000000000062383246250;
        table_pow2[28][0] = 100000000000000000000000000000000000000;
        table_pow2[28][1] = 100000000000000000000000000000693147181;
        table_pow2[28][2] = 100000000000000000000000000001386294361;
        table_pow2[28][3] = 100000000000000000000000000002079441542;
        table_pow2[28][4] = 100000000000000000000000000002772588722;
        table_pow2[28][5] = 100000000000000000000000000003465735903;
        table_pow2[28][6] = 100000000000000000000000000004158883083;
        table_pow2[28][7] = 100000000000000000000000000004852030264;
        table_pow2[28][8] = 100000000000000000000000000005545177444;
        table_pow2[28][9] = 100000000000000000000000000006238324625;
        table_pow2[29][0] = 100000000000000000000000000000000000000;
        table_pow2[29][1] = 100000000000000000000000000000069314718;
        table_pow2[29][2] = 100000000000000000000000000000138629436;
        table_pow2[29][3] = 100000000000000000000000000000207944154;
        table_pow2[29][4] = 100000000000000000000000000000277258872;
        table_pow2[29][5] = 100000000000000000000000000000346573590;
        table_pow2[29][6] = 100000000000000000000000000000415888308;
        table_pow2[29][7] = 100000000000000000000000000000485203026;
        table_pow2[29][8] = 100000000000000000000000000000554517744;
        table_pow2[29][9] = 100000000000000000000000000000623832463;
        table_pow2[30][0] = 100000000000000000000000000000000000000;
        table_pow2[30][1] = 100000000000000000000000000000006931472;
        table_pow2[30][2] = 100000000000000000000000000000013862944;
        table_pow2[30][3] = 100000000000000000000000000000020794415;
        table_pow2[30][4] = 100000000000000000000000000000027725887;
        table_pow2[30][5] = 100000000000000000000000000000034657359;
        table_pow2[30][6] = 100000000000000000000000000000041588831;
        table_pow2[30][7] = 100000000000000000000000000000048520303;
        table_pow2[30][8] = 100000000000000000000000000000055451774;
        table_pow2[30][9] = 100000000000000000000000000000062383246;

        LUT3_3_isSet = true;
    }

    function setLUT3_4() public {
        table_pow2[31][0] = 100000000000000000000000000000000000000;
        table_pow2[31][1] = 100000000000000000000000000000000693147;
        table_pow2[31][2] = 100000000000000000000000000000001386294;
        table_pow2[31][3] = 100000000000000000000000000000002079442;
        table_pow2[31][4] = 100000000000000000000000000000002772589;
        table_pow2[31][5] = 100000000000000000000000000000003465736;
        table_pow2[31][6] = 100000000000000000000000000000004158883;
        table_pow2[31][7] = 100000000000000000000000000000004852030;
        table_pow2[31][8] = 100000000000000000000000000000005545177;
        table_pow2[31][9] = 100000000000000000000000000000006238325;
        table_pow2[32][0] = 100000000000000000000000000000000000000;
        table_pow2[32][1] = 100000000000000000000000000000000069315;
        table_pow2[32][2] = 100000000000000000000000000000000138629;
        table_pow2[32][3] = 100000000000000000000000000000000207944;
        table_pow2[32][4] = 100000000000000000000000000000000277259;
        table_pow2[32][5] = 100000000000000000000000000000000346574;
        table_pow2[32][6] = 100000000000000000000000000000000415888;
        table_pow2[32][7] = 100000000000000000000000000000000485203;
        table_pow2[32][8] = 100000000000000000000000000000000554518;
        table_pow2[32][9] = 100000000000000000000000000000000623832;
        table_pow2[33][0] = 100000000000000000000000000000000000000;
        table_pow2[33][1] = 100000000000000000000000000000000006931;
        table_pow2[33][2] = 100000000000000000000000000000000013863;
        table_pow2[33][3] = 100000000000000000000000000000000020794;
        table_pow2[33][4] = 100000000000000000000000000000000027726;
        table_pow2[33][5] = 100000000000000000000000000000000034657;
        table_pow2[33][6] = 100000000000000000000000000000000041589;
        table_pow2[33][7] = 100000000000000000000000000000000048520;
        table_pow2[33][8] = 100000000000000000000000000000000055452;
        table_pow2[33][9] = 100000000000000000000000000000000062383;
        table_pow2[34][0] = 100000000000000000000000000000000000000;
        table_pow2[34][1] = 100000000000000000000000000000000000693;
        table_pow2[34][2] = 100000000000000000000000000000000001386;
        table_pow2[34][3] = 100000000000000000000000000000000002079;
        table_pow2[34][4] = 100000000000000000000000000000000002773;
        table_pow2[34][5] = 100000000000000000000000000000000003466;
        table_pow2[34][6] = 100000000000000000000000000000000004159;
        table_pow2[34][7] = 100000000000000000000000000000000004852;
        table_pow2[34][8] = 100000000000000000000000000000000005545;
        table_pow2[34][9] = 100000000000000000000000000000000006238;
        table_pow2[35][0] = 100000000000000000000000000000000000000;
        table_pow2[35][1] = 100000000000000000000000000000000000069;
        table_pow2[35][2] = 100000000000000000000000000000000000139;
        table_pow2[35][3] = 100000000000000000000000000000000000208;
        table_pow2[35][4] = 100000000000000000000000000000000000277;
        table_pow2[35][5] = 100000000000000000000000000000000000347;
        table_pow2[35][6] = 100000000000000000000000000000000000416;
        table_pow2[35][7] = 100000000000000000000000000000000000485;
        table_pow2[35][8] = 100000000000000000000000000000000000555;
        table_pow2[35][9] = 100000000000000000000000000000000000624;
        table_pow2[36][0] = 100000000000000000000000000000000000000;
        table_pow2[36][1] = 100000000000000000000000000000000000007;
        table_pow2[36][2] = 100000000000000000000000000000000000014;
        table_pow2[36][3] = 100000000000000000000000000000000000021;
        table_pow2[36][4] = 100000000000000000000000000000000000028;
        table_pow2[36][5] = 100000000000000000000000000000000000035;
        table_pow2[36][6] = 100000000000000000000000000000000000042;
        table_pow2[36][7] = 100000000000000000000000000000000000049;
        table_pow2[36][8] = 100000000000000000000000000000000000055;
        table_pow2[36][9] = 100000000000000000000000000000000000062;
        table_pow2[37][0] = 100000000000000000000000000000000000000;
        table_pow2[37][1] = 100000000000000000000000000000000000001;
        table_pow2[37][2] = 100000000000000000000000000000000000001;
        table_pow2[37][3] = 100000000000000000000000000000000000002;
        table_pow2[37][4] = 100000000000000000000000000000000000003;
        table_pow2[37][5] = 100000000000000000000000000000000000003;
        table_pow2[37][6] = 100000000000000000000000000000000000004;
        table_pow2[37][7] = 100000000000000000000000000000000000005;
        table_pow2[37][8] = 100000000000000000000000000000000000006;
        table_pow2[37][9] = 100000000000000000000000000000000000006;
        table_pow2[38][0] = 100000000000000000000000000000000000000;
        table_pow2[38][1] = 100000000000000000000000000000000000000;
        table_pow2[38][2] = 100000000000000000000000000000000000000;
        table_pow2[38][3] = 100000000000000000000000000000000000000;
        table_pow2[38][4] = 100000000000000000000000000000000000000;
        table_pow2[38][5] = 100000000000000000000000000000000000000;
        table_pow2[38][6] = 100000000000000000000000000000000000000;
        table_pow2[38][7] = 100000000000000000000000000000000000000;
        table_pow2[38][8] = 100000000000000000000000000000000000001;
        table_pow2[38][9] = 100000000000000000000000000000000000001;

        LUT3_4_isSet = true;
    }

    /***** MODIFIERS *****/

    modifier _onlyLUT1andLUT2AreSet() {
        require(LUT1_isSet == true && LUT2_isSet == true, "Lookup tables 1 & 2 must first be set");
        _;
    }

    modifier _onlyLUT3isSet() {
        require(
            LUT3_1_isSet == true && LUT3_2_isSet == true && LUT3_3_isSet == true && LUT3_4_isSet == true,
            "Lookup table 3 must first be set"
        );
        _;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"digit","type":"uint256"},{"internalType":"uint256","name":"positionOfChop","type":"uint256"}],"name":"chopAndRound","outputs":[{"internalType":"uint256","name":"chopped","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"convert30To18DP","outputs":[{"internalType":"uint256","name":"y","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"convert30To20DP","outputs":[{"internalType":"uint256","name":"y","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"convert38To18DP","outputs":[{"internalType":"uint256","name":"y","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"convert38To30DP","outputs":[{"internalType":"uint256","name":"y","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"countDigits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"decDiv18","outputs":[{"internalType":"uint256","name":"decQuotient","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"decMul18","outputs":[{"internalType":"uint256","name":"decProd","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"decMul30","outputs":[{"internalType":"uint256","name":"decProd","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"decMul38","outputs":[{"internalType":"uint256","name":"decProd","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"exp","outputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"exp_taylor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"floor","outputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"ln","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"log_2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"base","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"}],"name":"pow","outputs":[{"internalType":"uint256","name":"power","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"pow2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"powBySquare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"base","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"powBySquare18","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"base","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"powBySquare38","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"setLUT1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLUT2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLUT3_1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLUT3_2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLUT3_3","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLUT3_4","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"table2_log_2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"table_log_2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"table_pow2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405261024e805465ffffffffffff1916905534801561002057600080fd5b50613ce9806100306000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806364ce07d811610104578063b2f21109116100a2578063e5ac571711610071578063e5ac5717146104ab578063e92fab3b146104b3578063f7523c52146104d6578063fed6bde0146104f9576101cf565b8063b2f2110914610425578063b581fbe314610448578063d3f87aae14610465578063dc1a1e091461048e576101cf565b80638e962c70116100de5780638e962c70146103c05780639636c762146103dd578063a2693515146103fa578063a463a0871461041d576101cf565b806364ce07d81461036357806378b09c47146103865780638d5dab35146103a3576101cf565b8063422b0d8d11610171578063504f5e561161014b578063504f5e56146102e357806358be7a8914610300578063595a8d07146103235780636172f46714610340576101cf565b8063422b0d8d14610280578063442b7ffb146102a357806344f7787f146102c0576101cf565b806326a4c99f116101ad57806326a4c99f1461022a5780632e4c697f14610232578063344d00951461025557806334eceac01461025d576101cf565b80631ea97975146101d457806322aa59fc14610203578063244334261461020d575b600080fd5b6101f1600480360360208110156101ea57600080fd5b5035610501565b60408051918252519081900360200190f35b61020b61054a565b005b6101f16004803603602081101561022357600080fd5b5035610d95565b61020b610dc0565b6101f16004803603604081101561024857600080fd5b508035906020013561134f565b61020b6113db565b6101f16004803603604081101561027357600080fd5b5080359060200135611b9f565b6101f16004803603604081101561029657600080fd5b5080359060200135611c22565b6101f1600480360360208110156102b957600080fd5b5035611c97565b6101f1600480360360408110156102d657600080fd5b5080359060200135611e65565b6101f1600480360360208110156102f957600080fd5b50356121a5565b6101f16004803603604081101561031657600080fd5b50803590602001356121b6565b6101f16004803603602081101561033957600080fd5b50356121f1565b6101f16004803603604081101561035657600080fd5b5080359060200135612205565b6101f16004803603604081101561037957600080fd5b5080359060200135612230565b6101f16004803603602081101561039c57600080fd5b5035612254565b6101f1600480360360208110156103b957600080fd5b503561226e565b6101f1600480360360208110156103d657600080fd5b503561228a565b6101f1600480360360208110156103f357600080fd5b50356122a7565b6101f16004803603604081101561041057600080fd5b50803590602001356122bf565b61020b612350565b6101f16004803603604081101561043b57600080fd5b50803590602001356128e6565b6101f16004803603602081101561045e57600080fd5b503561290b565b6101f16004803603606081101561047b57600080fd5b5080359060208101359060400135612a03565b6101f1600480360360208110156104a457600080fd5b5035612a42565b61020b612a4f565b6101f1600480360360408110156104c957600080fd5b5080359060200135613221565b6101f1600480360360408110156104ec57600080fd5b5080359060200135613375565b61020b613399565b60006001670de0b6b3a764000080835b8383111561054157670de0b6b3a7640000016105366105308488613375565b82612230565b925090820190610511565b50949350505050565b6b012ced32a16a1b11e826288960261b60c88190556f50a19b26283d0b34e82c419e778521b360c9556f566b2026a35e43fb189e7d9afd311ca060ca556f5c9efa9a30c4933df96ffc0f774a744c60cb556f6344cc47e6d8d888a38d43e4480b40f760cc556f6a64c33195499e0731ba5be94803fff160cd556f7207a3a4586c4cc4064088ea4276fb5c60ce556f7a36d3021aa31ad13619f68058eab61160cf556f82fc635149ae40556949b9c77aaeb7d460d0556f8c631fa0f9b00c8830bcc92f66a8cdfd60d15560d28190556f4bc1422ac6aec230a72fd844c9aea33160d3556f4c482634ef728f0d43fd3e29706e261860d4556f4ccffa6f902e802e1ef5c9a8be84d8ea60d5556f4d58c08658883da39409ffd3360b2db760d6556f4de27a27f1b16b3aea7b151d4596edfd60d7556f4e6d290603b3af2ce3f021430787e70760d8556f4ef8ced53ac6275dc7b0d659adfe49d160d9556f4f856d4d4cac5dfa583fd57df7f3724d60da556f50130628fe1ece5b09368f0bf71dde1e60db5560dc8190556f4b48a7525f322bd41641432d1b296e5360dd556f4b56045b3a41b4a74901ff728163244460de556f4b6363c3576d2eaf8e9404badf6fc66760df556f4b70c58b227f889075c56e7d93fd891760e0556f4b7e29b30756d33a10e6f73c041cb39460e1556f4b8b903b71e4454e7183b4c100273dc560e2556f4b98f924ce2c3e87be6fbfff18a1b52460e3556f4ba6646f88464b1ee4492e06d6e1b2d460e4556f4bb3d21c0c5d2732e086c46abe5f89d160e55560e68190556f4b3ca26adc181e23c3f7c5dad355d41e60e7556f4b3df8336e326f421d274ed62dafe5a960e8556f4b3f4e0210f144a30d966466400a0ca060e9556f4b40a3d6c4702b91b501c642957c6b9e60ea556f4b41f9b188cab1d65c9dd779526b20ae60eb556f4b434f925e1c65b6794f335934ff081960ec556f4b44a5794480d5f4ade34c7284bc6be260ed556f4b45fb663c1391d0cd4915af1f0d4a9560ee556f4b47515944f02907dcc9b581ce95b07960ef5560f08190556f4b3b6ed5219f48be09db701ae9ef16d660f1556f4b3b9101f83e0ae41c67ff10bc60a57660f2556f4b3bb32ede6311f99a899a44d8e4e40260f3556f4b3bd55bd40e650be0ce2710494ba86160f4556f4b3bf788d9400b284ef7a6764a559e7960f5556f4b3c19b5edf80b5c47fc3698d70ebbb460f6556f4b3c3be312366cb53206142d34d1ee3360f7556f4b3c5e1045fb364076739bf07ff607e360f8556f4b3c803d89466f0b81d74c1c3923e5d560f95560fa8190556f4b3b50133a89943d50fdc16ee0f2f73e60fb556f4b3b537e1ab421ff687c5c6e8878520860fc556f4b3b56e8fb066dc21e3032644f2f78c360fd556f4b3b5a53db807787404397741c07de0b60fe556f4b3b5dbebc223f509ce0f4c0653523dd60ff556f4b3b61299cebc5200232c86a312340cc610100556f4b3b64947ddd08f73e63a591176aa541610101556f4b3b67ff5ef60ad81f9e345341c460c6610102556f4b3b6b6a4036cac4740d31cd6cfe475a610103556101048190556f4b3b4cffd7520f6c63dac18be5cb197f610105556f4b3b4d57541dc01c279c42b2eff446f4610106556f4b3b4daed0e9d6895544f6205530a6ca610107556f4b3b4e064db652b3ed4b2c3fd5cbfcb4610108556f4b3b4e5dca83349bf025357dbba8b251610109556f4b3b4eb547507c415e496246da3fd7ca61010a556f4b3b4f0cc41e29a4382e03088ea1247161010b556f4b3b4f6440ec3cc47e496830bf72f76061010c556f4b3b4fbbbdbab5a23111e22ddcf2582061010d5561010e8190556f4b3b4cb11a34adcb07707cfefb195abe61010f556f4b3b4cb9d9e298207996e81ff5da2db6610110556f4b3b4cc29990837a5ffd81ecc5e37ca1610111556f4b3b4ccb593e6fd8baa468af40d9d0ec610112556f4b3b4cd418ec5d3b898bbab13c6539b7610113556f4b3b4cdcd89a4ba2ccb3963c8e314bd5610114556f4b3b4ce598483b0e841c199b0bed21cc610115556f4b3b4cee57f62b7eafc563168b4b5bd4610116556f4b3b4cf717a41cf34faf90f8e2021fdb610117556101188190556f4b3b4ca93a7e8ef66a7f91d9c09f21a7610119556f4b3b4caa1a7659756638348adc3ec58c61011a556f4b3b4caafa6e23f6fcb40a5b13da368361011b556f4b3b4cabda65ee7b2df31352286cbf7261011c556f4b3b4cacba5db901f9f54f77daf1ab5a61011d556f4b3b4cad9a55838b60babed3ec64455261011e556f4b3b4cae7a4d4e176243616e1dbfd88861011f556f4b3b4caf5a4518a5fe8f374e2fffb040610120556f4b3b4cb03a3ce337359e407be41f17d6610121556101228190556f4b3b4ca870ec58b98ed4c5fde7bd3232610123556f4b3b4ca88751ecf91aca53344b52c275610124556f4b3b4ca89db78138ad6ac9e32cbcd88c610125556f4b3b4ca8b41d157846b62a0a8df79c37610126556f4b3b4ca8ca82a9b7e6ac73aa70ff3538610127556f4b3b4ca8e0e83df78d4da6c2d7cfcb4f610128556f4b3b4ca8f74dd2373a99c353c465863e610129556f4b3b4ca90db36676ee90c95d38bc8dc661012a556f4b3b4ca92418fab6a932b8df36d109a961012b5561012c556f4b3b4ca85cc42019fcf7fc9916c7068761012d556f4b3b4ca85f017bb9f076e8a405d0c2e361012e556f4b3b4ca8613ed759e406e660cd1db72a61012f556f4b3b4ca8637c32f9d7a7f5cf6cae6572610130556f4b3b4ca865b98e99cb5a16efe4834fd3610131556f4b3b4ca867f6ea39bf1d49c2349cf862610132556f4b3b4ca86a3445d9b2f18e465cfbe136610133556f4b3b4ca86c71a179a6d6e47c5da08c66610134556f4b3b4ca86eaefd199acd4c64368b7c086101355561024e805462ff0000191662010000179055565b6000678ac7230489e8000068056bc75e2d63100000830604610db983826014612a03565b9392505050565b6b012ced32a16a1b11e826288960261b6101fe8190556f4b3b4ca85a86c47a098a2240000a939b6101ff556f4b3b4ca85a86c47a098a224000152736610200556f4b3b4ca85a86c47a098a2240001fbad2610201556f4b3b4ca85a86c47a098a2240002a4e6d610202556f4b3b4ca85a86c47a098a22400034e208610203556f4b3b4ca85a86c47a098a2240003f75a3610204556f4b3b4ca85a86c47a098a2240004a093e610205556f4b3b4ca85a86c47a098a224000549cd9610206556f4b3b4ca85a86c47a098a2240005f3075610207556102088190556f4b3b4ca85a86c47a098a224000010ec3610209556f4b3b4ca85a86c47a098a224000021d8561020a556f4b3b4ca85a86c47a098a224000032c4861020b556f4b3b4ca85a86c47a098a224000043b0b61020c556f4b3b4ca85a86c47a098a2240000549ce61020d556f4b3b4ca85a86c47a098a22400006589061020e556f4b3b4ca85a86c47a098a22400007675361020f556f4b3b4ca85a86c47a098a224000087616610210556f4b3b4ca85a86c47a098a2240000984d8610211556102128190556f4b3b4ca85a86c47a098a224000001b13610213556f4b3b4ca85a86c47a098a224000003627610214556f4b3b4ca85a86c47a098a22400000513a610215556f4b3b4ca85a86c47a098a224000006c4e610216556f4b3b4ca85a86c47a098a224000008761610217556f4b3b4ca85a86c47a098a22400000a275610218556f4b3b4ca85a86c47a098a22400000bd88610219556f4b3b4ca85a86c47a098a22400000d89c61021a556f4b3b4ca85a86c47a098a22400000f3af61021b5561021c8190556f4b3b4ca85a86c47a098a2240000002b561021d556f4b3b4ca85a86c47a098a22400000056a61021e556f4b3b4ca85a86c47a098a22400000081f61021f556f4b3b4ca85a86c47a098a224000000ad5610220556f4b3b4ca85a86c47a098a224000000d8a610221556f4b3b4ca85a86c47a098a22400000103f610222556f4b3b4ca85a86c47a098a2240000012f4610223556f4b3b4ca85a86c47a098a2240000015a9610224556f4b3b4ca85a86c47a098a22400000185e610225556102268190556f4b3b4ca85a86c47a098a224000000045610227556f4b3b4ca85a86c47a098a22400000008b610228556f4b3b4ca85a86c47a098a2240000000d0610229556f4b3b4ca85a86c47a098a22400000011561022a556f4b3b4ca85a86c47a098a22400000015b61022b556f4b3b4ca85a86c47a098a2240000001a061022c556f4b3b4ca85a86c47a098a2240000001e561022d556f4b3b4ca85a86c47a098a22400000022b61022e556f4b3b4ca85a86c47a098a22400000027061022f556102308190556f4b3b4ca85a86c47a098a224000000007610231556f4b3b4ca85a86c47a098a22400000000e610232556f4b3b4ca85a86c47a098a224000000015610233556f4b3b4ca85a86c47a098a22400000001c610234556f4b3b4ca85a86c47a098a224000000023610235556f4b3b4ca85a86c47a098a22400000002a610236556f4b3b4ca85a86c47a098a224000000031610237556f4b3b4ca85a86c47a098a224000000037610238556f4b3b4ca85a86c47a098a22400000003e6102395561023a8190556f4b3b4ca85a86c47a098a22400000000161023b81905561023c8190556f4b3b4ca85a86c47a098a22400000000261023d556f4b3b4ca85a86c47a098a22400000000361023e81905561023f556f4b3b4ca85a86c47a098a224000000004610240556f4b3b4ca85a86c47a098a224000000005610241556f4b3b4ca85a86c47a098a2240000000066102428190556102435561024482905561024582905561024682905561024782905561024882905561024982905561024a82905561024b9190915561024c81905561024d5561024e805465ff0000000000191665010000000000179055565b6000670de0b6b3a764000083106113835761137c61137783611372866046611e65565b613375565b61290b565b90506113d5565b670de0b6b3a76400008310156113d55760006113b5836113726113ae670de0b6b3a764000088612230565b6046611e65565b90506113d1670de0b6b3a76400006113cc8361290b565b612230565b9150505b92915050565b6b012ced32a16a1b11e826288960261b61019a8190556f4b3b4ca85a86c47a09a2c2630abe4edd61019b556f4b3b4ca85a86c47a09bb6286157c9dba61019c556f4b3b4ca85a86c47a09d402a9203aec9761019d556f4b3b4ca85a86c47a09eca2cc2af93b7461019e556f4b3b4ca85a86c47a0a0542ef35b78a5161019f556f4b3b4ca85a86c47a0a1de3124075d92f6101a0556f4b3b4ca85a86c47a0a3683354b34280c6101a1556f4b3b4ca85a86c47a0a4f235855f276e96101a2556f4b3b4ca85a86c47a0a67c37b60b0c5c66101a3556101a48190556f4b3b4ca85a86c47a098c98a9e7796e496101a5556f4b3b4ca85a86c47a098f0f13cef2dc936101a6556f4b3b4ca85a86c47a0991857db66c4adc6101a7556f4b3b4ca85a86c47a0993fbe79de5b9256101a8556f4b3b4ca85a86c47a09967251855f276f6101a9556f4b3b4ca85a86c47a0998e8bb6cd895b86101aa556f4b3b4ca85a86c47a099b5f25545204016101ab556f4b3b4ca85a86c47a099dd58f3bcb724a6101ac556f4b3b4ca85a86c47a09a04bf92344e0946101ad556101ae8190556f4b3b4ca85a86c47a098a614a9725be3b6101af556f4b3b4ca85a86c47a098aa0552e4b7c756101b0556f4b3b4ca85a86c47a098adf5fc5713ab06101b1556f4b3b4ca85a86c47a098b1e6a5c96f8ea6101b2556f4b3b4ca85a86c47a098b5d74f3bcb7256101b3556f4b3b4ca85a86c47a098b9c7f8ae2755f6101b4556f4b3b4ca85a86c47a098bdb8a2208339a6101b5556f4b3b4ca85a86c47a098c1a94b92df1d46101b6556f4b3b4ca85a86c47a098c599f5053b00f6101b7556101b88190556f4b3b4ca85a86c47a098a288ddbea2c9f6101b9556f4b3b4ca85a86c47a098a2edbb7d4593f6101ba556f4b3b4ca85a86c47a098a352993be85de6101bb556f4b3b4ca85a86c47a098a3b776fa8b27e6101bc556f4b3b4ca85a86c47a098a41c54b92df1d6101bd556f4b3b4ca85a86c47a098a4813277d0bbd6101be556f4b3b4ca85a86c47a098a4e610367385c6101bf556f4b3b4ca85a86c47a098a54aedf5164fc6101c0556f4b3b4ca85a86c47a098a5afcbb3b919b6101c1556101c28190556f4b3b4ca85a86c47a098a22e162ca9e106101c3556f4b3b4ca85a86c47a098a2382c5953c206101c4556f4b3b4ca85a86c47a098a2424285fda306101c5556f4b3b4ca85a86c47a098a24c58b2a78406101c6556f4b3b4ca85a86c47a098a2566edf516506101c7556f4b3b4ca85a86c47a098a260850bfb4606101c8556f4b3b4ca85a86c47a098a26a9b38a52706101c9556f4b3b4ca85a86c47a098a274b1654f0806101ca556f4b3b4ca85a86c47a098a27ec791f8e906101cb556101cc8190556f4b3b4ca85a86c47a098a2250237aa9686101cd556f4b3b4ca85a86c47a098a226046f552d06101ce556f4b3b4ca85a86c47a098a22706a6ffc386101cf556f4b3b4ca85a86c47a098a22808deaa5a06101d0556f4b3b4ca85a86c47a098a2290b1654f086101d1556f4b3b4ca85a86c47a098a22a0d4dff8706101d2556f4b3b4ca85a86c47a098a22b0f85aa1d86101d3556f4b3b4ca85a86c47a098a22c11bd54b406101d4556f4b3b4ca85a86c47a098a22d13f4ff4a86101d5556101d68190556f4b3b4ca85a86c47a098a22419d25ddbe6101d7556f4b3b4ca85a86c47a098a22433a4bbb7b6101d8556f4b3b4ca85a86c47a098a2244d77199396101d9556f4b3b4ca85a86c47a098a2246749776f66101da556f4b3b4ca85a86c47a098a224811bd54b46101db556f4b3b4ca85a86c47a098a2249aee332726101dc556f4b3b4ca85a86c47a098a224b4c09102f6101dd556f4b3b4ca85a86c47a098a224ce92eeded6101de556f4b3b4ca85a86c47a098a224e8654cbaa6101df556101e08190556f4b3b4ca85a86c47a098a22402950962d6101e1556f4b3b4ca85a86c47a098a224052a12c596101e2556f4b3b4ca85a86c47a098a22407bf1c2866101e3556f4b3b4ca85a86c47a098a2240a54258b26101e4556f4b3b4ca85a86c47a098a2240ce92eedf6101e5556f4b3b4ca85a86c47a098a2240f7e3850b6101e6556f4b3b4ca85a86c47a098a224121341b386101e7556f4b3b4ca85a86c47a098a22414a84b1646101e8556f4b3b4ca85a86c47a098a224173d547916101e9556101ea8190556f4b3b4ca85a86c47a098a22400421a89e6101eb556f4b3b4ca85a86c47a098a22400843513c6101ec556f4b3b4ca85a86c47a098a22400c64f9da6101ed556f4b3b4ca85a86c47a098a22401086a2786101ee556f4b3b4ca85a86c47a098a224014a84b166101ef556f4b3b4ca85a86c47a098a224018c9f3b46101f0556f4b3b4ca85a86c47a098a22401ceb9c526101f1556f4b3b4ca85a86c47a098a2240210d44f06101f2556f4b3b4ca85a86c47a098a2240252eed8f6101f3556101f4556f4b3b4ca85a86c47a098a22400069c4106101f5556f4b3b4ca85a86c47a098a224000d388206101f6556f4b3b4ca85a86c47a098a2240013d4c2f6101f7556f4b3b4ca85a86c47a098a224001a7103f6101f8556f4b3b4ca85a86c47a098a22400210d44f6101f9556f4b3b4ca85a86c47a098a2240027a985f6101fa556f4b3b4ca85a86c47a098a224002e45c6f6101fb556f4b3b4ca85a86c47a098a2240034e207e6101fc556f4b3b4ca85a86c47a098a224003b7e48e6101fd5561024e805464ff000000001916640100000000179055565b600081611bb55750670de0b6b3a76400006113d5565b670de0b6b3a76400005b6001831115611c185760028306611be757611bda8485613375565b9350600283049250611c13565b6002830615611c1357611bfa8482613375565b9050611c068485613375565b9350600260001984010492505b611bbf565b6113d18482613375565b600081611c31575060016113d5565b60015b6001831115611c8d5760028306611c5c57611c4f8485613b5b565b9350600283049250611c88565b6002830615611c8857611c6f8482613b5b565b9050611c7b8485613b5b565b9350600260001984010492505b611c34565b6113d18482613b5b565b61024e5460009062010000900460ff1615156001148015611cc7575061024e546301000000900460ff1615156001145b8015611ce3575061024e54640100000000900460ff1615156001145b8015611d00575061024e5465010000000000900460ff1615156001145b611d51576040805162461bcd60e51b815260206004820181905260248201527f4c6f6f6b7570207461626c652033206d75737420666972737420626520736574604482015290519081900360640190fd5b68056bc75e2d631000008210158015611d725750680ad78ebc5ac620000082105b611dad5760405162461bcd60e51b8152600401808060200182810382526022815260200180613c726022913960400191505060405180910390fd5b670de0b6b3a764000082026f96769950b50d88f413144480000000006b012ced32a16a1b11e826288960261b82066000611de6826122a7565b905060005b81811015611e5a57600081600a0a82600101600a0a8581611e0857fe5b0681611e1057fe5b04905080611e1e5750611e52565b600060c88360250360278110611e3057fe5b600a020182600a8110611e3f57fe5b01549050611e4d8682612205565b955050505b600101611deb565b509195945050505050565b6000670de0b6b3a7640000831015611eb9576040805162461bcd60e51b8152602060048201526012602482015271696e707574206d757374206265203e3d203160701b604482015290519081900360640190fd5b600080611ecf670de0b6b3a76400006002613b5b565b90505b671bc16d674ec800008510612154576b03782dace9d90000000000008510611f1757611f0a856b03782dace9d9000000000000612230565b9450601e8201915061214f565b69de0b6b3a7640000000008510611f4957611f3c8569de0b6b3a764000000000612230565b945060148201915061214f565b6906f05b59d3b2000000008510611f7b57611f6e856906f05b59d3b200000000612230565b9450600f8201915061214f565b683782dace9d900000008510611fab57611f9e85683782dace9d90000000612230565b9450600a8201915061214f565b681bc16d674ec80000008510611fdb57611fce85681bc16d674ec8000000612230565b945060098201915061214f565b680de0b6b3a764000000851061200b57611ffe85680de0b6b3a764000000612230565b945060088201915061214f565b6806f05b59d3b2000000851061203b5761202e856806f05b59d3b2000000612230565b945060078201915061214f565b6803782dace9d9000000851061206b5761205e856803782dace9d9000000612230565b945060068201915061214f565b6801bc16d674ec800000851061209b5761208e856801bc16d674ec800000612230565b945060058201915061214f565b67de0b6b3a7640000085106120c9576120bc8567de0b6b3a76400000612230565b945060048201915061214f565b676f05b59d3b20000085106120f7576120ea85676f05b59d3b200000612230565b945060038201915061214f565b673782dace9d90000085106121255761211885673782dace9d900000612230565b945060028201915061214f565b671bc16d674ec80000851061214f5761214685671bc16d674ec80000612230565b94506001820191505b611ed2565b6c0c9f2c9cd04674edea400000008202600061218f6c08bfade8cec3c65ca697cfbe7261218a846121858b8b613221565b613bb4565b6121b6565b905061219a8161228a565b979650505050505050565b68056bc75e2d631000008106900390565b6000806121c38484613b5b565b90506c0c9f2c9cd04674edea400000006121e1826002835b04613bb4565b816121e857fe5b04949350505050565b606481606481106121fe57fe5b0154905081565b6000806122128484613b5b565b90506b012ced32a16a1b11e826288960261b6121e1826002836121db565b60008061224584670de0b6b3a7640000613b5b565b9050826121e1826002836121db565b6000629896806305f5e100830604610db983826008612a03565b6000633b9aca006402540be400830604610db98382600a612a03565b600064174876e80064e8d4a51000830604610db98382600c612a03565b6000805b82156113d557600a830492506001016122ab565b6000816122dc57506b012ced32a16a1b11e826288960261b6113d5565b6b012ced32a16a1b11e826288960261b5b60018311156123465760028306612315576123088485612205565b9350600283049250612341565b6002830615612341576123288482612205565b90506123348485612205565b9350600260001984010492505b6122ed565b6113d18482612205565b6f96769950b50d88f413144480000000006064556f259da6542d43623d04c51120000000006065556f12ced32a16a1b11e82628890000000006066556f096769950b50d88f41314448000000006067556f04b3b4ca85a86c47a098a224000000006068556f0259da6542d43623d04c5112000000006069556f012ced32a16a1b11e826288900000000606a556e96769950b50d88f413144480000000606b556e4b3b4ca85a86c47a098a2240000000606c556e259da6542d43623d04c51120000000606d556e12ced32a16a1b11e82628890000000606e556e096769950b50d88f41314448000000606f556e04b3b4ca85a86c47a098a2240000006070556e0259da6542d43623d04c51120000006071556e012ced32a16a1b11e82628890000006072556d96769950b50d88f41314448000006073556d4b3b4ca85a86c47a098a224000006074556d259da6542d43623d04c5112000006075556d12ced32a16a1b11e8262889000006076556d096769950b50d88f4131444800006077556d04b3b4ca85a86c47a098a22400006078556d0259da6542d43623d04c511200006079556d012ced32a16a1b11e82628890000607a556c96769950b50d88f41314448000607b556c4b3b4ca85a86c47a098a224000607c556c259da6542d43623d04c5112000607d556c12ced32a16a1b11e8262889000607e556c096769950b50d88f4131444800607f556c04b3b4ca85a86c47a098a224006080556c0259da6542d43623d04c5112006081556c012ced32a16a1b11e8262889006082556b96769950b50d88f4131444806083556b4b3b4ca85a86c47a098a22406084556b259da6542d43623d04c511206085556b12ced32a16a1b11e826288906086556b096769950b50d88f413144486087556b04b3b4ca85a86c47a098a2246088556b0259da6542d43623d04c51126089556b012ced32a16a1b11e8262889608a556a96769950b50d88f4131444608b556a4b3b4ca85a86c47a098a22608c556a259da6542d43623d04c511608d556a12ced32a16a1b11e826288608e556a096769950b50d88f413144608f556a04b3b4ca85a86c47a098a26090556a0259da6542d43623d04c516091556a012ced32a16a1b11e826286092556996769950b50d88f41314609355694b3b4ca85a86c47a098a60945569259da6542d43623d04c56095556912ced32a16a1b11e826260965569096769950b50d88f41316097556904b3b4ca85a86c47a098609855690259da6542d43623d04c60995569012ced32a16a1b11e826609a556896769950b50d88f413609b55684b3b4ca85a86c47a09609c5568259da6542d43623d04609d556812ced32a16a1b11e82609e5568096769950b50d88f41609f556804b3b4ca85a86c47a060a055680259da6542d43623d060a15568012ced32a16a1b11e860a2556796769950b50d88f460a355674b3b4ca85a86c47a60a45567259da6542d43623d60a5556712ced32a16a1b11e60a65567096769950b50d88f60a7556704b3b4ca85a86c4760a855670259da6542d4362360a95567012ced32a16a1b1160aa556696769950b50d8860ab55664b3b4ca85a86c460ac5566259da6542d436260ad556612ced32a16a1b160ae5566096769950b50d860af556604b3b4ca85a86c60b055660259da6542d43660b15566012ced32a16a1b60b2556596769950b50d60b355654b3b4ca85a8660b45565259da6542d4360b5556512ced32a16a160b65565096769950b5060b7556504b3b4ca85a860b855650259da6542d460b95565012ced32a16a60ba556496769950b560bb55644b3b4ca85a60bc5564259da6542d60bd556412ced32a1660be5564096769950b60bf556404b3b4ca8560c055640259da654260c15564012ced32a160c255639676995060c355634b3b4ca860c45563259da65460c5556312ced32a60c655630967699560c75561024e805461ff001916610100179055565b60c882602781106128f357fe5b600a020181600a811061290257fe5b01549150829050565b6000806000806129208564e8d4a51000613b5b565b94506129396c1235995e1e4b3c4c2e092eb92a866121b6565b94506129448561226e565b945068056bc75e2d631000008510801561295c575060015b156129a25761297468056bc75e2d6310000086613bb4565b91506f259da6542d43623d04c5112000000000905061299b8161299684611c97565b612205565b93506129f1565b68056bc75e2d631000006129b5866121a5565b03925082850391506129da60026129d58568056bc75e2d63100000613bf8565b611c22565b90506129ee816129e984611c97565b613b5b565b93505b6129fa84610d95565b95945050505050565b60006005831015612a2257612a1b8483600a0a613bf8565b9050610db9565b60058310610db957612a378483600a0a613bf8565b600101949350505050565b600081606481106121fe57fe5b600080556f35326198caa4cf0398dd2df4a401fff860019081556f3f43136bbc1145a3d84ccd8fde8050606002556f44fcdaff61cc4ceae78af7acfc2dcb346003556f480ac4b15dff81588c37988631acc6496004556f499e9cc45b22529d4b6abaa6c727fa206005556f4a6bd6a98878b7e749bca36139d8d4396006556f4ad349c2776ffca447fac2991089d4966007556f4b07392f52b5c840e2f500a685315e106008556f4b213e68c12287618b384447416493666009556f4b2e4467966940f3e15f711b485e0c54600a556f4b34c83fb45aa7f02968d3f10c7bf179600b556f4b380a61f5a1002253dd42289d3f4eac600c556f4b39ab80a386e7ea4aa8befbc274a593600d556f4b3a7c135de075ee193ece3e8ec0de14600e556f4b3ae45d93e9a0ecb716a961237770f6600f556f4b3b1882e525a71aafc82b1e629fd4f66010556f4b3b32959b519153545560036c6f85a76011556f4b3b3f9ef9cb0196d145667cf95b88916012556f4b3b4623a9e098ae32898d76368829126013556f4b3b496602219bfcc6e3c6e7270bab636014556f4b3b4b072e4fab95795f9efc3a14fb8d6015556f4b3b4bd7c46a16de429d50fdc920a2e56016556f4b3b4c400f782561c5f99e6e8cc40d766017556f4b3b4c7434ff62db4faed2a218e2ba686018556f4b3b4c8e47c30f26069626269d2ce2996019556f4b3b4c9b5124e8aede8e5d050e398bb3601a556f4b3b4ca1d5d5d64c29abc79382732075601b556f4b3b4ca5182e4d510702d61d917cca2f601c556f4b3b4ca6b95a88e103a07462aefce70c601d556f4b3b4ca789f0a6ac656bc95b2f53ca62601e556f4b3b4ca7f23bb592ef30954fa967f1b3601f556f4b3b4ca826613d066a4ac3a84c9c92d46020556f4b3b4ca8407400c03565ccec42b792c36021556f4b3b4ca84d7d629d1e56ce14284400136022556f4b3b4ca85402138b93a82dc995d5ca426023556f4b3b4ca857446c02ce87156cab570f406024556f4b3b4ca858e5983e6c0417304dc6791a6025556f4b3b4ca859b62e5c3ac5fb8ea4e9f5ca6026556f4b3b4ca85a1e796b2227c69cf1f6a8d06027556f4b3b4ca85a529ef295d8e25be0dbbfd66028556f4b3b4ca85a6cb1b64fb17dc94a65fac56029556f4b3b4ca85a79bb182c9dcee37bb10419602a556f4b3b4ca85a803fc91b13f849737803ba602b556f4b3b4ca85a838221924f0d32a723e248602c556f4b3b4ca85a85234dcdec97b4ceebe93f602d556f4b3b4ca85a85f3e3ebbb5cf9464c72a6602e556f4b3b4ca85a865c2efaa2bf9c5adbd8d5602f556f4b3b4ca85a869054821670ee1b5b544b6030556f4b3b4ca85a86aa6745d049970929041e6031556f4b3b4ca85a86b770a7ad35eb8373588d6032556f4b3b4ca85a86bdf5589bac15c17161e66033556f4b3b4ca85a86c137b112e72ae0a69e5b6034556f4b3b4ca85a86c2d8dd4e84b5704eca876035556f4b3b4ca85a86c3a9736c537ab826441a6036556f4b3b4ca85a86c411be7b3add5c12d9c36037556f4b3b4ca85a86c445e402ae8eae095acf6038556f4b3b4ca85a86c45ff6c668675704a8e36039556f4b3b4ca85a86c46d00284553ab825350603a556f4b3b4ca85a86c47384d933c9d5c12960603b556f4b3b4ca85a86c476c731ab04eae0949e603c556f4b3b4ca85a86c478685de6a275704a4a603d556f4b3b4ca85a86c47938f404713ab82524603e556f4b3b4ca85a86c479a13f13589d5c1292603f556f4b3b4ca85a86c479d5649acc4eae09496040556f4b3b4ca85a86c479ef775e86275704a46041556f4b3b4ca85a86c479fc80c06313ab82526042556f4b3b4ca85a86c47a0305715189d5c1296043556f4b3b4ca85a86c47a0647c9c8c4eae0956044556f4b3b4ca85a86c47a07e8f6046275704a6045556f4b3b4ca85a86c47a08b98c22313ab8256046556f4b3b4ca85a86c47a0921d731189d5c136047556f4b3b4ca85a86c47a0955fcb88c4eae096048556f4b3b4ca85a86c47a09700f7c462757056049556f4b3b4ca85a86c47a097d18de2313ab82604a556f4b3b4ca85a86c47a09839d8f1189d5c1604b556f4b3b4ca85a86c47a0986dfe788c4eae1604c556f4b3b4ca85a86c47a09888113c4627570604d556f4b3b4ca85a86c47a098951a9e2313ab8604e556f4b3b4ca85a86c47a0989b9f4f1189d5c604f556f4b3b4ca85a86c47a0989ee1a788c4eae6050556f4b3b4ca85a86c47a098a082d3c4627576051556f4b3b4ca85a86c47a098a15369e2313ac6052556f4b3b4ca85a86c47a098a1bbb4f1189d66053556f4b3b4ca85a86c47a098a1efda788c4eb6054556f4b3b4ca85a86c47a098a209ed3c462756055556f4b3b4ca85a86c47a098a216f69e2313b6056556f4b3b4ca85a86c47a098a21d7b4f1189d6057556f4b3b4ca85a86c47a098a220bda788c4f6058556f4b3b4ca85a86c47a098a2225ed3c46276059556f4b3b4ca85a86c47a098a2232f69e2314605a556f4b3b4ca85a86c47a098a22397b4f118a605b556f4b3b4ca85a86c47a098a223cbda788c5605c556f4b3b4ca85a86c47a098a223e5ed3c462605d556f4b3b4ca85a86c47a098a223f2f69e231605e556f4b3b4ca85a86c47a098a223f97b4f119605f556f4b3b4ca85a86c47a098a223fcbda788c6060556f4b3b4ca85a86c47a098a223fe5ed3c466061556f4b3b4ca85a86c47a098a223ff2f69e236062556f4b3b4ca85a86c47a098a223ff97b4f1260635561024e805460ff19169091179055565b61024e5460009060ff161515600114801561324a575061024e5460ff6101009091041615156001145b6132855760405162461bcd60e51b8152600401808060200182810382526025815260200180613c4d6025913960400191505060405180910390fd5b670de0b6b3a764000083101580156132a45750671bc16d674ec8000083105b6132df5760405162461bcd60e51b8152600401808060200182810382526022815260200180613c726022913960400191505060405180910390fd5b60006132f48468056bc75e2d63100000613b5b565b90506b012ced32a16a1b11e826288960261b600060015b8581116133615761332a6000826064811061332257fe5b015485612205565b92506b012ced32a16a1b11e826288960261b8310613359578293506064816064811061335257fe5b0154820191505b60010161330b565b5061336b81612254565b9695505050505050565b6000806133828484613b5b565b9050670de0b6b3a76400006121e1826002836121db565b6b012ced32a16a1b11e826288960261b6101368190556f4b3b4ca85ac01a706eadf372d36d1338610137556f4b3b4ca85af97066d3d1f05811f9885d610138556f4b3b4ca85b32c65d38f618efbba55f91610139556f4b3b4ca85b6c1c539e1a6d39d07098f561013a556f4b3b4ca85ba5724a033eed36505b34aa61013b556f4b3b4ca85bdec840686398e53b6532d261013c556f4b3b4ca85c181e36cd887046918e938e61013d556f4b3b4ca85c51742d32ad735a52d7570061013e556f4b3b4ca85c8aca2397d2a2207f3f7d4761013f556101408190556f4b3b4ca85a8c8045e0741b9a7e66ef70610141556f4b3b4ca85a923c11b75e1564da09107f610142556f4b3b4ca85a97f7dd8e480f9f12e6632c610143556f4b3b4ca85a9db3a965320a4928fee777610144556f4b3b4ca85aa36f753c1c05631c529d60610145556f4b3b4ca85aa92b41130600ecece184e8610146556f4b3b4ca85aaee70ce9effce69aab9e0e610147556f4b3b4ca85ab4a2d8c0d9f95025b0e8d3610148556f4b3b4ca85aba5ea497c3f6298df165366101495561014a8190556f4b3b4ca85a8757419f07ee5d9d9096fe61014b556f4b3b4ca85a87ea093485ba7c59807dd761014c556f4b3b4ca85a887cd0ca03869c33cfb48b61014d556f4b3b4ca85a890f985f8152bd2c7e3b1a61014e556f4b3b4ca85a89a25ff4ff1edf438c118461014f556f4b3b4ca85a8a35278a7ceb0278f937ca610150556f4b3b4ca85a8ac7ef1ffab726ccc5adeb610151556f4b3b4ca85a8b5ab6b578834c3ef173e7610152556f4b3b4ca85a8bed7e4af64f72cf7c89be610153556101548190556f4b3b4ca85a86d327987d1d0fb611d996610155556f4b3b4ca85a86e1d5277017df6f00d021610156556f4b3b4ca85a86f082b66312af2acce3a2610157556f4b3b4ca85a86ff3045560d7ee9761418610158556f4b3b4ca85a870dddd449084eaafc6183610159556f4b3b4ca85a871c8b633c031e6f5fcbe461015a556f4b3b4ca85a872b38f22efdee36a0533b61015b556f4b3b4ca85a8739e68121f8be00bdf78661015c556f4b3b4ca85a8748941014f38dcdb8b8c761015d5561015e8190556f4b3b4ca85a86c5f1cb08d4ee5ee0cb7f61015f556f4b3b4ca85a86c7698c87879cbdc8ebc3610160556f4b3b4ca85a86c8e14e063a4b1cb860cc610161556f4b3b4ca85a86ca590f84ecf97baf2a99610162556f4b3b4ca85a86cbd0d1039fa7daad492c610163556f4b3b4ca85a86cd489282525639b2bc84610164556f4b3b4ca85a86cec05401050498bf84a1610165556f4b3b4ca85a86d038157fb7b2f7d3a183610166556f4b3b4ca85a86d1afd6fe6a6156ef132a610167556101688190556f4b3b4ca85a86c49f9ce39a84a316264b610169556f4b3b4ca85a86c4c5303d12c9462c5f5c61016a556f4b3b4ca85a86c4eac3968b0de942ab3061016b556f4b3b4ca85a86c51056f003528c5909c961016c556f4b3b4ca85a86c535ea497b972f6f7b2761016d556f4b3b4ca85a86c55b7da2f3dbd285ff4961016e556f4b3b4ca85a86c58110fc6c20759c963061016f556f4b3b4ca85a86c5a6a455e46518b33fdb610170556f4b3b4ca85a86c5cc37af5ca9bbc9fc4b610171556101728190556f4b3b4ca85a86c47dcb797b13a9e89c96610173556f4b3b4ca85a86c4818d68d3e753d1395c610174556f4b3b4ca85a86c4854f582cbafdb9d651610175556f4b3b4ca85a86c4891147858ea7a27377610176556f4b3b4ca85a86c48cd336de62518b10cd610177556f4b3b4ca85a86c49095263735fb73ae53610178556f4b3b4ca85a86c49457159009a55c4c09610179556f4b3b4ca85a86c4981904e8dd4f44e9ef61017a556f4b3b4ca85a86c49bdaf441b0f92d880561017b5561017c8190556f4b3b4ca85a86c47a69bbab21f7640fa661017d556f4b3b4ca85a86c47ac9ed3403eec81f4d61017e556f4b3b4ca85a86c47b2a1ebce5e62c2ef561017f556f4b3b4ca85a86c47b8a5045c7dd903e9d610180556f4b3b4ca85a86c47bea81cea9d4f44e45610181556f4b3b4ca85a86c47c4ab3578bcc585dee610182556f4b3b4ca85a86c47caae4e06dc3bc6d97610183556f4b3b4ca85a86c47d0b16694fbb207d41610184556f4b3b4ca85a86c47d6b47f231b2848ceb610185556101868190556f4b3b4ca85a86c47a1328aff03256ce5d610187556f4b3b4ca85a86c47a1cc73da064ad9cbb610188556f4b3b4ca85a86c47a2665cb5097046b18610189556f4b3b4ca85a86c47a30045900c95b397661018a556f4b3b4ca85a86c47a39a2e6b0fbb207d361018b556f4b3b4ca85a86c47a434174612e08d63161018c556f4b3b4ca85a86c47a4ce00211605fa48e61018d556f4b3b4ca85a86c47a567e8fc192b672eb61018e556f4b3b4ca85a86c47a601d1d71c50d414961018f55610190556f4b3b4ca85a86c47a0a80639e6b6f14a3610191556f4b3b4ca85a86c47a0b76a4fcd6de2946610192556f4b3b4ca85a86c47a0c6ce65b424d3de9610193556f4b3b4ca85a86c47a0d6327b9adbc528c610194556f4b3b4ca85a86c47a0e596918192b672f610195556f4b3b4ca85a86c47a0f4faa76849a7bd2610196556f4b3b4ca85a86c47a1045ebd4f0099075610197556f4b3b4ca85a86c47a113c2d335b78a518610198556f4b3b4ca85a86c47a12326e91c6e7b9ba6101995561024e805463ff00000019166301000000179055565b600082613b6a575060006113d5565b82820282848281613b7757fe5b0414610db95760405162461bcd60e51b8152600401808060200182810382526021815260200180613c946021913960400191505060405180910390fd5b600082820183811015610db95760405162461bcd60e51b8152600401808060200182810382526021815260200180613c946021913960400191505060405180910390fd5b6000808211613c41576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b60008284816121e857fefe4c6f6f6b7570207461626c6573203120262032206d75737420666972737420626520736574696e7075742078206d7573742062652077697468696e2072616e6765205b312c325b75696e74206f766572666c6f772066726f6d206d756c7469706c69636174696f6ea265627a7a7231582017a051d09a0940c56fc2604ed1ba47a74e59b940900fcb8951b76649db1e2ad364736f6c63430005100032

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806364ce07d811610104578063b2f21109116100a2578063e5ac571711610071578063e5ac5717146104ab578063e92fab3b146104b3578063f7523c52146104d6578063fed6bde0146104f9576101cf565b8063b2f2110914610425578063b581fbe314610448578063d3f87aae14610465578063dc1a1e091461048e576101cf565b80638e962c70116100de5780638e962c70146103c05780639636c762146103dd578063a2693515146103fa578063a463a0871461041d576101cf565b806364ce07d81461036357806378b09c47146103865780638d5dab35146103a3576101cf565b8063422b0d8d11610171578063504f5e561161014b578063504f5e56146102e357806358be7a8914610300578063595a8d07146103235780636172f46714610340576101cf565b8063422b0d8d14610280578063442b7ffb146102a357806344f7787f146102c0576101cf565b806326a4c99f116101ad57806326a4c99f1461022a5780632e4c697f14610232578063344d00951461025557806334eceac01461025d576101cf565b80631ea97975146101d457806322aa59fc14610203578063244334261461020d575b600080fd5b6101f1600480360360208110156101ea57600080fd5b5035610501565b60408051918252519081900360200190f35b61020b61054a565b005b6101f16004803603602081101561022357600080fd5b5035610d95565b61020b610dc0565b6101f16004803603604081101561024857600080fd5b508035906020013561134f565b61020b6113db565b6101f16004803603604081101561027357600080fd5b5080359060200135611b9f565b6101f16004803603604081101561029657600080fd5b5080359060200135611c22565b6101f1600480360360208110156102b957600080fd5b5035611c97565b6101f1600480360360408110156102d657600080fd5b5080359060200135611e65565b6101f1600480360360208110156102f957600080fd5b50356121a5565b6101f16004803603604081101561031657600080fd5b50803590602001356121b6565b6101f16004803603602081101561033957600080fd5b50356121f1565b6101f16004803603604081101561035657600080fd5b5080359060200135612205565b6101f16004803603604081101561037957600080fd5b5080359060200135612230565b6101f16004803603602081101561039c57600080fd5b5035612254565b6101f1600480360360208110156103b957600080fd5b503561226e565b6101f1600480360360208110156103d657600080fd5b503561228a565b6101f1600480360360208110156103f357600080fd5b50356122a7565b6101f16004803603604081101561041057600080fd5b50803590602001356122bf565b61020b612350565b6101f16004803603604081101561043b57600080fd5b50803590602001356128e6565b6101f16004803603602081101561045e57600080fd5b503561290b565b6101f16004803603606081101561047b57600080fd5b5080359060208101359060400135612a03565b6101f1600480360360208110156104a457600080fd5b5035612a42565b61020b612a4f565b6101f1600480360360408110156104c957600080fd5b5080359060200135613221565b6101f1600480360360408110156104ec57600080fd5b5080359060200135613375565b61020b613399565b60006001670de0b6b3a764000080835b8383111561054157670de0b6b3a7640000016105366105308488613375565b82612230565b925090820190610511565b50949350505050565b6b012ced32a16a1b11e826288960261b60c88190556f50a19b26283d0b34e82c419e778521b360c9556f566b2026a35e43fb189e7d9afd311ca060ca556f5c9efa9a30c4933df96ffc0f774a744c60cb556f6344cc47e6d8d888a38d43e4480b40f760cc556f6a64c33195499e0731ba5be94803fff160cd556f7207a3a4586c4cc4064088ea4276fb5c60ce556f7a36d3021aa31ad13619f68058eab61160cf556f82fc635149ae40556949b9c77aaeb7d460d0556f8c631fa0f9b00c8830bcc92f66a8cdfd60d15560d28190556f4bc1422ac6aec230a72fd844c9aea33160d3556f4c482634ef728f0d43fd3e29706e261860d4556f4ccffa6f902e802e1ef5c9a8be84d8ea60d5556f4d58c08658883da39409ffd3360b2db760d6556f4de27a27f1b16b3aea7b151d4596edfd60d7556f4e6d290603b3af2ce3f021430787e70760d8556f4ef8ced53ac6275dc7b0d659adfe49d160d9556f4f856d4d4cac5dfa583fd57df7f3724d60da556f50130628fe1ece5b09368f0bf71dde1e60db5560dc8190556f4b48a7525f322bd41641432d1b296e5360dd556f4b56045b3a41b4a74901ff728163244460de556f4b6363c3576d2eaf8e9404badf6fc66760df556f4b70c58b227f889075c56e7d93fd891760e0556f4b7e29b30756d33a10e6f73c041cb39460e1556f4b8b903b71e4454e7183b4c100273dc560e2556f4b98f924ce2c3e87be6fbfff18a1b52460e3556f4ba6646f88464b1ee4492e06d6e1b2d460e4556f4bb3d21c0c5d2732e086c46abe5f89d160e55560e68190556f4b3ca26adc181e23c3f7c5dad355d41e60e7556f4b3df8336e326f421d274ed62dafe5a960e8556f4b3f4e0210f144a30d966466400a0ca060e9556f4b40a3d6c4702b91b501c642957c6b9e60ea556f4b41f9b188cab1d65c9dd779526b20ae60eb556f4b434f925e1c65b6794f335934ff081960ec556f4b44a5794480d5f4ade34c7284bc6be260ed556f4b45fb663c1391d0cd4915af1f0d4a9560ee556f4b47515944f02907dcc9b581ce95b07960ef5560f08190556f4b3b6ed5219f48be09db701ae9ef16d660f1556f4b3b9101f83e0ae41c67ff10bc60a57660f2556f4b3bb32ede6311f99a899a44d8e4e40260f3556f4b3bd55bd40e650be0ce2710494ba86160f4556f4b3bf788d9400b284ef7a6764a559e7960f5556f4b3c19b5edf80b5c47fc3698d70ebbb460f6556f4b3c3be312366cb53206142d34d1ee3360f7556f4b3c5e1045fb364076739bf07ff607e360f8556f4b3c803d89466f0b81d74c1c3923e5d560f95560fa8190556f4b3b50133a89943d50fdc16ee0f2f73e60fb556f4b3b537e1ab421ff687c5c6e8878520860fc556f4b3b56e8fb066dc21e3032644f2f78c360fd556f4b3b5a53db807787404397741c07de0b60fe556f4b3b5dbebc223f509ce0f4c0653523dd60ff556f4b3b61299cebc5200232c86a312340cc610100556f4b3b64947ddd08f73e63a591176aa541610101556f4b3b67ff5ef60ad81f9e345341c460c6610102556f4b3b6b6a4036cac4740d31cd6cfe475a610103556101048190556f4b3b4cffd7520f6c63dac18be5cb197f610105556f4b3b4d57541dc01c279c42b2eff446f4610106556f4b3b4daed0e9d6895544f6205530a6ca610107556f4b3b4e064db652b3ed4b2c3fd5cbfcb4610108556f4b3b4e5dca83349bf025357dbba8b251610109556f4b3b4eb547507c415e496246da3fd7ca61010a556f4b3b4f0cc41e29a4382e03088ea1247161010b556f4b3b4f6440ec3cc47e496830bf72f76061010c556f4b3b4fbbbdbab5a23111e22ddcf2582061010d5561010e8190556f4b3b4cb11a34adcb07707cfefb195abe61010f556f4b3b4cb9d9e298207996e81ff5da2db6610110556f4b3b4cc29990837a5ffd81ecc5e37ca1610111556f4b3b4ccb593e6fd8baa468af40d9d0ec610112556f4b3b4cd418ec5d3b898bbab13c6539b7610113556f4b3b4cdcd89a4ba2ccb3963c8e314bd5610114556f4b3b4ce598483b0e841c199b0bed21cc610115556f4b3b4cee57f62b7eafc563168b4b5bd4610116556f4b3b4cf717a41cf34faf90f8e2021fdb610117556101188190556f4b3b4ca93a7e8ef66a7f91d9c09f21a7610119556f4b3b4caa1a7659756638348adc3ec58c61011a556f4b3b4caafa6e23f6fcb40a5b13da368361011b556f4b3b4cabda65ee7b2df31352286cbf7261011c556f4b3b4cacba5db901f9f54f77daf1ab5a61011d556f4b3b4cad9a55838b60babed3ec64455261011e556f4b3b4cae7a4d4e176243616e1dbfd88861011f556f4b3b4caf5a4518a5fe8f374e2fffb040610120556f4b3b4cb03a3ce337359e407be41f17d6610121556101228190556f4b3b4ca870ec58b98ed4c5fde7bd3232610123556f4b3b4ca88751ecf91aca53344b52c275610124556f4b3b4ca89db78138ad6ac9e32cbcd88c610125556f4b3b4ca8b41d157846b62a0a8df79c37610126556f4b3b4ca8ca82a9b7e6ac73aa70ff3538610127556f4b3b4ca8e0e83df78d4da6c2d7cfcb4f610128556f4b3b4ca8f74dd2373a99c353c465863e610129556f4b3b4ca90db36676ee90c95d38bc8dc661012a556f4b3b4ca92418fab6a932b8df36d109a961012b5561012c556f4b3b4ca85cc42019fcf7fc9916c7068761012d556f4b3b4ca85f017bb9f076e8a405d0c2e361012e556f4b3b4ca8613ed759e406e660cd1db72a61012f556f4b3b4ca8637c32f9d7a7f5cf6cae6572610130556f4b3b4ca865b98e99cb5a16efe4834fd3610131556f4b3b4ca867f6ea39bf1d49c2349cf862610132556f4b3b4ca86a3445d9b2f18e465cfbe136610133556f4b3b4ca86c71a179a6d6e47c5da08c66610134556f4b3b4ca86eaefd199acd4c64368b7c086101355561024e805462ff0000191662010000179055565b6000678ac7230489e8000068056bc75e2d63100000830604610db983826014612a03565b9392505050565b6b012ced32a16a1b11e826288960261b6101fe8190556f4b3b4ca85a86c47a098a2240000a939b6101ff556f4b3b4ca85a86c47a098a224000152736610200556f4b3b4ca85a86c47a098a2240001fbad2610201556f4b3b4ca85a86c47a098a2240002a4e6d610202556f4b3b4ca85a86c47a098a22400034e208610203556f4b3b4ca85a86c47a098a2240003f75a3610204556f4b3b4ca85a86c47a098a2240004a093e610205556f4b3b4ca85a86c47a098a224000549cd9610206556f4b3b4ca85a86c47a098a2240005f3075610207556102088190556f4b3b4ca85a86c47a098a224000010ec3610209556f4b3b4ca85a86c47a098a224000021d8561020a556f4b3b4ca85a86c47a098a224000032c4861020b556f4b3b4ca85a86c47a098a224000043b0b61020c556f4b3b4ca85a86c47a098a2240000549ce61020d556f4b3b4ca85a86c47a098a22400006589061020e556f4b3b4ca85a86c47a098a22400007675361020f556f4b3b4ca85a86c47a098a224000087616610210556f4b3b4ca85a86c47a098a2240000984d8610211556102128190556f4b3b4ca85a86c47a098a224000001b13610213556f4b3b4ca85a86c47a098a224000003627610214556f4b3b4ca85a86c47a098a22400000513a610215556f4b3b4ca85a86c47a098a224000006c4e610216556f4b3b4ca85a86c47a098a224000008761610217556f4b3b4ca85a86c47a098a22400000a275610218556f4b3b4ca85a86c47a098a22400000bd88610219556f4b3b4ca85a86c47a098a22400000d89c61021a556f4b3b4ca85a86c47a098a22400000f3af61021b5561021c8190556f4b3b4ca85a86c47a098a2240000002b561021d556f4b3b4ca85a86c47a098a22400000056a61021e556f4b3b4ca85a86c47a098a22400000081f61021f556f4b3b4ca85a86c47a098a224000000ad5610220556f4b3b4ca85a86c47a098a224000000d8a610221556f4b3b4ca85a86c47a098a22400000103f610222556f4b3b4ca85a86c47a098a2240000012f4610223556f4b3b4ca85a86c47a098a2240000015a9610224556f4b3b4ca85a86c47a098a22400000185e610225556102268190556f4b3b4ca85a86c47a098a224000000045610227556f4b3b4ca85a86c47a098a22400000008b610228556f4b3b4ca85a86c47a098a2240000000d0610229556f4b3b4ca85a86c47a098a22400000011561022a556f4b3b4ca85a86c47a098a22400000015b61022b556f4b3b4ca85a86c47a098a2240000001a061022c556f4b3b4ca85a86c47a098a2240000001e561022d556f4b3b4ca85a86c47a098a22400000022b61022e556f4b3b4ca85a86c47a098a22400000027061022f556102308190556f4b3b4ca85a86c47a098a224000000007610231556f4b3b4ca85a86c47a098a22400000000e610232556f4b3b4ca85a86c47a098a224000000015610233556f4b3b4ca85a86c47a098a22400000001c610234556f4b3b4ca85a86c47a098a224000000023610235556f4b3b4ca85a86c47a098a22400000002a610236556f4b3b4ca85a86c47a098a224000000031610237556f4b3b4ca85a86c47a098a224000000037610238556f4b3b4ca85a86c47a098a22400000003e6102395561023a8190556f4b3b4ca85a86c47a098a22400000000161023b81905561023c8190556f4b3b4ca85a86c47a098a22400000000261023d556f4b3b4ca85a86c47a098a22400000000361023e81905561023f556f4b3b4ca85a86c47a098a224000000004610240556f4b3b4ca85a86c47a098a224000000005610241556f4b3b4ca85a86c47a098a2240000000066102428190556102435561024482905561024582905561024682905561024782905561024882905561024982905561024a82905561024b9190915561024c81905561024d5561024e805465ff0000000000191665010000000000179055565b6000670de0b6b3a764000083106113835761137c61137783611372866046611e65565b613375565b61290b565b90506113d5565b670de0b6b3a76400008310156113d55760006113b5836113726113ae670de0b6b3a764000088612230565b6046611e65565b90506113d1670de0b6b3a76400006113cc8361290b565b612230565b9150505b92915050565b6b012ced32a16a1b11e826288960261b61019a8190556f4b3b4ca85a86c47a09a2c2630abe4edd61019b556f4b3b4ca85a86c47a09bb6286157c9dba61019c556f4b3b4ca85a86c47a09d402a9203aec9761019d556f4b3b4ca85a86c47a09eca2cc2af93b7461019e556f4b3b4ca85a86c47a0a0542ef35b78a5161019f556f4b3b4ca85a86c47a0a1de3124075d92f6101a0556f4b3b4ca85a86c47a0a3683354b34280c6101a1556f4b3b4ca85a86c47a0a4f235855f276e96101a2556f4b3b4ca85a86c47a0a67c37b60b0c5c66101a3556101a48190556f4b3b4ca85a86c47a098c98a9e7796e496101a5556f4b3b4ca85a86c47a098f0f13cef2dc936101a6556f4b3b4ca85a86c47a0991857db66c4adc6101a7556f4b3b4ca85a86c47a0993fbe79de5b9256101a8556f4b3b4ca85a86c47a09967251855f276f6101a9556f4b3b4ca85a86c47a0998e8bb6cd895b86101aa556f4b3b4ca85a86c47a099b5f25545204016101ab556f4b3b4ca85a86c47a099dd58f3bcb724a6101ac556f4b3b4ca85a86c47a09a04bf92344e0946101ad556101ae8190556f4b3b4ca85a86c47a098a614a9725be3b6101af556f4b3b4ca85a86c47a098aa0552e4b7c756101b0556f4b3b4ca85a86c47a098adf5fc5713ab06101b1556f4b3b4ca85a86c47a098b1e6a5c96f8ea6101b2556f4b3b4ca85a86c47a098b5d74f3bcb7256101b3556f4b3b4ca85a86c47a098b9c7f8ae2755f6101b4556f4b3b4ca85a86c47a098bdb8a2208339a6101b5556f4b3b4ca85a86c47a098c1a94b92df1d46101b6556f4b3b4ca85a86c47a098c599f5053b00f6101b7556101b88190556f4b3b4ca85a86c47a098a288ddbea2c9f6101b9556f4b3b4ca85a86c47a098a2edbb7d4593f6101ba556f4b3b4ca85a86c47a098a352993be85de6101bb556f4b3b4ca85a86c47a098a3b776fa8b27e6101bc556f4b3b4ca85a86c47a098a41c54b92df1d6101bd556f4b3b4ca85a86c47a098a4813277d0bbd6101be556f4b3b4ca85a86c47a098a4e610367385c6101bf556f4b3b4ca85a86c47a098a54aedf5164fc6101c0556f4b3b4ca85a86c47a098a5afcbb3b919b6101c1556101c28190556f4b3b4ca85a86c47a098a22e162ca9e106101c3556f4b3b4ca85a86c47a098a2382c5953c206101c4556f4b3b4ca85a86c47a098a2424285fda306101c5556f4b3b4ca85a86c47a098a24c58b2a78406101c6556f4b3b4ca85a86c47a098a2566edf516506101c7556f4b3b4ca85a86c47a098a260850bfb4606101c8556f4b3b4ca85a86c47a098a26a9b38a52706101c9556f4b3b4ca85a86c47a098a274b1654f0806101ca556f4b3b4ca85a86c47a098a27ec791f8e906101cb556101cc8190556f4b3b4ca85a86c47a098a2250237aa9686101cd556f4b3b4ca85a86c47a098a226046f552d06101ce556f4b3b4ca85a86c47a098a22706a6ffc386101cf556f4b3b4ca85a86c47a098a22808deaa5a06101d0556f4b3b4ca85a86c47a098a2290b1654f086101d1556f4b3b4ca85a86c47a098a22a0d4dff8706101d2556f4b3b4ca85a86c47a098a22b0f85aa1d86101d3556f4b3b4ca85a86c47a098a22c11bd54b406101d4556f4b3b4ca85a86c47a098a22d13f4ff4a86101d5556101d68190556f4b3b4ca85a86c47a098a22419d25ddbe6101d7556f4b3b4ca85a86c47a098a22433a4bbb7b6101d8556f4b3b4ca85a86c47a098a2244d77199396101d9556f4b3b4ca85a86c47a098a2246749776f66101da556f4b3b4ca85a86c47a098a224811bd54b46101db556f4b3b4ca85a86c47a098a2249aee332726101dc556f4b3b4ca85a86c47a098a224b4c09102f6101dd556f4b3b4ca85a86c47a098a224ce92eeded6101de556f4b3b4ca85a86c47a098a224e8654cbaa6101df556101e08190556f4b3b4ca85a86c47a098a22402950962d6101e1556f4b3b4ca85a86c47a098a224052a12c596101e2556f4b3b4ca85a86c47a098a22407bf1c2866101e3556f4b3b4ca85a86c47a098a2240a54258b26101e4556f4b3b4ca85a86c47a098a2240ce92eedf6101e5556f4b3b4ca85a86c47a098a2240f7e3850b6101e6556f4b3b4ca85a86c47a098a224121341b386101e7556f4b3b4ca85a86c47a098a22414a84b1646101e8556f4b3b4ca85a86c47a098a224173d547916101e9556101ea8190556f4b3b4ca85a86c47a098a22400421a89e6101eb556f4b3b4ca85a86c47a098a22400843513c6101ec556f4b3b4ca85a86c47a098a22400c64f9da6101ed556f4b3b4ca85a86c47a098a22401086a2786101ee556f4b3b4ca85a86c47a098a224014a84b166101ef556f4b3b4ca85a86c47a098a224018c9f3b46101f0556f4b3b4ca85a86c47a098a22401ceb9c526101f1556f4b3b4ca85a86c47a098a2240210d44f06101f2556f4b3b4ca85a86c47a098a2240252eed8f6101f3556101f4556f4b3b4ca85a86c47a098a22400069c4106101f5556f4b3b4ca85a86c47a098a224000d388206101f6556f4b3b4ca85a86c47a098a2240013d4c2f6101f7556f4b3b4ca85a86c47a098a224001a7103f6101f8556f4b3b4ca85a86c47a098a22400210d44f6101f9556f4b3b4ca85a86c47a098a2240027a985f6101fa556f4b3b4ca85a86c47a098a224002e45c6f6101fb556f4b3b4ca85a86c47a098a2240034e207e6101fc556f4b3b4ca85a86c47a098a224003b7e48e6101fd5561024e805464ff000000001916640100000000179055565b600081611bb55750670de0b6b3a76400006113d5565b670de0b6b3a76400005b6001831115611c185760028306611be757611bda8485613375565b9350600283049250611c13565b6002830615611c1357611bfa8482613375565b9050611c068485613375565b9350600260001984010492505b611bbf565b6113d18482613375565b600081611c31575060016113d5565b60015b6001831115611c8d5760028306611c5c57611c4f8485613b5b565b9350600283049250611c88565b6002830615611c8857611c6f8482613b5b565b9050611c7b8485613b5b565b9350600260001984010492505b611c34565b6113d18482613b5b565b61024e5460009062010000900460ff1615156001148015611cc7575061024e546301000000900460ff1615156001145b8015611ce3575061024e54640100000000900460ff1615156001145b8015611d00575061024e5465010000000000900460ff1615156001145b611d51576040805162461bcd60e51b815260206004820181905260248201527f4c6f6f6b7570207461626c652033206d75737420666972737420626520736574604482015290519081900360640190fd5b68056bc75e2d631000008210158015611d725750680ad78ebc5ac620000082105b611dad5760405162461bcd60e51b8152600401808060200182810382526022815260200180613c726022913960400191505060405180910390fd5b670de0b6b3a764000082026f96769950b50d88f413144480000000006b012ced32a16a1b11e826288960261b82066000611de6826122a7565b905060005b81811015611e5a57600081600a0a82600101600a0a8581611e0857fe5b0681611e1057fe5b04905080611e1e5750611e52565b600060c88360250360278110611e3057fe5b600a020182600a8110611e3f57fe5b01549050611e4d8682612205565b955050505b600101611deb565b509195945050505050565b6000670de0b6b3a7640000831015611eb9576040805162461bcd60e51b8152602060048201526012602482015271696e707574206d757374206265203e3d203160701b604482015290519081900360640190fd5b600080611ecf670de0b6b3a76400006002613b5b565b90505b671bc16d674ec800008510612154576b03782dace9d90000000000008510611f1757611f0a856b03782dace9d9000000000000612230565b9450601e8201915061214f565b69de0b6b3a7640000000008510611f4957611f3c8569de0b6b3a764000000000612230565b945060148201915061214f565b6906f05b59d3b2000000008510611f7b57611f6e856906f05b59d3b200000000612230565b9450600f8201915061214f565b683782dace9d900000008510611fab57611f9e85683782dace9d90000000612230565b9450600a8201915061214f565b681bc16d674ec80000008510611fdb57611fce85681bc16d674ec8000000612230565b945060098201915061214f565b680de0b6b3a764000000851061200b57611ffe85680de0b6b3a764000000612230565b945060088201915061214f565b6806f05b59d3b2000000851061203b5761202e856806f05b59d3b2000000612230565b945060078201915061214f565b6803782dace9d9000000851061206b5761205e856803782dace9d9000000612230565b945060068201915061214f565b6801bc16d674ec800000851061209b5761208e856801bc16d674ec800000612230565b945060058201915061214f565b67de0b6b3a7640000085106120c9576120bc8567de0b6b3a76400000612230565b945060048201915061214f565b676f05b59d3b20000085106120f7576120ea85676f05b59d3b200000612230565b945060038201915061214f565b673782dace9d90000085106121255761211885673782dace9d900000612230565b945060028201915061214f565b671bc16d674ec80000851061214f5761214685671bc16d674ec80000612230565b94506001820191505b611ed2565b6c0c9f2c9cd04674edea400000008202600061218f6c08bfade8cec3c65ca697cfbe7261218a846121858b8b613221565b613bb4565b6121b6565b905061219a8161228a565b979650505050505050565b68056bc75e2d631000008106900390565b6000806121c38484613b5b565b90506c0c9f2c9cd04674edea400000006121e1826002835b04613bb4565b816121e857fe5b04949350505050565b606481606481106121fe57fe5b0154905081565b6000806122128484613b5b565b90506b012ced32a16a1b11e826288960261b6121e1826002836121db565b60008061224584670de0b6b3a7640000613b5b565b9050826121e1826002836121db565b6000629896806305f5e100830604610db983826008612a03565b6000633b9aca006402540be400830604610db98382600a612a03565b600064174876e80064e8d4a51000830604610db98382600c612a03565b6000805b82156113d557600a830492506001016122ab565b6000816122dc57506b012ced32a16a1b11e826288960261b6113d5565b6b012ced32a16a1b11e826288960261b5b60018311156123465760028306612315576123088485612205565b9350600283049250612341565b6002830615612341576123288482612205565b90506123348485612205565b9350600260001984010492505b6122ed565b6113d18482612205565b6f96769950b50d88f413144480000000006064556f259da6542d43623d04c51120000000006065556f12ced32a16a1b11e82628890000000006066556f096769950b50d88f41314448000000006067556f04b3b4ca85a86c47a098a224000000006068556f0259da6542d43623d04c5112000000006069556f012ced32a16a1b11e826288900000000606a556e96769950b50d88f413144480000000606b556e4b3b4ca85a86c47a098a2240000000606c556e259da6542d43623d04c51120000000606d556e12ced32a16a1b11e82628890000000606e556e096769950b50d88f41314448000000606f556e04b3b4ca85a86c47a098a2240000006070556e0259da6542d43623d04c51120000006071556e012ced32a16a1b11e82628890000006072556d96769950b50d88f41314448000006073556d4b3b4ca85a86c47a098a224000006074556d259da6542d43623d04c5112000006075556d12ced32a16a1b11e8262889000006076556d096769950b50d88f4131444800006077556d04b3b4ca85a86c47a098a22400006078556d0259da6542d43623d04c511200006079556d012ced32a16a1b11e82628890000607a556c96769950b50d88f41314448000607b556c4b3b4ca85a86c47a098a224000607c556c259da6542d43623d04c5112000607d556c12ced32a16a1b11e8262889000607e556c096769950b50d88f4131444800607f556c04b3b4ca85a86c47a098a224006080556c0259da6542d43623d04c5112006081556c012ced32a16a1b11e8262889006082556b96769950b50d88f4131444806083556b4b3b4ca85a86c47a098a22406084556b259da6542d43623d04c511206085556b12ced32a16a1b11e826288906086556b096769950b50d88f413144486087556b04b3b4ca85a86c47a098a2246088556b0259da6542d43623d04c51126089556b012ced32a16a1b11e8262889608a556a96769950b50d88f4131444608b556a4b3b4ca85a86c47a098a22608c556a259da6542d43623d04c511608d556a12ced32a16a1b11e826288608e556a096769950b50d88f413144608f556a04b3b4ca85a86c47a098a26090556a0259da6542d43623d04c516091556a012ced32a16a1b11e826286092556996769950b50d88f41314609355694b3b4ca85a86c47a098a60945569259da6542d43623d04c56095556912ced32a16a1b11e826260965569096769950b50d88f41316097556904b3b4ca85a86c47a098609855690259da6542d43623d04c60995569012ced32a16a1b11e826609a556896769950b50d88f413609b55684b3b4ca85a86c47a09609c5568259da6542d43623d04609d556812ced32a16a1b11e82609e5568096769950b50d88f41609f556804b3b4ca85a86c47a060a055680259da6542d43623d060a15568012ced32a16a1b11e860a2556796769950b50d88f460a355674b3b4ca85a86c47a60a45567259da6542d43623d60a5556712ced32a16a1b11e60a65567096769950b50d88f60a7556704b3b4ca85a86c4760a855670259da6542d4362360a95567012ced32a16a1b1160aa556696769950b50d8860ab55664b3b4ca85a86c460ac5566259da6542d436260ad556612ced32a16a1b160ae5566096769950b50d860af556604b3b4ca85a86c60b055660259da6542d43660b15566012ced32a16a1b60b2556596769950b50d60b355654b3b4ca85a8660b45565259da6542d4360b5556512ced32a16a160b65565096769950b5060b7556504b3b4ca85a860b855650259da6542d460b95565012ced32a16a60ba556496769950b560bb55644b3b4ca85a60bc5564259da6542d60bd556412ced32a1660be5564096769950b60bf556404b3b4ca8560c055640259da654260c15564012ced32a160c255639676995060c355634b3b4ca860c45563259da65460c5556312ced32a60c655630967699560c75561024e805461ff001916610100179055565b60c882602781106128f357fe5b600a020181600a811061290257fe5b01549150829050565b6000806000806129208564e8d4a51000613b5b565b94506129396c1235995e1e4b3c4c2e092eb92a866121b6565b94506129448561226e565b945068056bc75e2d631000008510801561295c575060015b156129a25761297468056bc75e2d6310000086613bb4565b91506f259da6542d43623d04c5112000000000905061299b8161299684611c97565b612205565b93506129f1565b68056bc75e2d631000006129b5866121a5565b03925082850391506129da60026129d58568056bc75e2d63100000613bf8565b611c22565b90506129ee816129e984611c97565b613b5b565b93505b6129fa84610d95565b95945050505050565b60006005831015612a2257612a1b8483600a0a613bf8565b9050610db9565b60058310610db957612a378483600a0a613bf8565b600101949350505050565b600081606481106121fe57fe5b600080556f35326198caa4cf0398dd2df4a401fff860019081556f3f43136bbc1145a3d84ccd8fde8050606002556f44fcdaff61cc4ceae78af7acfc2dcb346003556f480ac4b15dff81588c37988631acc6496004556f499e9cc45b22529d4b6abaa6c727fa206005556f4a6bd6a98878b7e749bca36139d8d4396006556f4ad349c2776ffca447fac2991089d4966007556f4b07392f52b5c840e2f500a685315e106008556f4b213e68c12287618b384447416493666009556f4b2e4467966940f3e15f711b485e0c54600a556f4b34c83fb45aa7f02968d3f10c7bf179600b556f4b380a61f5a1002253dd42289d3f4eac600c556f4b39ab80a386e7ea4aa8befbc274a593600d556f4b3a7c135de075ee193ece3e8ec0de14600e556f4b3ae45d93e9a0ecb716a961237770f6600f556f4b3b1882e525a71aafc82b1e629fd4f66010556f4b3b32959b519153545560036c6f85a76011556f4b3b3f9ef9cb0196d145667cf95b88916012556f4b3b4623a9e098ae32898d76368829126013556f4b3b496602219bfcc6e3c6e7270bab636014556f4b3b4b072e4fab95795f9efc3a14fb8d6015556f4b3b4bd7c46a16de429d50fdc920a2e56016556f4b3b4c400f782561c5f99e6e8cc40d766017556f4b3b4c7434ff62db4faed2a218e2ba686018556f4b3b4c8e47c30f26069626269d2ce2996019556f4b3b4c9b5124e8aede8e5d050e398bb3601a556f4b3b4ca1d5d5d64c29abc79382732075601b556f4b3b4ca5182e4d510702d61d917cca2f601c556f4b3b4ca6b95a88e103a07462aefce70c601d556f4b3b4ca789f0a6ac656bc95b2f53ca62601e556f4b3b4ca7f23bb592ef30954fa967f1b3601f556f4b3b4ca826613d066a4ac3a84c9c92d46020556f4b3b4ca8407400c03565ccec42b792c36021556f4b3b4ca84d7d629d1e56ce14284400136022556f4b3b4ca85402138b93a82dc995d5ca426023556f4b3b4ca857446c02ce87156cab570f406024556f4b3b4ca858e5983e6c0417304dc6791a6025556f4b3b4ca859b62e5c3ac5fb8ea4e9f5ca6026556f4b3b4ca85a1e796b2227c69cf1f6a8d06027556f4b3b4ca85a529ef295d8e25be0dbbfd66028556f4b3b4ca85a6cb1b64fb17dc94a65fac56029556f4b3b4ca85a79bb182c9dcee37bb10419602a556f4b3b4ca85a803fc91b13f849737803ba602b556f4b3b4ca85a838221924f0d32a723e248602c556f4b3b4ca85a85234dcdec97b4ceebe93f602d556f4b3b4ca85a85f3e3ebbb5cf9464c72a6602e556f4b3b4ca85a865c2efaa2bf9c5adbd8d5602f556f4b3b4ca85a869054821670ee1b5b544b6030556f4b3b4ca85a86aa6745d049970929041e6031556f4b3b4ca85a86b770a7ad35eb8373588d6032556f4b3b4ca85a86bdf5589bac15c17161e66033556f4b3b4ca85a86c137b112e72ae0a69e5b6034556f4b3b4ca85a86c2d8dd4e84b5704eca876035556f4b3b4ca85a86c3a9736c537ab826441a6036556f4b3b4ca85a86c411be7b3add5c12d9c36037556f4b3b4ca85a86c445e402ae8eae095acf6038556f4b3b4ca85a86c45ff6c668675704a8e36039556f4b3b4ca85a86c46d00284553ab825350603a556f4b3b4ca85a86c47384d933c9d5c12960603b556f4b3b4ca85a86c476c731ab04eae0949e603c556f4b3b4ca85a86c478685de6a275704a4a603d556f4b3b4ca85a86c47938f404713ab82524603e556f4b3b4ca85a86c479a13f13589d5c1292603f556f4b3b4ca85a86c479d5649acc4eae09496040556f4b3b4ca85a86c479ef775e86275704a46041556f4b3b4ca85a86c479fc80c06313ab82526042556f4b3b4ca85a86c47a0305715189d5c1296043556f4b3b4ca85a86c47a0647c9c8c4eae0956044556f4b3b4ca85a86c47a07e8f6046275704a6045556f4b3b4ca85a86c47a08b98c22313ab8256046556f4b3b4ca85a86c47a0921d731189d5c136047556f4b3b4ca85a86c47a0955fcb88c4eae096048556f4b3b4ca85a86c47a09700f7c462757056049556f4b3b4ca85a86c47a097d18de2313ab82604a556f4b3b4ca85a86c47a09839d8f1189d5c1604b556f4b3b4ca85a86c47a0986dfe788c4eae1604c556f4b3b4ca85a86c47a09888113c4627570604d556f4b3b4ca85a86c47a098951a9e2313ab8604e556f4b3b4ca85a86c47a0989b9f4f1189d5c604f556f4b3b4ca85a86c47a0989ee1a788c4eae6050556f4b3b4ca85a86c47a098a082d3c4627576051556f4b3b4ca85a86c47a098a15369e2313ac6052556f4b3b4ca85a86c47a098a1bbb4f1189d66053556f4b3b4ca85a86c47a098a1efda788c4eb6054556f4b3b4ca85a86c47a098a209ed3c462756055556f4b3b4ca85a86c47a098a216f69e2313b6056556f4b3b4ca85a86c47a098a21d7b4f1189d6057556f4b3b4ca85a86c47a098a220bda788c4f6058556f4b3b4ca85a86c47a098a2225ed3c46276059556f4b3b4ca85a86c47a098a2232f69e2314605a556f4b3b4ca85a86c47a098a22397b4f118a605b556f4b3b4ca85a86c47a098a223cbda788c5605c556f4b3b4ca85a86c47a098a223e5ed3c462605d556f4b3b4ca85a86c47a098a223f2f69e231605e556f4b3b4ca85a86c47a098a223f97b4f119605f556f4b3b4ca85a86c47a098a223fcbda788c6060556f4b3b4ca85a86c47a098a223fe5ed3c466061556f4b3b4ca85a86c47a098a223ff2f69e236062556f4b3b4ca85a86c47a098a223ff97b4f1260635561024e805460ff19169091179055565b61024e5460009060ff161515600114801561324a575061024e5460ff6101009091041615156001145b6132855760405162461bcd60e51b8152600401808060200182810382526025815260200180613c4d6025913960400191505060405180910390fd5b670de0b6b3a764000083101580156132a45750671bc16d674ec8000083105b6132df5760405162461bcd60e51b8152600401808060200182810382526022815260200180613c726022913960400191505060405180910390fd5b60006132f48468056bc75e2d63100000613b5b565b90506b012ced32a16a1b11e826288960261b600060015b8581116133615761332a6000826064811061332257fe5b015485612205565b92506b012ced32a16a1b11e826288960261b8310613359578293506064816064811061335257fe5b0154820191505b60010161330b565b5061336b81612254565b9695505050505050565b6000806133828484613b5b565b9050670de0b6b3a76400006121e1826002836121db565b6b012ced32a16a1b11e826288960261b6101368190556f4b3b4ca85ac01a706eadf372d36d1338610137556f4b3b4ca85af97066d3d1f05811f9885d610138556f4b3b4ca85b32c65d38f618efbba55f91610139556f4b3b4ca85b6c1c539e1a6d39d07098f561013a556f4b3b4ca85ba5724a033eed36505b34aa61013b556f4b3b4ca85bdec840686398e53b6532d261013c556f4b3b4ca85c181e36cd887046918e938e61013d556f4b3b4ca85c51742d32ad735a52d7570061013e556f4b3b4ca85c8aca2397d2a2207f3f7d4761013f556101408190556f4b3b4ca85a8c8045e0741b9a7e66ef70610141556f4b3b4ca85a923c11b75e1564da09107f610142556f4b3b4ca85a97f7dd8e480f9f12e6632c610143556f4b3b4ca85a9db3a965320a4928fee777610144556f4b3b4ca85aa36f753c1c05631c529d60610145556f4b3b4ca85aa92b41130600ecece184e8610146556f4b3b4ca85aaee70ce9effce69aab9e0e610147556f4b3b4ca85ab4a2d8c0d9f95025b0e8d3610148556f4b3b4ca85aba5ea497c3f6298df165366101495561014a8190556f4b3b4ca85a8757419f07ee5d9d9096fe61014b556f4b3b4ca85a87ea093485ba7c59807dd761014c556f4b3b4ca85a887cd0ca03869c33cfb48b61014d556f4b3b4ca85a890f985f8152bd2c7e3b1a61014e556f4b3b4ca85a89a25ff4ff1edf438c118461014f556f4b3b4ca85a8a35278a7ceb0278f937ca610150556f4b3b4ca85a8ac7ef1ffab726ccc5adeb610151556f4b3b4ca85a8b5ab6b578834c3ef173e7610152556f4b3b4ca85a8bed7e4af64f72cf7c89be610153556101548190556f4b3b4ca85a86d327987d1d0fb611d996610155556f4b3b4ca85a86e1d5277017df6f00d021610156556f4b3b4ca85a86f082b66312af2acce3a2610157556f4b3b4ca85a86ff3045560d7ee9761418610158556f4b3b4ca85a870dddd449084eaafc6183610159556f4b3b4ca85a871c8b633c031e6f5fcbe461015a556f4b3b4ca85a872b38f22efdee36a0533b61015b556f4b3b4ca85a8739e68121f8be00bdf78661015c556f4b3b4ca85a8748941014f38dcdb8b8c761015d5561015e8190556f4b3b4ca85a86c5f1cb08d4ee5ee0cb7f61015f556f4b3b4ca85a86c7698c87879cbdc8ebc3610160556f4b3b4ca85a86c8e14e063a4b1cb860cc610161556f4b3b4ca85a86ca590f84ecf97baf2a99610162556f4b3b4ca85a86cbd0d1039fa7daad492c610163556f4b3b4ca85a86cd489282525639b2bc84610164556f4b3b4ca85a86cec05401050498bf84a1610165556f4b3b4ca85a86d038157fb7b2f7d3a183610166556f4b3b4ca85a86d1afd6fe6a6156ef132a610167556101688190556f4b3b4ca85a86c49f9ce39a84a316264b610169556f4b3b4ca85a86c4c5303d12c9462c5f5c61016a556f4b3b4ca85a86c4eac3968b0de942ab3061016b556f4b3b4ca85a86c51056f003528c5909c961016c556f4b3b4ca85a86c535ea497b972f6f7b2761016d556f4b3b4ca85a86c55b7da2f3dbd285ff4961016e556f4b3b4ca85a86c58110fc6c20759c963061016f556f4b3b4ca85a86c5a6a455e46518b33fdb610170556f4b3b4ca85a86c5cc37af5ca9bbc9fc4b610171556101728190556f4b3b4ca85a86c47dcb797b13a9e89c96610173556f4b3b4ca85a86c4818d68d3e753d1395c610174556f4b3b4ca85a86c4854f582cbafdb9d651610175556f4b3b4ca85a86c4891147858ea7a27377610176556f4b3b4ca85a86c48cd336de62518b10cd610177556f4b3b4ca85a86c49095263735fb73ae53610178556f4b3b4ca85a86c49457159009a55c4c09610179556f4b3b4ca85a86c4981904e8dd4f44e9ef61017a556f4b3b4ca85a86c49bdaf441b0f92d880561017b5561017c8190556f4b3b4ca85a86c47a69bbab21f7640fa661017d556f4b3b4ca85a86c47ac9ed3403eec81f4d61017e556f4b3b4ca85a86c47b2a1ebce5e62c2ef561017f556f4b3b4ca85a86c47b8a5045c7dd903e9d610180556f4b3b4ca85a86c47bea81cea9d4f44e45610181556f4b3b4ca85a86c47c4ab3578bcc585dee610182556f4b3b4ca85a86c47caae4e06dc3bc6d97610183556f4b3b4ca85a86c47d0b16694fbb207d41610184556f4b3b4ca85a86c47d6b47f231b2848ceb610185556101868190556f4b3b4ca85a86c47a1328aff03256ce5d610187556f4b3b4ca85a86c47a1cc73da064ad9cbb610188556f4b3b4ca85a86c47a2665cb5097046b18610189556f4b3b4ca85a86c47a30045900c95b397661018a556f4b3b4ca85a86c47a39a2e6b0fbb207d361018b556f4b3b4ca85a86c47a434174612e08d63161018c556f4b3b4ca85a86c47a4ce00211605fa48e61018d556f4b3b4ca85a86c47a567e8fc192b672eb61018e556f4b3b4ca85a86c47a601d1d71c50d414961018f55610190556f4b3b4ca85a86c47a0a80639e6b6f14a3610191556f4b3b4ca85a86c47a0b76a4fcd6de2946610192556f4b3b4ca85a86c47a0c6ce65b424d3de9610193556f4b3b4ca85a86c47a0d6327b9adbc528c610194556f4b3b4ca85a86c47a0e596918192b672f610195556f4b3b4ca85a86c47a0f4faa76849a7bd2610196556f4b3b4ca85a86c47a1045ebd4f0099075610197556f4b3b4ca85a86c47a113c2d335b78a518610198556f4b3b4ca85a86c47a12326e91c6e7b9ba6101995561024e805463ff00000019166301000000179055565b600082613b6a575060006113d5565b82820282848281613b7757fe5b0414610db95760405162461bcd60e51b8152600401808060200182810382526021815260200180613c946021913960400191505060405180910390fd5b600082820183811015610db95760405162461bcd60e51b8152600401808060200182810382526021815260200180613c946021913960400191505060405180910390fd5b6000808211613c41576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b60008284816121e857fefe4c6f6f6b7570207461626c6573203120262032206d75737420666972737420626520736574696e7075742078206d7573742062652077697468696e2072616e6765205b312c325b75696e74206f766572666c6f772066726f6d206d756c7469706c69636174696f6ea265627a7a7231582017a051d09a0940c56fc2604ed1ba47a74e59b940900fcb8951b76649db1e2ad364736f6c63430005100032

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.