ETH Price: $1,943.42 (-1.55%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Submit Update231506232025-08-16 2:28:59190 days ago1755311339IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000182240.2820827
Submit Update231502792025-08-16 1:20:11190 days ago1755307211IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.00020730.31812509
Submit Update231498402025-08-15 23:51:23190 days ago1755301883IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000201180.3074171
Submit Update231496142025-08-15 23:05:59190 days ago1755299159IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000326670.49697672
Submit Update231491952025-08-15 21:41:59190 days ago1755294119IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000254940.3929492
Submit Update231490432025-08-15 21:11:35190 days ago1755292295IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000252310.38891802
Submit Update231488972025-08-15 20:42:23190 days ago1755290543IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000293180.45386968
Submit Update231487622025-08-15 20:15:23190 days ago1755288923IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000319440.49237744
Submit Update231486302025-08-15 19:48:59191 days ago1755287339IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000323280.58256533
Submit Update231484892025-08-15 19:20:47191 days ago1755285647IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000332470.51460275
Submit Update231482762025-08-15 18:37:59191 days ago1755283079IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000318930.48316543
Submit Update231482332025-08-15 18:29:23191 days ago1755282563IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000331480.50216124
Submit Update231465882025-08-15 12:59:11191 days ago1755262751IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.00025690.39091004
Submit Update231464412025-08-15 12:29:47191 days ago1755260987IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.00070141.06714732
Submit Update231462942025-08-15 11:59:59191 days ago1755259199IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000237390.36588955
Submit Update231459882025-08-15 10:58:35191 days ago1755255515IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000535310.82504082
Submit Update231458382025-08-15 10:28:35191 days ago1755253715IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000262080.40393452
Submit Update231451092025-08-15 8:02:11191 days ago1755244931IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000301870.46527028
Submit Update231449672025-08-15 7:33:23191 days ago1755243203IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.00064070.92384574
Submit Update231448022025-08-15 7:00:11191 days ago1755241211IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000217460.3337342
Submit Update231446592025-08-15 6:31:23191 days ago1755239483IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000280160.43179036
Submit Update231445052025-08-15 6:00:11191 days ago1755237611IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000202720.31113603
Submit Update231443632025-08-15 5:31:35191 days ago1755235895IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000556260.85729212
Submit Update231442262025-08-15 5:04:11191 days ago1755234251IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000258150.3978737
Submit Update231440842025-08-15 4:35:23191 days ago1755232523IN
0x2dDDf3BB...20815d5E0
0.00004 ETH0.000201320.3102924
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Store Values Wit...231506232025-08-16 2:28:59190 days ago1755311339
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231502792025-08-16 1:20:11190 days ago1755307211
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231498402025-08-15 23:51:23190 days ago1755301883
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231496142025-08-15 23:05:59190 days ago1755299159
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231491952025-08-15 21:41:59190 days ago1755294119
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231490432025-08-15 21:11:35190 days ago1755292295
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231488972025-08-15 20:42:23190 days ago1755290543
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231487622025-08-15 20:15:23190 days ago1755288923
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231486302025-08-15 19:48:59191 days ago1755287339
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231484892025-08-15 19:20:47191 days ago1755285647
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231482762025-08-15 18:37:59191 days ago1755283079
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231482332025-08-15 18:29:23191 days ago1755282563
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231465882025-08-15 12:59:11191 days ago1755262751
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231464412025-08-15 12:29:47191 days ago1755260987
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231462942025-08-15 11:59:59191 days ago1755259199
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231459882025-08-15 10:58:35191 days ago1755255515
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231458382025-08-15 10:28:35191 days ago1755253715
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231451092025-08-15 8:02:11191 days ago1755244931
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231449672025-08-15 7:33:23191 days ago1755243203
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231448022025-08-15 7:00:11191 days ago1755241211
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231446592025-08-15 6:31:23191 days ago1755239483
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231445052025-08-15 6:00:11191 days ago1755237611
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231443632025-08-15 5:31:35191 days ago1755235895
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231442262025-08-15 5:04:11191 days ago1755234251
0x2dDDf3BB...20815d5E0
0.00004 ETH
Store Values Wit...231440842025-08-15 4:35:23191 days ago1755232523
0x2dDDf3BB...20815d5E0
0.00004 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RewardProxy

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2025-07-01
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;

struct RecordReceipt {
    RecordKey record;
    Record old_record;
    Record new_record;
}

struct Record {
    uint64 height;
    uint48 timestamp;
    uint240 value;
}

struct RecordKey {
    uint8 systemid;
    uint64 cid;
    uint16 typ;
}

interface Oracle {
    function storeValuesWithReceipt(bytes memory dat) external payable returns (RecordReceipt[] memory receipts);
    function checkUpdatesWithReceipt(bytes memory dat) external view returns (RecordReceipt[] memory receipts);
}

contract RewardProxy { 

    event RewardsSimulated(
        address updater,
        uint8 system_id,
        uint64 chain_id,
        uint240 new_value,
        uint240 raw_deviation,
        uint48 time_since,
        uint256 time_reward, 
        uint256 deviation_reward,
        int256 reward_multiplier
    );

    event OracleUpdated(
        address updater,
        uint8 system_id,
        uint64 chain_id,
        uint240 new_value,
        uint240 raw_deviation,
        uint48 time_since,
        uint256 time_reward, 
        uint256 deviation_reward,
        int256 reward_multiplier
    );

    event RewardsToggled(
        bool rewards_on
    );

    event RewardsFreeze(
        bool rewards_frozen
    );

    struct TotalReward {
        address addr;
        uint256 total_rewards;
    }

    struct EnhancedReward {
        uint8 system_id;
        uint64 chain_id;
        uint64 height;
        uint240 gas_price;
        uint256 time_reward;
        uint256 deviation_reward;
    }

    struct ControlOutput {
        int80 kp;
        int80 ki;
        int80 co_bias;
    } 
    struct Coefficients {
        int96 zero;
        int96 one;
        int96 two;
        int96 three;
    } 
    struct RewardLimits {
        int256 min_time_reward;
        int256 max_time_reward;
        int256 min_deviation_reward;
        int256 max_deviation_reward;
    }

    int256 constant EIGHTEEN_DECIMAL_NUMBER = 10**18;
    int256 constant THIRTY_SIX_DECIMAL_NUMBER = 10**36;
    uint256 constant EIGHTEEN_DECIMAL_NUMBER_U = 10**18;

    uint256 constant EMA_ALPHA = 818181818181818176; // 1 - 2/11 
    uint256 constant ALPHA_COMP = EIGHTEEN_DECIMAL_NUMBER_U - EMA_ALPHA;


    mapping(uint72 => int256) private errorIntegral;
    mapping(uint72 => int256) private lastOutput; 

    uint32 private minWindowSize;
    
    mapping(address => uint256) private rewards;
    uint256 private totalRewards;
    mapping(uint72 => uint256) private insertedCount;   // Number of elements inserted so far, up to N
    mapping(uint72 => uint256) private scales;

    mapping(uint72 => uint256) private intervalEMAs;

    mapping(address => bool) private authorities;

    mapping(uint256 => address) private updaters;
    uint256 public updatersCount;

    bool private frozen;
    bool private rewardsEnabled;

    uint16 private rewardType;
 
    int256 minTimeReward;
    int256 maxTimeReward;
    int256 minDeviationReward;
    int256 maxDeviationReward;

    ControlOutput private controlOutput;

    int96 private coeffZero;
    int96 private coeffOne;
    int96 private coeffTwo;
    int96 private coeffThree;  

    int256 outputUpperBound;  
    int256 outputLowerBound;  
    uint256 targetTimeSince;
 
    Oracle private oracle;

    constructor(address o) {
        authorities[o] = true;
        frozen = true;
        rewardsEnabled = false;
    }

    function setOracle(address a) public {
        require(authorities[msg.sender], "Only owner can modify values");
        oracle = Oracle(a);
    }

    function setFreeze(bool f) public {
        require(authorities[msg.sender], "Only owner can modify values");
        frozen = f;
        emit RewardsFreeze(f);
    }

    function setRewardsProcess(bool f) public {
        require(authorities[msg.sender], "Only owner can modify values");
        rewardsEnabled = f;
        emit RewardsToggled(f);
    }

    function setRewardType(uint16 rType) public {  
        require(authorities[msg.sender], "Only owner can set reward type");
        rewardType = rType;
    }

    function updateScales(uint72[] calldata scid, uint256[] calldata  scale) public {
        require(authorities[msg.sender], "Only owner can set scales");
        require(scid.length == scale.length, "scid and scale length mismatch");
        for (uint256 i = 0; i < scid.length; ++i) {
            scales[scid[i]] = scale[i];
        }
    }

    function updateErrorIntegrals(uint72[] calldata scid, int256[] calldata errorIntegrals) public {
        require(authorities[msg.sender], "Only owner can set error integrals");
        require(scid.length == errorIntegrals.length, "scid and integrals length mismatch");
        for (uint256 i = 0; i < scid.length; ++i) {
            errorIntegral[scid[i]] = errorIntegrals[i];
        }
    }

    function getErrorIntegrals(uint72 scid) public view returns (int256) {
        return errorIntegral[scid];
    }

    function getLastOutput(uint72 scid) public view returns (int256) {
        return lastOutput[scid];
    }    

    function updateIntervalEMA(uint72[] calldata scid, uint256[] calldata  lIntervalEMAs) public {
        require(authorities[msg.sender], "Only owner can set interval EMAs");
        require(scid.length == lIntervalEMAs.length, "scid and emas length mismatch");
        for (uint256 i = 0; i < scid.length; ++i) {
            intervalEMAs[scid[i]] = lIntervalEMAs[i];
        }
    }

    function getFromIntervalEMAs(uint72 scid) public view returns (uint256) {
        return intervalEMAs[scid];
    }

    function setAuthority(address a, bool stat) public {  
        require(authorities[msg.sender], "Only owner can modify authorities"); 
        if (a != msg.sender) {
            require(stat, "Cannot revoke own access");
        }
       
        authorities[a] = stat;
    }

    function getTotalRewards() public view returns (uint256) {
        return totalRewards;
    }

    function getAddressRewards(address addr) public view returns (uint256) {
        return rewards[addr];
    }

    function getRewardType() public view returns (uint16) {
        return rewardType;
    }

    function getCoefficients() public view returns (Coefficients memory) {
        return Coefficients(coeffZero, coeffOne, coeffTwo, coeffThree);
    }

    function getScales(uint72 scid) public view returns (uint256) {
        return scales[scid];
    }

    function getGameParams() public view returns (
        ControlOutput memory,
        int256,
        int256,
        uint256,
        uint32,
        RewardLimits memory
    ) {
        return (
            controlOutput,
            outputUpperBound,
            outputLowerBound,
            targetTimeSince,
            minWindowSize,
            RewardLimits(minTimeReward, maxTimeReward, minDeviationReward, maxDeviationReward)
        );
    }


    function getOracleAddress() public view returns (address) {
        return address(oracle);
    }

    function setParams(
        ControlOutput calldata co, 
        int256 lOutputUpperBound,
        int256 lOutputLowerBound,
        uint256 lTargetTimeSince,
        RewardLimits calldata rl,
        uint32 lMinWindowSize
    ) public {
        require(authorities[msg.sender], "Only owner can set params");
        controlOutput = co;
        outputUpperBound = lOutputUpperBound;
        outputLowerBound = lOutputLowerBound;
        targetTimeSince = lTargetTimeSince;
        minWindowSize = lMinWindowSize;

        minTimeReward = rl.min_time_reward;
        maxTimeReward = rl.max_time_reward;
        minDeviationReward = rl.min_deviation_reward;
        maxDeviationReward = rl.max_deviation_reward;
    }

    function updateCoeffs(Coefficients calldata coeffs) public {
        require(authorities[msg.sender], "Only owner can update coefficients");
        coeffZero = coeffs.zero;
        coeffOne = coeffs.one;
        coeffTwo = coeffs.two;
        coeffThree = coeffs.three;
    }

    function initialSetParams(
        address lOracle,
        int256 lOutputUpperBound,
        int256 lOutputLowerBound,
        uint256 lTargetTimeSince,
        RewardLimits calldata rl,
        ControlOutput calldata co, 
        Coefficients calldata coeffs,
        uint32 lMinWindowSize,
        uint16 lRewardType
    ) public {
        setParams(
            co,
            lOutputUpperBound,
            lOutputLowerBound,
            lTargetTimeSince,
            rl,
            lMinWindowSize
        );
        setOracle(lOracle);
        setRewardType(lRewardType);
        updateCoeffs(coeffs);
    }

    // in case of a security breach, the owner can modify the reward values
    function ownerModifyReward(address ow, uint256 amount, uint256 tr) public {
        require(authorities[msg.sender], "Only owner can modify values");
        rewards[ow] = amount;
        totalRewards = tr;
    }

    function addUpdater(address updater) internal {
        require(updater != address(0), "Updater address is empty");
        if (rewards[updater] == 0) {
            updaters[updatersCount] = updater;
            updatersCount = updatersCount + 1;
        }
    }

    function scidToUint72(uint8 systemID, uint64 chainID) internal pure returns (uint72 scid) {
        assembly {
            scid := systemID
            scid := shl(0x40, scid)
            scid := add(scid, chainID)
        }
        return scid;
    }

    function submitUpdate(bytes memory dat) public payable returns ( EnhancedReward[] memory enhancedRewards) {
        require(!frozen, "Rewards contract is frozen");

        addUpdater(msg.sender);
        RecordReceipt[] memory receipts = oracle.storeValuesWithReceipt{value: msg.value}(dat);
        enhancedRewards = new EnhancedReward[](receipts.length);

        RecordReceipt memory rec;
        uint240 raw_deviation;
        uint256 l_total_rewards = 0;
        for (uint256 idx = 0; idx < receipts.length; idx++) {
            rec = receipts[idx];
            if (rec.record.typ != rewardType) {
                continue;
            }

            uint72 scid = scidToUint72(rec.record.systemid, rec.record.cid);
            uint256 deviation;
            {
                uint256 target_scale;
                target_scale = scales[scid]; 
                if (target_scale == 0) {
                    continue;
                }

                if (rec.new_record.height == 0) {
                    // emit event?
                    enhancedRewards[idx] = EnhancedReward(rec.record.systemid,rec.record.cid,rec.old_record.height,rec.old_record.value,0,0);
                    continue;
                }
                
                if (rec.new_record.value > rec.old_record.value ) {
                    raw_deviation = rec.new_record.value - rec.old_record.value;
                } else {
                    raw_deviation = rec.old_record.value - rec.new_record.value;
                }

                deviation = calcDeviation(target_scale, uint256(raw_deviation));
            }
            uint256 time_since = uint256(rec.new_record.timestamp - rec.old_record.timestamp) * EIGHTEEN_DECIMAL_NUMBER_U;

            //  calculate reward
            (int256 time_reward, int256 deviation_reward) = calcReward(int256(time_since)/1000, int256(deviation));

            int256 reward_mult = updateRewardMult(scid, insertedCount[scid], time_since/1000);
            insertedCount[scid] = insertedCount[scid] + 1;

            uint256 time_reward_adj = uint256(reward_mult * time_reward / EIGHTEEN_DECIMAL_NUMBER);
            uint256 deviation_reward_adj = uint256(reward_mult * deviation_reward / EIGHTEEN_DECIMAL_NUMBER);

             if (rewardsEnabled) {
                rewards[msg.sender] +=  time_reward_adj + deviation_reward_adj;
                emit OracleUpdated( msg.sender,
                        rec.record.systemid,
                        rec.record.cid,
                        rec.new_record.value, 
                        raw_deviation,
                        uint48(time_since/10**21),
                        time_reward_adj, 
                        deviation_reward_adj,
                        reward_mult);
                l_total_rewards += time_reward_adj + deviation_reward_adj;
            } else {
                emit RewardsSimulated(msg.sender,
                    rec.record.systemid,
                    rec.record.cid,
                    rec.new_record.value, 
                    raw_deviation,
                    uint48(time_since/10**21),
                    time_reward_adj, 
                    deviation_reward_adj,
                    reward_mult);
            }

            enhancedRewards[idx] = EnhancedReward(rec.record.systemid,rec.record.cid,rec.new_record.height,rec.new_record.value,time_reward_adj,deviation_reward_adj);
        }
        totalRewards += l_total_rewards;

        return enhancedRewards;
    }

 

function checkRewards(bytes memory dat) public view returns ( EnhancedReward[] memory enhancedRewards) {
        require(!frozen, "Rewards contract is frozen");
        RecordReceipt[] memory receipts = oracle.checkUpdatesWithReceipt(dat); 
        enhancedRewards = new EnhancedReward[](receipts.length);

        int256[] memory local_error_integrals = new int256[](receipts.length);
        uint256[] memory local_counts = new uint256[](receipts.length);
        uint256[] memory local_inverval_emas = new uint256[](receipts.length);

        for (uint256 idx = 0; idx < receipts.length; idx++) {
            RecordReceipt memory rec = receipts[idx];
            RecordKey memory recordkey = rec.record;
            if (recordkey.typ != rewardType) {
                continue;
            }

            if (scales[scidToUint72(recordkey.systemid, recordkey.cid)] == 0) {
                continue;
            }

            if (rec.new_record.height == 0) {
                enhancedRewards[idx] = EnhancedReward(recordkey.systemid,recordkey.cid,rec.old_record.height,rec.old_record.value,0,0);
                continue;
            }

            uint256 deviation;
            {    
                uint240 raw_deviation;
                    if (rec.new_record.value > rec.old_record.value ) {
                        raw_deviation = rec.new_record.value - rec.old_record.value;
                    } else {
                        raw_deviation = rec.old_record.value - rec.new_record.value;
                    }    
                deviation = calcDeviation(scales[scidToUint72(recordkey.systemid, recordkey.cid)], uint256(raw_deviation));
            }
            uint256 time_since = uint256(rec.new_record.timestamp - rec.old_record.timestamp) * EIGHTEEN_DECIMAL_NUMBER_U;
            int256 reward_mult;
            {
                (uint256 nidx, bool f) = checkPresence(receipts,  idx,  recordkey.systemid, recordkey.cid);
                uint256 _count;
                if (f) {
                    _count = local_counts[nidx]; 
                } else {
                    _count = insertedCount[scidToUint72(recordkey.systemid, recordkey.cid)]; 
                }

                if (f) {
                uint256 _inverval_ema  = getIntervalEMA(local_inverval_emas[nidx], time_since/1000);
                local_inverval_emas[nidx] = _inverval_ema;
            
                    if (_count + 1 < minWindowSize) {
                        reward_mult = EIGHTEEN_DECIMAL_NUMBER;
                    } else {
                        int256 u_err = calcError(int256(targetTimeSince), int256(_inverval_ema) );
                        int256 _error_integral  = local_error_integrals[nidx];
                        reward_mult = boundPiOutput(getRawPiOutput(u_err, _error_integral + u_err));
                        local_error_integrals[nidx] = clampErrorIntegral(reward_mult, _error_integral, _error_integral + u_err, u_err); 
                    }
                } else {
                    uint256 _inverval_ema  = getIntervalEMA(intervalEMAs[scidToUint72(recordkey.systemid, recordkey.cid)], time_since/1000);
                    local_inverval_emas[idx] = _inverval_ema;

                    if (_count + 1 < minWindowSize) {
                        reward_mult = EIGHTEEN_DECIMAL_NUMBER;
                    } else {
                        int256 u_err = calcError(int256(targetTimeSince), int256(_inverval_ema) );
                        int256 _error_integral  =  errorIntegral[scidToUint72(recordkey.systemid, recordkey.cid)]; 
                        reward_mult = boundPiOutput(getRawPiOutput(u_err, _error_integral + u_err));
                        local_error_integrals[idx] = clampErrorIntegral(reward_mult, _error_integral, _error_integral + u_err, u_err); 
                    }
                }
                
                if (f) {
                    local_counts[nidx] = _count + 1;
                } else {
                    local_counts[idx] = _count + 1;
                }
            }

            (int256 time_reward, int256 deviation_reward) = calcReward(int256(time_since)/1000, int256(deviation));
            enhancedRewards[idx] = EnhancedReward(recordkey.systemid,
                recordkey.cid,
                rec.old_record.height,
                rec.old_record.value,
                uint256(reward_mult * time_reward / EIGHTEEN_DECIMAL_NUMBER),
                uint256(reward_mult * deviation_reward / EIGHTEEN_DECIMAL_NUMBER));
        }

        return enhancedRewards;
    } 

    function checkPresence(RecordReceipt[] memory p, uint256 idx, uint8 systemid, uint64 chainid) private pure returns (uint256, bool) {
         for (uint256 i = 0; i < p.length; ++i) {
            if (systemid != 0 && chainid != 0 && p[i].record.systemid == systemid && p[i].record.cid == chainid) {
               if (i > idx) {
                    return (i, true);
                }
            }
        }
        return (0, false);
    }

    function max(int256 a, int256 b) private pure returns (int256) {
        return a >= b ? a : b;
    }

    function min(int256 a, int256 b) private pure returns (int256) {
        return a < b ? a : b;
    }

    function boundPiOutput(int256 piOutput) private view returns (int256 boundedPiOutput) {
        if (piOutput < outputLowerBound) {
            return outputLowerBound;
        } else if (piOutput > outputUpperBound) {
            return outputUpperBound;
        }
        return piOutput;
    }

    function clampErrorIntegral(int256 boundedPiOutput, int256 lErrorIntegral, int256 newErrorIntegral, int256 newArea) private view returns (int256) {
        // This logic is strictly for a *reverse-acting* controller where controller
        // output is opposite sign of error(kp and ki < 0)
        if (boundedPiOutput == outputLowerBound && newArea > 0 && lErrorIntegral > 0) {
            return newErrorIntegral - newArea;
        } else if (boundedPiOutput == outputUpperBound && newArea < 0 && lErrorIntegral < 0) {
            return newErrorIntegral - newArea;
        }
        return newErrorIntegral;
    }

    function getRawPiOutput(int256 err, int256 errI ) private view returns (int256 piOutput) {
        // output = P + I = Kp * error + Ki * errorI 
        int256 p_output = (err * int256(controlOutput.kp)) / EIGHTEEN_DECIMAL_NUMBER;
        int256 i_output = (errI * int256(controlOutput.ki)) / EIGHTEEN_DECIMAL_NUMBER;
        return int256(controlOutput.co_bias) + p_output + i_output;
    }

    function calcError(int256 target, int256 measured) private pure returns (int256) {
        return (target - measured) * EIGHTEEN_DECIMAL_NUMBER / target;
    }

    function calcDeviation(uint256 targetScale, uint256 valueDiff) private pure returns (uint256) {
        return valueDiff*EIGHTEEN_DECIMAL_NUMBER_U/targetScale;
    }

    function updateRewardMult(uint72 scid, uint256 lCount, uint256 timeSince) private returns (int256 rewardMult) {
        // Update oracle update_interval
        uint256 _inverval_ema = getIntervalEMA(intervalEMAs[scid], timeSince);
        intervalEMAs[scid] = _inverval_ema;

        // Dont use feedback if number of samples is lt window size
        if (lCount + 1 < minWindowSize) {
            return EIGHTEEN_DECIMAL_NUMBER;
        }
        //  update feedback mechanism and get current reward multiplier
        return updateFeedback(scid, calcError(int256(targetTimeSince), int256(_inverval_ema) ));
    }
  
    function calcTimeReward(int256 timeSince) private view returns (int256) {       
        return max(
                min(    
                    int256(coeffZero)*timeSince/EIGHTEEN_DECIMAL_NUMBER + 
                    int256(coeffTwo)*timeSince*timeSince/THIRTY_SIX_DECIMAL_NUMBER, 
                    maxTimeReward), 
                minTimeReward);
    }

    function calcDeviationReward(int256 deviation) private view returns (int256) {
        return max(
                min(
                    int256(coeffOne)*deviation/EIGHTEEN_DECIMAL_NUMBER +
                    int256(coeffThree)*deviation*deviation/THIRTY_SIX_DECIMAL_NUMBER,
                    maxDeviationReward),
                minDeviationReward);
    } 

    function calcReward(int256 timeSince, int256 deviation) private view returns (int256, int256) {
        return (calcTimeReward(timeSince), calcDeviationReward(deviation));
    }

    function getIntervalEMA(uint256 lIntervalEMA, uint256 newValue) private pure returns (uint256) {
        return (ALPHA_COMP * newValue + EMA_ALPHA * lIntervalEMA) / EIGHTEEN_DECIMAL_NUMBER_U;
    }
    
    function updateFeedback(uint72 scid, int256 err ) private returns (int256 boundedPiOutput) {
        // update feedback mechanism
        int256 _error_integral = errorIntegral[scid];
        int256 _new_error_integral = _error_integral + err;

        boundedPiOutput = boundPiOutput(getRawPiOutput(err, _new_error_integral));

        errorIntegral[scid] = clampErrorIntegral(boundedPiOutput, _error_integral, _new_error_integral, err);
        lastOutput[scid] = boundedPiOutput;

        return boundedPiOutput; 
    }

    function getUpdatersChunk(uint256 start, uint256 count) public view returns (TotalReward[] memory rewardsChunk) { 
        rewardsChunk = new TotalReward[](count);
        for (uint256 i = 0; i < count; ++i) { 
            address updater = updaters[start + i];
            if (updater == address(0)) {
                break;
            }
            rewardsChunk[i] = TotalReward(updater, rewards[updater]);
        }

        return rewardsChunk;
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"o","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint8","name":"system_id","type":"uint8"},{"indexed":false,"internalType":"uint64","name":"chain_id","type":"uint64"},{"indexed":false,"internalType":"uint240","name":"new_value","type":"uint240"},{"indexed":false,"internalType":"uint240","name":"raw_deviation","type":"uint240"},{"indexed":false,"internalType":"uint48","name":"time_since","type":"uint48"},{"indexed":false,"internalType":"uint256","name":"time_reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deviation_reward","type":"uint256"},{"indexed":false,"internalType":"int256","name":"reward_multiplier","type":"int256"}],"name":"OracleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"rewards_frozen","type":"bool"}],"name":"RewardsFreeze","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"updater","type":"address"},{"indexed":false,"internalType":"uint8","name":"system_id","type":"uint8"},{"indexed":false,"internalType":"uint64","name":"chain_id","type":"uint64"},{"indexed":false,"internalType":"uint240","name":"new_value","type":"uint240"},{"indexed":false,"internalType":"uint240","name":"raw_deviation","type":"uint240"},{"indexed":false,"internalType":"uint48","name":"time_since","type":"uint48"},{"indexed":false,"internalType":"uint256","name":"time_reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"deviation_reward","type":"uint256"},{"indexed":false,"internalType":"int256","name":"reward_multiplier","type":"int256"}],"name":"RewardsSimulated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"rewards_on","type":"bool"}],"name":"RewardsToggled","type":"event"},{"inputs":[{"internalType":"bytes","name":"dat","type":"bytes"}],"name":"checkRewards","outputs":[{"components":[{"internalType":"uint8","name":"system_id","type":"uint8"},{"internalType":"uint64","name":"chain_id","type":"uint64"},{"internalType":"uint64","name":"height","type":"uint64"},{"internalType":"uint240","name":"gas_price","type":"uint240"},{"internalType":"uint256","name":"time_reward","type":"uint256"},{"internalType":"uint256","name":"deviation_reward","type":"uint256"}],"internalType":"struct RewardProxy.EnhancedReward[]","name":"enhancedRewards","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAddressRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCoefficients","outputs":[{"components":[{"internalType":"int96","name":"zero","type":"int96"},{"internalType":"int96","name":"one","type":"int96"},{"internalType":"int96","name":"two","type":"int96"},{"internalType":"int96","name":"three","type":"int96"}],"internalType":"struct RewardProxy.Coefficients","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint72","name":"scid","type":"uint72"}],"name":"getErrorIntegrals","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint72","name":"scid","type":"uint72"}],"name":"getFromIntervalEMAs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGameParams","outputs":[{"components":[{"internalType":"int80","name":"kp","type":"int80"},{"internalType":"int80","name":"ki","type":"int80"},{"internalType":"int80","name":"co_bias","type":"int80"}],"internalType":"struct RewardProxy.ControlOutput","name":"","type":"tuple"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint32","name":"","type":"uint32"},{"components":[{"internalType":"int256","name":"min_time_reward","type":"int256"},{"internalType":"int256","name":"max_time_reward","type":"int256"},{"internalType":"int256","name":"min_deviation_reward","type":"int256"},{"internalType":"int256","name":"max_deviation_reward","type":"int256"}],"internalType":"struct RewardProxy.RewardLimits","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint72","name":"scid","type":"uint72"}],"name":"getLastOutput","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOracleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardType","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint72","name":"scid","type":"uint72"}],"name":"getScales","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getUpdatersChunk","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"total_rewards","type":"uint256"}],"internalType":"struct RewardProxy.TotalReward[]","name":"rewardsChunk","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lOracle","type":"address"},{"internalType":"int256","name":"lOutputUpperBound","type":"int256"},{"internalType":"int256","name":"lOutputLowerBound","type":"int256"},{"internalType":"uint256","name":"lTargetTimeSince","type":"uint256"},{"components":[{"internalType":"int256","name":"min_time_reward","type":"int256"},{"internalType":"int256","name":"max_time_reward","type":"int256"},{"internalType":"int256","name":"min_deviation_reward","type":"int256"},{"internalType":"int256","name":"max_deviation_reward","type":"int256"}],"internalType":"struct RewardProxy.RewardLimits","name":"rl","type":"tuple"},{"components":[{"internalType":"int80","name":"kp","type":"int80"},{"internalType":"int80","name":"ki","type":"int80"},{"internalType":"int80","name":"co_bias","type":"int80"}],"internalType":"struct RewardProxy.ControlOutput","name":"co","type":"tuple"},{"components":[{"internalType":"int96","name":"zero","type":"int96"},{"internalType":"int96","name":"one","type":"int96"},{"internalType":"int96","name":"two","type":"int96"},{"internalType":"int96","name":"three","type":"int96"}],"internalType":"struct RewardProxy.Coefficients","name":"coeffs","type":"tuple"},{"internalType":"uint32","name":"lMinWindowSize","type":"uint32"},{"internalType":"uint16","name":"lRewardType","type":"uint16"}],"name":"initialSetParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ow","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"tr","type":"uint256"}],"name":"ownerModifyReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"bool","name":"stat","type":"bool"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"f","type":"bool"}],"name":"setFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"int80","name":"kp","type":"int80"},{"internalType":"int80","name":"ki","type":"int80"},{"internalType":"int80","name":"co_bias","type":"int80"}],"internalType":"struct RewardProxy.ControlOutput","name":"co","type":"tuple"},{"internalType":"int256","name":"lOutputUpperBound","type":"int256"},{"internalType":"int256","name":"lOutputLowerBound","type":"int256"},{"internalType":"uint256","name":"lTargetTimeSince","type":"uint256"},{"components":[{"internalType":"int256","name":"min_time_reward","type":"int256"},{"internalType":"int256","name":"max_time_reward","type":"int256"},{"internalType":"int256","name":"min_deviation_reward","type":"int256"},{"internalType":"int256","name":"max_deviation_reward","type":"int256"}],"internalType":"struct RewardProxy.RewardLimits","name":"rl","type":"tuple"},{"internalType":"uint32","name":"lMinWindowSize","type":"uint32"}],"name":"setParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"rType","type":"uint16"}],"name":"setRewardType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"f","type":"bool"}],"name":"setRewardsProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"dat","type":"bytes"}],"name":"submitUpdate","outputs":[{"components":[{"internalType":"uint8","name":"system_id","type":"uint8"},{"internalType":"uint64","name":"chain_id","type":"uint64"},{"internalType":"uint64","name":"height","type":"uint64"},{"internalType":"uint240","name":"gas_price","type":"uint240"},{"internalType":"uint256","name":"time_reward","type":"uint256"},{"internalType":"uint256","name":"deviation_reward","type":"uint256"}],"internalType":"struct RewardProxy.EnhancedReward[]","name":"enhancedRewards","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"int96","name":"zero","type":"int96"},{"internalType":"int96","name":"one","type":"int96"},{"internalType":"int96","name":"two","type":"int96"},{"internalType":"int96","name":"three","type":"int96"}],"internalType":"struct RewardProxy.Coefficients","name":"coeffs","type":"tuple"}],"name":"updateCoeffs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint72[]","name":"scid","type":"uint72[]"},{"internalType":"int256[]","name":"errorIntegrals","type":"int256[]"}],"name":"updateErrorIntegrals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint72[]","name":"scid","type":"uint72[]"},{"internalType":"uint256[]","name":"lIntervalEMAs","type":"uint256[]"}],"name":"updateIntervalEMA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint72[]","name":"scid","type":"uint72[]"},{"internalType":"uint256[]","name":"scale","type":"uint256[]"}],"name":"updateScales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f5ffd5b50604051614f1c380380614f1c8339818101604052810190610031919061011e565b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff02191690831515021790555050610149565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6100ed826100c4565b9050919050565b6100fd816100e3565b8114610107575f5ffd5b50565b5f81519050610118816100f4565b92915050565b5f60208284031215610133576101326100c0565b5b5f6101408482850161010a565b91505092915050565b614dc6806101565f395ff3fe608060405260043610610180575f3560e01c806399e3b18d116100d0578063bbb5b88511610089578063dbe5cc0a11610063578063dbe5cc0a1461056f578063e45b21fc14610597578063e627f2db146105d3578063ec97942b146105fd57610180565b8063bbb5b885146104db578063c0d5536f14610517578063d1767a4a1461053f57610180565b806399e3b18d146103bf578063abc71aec146103fb578063afd4c8d614610437578063b18b78dd14610461578063b5f0d35c1461048b578063bb4bb81d146104b357610180565b80636aa3241b1161013d5780637586a386116101175780637586a386146103165780637adbf973146103455780637b0acfab1461036d5780638a51f8601461039557610180565b80636aa3241b1461029c5780636dc7ea91146102c457806371123e92146102ec57610180565b80631a55a5c51461018457806329c4df00146101c05780635081505c146101e8578063586ff392146102105780635ce844321461023857806364a7989614610274575b5f5ffd5b34801561018f575f5ffd5b506101aa60048036038101906101a59190612fdb565b610639565b6040516101b7919061301e565b60405180910390f35b3480156101cb575f5ffd5b506101e660048036038101906101e191906130ed565b610669565b005b3480156101f3575f5ffd5b5061020e600480360381019061020991906132f0565b6107c7565b005b34801561021b575f5ffd5b50610236600480360381019061023191906133b7565b6107fb565b005b348015610243575f5ffd5b5061025e6004803603810190610259919061353f565b6108d2565b60405161026b919061372b565b60405180910390f35b34801561027f575f5ffd5b5061029a600480360381019061029591906137a0565b6111f7565b005b3480156102a7575f5ffd5b506102c260048036038101906102bd9190613853565b611356565b005b3480156102cf575f5ffd5b506102ea60048036038101906102e591906137a0565b611433565b005b3480156102f7575f5ffd5b50610300611592565b60405161030d919061301e565b60405180910390f35b348015610321575f5ffd5b5061032a611598565b60405161033c96959493929190613959565b60405180910390f35b348015610350575f5ffd5b5061036b600480360381019061036691906139b9565b611667565b005b348015610378575f5ffd5b50610393600480360381019061038e91906139e4565b611733565b005b3480156103a0575f5ffd5b506103a96118d4565b6040516103b69190613a1e565b60405180910390f35b3480156103ca575f5ffd5b506103e560048036038101906103e091906139b9565b6118eb565b6040516103f2919061301e565b60405180910390f35b348015610406575f5ffd5b50610421600480360381019061041c9190613a37565b611931565b60405161042e9190613b59565b60405180910390f35b348015610442575f5ffd5b5061044b611aa7565b6040516104589190613be7565b60405180910390f35b34801561046c575f5ffd5b50610475611b1b565b6040516104829190613c0f565b60405180910390f35b348015610496575f5ffd5b506104b160048036038101906104ac9190613c28565b611b43565b005b3480156104be575f5ffd5b506104d960048036038101906104d49190613c66565b611c98565b005b3480156104e6575f5ffd5b5061050160048036038101906104fc9190612fdb565b611d41565b60405161050e9190613c91565b60405180910390f35b348015610522575f5ffd5b5061053d60048036038101906105389190613853565b611d70565b005b6105596004803603810190610554919061353f565b611e4c565b604051610566919061372b565b60405180910390f35b34801561057a575f5ffd5b5061059560048036038101906105909190613caa565b61255b565b005b3480156105a2575f5ffd5b506105bd60048036038101906105b89190612fdb565b61265e565b6040516105ca919061301e565b60405180910390f35b3480156105de575f5ffd5b506105e761268e565b6040516105f4919061301e565b60405180910390f35b348015610608575f5ffd5b50610623600480360381019061061e9190612fdb565b612697565b6040516106309190613c91565b60405180910390f35b5f60065f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e990613db5565b60405180910390fd5b81819050848490501461073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073190613e43565b60405180910390fd5b5f5f90505b848490508110156107c05782828281811061075d5761075c613e61565b5b905060200201355f5f87878581811061077957610778613e61565b5b905060200201602081019061078e9190612fdb565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f208190555080600101905061073f565b5050505050565b6107d584898989898761255b565b6107de89611667565b6107e781611c98565b6107f083611733565b505050505050505050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90613ed8565b60405180910390fd5b8160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080600481905550505050565b6060600b5f9054906101000a900460ff1615610923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091a90613f40565b60405180910390fd5b5f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e195131846040518263ffffffff1660e01b815260040161097e9190613fbe565b5f60405180830381865afa158015610998573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906109c09190614295565b9050805167ffffffffffffffff8111156109dd576109dc61341b565b5b604051908082528060200260200182016040528015610a1657816020015b610a03612dca565b8152602001906001900390816109fb5790505b5091505f815167ffffffffffffffff811115610a3557610a3461341b565b5b604051908082528060200260200182016040528015610a635781602001602082028036833780820191505090505b5090505f825167ffffffffffffffff811115610a8257610a8161341b565b5b604051908082528060200260200182016040528015610ab05781602001602082028036833780820191505090505b5090505f835167ffffffffffffffff811115610acf57610ace61341b565b5b604051908082528060200260200182016040528015610afd5781602001602082028036833780820191505090505b5090505f5f90505b84518110156111ed575f858281518110610b2257610b21613e61565b5b602002602001015190505f815f01519050600b60029054906101000a900461ffff1661ffff16816040015161ffff1614610b5d5750506111e0565b5f60065f610b72845f015185602001516126c7565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205403610ba25750506111e0565b5f82604001515f015167ffffffffffffffff1603610c59576040518060c00160405280825f015160ff168152602001826020015167ffffffffffffffff16815260200183602001515f015167ffffffffffffffff1681526020018360200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f815250888481518110610c4757610c46613e61565b5b602002602001018190525050506111e0565b5f5f8360200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168460400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff161115610cd657836020015160400151846040015160400151610ccf9190614309565b9050610cf5565b836040015160400151846020015160400151610cf29190614309565b90505b610d5660065f610d0c865f015187602001516126c7565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054827dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166126dc565b9150505f670de0b6b3a7640000846020015160200151856040015160200151610d7f919061435a565b65ffffffffffff16610d919190614393565b90505f5f5f610da98c89885f01518960200151612704565b915091505f8115610dd6578a8381518110610dc757610dc6613e61565b5b60200260200101519050610e11565b60055f610dea895f01518a602001516126c7565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505b8115610f31575f610e498b8581518110610e2e57610e2d613e61565b5b60200260200101516103e888610e449190614401565b6127d9565b9050808b8581518110610e5f57610e5e613e61565b5b60200260200101818152505060025f9054906101000a900463ffffffff1663ffffffff16600183610e909190614431565b1015610ea657670de0b6b3a76400009450610f2b565b5f610eb36015548361283a565b90505f8e8681518110610ec957610ec8613e61565b5b60200260200101519050610ef0610eeb838484610ee69190614464565b61286d565b61290e565b9650610f0987828484610f039190614464565b85612940565b8f8781518110610f1c57610f1b613e61565b5b60200260200101818152505050505b50611080565b5f610f8060075f610f498b5f01518c602001516126c7565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20546103e888610f7b9190614401565b6127d9565b9050808b8b81518110610f9657610f95613e61565b5b60200260200101818152505060025f9054906101000a900463ffffffff1663ffffffff16600183610fc79190614431565b1015610fdd57670de0b6b3a7640000945061107e565b5f610fea6015548361283a565b90505f5f5f6110008c5f01518d602001516126c7565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054905061104361103e8384846110399190614464565b61286d565b61290e565b965061105c878284846110569190614464565b85612940565b8f8d8151811061106f5761106e613e61565b5b60200260200101818152505050505b505b81156110b7576001816110939190614431565b8b84815181106110a6576110a5613e61565b5b6020026020010181815250506110e4565b6001816110c49190614431565b8b8a815181106110d7576110d6613e61565b5b6020026020010181815250505b5050505f5f6111006103e8856110fa91906144a5565b866129b3565b915091506040518060c00160405280875f015160ff168152602001876020015167ffffffffffffffff16815260200188602001515f015167ffffffffffffffff1681526020018860200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001670de0b6b3a76400008486611189919061450d565b61119391906144a5565b8152602001670de0b6b3a764000083866111ad919061450d565b6111b791906144a5565b8152508d89815181106111cd576111cc613e61565b5b6020026020010181905250505050505050505b8080600101915050610b05565b5050505050919050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611277906145cd565b60405180910390fd5b8181905084849050146112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90614635565b60405180910390fd5b5f5f90505b8484905081101561134f578282828181106112eb576112ea613e61565b5b9050602002013560065f87878581811061130857611307613e61565b5b905060200201602081019061131d9190612fdb565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055508060010190506112cd565b5050505050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166113df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d690613ed8565b60405180910390fd5b80600b60016101000a81548160ff0219169083151502179055507f9bec7d73cd5cab20df3be726efbc75e327e8215bdeea29bec8e4ee6522edb292816040516114289190614662565b60405180910390a150565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b3906146c5565b60405180910390fd5b818190508484905014611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb9061472d565b60405180910390fd5b5f5f90505b8484905081101561158b5782828281811061152757611526613e61565b5b9050602002013560075f87878581811061154457611543613e61565b5b90506020020160208101906115599190612fdb565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2081905550806001019050611509565b5050505050565b600a5481565b6115a0612e31565b5f5f5f5f6115ac612e58565b601060135460145460155460025f9054906101000a900463ffffffff166040518060800160405280600c548152602001600d548152602001600e548152602001600f54815250856040518060600160405290815f82015f9054906101000a900460090b60090b60090b81526020015f8201600a9054906101000a900460090b60090b60090b81526020015f820160149054906101000a900460090b60090b60090b815250509550955095509550955095509550909192939495565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790613ed8565b60405180910390fd5b8060165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b3906147bb565b60405180910390fd5b805f0160208101906117ce9190614803565b60115f6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff1602179055508060200160208101906118139190614803565b6011600c6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff1602179055508060400160208101906118599190614803565b60125f6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff16021790555080606001602081019061189e9190614803565b6012600c6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff16021790555050565b5f600b60029054906101000a900461ffff16905090565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60608167ffffffffffffffff81111561194d5761194c61341b565b5b60405190808252806020026020018201604052801561198657816020015b611973612e7c565b81526020019060019003908161196b5790505b5090505f5f90505b82811015611aa0575f60095f83876119a69190614431565b81526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a0e5750611aa0565b60405180604001604052808273ffffffffffffffffffffffffffffffffffffffff16815260200160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054815250838381518110611a8957611a88613e61565b5b60200260200101819052505080600101905061198e565b5092915050565b611aaf612eaa565b604051806080016040528060115f9054906101000a9004600b0b600b0b81526020016011600c9054906101000a9004600b0b600b0b815260200160125f9054906101000a9004600b0b600b0b81526020016012600c9054906101000a9004600b0b600b0b815250905090565b5f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc39061489e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c405780611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3690614906565b60405180910390fd5b5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d189061496e565b60405180910390fd5b80600b60026101000a81548161ffff021916908361ffff16021790555050565b5f5f5f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090613ed8565b60405180910390fd5b80600b5f6101000a81548160ff0219169083151502179055507f21c6565ddd14783c7c998f821309e096af992922c439470a4863ee76c1fdc22c81604051611e419190614662565b60405180910390a150565b6060600b5f9054906101000a900460ff1615611e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9490613f40565b60405180910390fd5b611ea6336129d2565b5f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663927b21ac34856040518363ffffffff1660e01b8152600401611f029190613fbe565b5f6040518083038185885af1158015611f1d573d5f5f3e3d5ffd5b50505050506040513d5f823e3d601f19601f82011682018060405250810190611f469190614295565b9050805167ffffffffffffffff811115611f6357611f6261341b565b5b604051908082528060200260200182016040528015611f9c57816020015b611f89612dca565b815260200190600190039081611f815790505b509150611fa7612eda565b5f5f5f90505f5f90505b845181101561253957848181518110611fcd57611fcc613e61565b5b60200260200101519350600b60029054906101000a900461ffff1661ffff16845f01516040015161ffff160361252c575f612015855f01515f0151865f0151602001516126c7565b90505f5f60065f8468ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505f81036120525750505061252c565b5f87604001515f015167ffffffffffffffff1603612110576040518060c00160405280885f01515f015160ff168152602001885f01516020015167ffffffffffffffff16815260200188602001515f015167ffffffffffffffff1681526020018860200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f8152508985815181106120fd576120fc613e61565b5b602002602001018190525050505061252c565b8660200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168760400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16111561218b578660200151604001518760400151604001516121849190614309565b95506121aa565b8660400151604001518760200151604001516121a79190614309565b95505b6121d481877dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166126dc565b9150505f670de0b6b3a76400008760200151602001518860400151602001516121fd919061435a565b65ffffffffffff1661220f9190614393565b90505f5f61222a6103e88461222491906144a5565b856129b3565b915091505f61226e8660055f8968ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20546103e8876122699190614401565b612aee565b9050600160055f8868ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20546122a49190614431565b60055f8868ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055505f670de0b6b3a764000084836122e5919061450d565b6122ef91906144a5565b90505f670de0b6b3a76400008484612307919061450d565b61231191906144a5565b9050600b60019054906101000a900460ff16156124145780826123349190614431565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461237f9190614431565b925050819055507faa47a68f67393b40c7938796558ec35f7f3a9e558583fb98c6e383428239c218338d5f01515f01518e5f0151602001518f60400151604001518f683635c9adc5dea000008c6123d69190614401565b88888b6040516123ee999897969594939291906149c8565b60405180910390a180826124029190614431565b8a61240d9190614431565b9950612485565b7f59d727fbfc47d17e8340552ec9defc64a6eb6bdd1eaccacc533d66c5c528160e338d5f01515f01518e5f0151602001518f60400151604001518f683635c9adc5dea000008c6124649190614401565b88888b60405161247c999897969594939291906149c8565b60405180910390a15b6040518060c001604052808d5f01515f015160ff1681526020018d5f01516020015167ffffffffffffffff1681526020018d604001515f015167ffffffffffffffff1681526020018d60400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152508e8a8151811061251857612517613e61565b5b602002602001018190525050505050505050505b8080600101915050611fb1565b508060045f82825461254b9190614431565b9250508190555050505050919050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90614a9d565b60405180910390fd5b85601081816125f39190614ca7565b9050508460138190555083601481905550826015819055508060025f6101000a81548163ffffffff021916908363ffffffff160217905550815f0135600c819055508160200135600d819055508160400135600e819055508160600135600f81905550505050505050565b5f60075f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b5f600454905090565b5f60015f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b5f8290508060401b9050818101905092915050565b5f82670de0b6b3a7640000836126f29190614393565b6126fc9190614401565b905092915050565b5f5f5f5f90505b86518110156127c8575f8560ff161415801561273157505f8467ffffffffffffffff1614155b801561276257508460ff1687828151811061274f5761274e613e61565b5b60200260200101515f01515f015160ff16145b80156127a257508367ffffffffffffffff1687828151811061278757612786613e61565b5b60200260200101515f01516020015167ffffffffffffffff16145b156127bd57858111156127bc5780600192509250506127d0565b5b80600101905061270b565b505f5f915091505b94509492505050565b5f670de0b6b3a764000083670b5ac4075a6917406127f79190614393565b83670b5ac4075a691740670de0b6b3a76400006128149190614cb5565b61281e9190614393565b6128289190614431565b6128329190614401565b905092915050565b5f82670de0b6b3a764000083856128519190614ce8565b61285b919061450d565b61286591906144a5565b905092915050565b5f5f670de0b6b3a764000060105f015f9054906101000a900460090b60090b85612897919061450d565b6128a191906144a5565b90505f670de0b6b3a764000060105f01600a9054906101000a900460090b60090b856128cd919061450d565b6128d791906144a5565b9050808260105f0160149054906101000a900460090b60090b6128fa9190614464565b6129049190614464565b9250505092915050565b5f60145482121561292357601454905061293b565b60135482131561293757601354905061293b565b8190505b919050565b5f6014548514801561295157505f82135b801561295c57505f84135b1561297457818361296d9190614ce8565b90506129ab565b6013548514801561298457505f82125b801561298f57505f84125b156129a75781836129a09190614ce8565b90506129ab565b8290505b949350505050565b5f5f6129be84612bab565b6129c784612c45565b915091509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3790614d72565b60405180910390fd5b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403612aeb578060095f600a5481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a54612ae49190614431565b600a819055505b50565b5f5f612b2160075f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054846127d9565b90508060075f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f208190555060025f9054906101000a900463ffffffff1663ffffffff16600185612b749190614431565b1015612b8b57670de0b6b3a7640000915050612ba4565b612ba085612b9b6015548461283a565b612ce1565b9150505b9392505050565b5f612c3e612c366ec097ce7bc90715b34b9f1000000000848560125f9054906101000a9004600b0b600b0b612be0919061450d565b612bea919061450d565b612bf491906144a5565b670de0b6b3a76400008560115f9054906101000a9004600b0b600b0b612c1a919061450d565b612c2491906144a5565b612c2e9190614464565b600d54612d99565b600c54612db1565b9050919050565b5f612cda612cd26ec097ce7bc90715b34b9f100000000084856012600c9054906101000a9004600b0b600b0b612c7b919061450d565b612c85919061450d565b612c8f91906144a5565b670de0b6b3a7640000856011600c9054906101000a9004600b0b600b0b612cb6919061450d565b612cc091906144a5565b612cca9190614464565b600f54612d99565b600e54612db1565b9050919050565b5f5f5f5f8568ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505f8382612d199190614464565b9050612d2d612d28858361286d565b61290e565b9250612d3b83838387612940565b5f5f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055508260015f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2081905550505092915050565b5f818312612da75781612da9565b825b905092915050565b5f81831215612dc05781612dc2565b825b905092915050565b6040518060c001604052805f60ff1681526020015f67ffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525090565b60405180606001604052805f60090b81526020015f60090b81526020015f60090b81525090565b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b60405180608001604052805f600b0b81526020015f600b0b81526020015f600b0b81526020015f600b0b81525090565b6040518060600160405280612eed612f0d565b8152602001612efa612f3c565b8152602001612f07612f3c565b81525090565b60405180606001604052805f60ff1681526020015f67ffffffffffffffff1681526020015f61ffff1681525090565b60405180606001604052805f67ffffffffffffffff1681526020015f65ffffffffffff1681526020015f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f68ffffffffffffffffff82169050919050565b612fba81612f9d565b8114612fc4575f5ffd5b50565b5f81359050612fd581612fb1565b92915050565b5f60208284031215612ff057612fef612f95565b5b5f612ffd84828501612fc7565b91505092915050565b5f819050919050565b61301881613006565b82525050565b5f6020820190506130315f83018461300f565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261305857613057613037565b5b8235905067ffffffffffffffff8111156130755761307461303b565b5b6020830191508360208202830111156130915761309061303f565b5b9250929050565b5f5f83601f8401126130ad576130ac613037565b5b8235905067ffffffffffffffff8111156130ca576130c961303b565b5b6020830191508360208202830111156130e6576130e561303f565b5b9250929050565b5f5f5f5f6040858703121561310557613104612f95565b5b5f85013567ffffffffffffffff81111561312257613121612f99565b5b61312e87828801613043565b9450945050602085013567ffffffffffffffff81111561315157613150612f99565b5b61315d87828801613098565b925092505092959194509250565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131948261316b565b9050919050565b6131a48161318a565b81146131ae575f5ffd5b50565b5f813590506131bf8161319b565b92915050565b5f819050919050565b6131d7816131c5565b81146131e1575f5ffd5b50565b5f813590506131f2816131ce565b92915050565b61320181613006565b811461320b575f5ffd5b50565b5f8135905061321c816131f8565b92915050565b5f5ffd5b5f6080828403121561323b5761323a613222565b5b81905092915050565b5f6060828403121561325957613258613222565b5b81905092915050565b5f6080828403121561327757613276613222565b5b81905092915050565b5f63ffffffff82169050919050565b61329881613280565b81146132a2575f5ffd5b50565b5f813590506132b38161328f565b92915050565b5f61ffff82169050919050565b6132cf816132b9565b81146132d9575f5ffd5b50565b5f813590506132ea816132c6565b92915050565b5f5f5f5f5f5f5f5f5f6102208a8c03121561330e5761330d612f95565b5b5f61331b8c828d016131b1565b995050602061332c8c828d016131e4565b985050604061333d8c828d016131e4565b975050606061334e8c828d0161320e565b965050608061335f8c828d01613226565b9550506101006133718c828d01613244565b9450506101606133838c828d01613262565b9350506101e06133958c828d016132a5565b9250506102006133a78c828d016132dc565b9150509295985092959850929598565b5f5f5f606084860312156133ce576133cd612f95565b5b5f6133db868287016131b1565b93505060206133ec8682870161320e565b92505060406133fd8682870161320e565b9150509250925092565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6134518261340b565b810181811067ffffffffffffffff821117156134705761346f61341b565b5b80604052505050565b5f613482612f8c565b905061348e8282613448565b919050565b5f67ffffffffffffffff8211156134ad576134ac61341b565b5b6134b68261340b565b9050602081019050919050565b828183375f83830152505050565b5f6134e36134de84613493565b613479565b9050828152602081018484840111156134ff576134fe613407565b5b61350a8482856134c3565b509392505050565b5f82601f83011261352657613525613037565b5b81356135368482602086016134d1565b91505092915050565b5f6020828403121561355457613553612f95565b5b5f82013567ffffffffffffffff81111561357157613570612f99565b5b61357d84828501613512565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f60ff82169050919050565b6135c4816135af565b82525050565b5f67ffffffffffffffff82169050919050565b6135e6816135ca565b82525050565b5f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61361e816135ec565b82525050565b61362d81613006565b82525050565b60c082015f8201516136475f8501826135bb565b50602082015161365a60208501826135dd565b50604082015161366d60408501826135dd565b5060608201516136806060850182613615565b5060808201516136936080850182613624565b5060a08201516136a660a0850182613624565b50505050565b5f6136b78383613633565b60c08301905092915050565b5f602082019050919050565b5f6136d982613586565b6136e38185613590565b93506136ee836135a0565b805f5b8381101561371e57815161370588826136ac565b9750613710836136c3565b9250506001810190506136f1565b5085935050505092915050565b5f6020820190508181035f83015261374381846136cf565b905092915050565b5f5f83601f8401126137605761375f613037565b5b8235905067ffffffffffffffff81111561377d5761377c61303b565b5b6020830191508360208202830111156137995761379861303f565b5b9250929050565b5f5f5f5f604085870312156137b8576137b7612f95565b5b5f85013567ffffffffffffffff8111156137d5576137d4612f99565b5b6137e187828801613043565b9450945050602085013567ffffffffffffffff81111561380457613803612f99565b5b6138108782880161374b565b925092505092959194509250565b5f8115159050919050565b6138328161381e565b811461383c575f5ffd5b50565b5f8135905061384d81613829565b92915050565b5f6020828403121561386857613867612f95565b5b5f6138758482850161383f565b91505092915050565b5f8160090b9050919050565b6138938161387e565b82525050565b606082015f8201516138ad5f85018261388a565b5060208201516138c0602085018261388a565b5060408201516138d3604085018261388a565b50505050565b6138e2816131c5565b82525050565b6138f181613280565b82525050565b613900816131c5565b82525050565b608082015f82015161391a5f8501826138f7565b50602082015161392d60208501826138f7565b50604082015161394060408501826138f7565b50606082015161395360608501826138f7565b50505050565b5f6101608201905061396d5f830189613899565b61397a60608301886138d9565b61398760808301876138d9565b61399460a083018661300f565b6139a160c08301856138e8565b6139ae60e0830184613906565b979650505050505050565b5f602082840312156139ce576139cd612f95565b5b5f6139db848285016131b1565b91505092915050565b5f608082840312156139f9576139f8612f95565b5b5f613a0684828501613262565b91505092915050565b613a18816132b9565b82525050565b5f602082019050613a315f830184613a0f565b92915050565b5f5f60408385031215613a4d57613a4c612f95565b5b5f613a5a8582860161320e565b9250506020613a6b8582860161320e565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613aa78161318a565b82525050565b604082015f820151613ac15f850182613a9e565b506020820151613ad46020850182613624565b50505050565b5f613ae58383613aad565b60408301905092915050565b5f602082019050919050565b5f613b0782613a75565b613b118185613a7f565b9350613b1c83613a8f565b805f5b83811015613b4c578151613b338882613ada565b9750613b3e83613af1565b925050600181019050613b1f565b5085935050505092915050565b5f6020820190508181035f830152613b718184613afd565b905092915050565b5f81600b0b9050919050565b613b8e81613b79565b82525050565b608082015f820151613ba85f850182613b85565b506020820151613bbb6020850182613b85565b506040820151613bce6040850182613b85565b506060820151613be16060850182613b85565b50505050565b5f608082019050613bfa5f830184613b94565b92915050565b613c098161318a565b82525050565b5f602082019050613c225f830184613c00565b92915050565b5f5f60408385031215613c3e57613c3d612f95565b5b5f613c4b858286016131b1565b9250506020613c5c8582860161383f565b9150509250929050565b5f60208284031215613c7b57613c7a612f95565b5b5f613c88848285016132dc565b91505092915050565b5f602082019050613ca45f8301846138d9565b92915050565b5f5f5f5f5f5f6101608789031215613cc557613cc4612f95565b5b5f613cd289828a01613244565b9650506060613ce389828a016131e4565b9550506080613cf489828a016131e4565b94505060a0613d0589828a0161320e565b93505060c0613d1689828a01613226565b925050610140613d2889828a016132a5565b9150509295509295509295565b5f82825260208201905092915050565b7f4f6e6c79206f776e65722063616e20736574206572726f7220696e74656772615f8201527f6c73000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d9f602283613d35565b9150613daa82613d45565b604082019050919050565b5f6020820190508181035f830152613dcc81613d93565b9050919050565b7f7363696420616e6420696e74656772616c73206c656e677468206d69736d61745f8201527f6368000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e2d602283613d35565b9150613e3882613dd3565b604082019050919050565b5f6020820190508181035f830152613e5a81613e21565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206f776e65722063616e206d6f646966792076616c756573000000005f82015250565b5f613ec2601c83613d35565b9150613ecd82613e8e565b602082019050919050565b5f6020820190508181035f830152613eef81613eb6565b9050919050565b7f5265776172647320636f6e74726163742069732066726f7a656e0000000000005f82015250565b5f613f2a601a83613d35565b9150613f3582613ef6565b602082019050919050565b5f6020820190508181035f830152613f5781613f1e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f613f9082613f5e565b613f9a8185613f68565b9350613faa818560208601613f78565b613fb38161340b565b840191505092915050565b5f6020820190508181035f830152613fd68184613f86565b905092915050565b5f67ffffffffffffffff821115613ff857613ff761341b565b5b602082029050602081019050919050565b5f5ffd5b614016816135af565b8114614020575f5ffd5b50565b5f815190506140318161400d565b92915050565b614040816135ca565b811461404a575f5ffd5b50565b5f8151905061405b81614037565b92915050565b5f8151905061406f816132c6565b92915050565b5f6060828403121561408a57614089614009565b5b6140946060613479565b90505f6140a384828501614023565b5f8301525060206140b68482850161404d565b60208301525060406140ca84828501614061565b60408301525092915050565b5f65ffffffffffff82169050919050565b6140f0816140d6565b81146140fa575f5ffd5b50565b5f8151905061410b816140e7565b92915050565b61411a816135ec565b8114614124575f5ffd5b50565b5f8151905061413581614111565b92915050565b5f606082840312156141505761414f614009565b5b61415a6060613479565b90505f6141698482850161404d565b5f83015250602061417c848285016140fd565b602083015250604061419084828501614127565b60408301525092915050565b5f61012082840312156141b2576141b1614009565b5b6141bc6060613479565b90505f6141cb84828501614075565b5f8301525060606141de8482850161413b565b60208301525060c06141f28482850161413b565b60408301525092915050565b5f61421061420b84613fde565b613479565b90508083825260208201905061012084028301858111156142345761423361303f565b5b835b8181101561425e5780614249888261419c565b84526020840193505061012081019050614236565b5050509392505050565b5f82601f83011261427c5761427b613037565b5b815161428c8482602086016141fe565b91505092915050565b5f602082840312156142aa576142a9612f95565b5b5f82015167ffffffffffffffff8111156142c7576142c6612f99565b5b6142d384828501614268565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614313826135ec565b915061431e836135ec565b925082820390507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115614354576143536142dc565b5b92915050565b5f614364826140d6565b915061436f836140d6565b9250828203905065ffffffffffff81111561438d5761438c6142dc565b5b92915050565b5f61439d82613006565b91506143a883613006565b92508282026143b681613006565b915082820484148315176143cd576143cc6142dc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61440b82613006565b915061441683613006565b925082614426576144256143d4565b5b828204905092915050565b5f61443b82613006565b915061444683613006565b925082820190508082111561445e5761445d6142dc565b5b92915050565b5f61446e826131c5565b9150614479836131c5565b92508282019050828112155f8312168382125f84121516171561449f5761449e6142dc565b5b92915050565b5f6144af826131c5565b91506144ba836131c5565b9250826144ca576144c96143d4565b5b60015f0383147f800000000000000000000000000000000000000000000000000000000000000083141615614502576145016142dc565b5b828205905092915050565b5f614517826131c5565b9150614522836131c5565b9250828202614530816131c5565b91507f800000000000000000000000000000000000000000000000000000000000000084145f84121615614567576145666142dc565b5b828205841483151761457c5761457b6142dc565b5b5092915050565b7f4f6e6c79206f776e65722063616e20736574207363616c6573000000000000005f82015250565b5f6145b7601983613d35565b91506145c282614583565b602082019050919050565b5f6020820190508181035f8301526145e4816145ab565b9050919050565b7f7363696420616e64207363616c65206c656e677468206d69736d6174636800005f82015250565b5f61461f601e83613d35565b915061462a826145eb565b602082019050919050565b5f6020820190508181035f83015261464c81614613565b9050919050565b61465c8161381e565b82525050565b5f6020820190506146755f830184614653565b92915050565b7f4f6e6c79206f776e65722063616e2073657420696e74657276616c20454d41735f82015250565b5f6146af602083613d35565b91506146ba8261467b565b602082019050919050565b5f6020820190508181035f8301526146dc816146a3565b9050919050565b7f7363696420616e6420656d6173206c656e677468206d69736d617463680000005f82015250565b5f614717601d83613d35565b9150614722826146e3565b602082019050919050565b5f6020820190508181035f8301526147448161470b565b9050919050565b7f4f6e6c79206f776e65722063616e2075706461746520636f656666696369656e5f8201527f7473000000000000000000000000000000000000000000000000000000000000602082015250565b5f6147a5602283613d35565b91506147b08261474b565b604082019050919050565b5f6020820190508181035f8301526147d281614799565b9050919050565b6147e281613b79565b81146147ec575f5ffd5b50565b5f813590506147fd816147d9565b92915050565b5f6020828403121561481857614817612f95565b5b5f614825848285016147ef565b91505092915050565b7f4f6e6c79206f776e65722063616e206d6f6469667920617574686f72697469655f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f614888602183613d35565b91506148938261482e565b604082019050919050565b5f6020820190508181035f8301526148b58161487c565b9050919050565b7f43616e6e6f74207265766f6b65206f776e2061636365737300000000000000005f82015250565b5f6148f0601883613d35565b91506148fb826148bc565b602082019050919050565b5f6020820190508181035f83015261491d816148e4565b9050919050565b7f4f6e6c79206f776e65722063616e2073657420726577617264207479706500005f82015250565b5f614958601e83613d35565b915061496382614924565b602082019050919050565b5f6020820190508181035f8301526149858161494c565b9050919050565b614995816135af565b82525050565b6149a4816135ca565b82525050565b6149b3816135ec565b82525050565b6149c2816140d6565b82525050565b5f610120820190506149dc5f83018c613c00565b6149e9602083018b61498c565b6149f6604083018a61499b565b614a0360608301896149aa565b614a1060808301886149aa565b614a1d60a08301876149b9565b614a2a60c083018661300f565b614a3760e083018561300f565b614a456101008301846138d9565b9a9950505050505050505050565b7f4f6e6c79206f776e65722063616e2073657420706172616d73000000000000005f82015250565b5f614a87601983613d35565b9150614a9282614a53565b602082019050919050565b5f6020820190508181035f830152614ab481614a7b565b9050919050565b614ac48161387e565b8114614ace575f5ffd5b50565b5f8135614add81614abb565b80915050919050565b5f815f1b9050919050565b5f69ffffffffffffffffffff614b0684614ae6565b9350801983169250808416831791505092915050565b5f819050919050565b5f614b3f614b3a614b358461387e565b614b1c565b61387e565b9050919050565b5f819050919050565b614b5882614b25565b614b6b614b6482614b46565b8354614af1565b8255505050565b5f8160501b9050919050565b5f73ffffffffffffffffffff00000000000000000000614b9d84614b72565b9350801983169250808416831791505092915050565b614bbc82614b25565b614bcf614bc882614b46565b8354614b7e565b8255505050565b5f8160a01b9050919050565b5f7dffffffffffffffffffff0000000000000000000000000000000000000000614c0b84614bd6565b9350801983169250808416831791505092915050565b614c2a82614b25565b614c3d614c3682614b46565b8354614be2565b8255505050565b5f81015f830180614c5481614ad1565b9050614c608184614b4f565b5050505f81016020830180614c7481614ad1565b9050614c808184614bb3565b5050505f81016040830180614c9481614ad1565b9050614ca08184614c21565b5050505050565b614cb18282614c44565b5050565b5f614cbf82613006565b9150614cca83613006565b9250828203905081811115614ce257614ce16142dc565b5b92915050565b5f614cf2826131c5565b9150614cfd836131c5565b925082820390508181125f8412168282135f851215161715614d2257614d216142dc565b5b92915050565b7f55706461746572206164647265737320697320656d70747900000000000000005f82015250565b5f614d5c601883613d35565b9150614d6782614d28565b602082019050919050565b5f6020820190508181035f830152614d8981614d50565b905091905056fea2646970667358221220372aff0000e1448b18abce3e0b689da67572a653d0c19904d318f22a557bbd1d64736f6c634300081e0033000000000000000000000000c0f0b1bf5f0e2c18a6a2ea86402d69195600faee

Deployed Bytecode

0x608060405260043610610180575f3560e01c806399e3b18d116100d0578063bbb5b88511610089578063dbe5cc0a11610063578063dbe5cc0a1461056f578063e45b21fc14610597578063e627f2db146105d3578063ec97942b146105fd57610180565b8063bbb5b885146104db578063c0d5536f14610517578063d1767a4a1461053f57610180565b806399e3b18d146103bf578063abc71aec146103fb578063afd4c8d614610437578063b18b78dd14610461578063b5f0d35c1461048b578063bb4bb81d146104b357610180565b80636aa3241b1161013d5780637586a386116101175780637586a386146103165780637adbf973146103455780637b0acfab1461036d5780638a51f8601461039557610180565b80636aa3241b1461029c5780636dc7ea91146102c457806371123e92146102ec57610180565b80631a55a5c51461018457806329c4df00146101c05780635081505c146101e8578063586ff392146102105780635ce844321461023857806364a7989614610274575b5f5ffd5b34801561018f575f5ffd5b506101aa60048036038101906101a59190612fdb565b610639565b6040516101b7919061301e565b60405180910390f35b3480156101cb575f5ffd5b506101e660048036038101906101e191906130ed565b610669565b005b3480156101f3575f5ffd5b5061020e600480360381019061020991906132f0565b6107c7565b005b34801561021b575f5ffd5b50610236600480360381019061023191906133b7565b6107fb565b005b348015610243575f5ffd5b5061025e6004803603810190610259919061353f565b6108d2565b60405161026b919061372b565b60405180910390f35b34801561027f575f5ffd5b5061029a600480360381019061029591906137a0565b6111f7565b005b3480156102a7575f5ffd5b506102c260048036038101906102bd9190613853565b611356565b005b3480156102cf575f5ffd5b506102ea60048036038101906102e591906137a0565b611433565b005b3480156102f7575f5ffd5b50610300611592565b60405161030d919061301e565b60405180910390f35b348015610321575f5ffd5b5061032a611598565b60405161033c96959493929190613959565b60405180910390f35b348015610350575f5ffd5b5061036b600480360381019061036691906139b9565b611667565b005b348015610378575f5ffd5b50610393600480360381019061038e91906139e4565b611733565b005b3480156103a0575f5ffd5b506103a96118d4565b6040516103b69190613a1e565b60405180910390f35b3480156103ca575f5ffd5b506103e560048036038101906103e091906139b9565b6118eb565b6040516103f2919061301e565b60405180910390f35b348015610406575f5ffd5b50610421600480360381019061041c9190613a37565b611931565b60405161042e9190613b59565b60405180910390f35b348015610442575f5ffd5b5061044b611aa7565b6040516104589190613be7565b60405180910390f35b34801561046c575f5ffd5b50610475611b1b565b6040516104829190613c0f565b60405180910390f35b348015610496575f5ffd5b506104b160048036038101906104ac9190613c28565b611b43565b005b3480156104be575f5ffd5b506104d960048036038101906104d49190613c66565b611c98565b005b3480156104e6575f5ffd5b5061050160048036038101906104fc9190612fdb565b611d41565b60405161050e9190613c91565b60405180910390f35b348015610522575f5ffd5b5061053d60048036038101906105389190613853565b611d70565b005b6105596004803603810190610554919061353f565b611e4c565b604051610566919061372b565b60405180910390f35b34801561057a575f5ffd5b5061059560048036038101906105909190613caa565b61255b565b005b3480156105a2575f5ffd5b506105bd60048036038101906105b89190612fdb565b61265e565b6040516105ca919061301e565b60405180910390f35b3480156105de575f5ffd5b506105e761268e565b6040516105f4919061301e565b60405180910390f35b348015610608575f5ffd5b50610623600480360381019061061e9190612fdb565b612697565b6040516106309190613c91565b60405180910390f35b5f60065f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166106f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e990613db5565b60405180910390fd5b81819050848490501461073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073190613e43565b60405180910390fd5b5f5f90505b848490508110156107c05782828281811061075d5761075c613e61565b5b905060200201355f5f87878581811061077957610778613e61565b5b905060200201602081019061078e9190612fdb565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f208190555080600101905061073f565b5050505050565b6107d584898989898761255b565b6107de89611667565b6107e781611c98565b6107f083611733565b505050505050505050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087b90613ed8565b60405180910390fd5b8160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080600481905550505050565b6060600b5f9054906101000a900460ff1615610923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091a90613f40565b60405180910390fd5b5f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e195131846040518263ffffffff1660e01b815260040161097e9190613fbe565b5f60405180830381865afa158015610998573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f820116820180604052508101906109c09190614295565b9050805167ffffffffffffffff8111156109dd576109dc61341b565b5b604051908082528060200260200182016040528015610a1657816020015b610a03612dca565b8152602001906001900390816109fb5790505b5091505f815167ffffffffffffffff811115610a3557610a3461341b565b5b604051908082528060200260200182016040528015610a635781602001602082028036833780820191505090505b5090505f825167ffffffffffffffff811115610a8257610a8161341b565b5b604051908082528060200260200182016040528015610ab05781602001602082028036833780820191505090505b5090505f835167ffffffffffffffff811115610acf57610ace61341b565b5b604051908082528060200260200182016040528015610afd5781602001602082028036833780820191505090505b5090505f5f90505b84518110156111ed575f858281518110610b2257610b21613e61565b5b602002602001015190505f815f01519050600b60029054906101000a900461ffff1661ffff16816040015161ffff1614610b5d5750506111e0565b5f60065f610b72845f015185602001516126c7565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205403610ba25750506111e0565b5f82604001515f015167ffffffffffffffff1603610c59576040518060c00160405280825f015160ff168152602001826020015167ffffffffffffffff16815260200183602001515f015167ffffffffffffffff1681526020018360200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f815250888481518110610c4757610c46613e61565b5b602002602001018190525050506111e0565b5f5f8360200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168460400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff161115610cd657836020015160400151846040015160400151610ccf9190614309565b9050610cf5565b836040015160400151846020015160400151610cf29190614309565b90505b610d5660065f610d0c865f015187602001516126c7565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054827dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166126dc565b9150505f670de0b6b3a7640000846020015160200151856040015160200151610d7f919061435a565b65ffffffffffff16610d919190614393565b90505f5f5f610da98c89885f01518960200151612704565b915091505f8115610dd6578a8381518110610dc757610dc6613e61565b5b60200260200101519050610e11565b60055f610dea895f01518a602001516126c7565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505b8115610f31575f610e498b8581518110610e2e57610e2d613e61565b5b60200260200101516103e888610e449190614401565b6127d9565b9050808b8581518110610e5f57610e5e613e61565b5b60200260200101818152505060025f9054906101000a900463ffffffff1663ffffffff16600183610e909190614431565b1015610ea657670de0b6b3a76400009450610f2b565b5f610eb36015548361283a565b90505f8e8681518110610ec957610ec8613e61565b5b60200260200101519050610ef0610eeb838484610ee69190614464565b61286d565b61290e565b9650610f0987828484610f039190614464565b85612940565b8f8781518110610f1c57610f1b613e61565b5b60200260200101818152505050505b50611080565b5f610f8060075f610f498b5f01518c602001516126c7565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20546103e888610f7b9190614401565b6127d9565b9050808b8b81518110610f9657610f95613e61565b5b60200260200101818152505060025f9054906101000a900463ffffffff1663ffffffff16600183610fc79190614431565b1015610fdd57670de0b6b3a7640000945061107e565b5f610fea6015548361283a565b90505f5f5f6110008c5f01518d602001516126c7565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054905061104361103e8384846110399190614464565b61286d565b61290e565b965061105c878284846110569190614464565b85612940565b8f8d8151811061106f5761106e613e61565b5b60200260200101818152505050505b505b81156110b7576001816110939190614431565b8b84815181106110a6576110a5613e61565b5b6020026020010181815250506110e4565b6001816110c49190614431565b8b8a815181106110d7576110d6613e61565b5b6020026020010181815250505b5050505f5f6111006103e8856110fa91906144a5565b866129b3565b915091506040518060c00160405280875f015160ff168152602001876020015167ffffffffffffffff16815260200188602001515f015167ffffffffffffffff1681526020018860200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001670de0b6b3a76400008486611189919061450d565b61119391906144a5565b8152602001670de0b6b3a764000083866111ad919061450d565b6111b791906144a5565b8152508d89815181106111cd576111cc613e61565b5b6020026020010181905250505050505050505b8080600101915050610b05565b5050505050919050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611277906145cd565b60405180910390fd5b8181905084849050146112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90614635565b60405180910390fd5b5f5f90505b8484905081101561134f578282828181106112eb576112ea613e61565b5b9050602002013560065f87878581811061130857611307613e61565b5b905060200201602081019061131d9190612fdb565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055508060010190506112cd565b5050505050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166113df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d690613ed8565b60405180910390fd5b80600b60016101000a81548160ff0219169083151502179055507f9bec7d73cd5cab20df3be726efbc75e327e8215bdeea29bec8e4ee6522edb292816040516114289190614662565b60405180910390a150565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b3906146c5565b60405180910390fd5b818190508484905014611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb9061472d565b60405180910390fd5b5f5f90505b8484905081101561158b5782828281811061152757611526613e61565b5b9050602002013560075f87878581811061154457611543613e61565b5b90506020020160208101906115599190612fdb565b68ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2081905550806001019050611509565b5050505050565b600a5481565b6115a0612e31565b5f5f5f5f6115ac612e58565b601060135460145460155460025f9054906101000a900463ffffffff166040518060800160405280600c548152602001600d548152602001600e548152602001600f54815250856040518060600160405290815f82015f9054906101000a900460090b60090b60090b81526020015f8201600a9054906101000a900460090b60090b60090b81526020015f820160149054906101000a900460090b60090b60090b815250509550955095509550955095509550909192939495565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790613ed8565b60405180910390fd5b8060165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b3906147bb565b60405180910390fd5b805f0160208101906117ce9190614803565b60115f6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff1602179055508060200160208101906118139190614803565b6011600c6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff1602179055508060400160208101906118599190614803565b60125f6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff16021790555080606001602081019061189e9190614803565b6012600c6101000a8154816bffffffffffffffffffffffff0219169083600b0b6bffffffffffffffffffffffff16021790555050565b5f600b60029054906101000a900461ffff16905090565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60608167ffffffffffffffff81111561194d5761194c61341b565b5b60405190808252806020026020018201604052801561198657816020015b611973612e7c565b81526020019060019003908161196b5790505b5090505f5f90505b82811015611aa0575f60095f83876119a69190614431565b81526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a0e5750611aa0565b60405180604001604052808273ffffffffffffffffffffffffffffffffffffffff16815260200160035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054815250838381518110611a8957611a88613e61565b5b60200260200101819052505080600101905061198e565b5092915050565b611aaf612eaa565b604051806080016040528060115f9054906101000a9004600b0b600b0b81526020016011600c9054906101000a9004600b0b600b0b815260200160125f9054906101000a9004600b0b600b0b81526020016012600c9054906101000a9004600b0b600b0b815250905090565b5f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc39061489e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611c405780611c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3690614906565b60405180910390fd5b5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d189061496e565b60405180910390fd5b80600b60026101000a81548161ffff021916908361ffff16021790555050565b5f5f5f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090613ed8565b60405180910390fd5b80600b5f6101000a81548160ff0219169083151502179055507f21c6565ddd14783c7c998f821309e096af992922c439470a4863ee76c1fdc22c81604051611e419190614662565b60405180910390a150565b6060600b5f9054906101000a900460ff1615611e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9490613f40565b60405180910390fd5b611ea6336129d2565b5f60165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663927b21ac34856040518363ffffffff1660e01b8152600401611f029190613fbe565b5f6040518083038185885af1158015611f1d573d5f5f3e3d5ffd5b50505050506040513d5f823e3d601f19601f82011682018060405250810190611f469190614295565b9050805167ffffffffffffffff811115611f6357611f6261341b565b5b604051908082528060200260200182016040528015611f9c57816020015b611f89612dca565b815260200190600190039081611f815790505b509150611fa7612eda565b5f5f5f90505f5f90505b845181101561253957848181518110611fcd57611fcc613e61565b5b60200260200101519350600b60029054906101000a900461ffff1661ffff16845f01516040015161ffff160361252c575f612015855f01515f0151865f0151602001516126c7565b90505f5f60065f8468ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505f81036120525750505061252c565b5f87604001515f015167ffffffffffffffff1603612110576040518060c00160405280885f01515f015160ff168152602001885f01516020015167ffffffffffffffff16815260200188602001515f015167ffffffffffffffff1681526020018860200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f8152508985815181106120fd576120fc613e61565b5b602002602001018190525050505061252c565b8660200151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168760400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16111561218b578660200151604001518760400151604001516121849190614309565b95506121aa565b8660400151604001518760200151604001516121a79190614309565b95505b6121d481877dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166126dc565b9150505f670de0b6b3a76400008760200151602001518860400151602001516121fd919061435a565b65ffffffffffff1661220f9190614393565b90505f5f61222a6103e88461222491906144a5565b856129b3565b915091505f61226e8660055f8968ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20546103e8876122699190614401565b612aee565b9050600160055f8868ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20546122a49190614431565b60055f8868ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055505f670de0b6b3a764000084836122e5919061450d565b6122ef91906144a5565b90505f670de0b6b3a76400008484612307919061450d565b61231191906144a5565b9050600b60019054906101000a900460ff16156124145780826123349190614431565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461237f9190614431565b925050819055507faa47a68f67393b40c7938796558ec35f7f3a9e558583fb98c6e383428239c218338d5f01515f01518e5f0151602001518f60400151604001518f683635c9adc5dea000008c6123d69190614401565b88888b6040516123ee999897969594939291906149c8565b60405180910390a180826124029190614431565b8a61240d9190614431565b9950612485565b7f59d727fbfc47d17e8340552ec9defc64a6eb6bdd1eaccacc533d66c5c528160e338d5f01515f01518e5f0151602001518f60400151604001518f683635c9adc5dea000008c6124649190614401565b88888b60405161247c999897969594939291906149c8565b60405180910390a15b6040518060c001604052808d5f01515f015160ff1681526020018d5f01516020015167ffffffffffffffff1681526020018d604001515f015167ffffffffffffffff1681526020018d60400151604001517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152508e8a8151811061251857612517613e61565b5b602002602001018190525050505050505050505b8080600101915050611fb1565b508060045f82825461254b9190614431565b9250508190555050505050919050565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90614a9d565b60405180910390fd5b85601081816125f39190614ca7565b9050508460138190555083601481905550826015819055508060025f6101000a81548163ffffffff021916908363ffffffff160217905550815f0135600c819055508160200135600d819055508160400135600e819055508160600135600f81905550505050505050565b5f60075f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b5f600454905090565b5f60015f8368ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20549050919050565b5f8290508060401b9050818101905092915050565b5f82670de0b6b3a7640000836126f29190614393565b6126fc9190614401565b905092915050565b5f5f5f5f90505b86518110156127c8575f8560ff161415801561273157505f8467ffffffffffffffff1614155b801561276257508460ff1687828151811061274f5761274e613e61565b5b60200260200101515f01515f015160ff16145b80156127a257508367ffffffffffffffff1687828151811061278757612786613e61565b5b60200260200101515f01516020015167ffffffffffffffff16145b156127bd57858111156127bc5780600192509250506127d0565b5b80600101905061270b565b505f5f915091505b94509492505050565b5f670de0b6b3a764000083670b5ac4075a6917406127f79190614393565b83670b5ac4075a691740670de0b6b3a76400006128149190614cb5565b61281e9190614393565b6128289190614431565b6128329190614401565b905092915050565b5f82670de0b6b3a764000083856128519190614ce8565b61285b919061450d565b61286591906144a5565b905092915050565b5f5f670de0b6b3a764000060105f015f9054906101000a900460090b60090b85612897919061450d565b6128a191906144a5565b90505f670de0b6b3a764000060105f01600a9054906101000a900460090b60090b856128cd919061450d565b6128d791906144a5565b9050808260105f0160149054906101000a900460090b60090b6128fa9190614464565b6129049190614464565b9250505092915050565b5f60145482121561292357601454905061293b565b60135482131561293757601354905061293b565b8190505b919050565b5f6014548514801561295157505f82135b801561295c57505f84135b1561297457818361296d9190614ce8565b90506129ab565b6013548514801561298457505f82125b801561298f57505f84125b156129a75781836129a09190614ce8565b90506129ab565b8290505b949350505050565b5f5f6129be84612bab565b6129c784612c45565b915091509250929050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3790614d72565b60405180910390fd5b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205403612aeb578060095f600a5481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a54612ae49190614431565b600a819055505b50565b5f5f612b2160075f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2054846127d9565b90508060075f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f208190555060025f9054906101000a900463ffffffff1663ffffffff16600185612b749190614431565b1015612b8b57670de0b6b3a7640000915050612ba4565b612ba085612b9b6015548461283a565b612ce1565b9150505b9392505050565b5f612c3e612c366ec097ce7bc90715b34b9f1000000000848560125f9054906101000a9004600b0b600b0b612be0919061450d565b612bea919061450d565b612bf491906144a5565b670de0b6b3a76400008560115f9054906101000a9004600b0b600b0b612c1a919061450d565b612c2491906144a5565b612c2e9190614464565b600d54612d99565b600c54612db1565b9050919050565b5f612cda612cd26ec097ce7bc90715b34b9f100000000084856012600c9054906101000a9004600b0b600b0b612c7b919061450d565b612c85919061450d565b612c8f91906144a5565b670de0b6b3a7640000856011600c9054906101000a9004600b0b600b0b612cb6919061450d565b612cc091906144a5565b612cca9190614464565b600f54612d99565b600e54612db1565b9050919050565b5f5f5f5f8568ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f205490505f8382612d199190614464565b9050612d2d612d28858361286d565b61290e565b9250612d3b83838387612940565b5f5f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f20819055508260015f8768ffffffffffffffffff1668ffffffffffffffffff1681526020019081526020015f2081905550505092915050565b5f818312612da75781612da9565b825b905092915050565b5f81831215612dc05781612dc2565b825b905092915050565b6040518060c001604052805f60ff1681526020015f67ffffffffffffffff1681526020015f67ffffffffffffffff1681526020015f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81525090565b60405180606001604052805f60090b81526020015f60090b81526020015f60090b81525090565b60405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b60405180608001604052805f600b0b81526020015f600b0b81526020015f600b0b81526020015f600b0b81525090565b6040518060600160405280612eed612f0d565b8152602001612efa612f3c565b8152602001612f07612f3c565b81525090565b60405180606001604052805f60ff1681526020015f67ffffffffffffffff1681526020015f61ffff1681525090565b60405180606001604052805f67ffffffffffffffff1681526020015f65ffffffffffff1681526020015f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f68ffffffffffffffffff82169050919050565b612fba81612f9d565b8114612fc4575f5ffd5b50565b5f81359050612fd581612fb1565b92915050565b5f60208284031215612ff057612fef612f95565b5b5f612ffd84828501612fc7565b91505092915050565b5f819050919050565b61301881613006565b82525050565b5f6020820190506130315f83018461300f565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261305857613057613037565b5b8235905067ffffffffffffffff8111156130755761307461303b565b5b6020830191508360208202830111156130915761309061303f565b5b9250929050565b5f5f83601f8401126130ad576130ac613037565b5b8235905067ffffffffffffffff8111156130ca576130c961303b565b5b6020830191508360208202830111156130e6576130e561303f565b5b9250929050565b5f5f5f5f6040858703121561310557613104612f95565b5b5f85013567ffffffffffffffff81111561312257613121612f99565b5b61312e87828801613043565b9450945050602085013567ffffffffffffffff81111561315157613150612f99565b5b61315d87828801613098565b925092505092959194509250565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131948261316b565b9050919050565b6131a48161318a565b81146131ae575f5ffd5b50565b5f813590506131bf8161319b565b92915050565b5f819050919050565b6131d7816131c5565b81146131e1575f5ffd5b50565b5f813590506131f2816131ce565b92915050565b61320181613006565b811461320b575f5ffd5b50565b5f8135905061321c816131f8565b92915050565b5f5ffd5b5f6080828403121561323b5761323a613222565b5b81905092915050565b5f6060828403121561325957613258613222565b5b81905092915050565b5f6080828403121561327757613276613222565b5b81905092915050565b5f63ffffffff82169050919050565b61329881613280565b81146132a2575f5ffd5b50565b5f813590506132b38161328f565b92915050565b5f61ffff82169050919050565b6132cf816132b9565b81146132d9575f5ffd5b50565b5f813590506132ea816132c6565b92915050565b5f5f5f5f5f5f5f5f5f6102208a8c03121561330e5761330d612f95565b5b5f61331b8c828d016131b1565b995050602061332c8c828d016131e4565b985050604061333d8c828d016131e4565b975050606061334e8c828d0161320e565b965050608061335f8c828d01613226565b9550506101006133718c828d01613244565b9450506101606133838c828d01613262565b9350506101e06133958c828d016132a5565b9250506102006133a78c828d016132dc565b9150509295985092959850929598565b5f5f5f606084860312156133ce576133cd612f95565b5b5f6133db868287016131b1565b93505060206133ec8682870161320e565b92505060406133fd8682870161320e565b9150509250925092565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6134518261340b565b810181811067ffffffffffffffff821117156134705761346f61341b565b5b80604052505050565b5f613482612f8c565b905061348e8282613448565b919050565b5f67ffffffffffffffff8211156134ad576134ac61341b565b5b6134b68261340b565b9050602081019050919050565b828183375f83830152505050565b5f6134e36134de84613493565b613479565b9050828152602081018484840111156134ff576134fe613407565b5b61350a8482856134c3565b509392505050565b5f82601f83011261352657613525613037565b5b81356135368482602086016134d1565b91505092915050565b5f6020828403121561355457613553612f95565b5b5f82013567ffffffffffffffff81111561357157613570612f99565b5b61357d84828501613512565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f60ff82169050919050565b6135c4816135af565b82525050565b5f67ffffffffffffffff82169050919050565b6135e6816135ca565b82525050565b5f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b61361e816135ec565b82525050565b61362d81613006565b82525050565b60c082015f8201516136475f8501826135bb565b50602082015161365a60208501826135dd565b50604082015161366d60408501826135dd565b5060608201516136806060850182613615565b5060808201516136936080850182613624565b5060a08201516136a660a0850182613624565b50505050565b5f6136b78383613633565b60c08301905092915050565b5f602082019050919050565b5f6136d982613586565b6136e38185613590565b93506136ee836135a0565b805f5b8381101561371e57815161370588826136ac565b9750613710836136c3565b9250506001810190506136f1565b5085935050505092915050565b5f6020820190508181035f83015261374381846136cf565b905092915050565b5f5f83601f8401126137605761375f613037565b5b8235905067ffffffffffffffff81111561377d5761377c61303b565b5b6020830191508360208202830111156137995761379861303f565b5b9250929050565b5f5f5f5f604085870312156137b8576137b7612f95565b5b5f85013567ffffffffffffffff8111156137d5576137d4612f99565b5b6137e187828801613043565b9450945050602085013567ffffffffffffffff81111561380457613803612f99565b5b6138108782880161374b565b925092505092959194509250565b5f8115159050919050565b6138328161381e565b811461383c575f5ffd5b50565b5f8135905061384d81613829565b92915050565b5f6020828403121561386857613867612f95565b5b5f6138758482850161383f565b91505092915050565b5f8160090b9050919050565b6138938161387e565b82525050565b606082015f8201516138ad5f85018261388a565b5060208201516138c0602085018261388a565b5060408201516138d3604085018261388a565b50505050565b6138e2816131c5565b82525050565b6138f181613280565b82525050565b613900816131c5565b82525050565b608082015f82015161391a5f8501826138f7565b50602082015161392d60208501826138f7565b50604082015161394060408501826138f7565b50606082015161395360608501826138f7565b50505050565b5f6101608201905061396d5f830189613899565b61397a60608301886138d9565b61398760808301876138d9565b61399460a083018661300f565b6139a160c08301856138e8565b6139ae60e0830184613906565b979650505050505050565b5f602082840312156139ce576139cd612f95565b5b5f6139db848285016131b1565b91505092915050565b5f608082840312156139f9576139f8612f95565b5b5f613a0684828501613262565b91505092915050565b613a18816132b9565b82525050565b5f602082019050613a315f830184613a0f565b92915050565b5f5f60408385031215613a4d57613a4c612f95565b5b5f613a5a8582860161320e565b9250506020613a6b8582860161320e565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613aa78161318a565b82525050565b604082015f820151613ac15f850182613a9e565b506020820151613ad46020850182613624565b50505050565b5f613ae58383613aad565b60408301905092915050565b5f602082019050919050565b5f613b0782613a75565b613b118185613a7f565b9350613b1c83613a8f565b805f5b83811015613b4c578151613b338882613ada565b9750613b3e83613af1565b925050600181019050613b1f565b5085935050505092915050565b5f6020820190508181035f830152613b718184613afd565b905092915050565b5f81600b0b9050919050565b613b8e81613b79565b82525050565b608082015f820151613ba85f850182613b85565b506020820151613bbb6020850182613b85565b506040820151613bce6040850182613b85565b506060820151613be16060850182613b85565b50505050565b5f608082019050613bfa5f830184613b94565b92915050565b613c098161318a565b82525050565b5f602082019050613c225f830184613c00565b92915050565b5f5f60408385031215613c3e57613c3d612f95565b5b5f613c4b858286016131b1565b9250506020613c5c8582860161383f565b9150509250929050565b5f60208284031215613c7b57613c7a612f95565b5b5f613c88848285016132dc565b91505092915050565b5f602082019050613ca45f8301846138d9565b92915050565b5f5f5f5f5f5f6101608789031215613cc557613cc4612f95565b5b5f613cd289828a01613244565b9650506060613ce389828a016131e4565b9550506080613cf489828a016131e4565b94505060a0613d0589828a0161320e565b93505060c0613d1689828a01613226565b925050610140613d2889828a016132a5565b9150509295509295509295565b5f82825260208201905092915050565b7f4f6e6c79206f776e65722063616e20736574206572726f7220696e74656772615f8201527f6c73000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d9f602283613d35565b9150613daa82613d45565b604082019050919050565b5f6020820190508181035f830152613dcc81613d93565b9050919050565b7f7363696420616e6420696e74656772616c73206c656e677468206d69736d61745f8201527f6368000000000000000000000000000000000000000000000000000000000000602082015250565b5f613e2d602283613d35565b9150613e3882613dd3565b604082019050919050565b5f6020820190508181035f830152613e5a81613e21565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206f776e65722063616e206d6f646966792076616c756573000000005f82015250565b5f613ec2601c83613d35565b9150613ecd82613e8e565b602082019050919050565b5f6020820190508181035f830152613eef81613eb6565b9050919050565b7f5265776172647320636f6e74726163742069732066726f7a656e0000000000005f82015250565b5f613f2a601a83613d35565b9150613f3582613ef6565b602082019050919050565b5f6020820190508181035f830152613f5781613f1e565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f613f9082613f5e565b613f9a8185613f68565b9350613faa818560208601613f78565b613fb38161340b565b840191505092915050565b5f6020820190508181035f830152613fd68184613f86565b905092915050565b5f67ffffffffffffffff821115613ff857613ff761341b565b5b602082029050602081019050919050565b5f5ffd5b614016816135af565b8114614020575f5ffd5b50565b5f815190506140318161400d565b92915050565b614040816135ca565b811461404a575f5ffd5b50565b5f8151905061405b81614037565b92915050565b5f8151905061406f816132c6565b92915050565b5f6060828403121561408a57614089614009565b5b6140946060613479565b90505f6140a384828501614023565b5f8301525060206140b68482850161404d565b60208301525060406140ca84828501614061565b60408301525092915050565b5f65ffffffffffff82169050919050565b6140f0816140d6565b81146140fa575f5ffd5b50565b5f8151905061410b816140e7565b92915050565b61411a816135ec565b8114614124575f5ffd5b50565b5f8151905061413581614111565b92915050565b5f606082840312156141505761414f614009565b5b61415a6060613479565b90505f6141698482850161404d565b5f83015250602061417c848285016140fd565b602083015250604061419084828501614127565b60408301525092915050565b5f61012082840312156141b2576141b1614009565b5b6141bc6060613479565b90505f6141cb84828501614075565b5f8301525060606141de8482850161413b565b60208301525060c06141f28482850161413b565b60408301525092915050565b5f61421061420b84613fde565b613479565b90508083825260208201905061012084028301858111156142345761423361303f565b5b835b8181101561425e5780614249888261419c565b84526020840193505061012081019050614236565b5050509392505050565b5f82601f83011261427c5761427b613037565b5b815161428c8482602086016141fe565b91505092915050565b5f602082840312156142aa576142a9612f95565b5b5f82015167ffffffffffffffff8111156142c7576142c6612f99565b5b6142d384828501614268565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614313826135ec565b915061431e836135ec565b925082820390507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115614354576143536142dc565b5b92915050565b5f614364826140d6565b915061436f836140d6565b9250828203905065ffffffffffff81111561438d5761438c6142dc565b5b92915050565b5f61439d82613006565b91506143a883613006565b92508282026143b681613006565b915082820484148315176143cd576143cc6142dc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61440b82613006565b915061441683613006565b925082614426576144256143d4565b5b828204905092915050565b5f61443b82613006565b915061444683613006565b925082820190508082111561445e5761445d6142dc565b5b92915050565b5f61446e826131c5565b9150614479836131c5565b92508282019050828112155f8312168382125f84121516171561449f5761449e6142dc565b5b92915050565b5f6144af826131c5565b91506144ba836131c5565b9250826144ca576144c96143d4565b5b60015f0383147f800000000000000000000000000000000000000000000000000000000000000083141615614502576145016142dc565b5b828205905092915050565b5f614517826131c5565b9150614522836131c5565b9250828202614530816131c5565b91507f800000000000000000000000000000000000000000000000000000000000000084145f84121615614567576145666142dc565b5b828205841483151761457c5761457b6142dc565b5b5092915050565b7f4f6e6c79206f776e65722063616e20736574207363616c6573000000000000005f82015250565b5f6145b7601983613d35565b91506145c282614583565b602082019050919050565b5f6020820190508181035f8301526145e4816145ab565b9050919050565b7f7363696420616e64207363616c65206c656e677468206d69736d6174636800005f82015250565b5f61461f601e83613d35565b915061462a826145eb565b602082019050919050565b5f6020820190508181035f83015261464c81614613565b9050919050565b61465c8161381e565b82525050565b5f6020820190506146755f830184614653565b92915050565b7f4f6e6c79206f776e65722063616e2073657420696e74657276616c20454d41735f82015250565b5f6146af602083613d35565b91506146ba8261467b565b602082019050919050565b5f6020820190508181035f8301526146dc816146a3565b9050919050565b7f7363696420616e6420656d6173206c656e677468206d69736d617463680000005f82015250565b5f614717601d83613d35565b9150614722826146e3565b602082019050919050565b5f6020820190508181035f8301526147448161470b565b9050919050565b7f4f6e6c79206f776e65722063616e2075706461746520636f656666696369656e5f8201527f7473000000000000000000000000000000000000000000000000000000000000602082015250565b5f6147a5602283613d35565b91506147b08261474b565b604082019050919050565b5f6020820190508181035f8301526147d281614799565b9050919050565b6147e281613b79565b81146147ec575f5ffd5b50565b5f813590506147fd816147d9565b92915050565b5f6020828403121561481857614817612f95565b5b5f614825848285016147ef565b91505092915050565b7f4f6e6c79206f776e65722063616e206d6f6469667920617574686f72697469655f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f614888602183613d35565b91506148938261482e565b604082019050919050565b5f6020820190508181035f8301526148b58161487c565b9050919050565b7f43616e6e6f74207265766f6b65206f776e2061636365737300000000000000005f82015250565b5f6148f0601883613d35565b91506148fb826148bc565b602082019050919050565b5f6020820190508181035f83015261491d816148e4565b9050919050565b7f4f6e6c79206f776e65722063616e2073657420726577617264207479706500005f82015250565b5f614958601e83613d35565b915061496382614924565b602082019050919050565b5f6020820190508181035f8301526149858161494c565b9050919050565b614995816135af565b82525050565b6149a4816135ca565b82525050565b6149b3816135ec565b82525050565b6149c2816140d6565b82525050565b5f610120820190506149dc5f83018c613c00565b6149e9602083018b61498c565b6149f6604083018a61499b565b614a0360608301896149aa565b614a1060808301886149aa565b614a1d60a08301876149b9565b614a2a60c083018661300f565b614a3760e083018561300f565b614a456101008301846138d9565b9a9950505050505050505050565b7f4f6e6c79206f776e65722063616e2073657420706172616d73000000000000005f82015250565b5f614a87601983613d35565b9150614a9282614a53565b602082019050919050565b5f6020820190508181035f830152614ab481614a7b565b9050919050565b614ac48161387e565b8114614ace575f5ffd5b50565b5f8135614add81614abb565b80915050919050565b5f815f1b9050919050565b5f69ffffffffffffffffffff614b0684614ae6565b9350801983169250808416831791505092915050565b5f819050919050565b5f614b3f614b3a614b358461387e565b614b1c565b61387e565b9050919050565b5f819050919050565b614b5882614b25565b614b6b614b6482614b46565b8354614af1565b8255505050565b5f8160501b9050919050565b5f73ffffffffffffffffffff00000000000000000000614b9d84614b72565b9350801983169250808416831791505092915050565b614bbc82614b25565b614bcf614bc882614b46565b8354614b7e565b8255505050565b5f8160a01b9050919050565b5f7dffffffffffffffffffff0000000000000000000000000000000000000000614c0b84614bd6565b9350801983169250808416831791505092915050565b614c2a82614b25565b614c3d614c3682614b46565b8354614be2565b8255505050565b5f81015f830180614c5481614ad1565b9050614c608184614b4f565b5050505f81016020830180614c7481614ad1565b9050614c808184614bb3565b5050505f81016040830180614c9481614ad1565b9050614ca08184614c21565b5050505050565b614cb18282614c44565b5050565b5f614cbf82613006565b9150614cca83613006565b9250828203905081811115614ce257614ce16142dc565b5b92915050565b5f614cf2826131c5565b9150614cfd836131c5565b925082820390508181125f8412168282135f851215161715614d2257614d216142dc565b5b92915050565b7f55706461746572206164647265737320697320656d70747900000000000000005f82015250565b5f614d5c601883613d35565b9150614d6782614d28565b602082019050919050565b5f6020820190508181035f830152614d8981614d50565b905091905056fea2646970667358221220372aff0000e1448b18abce3e0b689da67572a653d0c19904d318f22a557bbd1d64736f6c634300081e0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c0f0b1bf5f0e2c18a6a2ea86402d69195600faee

-----Decoded View---------------
Arg [0] : o (address): 0xc0F0b1Bf5F0e2c18A6a2ea86402d69195600faEE

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c0f0b1bf5f0e2c18a6a2ea86402d69195600faee


Deployed Bytecode Sourcemap

579:22575:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6562:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4628:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8283:637;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9005:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13345:4631;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4274:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3911:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5276:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2900:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6670:465;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;3576:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7993:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6306:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6188:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22683:466;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6404:150;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7145:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5795:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4106:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5035:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3733:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9771:3565;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7252:733;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5671:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6085:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5157:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6562:100;6615:7;6642:6;:12;6649:4;6642:12;;;;;;;;;;;;;;;;6635:19;;6562:100;;;:::o;4628:399::-;4742:11;:23;4754:10;4742:23;;;;;;;;;;;;;;;;;;;;;;;;;4734:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4838:14;;:21;;4823:4;;:11;;:36;4815:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;4914:9;4926:1;4914:13;;4909:111;4933:4;;:11;;4929:1;:15;4909:111;;;4991:14;;5006:1;4991:17;;;;;;;:::i;:::-;;;;;;;;4966:13;:22;4980:4;;4985:1;4980:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4966:22;;;;;;;;;;;;;;;:42;;;;4946:3;;;;;4909:111;;;;4628:399;;;;:::o;8283:637::-;8637:178;8661:2;8678:17;8710;8742:16;8773:2;8790:14;8637:9;:178::i;:::-;8826:18;8836:7;8826:9;:18::i;:::-;8855:26;8869:11;8855:13;:26::i;:::-;8892:20;8905:6;8892:12;:20::i;:::-;8283:637;;;;;;;;;:::o;9005:216::-;9098:11;:23;9110:10;9098:23;;;;;;;;;;;;;;;;;;;;;;;;;9090:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9179:6;9165:7;:11;9173:2;9165:11;;;;;;;;;;;;;;;:20;;;;9211:2;9196:12;:17;;;;9005:216;;;:::o;13345:4631::-;13407:39;13468:6;;;;;;;;;;;13467:7;13459:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;13516:31;13550:6;;;;;;;;;;;:30;;;13581:3;13550:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13516:69;;13636:8;:15;13615:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;13597:55;;13665:37;13718:8;:15;13705:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13665:69;;13745:29;13791:8;:15;13777:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13745:62;;13818:36;13871:8;:15;13857:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13818:69;;13905:11;13919:1;13905:15;;13900:4034;13928:8;:15;13922:3;:21;13900:4034;;;13967:24;13994:8;14003:3;13994:13;;;;;;;;:::i;:::-;;;;;;;;13967:40;;14022:26;14051:3;:10;;;14022:39;;14097:10;;;;;;;;;;;14080:27;;:9;:13;;;:27;;;14076:76;;14128:8;;;;14076:76;14231:1;14172:6;:55;14179:47;14192:9;:18;;;14212:9;:13;;;14179:12;:47::i;:::-;14172:55;;;;;;;;;;;;;;;;:60;14168:109;;14253:8;;;;14168:109;14322:1;14297:3;:14;;;:21;;;:26;;;14293:212;;14367:95;;;;;;;;14382:9;:18;;;14367:95;;;;;;14401:9;:13;;;14367:95;;;;;;14415:3;:14;;;:21;;;14367:95;;;;;;14437:3;:14;;;:20;;;14367:95;;;;;;14458:1;14367:95;;;;14460:1;14367:95;;;14344:15;14360:3;14344:20;;;;;;;;:::i;:::-;;;;;;;:118;;;;14481:8;;;;14293:212;14521:17;14576:21;14647:3;:14;;;:20;;;14624:43;;:3;:14;;;:20;;;:43;;;14620:276;;;14736:3;:14;;;:20;;;14713:3;:14;;;:20;;;:43;;;;:::i;:::-;14697:59;;14620:276;;;14852:3;:14;;;:20;;;14829:3;:14;;;:20;;;:43;;;;:::i;:::-;14813:59;;14620:276;14930:94;14944:6;:55;14951:47;14964:9;:18;;;14984:9;:13;;;14951:12;:47::i;:::-;14944:55;;;;;;;;;;;;;;;;15009:13;15001:22;;14930:13;:94::i;:::-;14918:106;;14553:487;15054:18;2192:6;15110:3;:14;;;:24;;;15083:3;:14;;;:24;;;:51;;;;:::i;:::-;15075:60;;:88;;;;:::i;:::-;15054:109;;15178:18;15231:12;15245:6;15255:65;15269:8;15280:3;15286:9;:18;;;15306:9;:13;;;15255;:65::i;:::-;15230:90;;;;15339:14;15376:1;15372:199;;;15411:12;15424:4;15411:18;;;;;;;;:::i;:::-;;;;;;;;15402:27;;15372:199;;;15488:13;:62;15502:47;15515:9;:18;;;15535:9;:13;;;15502:12;:47::i;:::-;15488:62;;;;;;;;;;;;;;;;15479:71;;15372:199;15595:1;15591:1656;;;15617:21;15642:58;15657:19;15677:4;15657:25;;;;;;;;:::i;:::-;;;;;;;;15695:4;15684:10;:15;;;;:::i;:::-;15642:14;:58::i;:::-;15617:83;;15747:13;15719:19;15739:4;15719:25;;;;;;;;:::i;:::-;;;;;;;:41;;;;;15814:13;;;;;;;;;;;15801:26;;15810:1;15801:6;:10;;;;:::i;:::-;:26;15797:570;;;2077:6;15856:37;;15797:570;;;15950:12;15965:58;15982:15;;16007:13;15965:9;:58::i;:::-;15950:73;;16050:22;16076:21;16098:4;16076:27;;;;;;;;:::i;:::-;;;;;;;;16050:53;;16144:61;16158:46;16173:5;16198;16180:15;:23;;;;:::i;:::-;16158:14;:46::i;:::-;16144:13;:61::i;:::-;16130:75;;16262:80;16281:11;16294:15;16329:5;16311:15;:23;;;;:::i;:::-;16336:5;16262:18;:80::i;:::-;16232:21;16254:4;16232:27;;;;;;;;:::i;:::-;;;;;;;:110;;;;;15923:444;;15797:570;15598:788;15591:1656;;;16415:21;16440:94;16455:12;:61;16468:47;16481:9;:18;;;16501:9;:13;;;16468:12;:47::i;:::-;16455:61;;;;;;;;;;;;;;;;16529:4;16518:10;:15;;;;:::i;:::-;16440:14;:94::i;:::-;16415:119;;16584:13;16557:19;16577:3;16557:24;;;;;;;;:::i;:::-;;;;;;;:40;;;;;16639:13;;;;;;;;;;;16626:26;;16635:1;16626:6;:10;;;;:::i;:::-;:26;16622:606;;;2077:6;16681:37;;16622:606;;;16775:12;16790:58;16807:15;;16832:13;16790:9;:58::i;:::-;16775:73;;16875:22;16902:13;:62;16916:47;16929:9;:18;;;16949:9;:13;;;16916:12;:47::i;:::-;16902:62;;;;;;;;;;;;;;;;16875:89;;17006:61;17020:46;17035:5;17060;17042:15;:23;;;;:::i;:::-;17020:14;:46::i;:::-;17006:13;:61::i;:::-;16992:75;;17123:80;17142:11;17155:15;17190:5;17172:15;:23;;;;:::i;:::-;17197:5;17123:18;:80::i;:::-;17094:21;17116:3;17094:26;;;;;;;;:::i;:::-;;;;;;;:109;;;;;16748:480;;16622:606;16392:855;15591:1656;17287:1;17283:160;;;17343:1;17334:6;:10;;;;:::i;:::-;17313:12;17326:4;17313:18;;;;;;;;:::i;:::-;;;;;;;:31;;;;;17283:160;;;17422:1;17413:6;:10;;;;:::i;:::-;17393:12;17406:3;17393:17;;;;;;;;:::i;:::-;;;;;;;:30;;;;;17283:160;15211:2247;;;17475:18;17495:23;17522:54;17552:4;17540:10;17533:23;;;;:::i;:::-;17565:9;17522:10;:54::i;:::-;17474:102;;;;17614:308;;;;;;;;17629:9;:18;;;17614:308;;;;;;17666:9;:13;;;17614:308;;;;;;17698:3;:14;;;:21;;;17614:308;;;;;;17738:3;:14;;;:20;;;17614:308;;;;;;2077:6;17799:11;17785;:25;;;;:::i;:::-;:51;;;;:::i;:::-;17614:308;;;;2077:6;17878:16;17864:11;:30;;;;:::i;:::-;:56;;;;:::i;:::-;17614:308;;;17591:15;17607:3;17591:20;;;;;;;;:::i;:::-;;;;;;;:331;;;;13952:3982;;;;;;;13900:4034;13945:5;;;;;;;13900:4034;;;;17946:22;;;;13345:4631;;;:::o;4274:346::-;4373:11;:23;4385:10;4373:23;;;;;;;;;;;;;;;;;;;;;;;;;4365:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;4460:5;;:12;;4445:4;;:11;;:27;4437:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4523:9;4535:1;4523:13;;4518:95;4542:4;;:11;;4538:1;:15;4518:95;;;4593:5;;4599:1;4593:8;;;;;;;:::i;:::-;;;;;;;;4575:6;:15;4582:4;;4587:1;4582:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;4575:15;;;;;;;;;;;;;;;:26;;;;4555:3;;;;;4518:95;;;;4274:346;;;;:::o;3911:187::-;3972:11;:23;3984:10;3972:23;;;;;;;;;;;;;;;;;;;;;;;;;3964:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4056:1;4039:14;;:18;;;;;;;;;;;;;;;;;;4073:17;4088:1;4073:17;;;;;;:::i;:::-;;;;;;;;3911:187;:::o;5276:387::-;5388:11;:23;5400:10;5388:23;;;;;;;;;;;;;;;;;;;;;;;;;5380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5482:13;;:20;;5467:4;;:11;;:35;5459:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;5552:9;5564:1;5552:13;;5547:109;5571:4;;:11;;5567:1;:15;5547:109;;;5628:13;;5642:1;5628:16;;;;;;;:::i;:::-;;;;;;;;5604:12;:21;5617:4;;5622:1;5617:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5604:21;;;;;;;;;;;;;;;:40;;;;5584:3;;;;;5547:109;;;;5276:387;;;;:::o;2900:28::-;;;;:::o;6670:465::-;6726:20;;:::i;:::-;6757:6;6774;6791:7;6809:6;6826:19;;:::i;:::-;6886:13;6914:16;;6945;;6976:15;;7006:13;;;;;;;;;;;7034:82;;;;;;;;7047:13;;7034:82;;;;7062:13;;7034:82;;;;7077:18;;7034:82;;;;7097:18;;7034:82;;;6864:263;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6670:465;;;;;;:::o;3576:149::-;3632:11;:23;3644:10;3632:23;;;;;;;;;;;;;;;;;;;;;;;;;3624:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;3715:1;3699:6;;:18;;;;;;;;;;;;;;;;;;3576:149;:::o;7993:282::-;8071:11;:23;8083:10;8071:23;;;;;;;;;;;;;;;;;;;;;;;;;8063:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8156:6;:11;;;;;;;;;;:::i;:::-;8144:9;;:23;;;;;;;;;;;;;;;;;;;;8189:6;:10;;;;;;;;;;:::i;:::-;8178:8;;:21;;;;;;;;;;;;;;;;;;;;8221:6;:10;;;;;;;;;;:::i;:::-;8210:8;;:21;;;;;;;;;;;;;;;;;;;;8255:6;:12;;;;;;;;;;:::i;:::-;8242:10;;:25;;;;;;;;;;;;;;;;;;;;7993:282;:::o;6306:90::-;6352:6;6378:10;;;;;;;;;;;6371:17;;6306:90;:::o;6188:110::-;6250:7;6277;:13;6285:4;6277:13;;;;;;;;;;;;;;;;6270:20;;6188:110;;;:::o;22683:466::-;22760:33;22840:5;22822:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22807:39;;22862:9;22874:1;22862:13;;22857:253;22881:5;22877:1;:9;22857:253;;;22909:15;22927:8;:19;22944:1;22936:5;:9;;;;:::i;:::-;22927:19;;;;;;;;;;;;;;;;;;;;;22909:37;;22984:1;22965:21;;:7;:21;;;22961:67;;23007:5;;;22961:67;23060:38;;;;;;;;23072:7;23060:38;;;;;;23081:7;:16;23089:7;23081:16;;;;;;;;;;;;;;;;23060:38;;;23042:12;23055:1;23042:15;;;;;;;;:::i;:::-;;;;;;;:56;;;;22893:217;22888:3;;;;;22857:253;;;;22683:466;;;;:::o;6404:150::-;6452:19;;:::i;:::-;6491:55;;;;;;;;6504:9;;;;;;;;;;;6491:55;;;;;;6515:8;;;;;;;;;;;6491:55;;;;;;6525:8;;;;;;;;;;;6491:55;;;;;;6535:10;;;;;;;;;;;6491:55;;;;;6484:62;;6404:150;:::o;7145:99::-;7194:7;7229:6;;;;;;;;;;;7214:22;;7145:99;:::o;5795:282::-;5867:11;:23;5879:10;5867:23;;;;;;;;;;;;;;;;;;;;;;;;;5859:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;5949:10;5944:15;;:1;:15;;;5940:89;;5984:4;5976:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5940:89;6065:4;6048:11;:14;6060:1;6048:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;5795:282;;:::o;4106:160::-;4171:11;:23;4183:10;4171:23;;;;;;;;;;;;;;;;;;;;;;;;;4163:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4253:5;4240:10;;:18;;;;;;;;;;;;;;;;;;4106:160;:::o;5035:114::-;5096:6;5122:13;:19;5136:4;5122:19;;;;;;;;;;;;;;;;5115:26;;5035:114;;;:::o;3733:170::-;3786:11;:23;3798:10;3786:23;;;;;;;;;;;;;;;;;;;;;;;;;3778:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;3862:1;3853:6;;:10;;;;;;;;;;;;;;;;;;3879:16;3893:1;3879:16;;;;;;:::i;:::-;;;;;;;;3733:170;:::o;9771:3565::-;9836:39;9897:6;;;;;;;;;;;9896:7;9888:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9947:22;9958:10;9947;:22::i;:::-;9980:31;10014:6;;;;;;;;;;;:29;;;10051:9;10062:3;10014:52;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9980:86;;10116:8;:15;10095:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10077:55;;10145:24;;:::i;:::-;10180:21;10212:23;10238:1;10212:27;;10255:11;10269:1;10255:15;;10250:3002;10278:8;:15;10272:3;:21;10250:3002;;;10323:8;10332:3;10323:13;;;;;;;;:::i;:::-;;;;;;;;10317:19;;10373:10;;;;;;;;;;;10355:28;;:3;:10;;;:14;;;:28;;;10404:8;10351:77;10444:11;10458:49;10471:3;:10;;;:19;;;10492:3;:10;;;:14;;;10458:12;:49::i;:::-;10444:63;;10522:17;10573:20;10627:6;:12;10634:4;10627:12;;;;;;;;;;;;;;;;10612:27;;10679:1;10663:12;:17;10659:74;;10705:8;;;;;10659:74;10782:1;10757:3;:14;;;:21;;;:26;;;10753:262;;10867:97;;;;;;;;10882:3;:10;;;:19;;;10867:97;;;;;;10902:3;:10;;;:14;;;10867:97;;;;;;10917:3;:14;;;:21;;;10867:97;;;;;;10939:3;:14;;;:20;;;10867:97;;;;;;10960:1;10867:97;;;;10962:1;10867:97;;;10844:15;10860:3;10844:20;;;;;;;;:::i;:::-;;;;;;;:120;;;;10987:8;;;;;10753:262;11078:3;:14;;;:20;;;11055:43;;:3;:14;;;:20;;;:43;;;11051:260;;;11163:3;:14;;;:20;;;11140:3;:14;;;:20;;;:43;;;;:::i;:::-;11124:59;;11051:260;;;11271:3;:14;;;:20;;;11248:3;:14;;;:20;;;:43;;;;:::i;:::-;11232:59;;11051:260;11343:51;11357:12;11379:13;11371:22;;11343:13;:51::i;:::-;11331:63;;10554:856;11424:18;2192:6;11480:3;:14;;;:24;;;11453:3;:14;;;:24;;;:51;;;;:::i;:::-;11445:60;;:88;;;;:::i;:::-;11424:109;;11585:18;11605:23;11632:54;11662:4;11650:10;11643:23;;;;:::i;:::-;11675:9;11632:10;:54::i;:::-;11584:102;;;;11703:18;11724:60;11741:4;11747:13;:19;11761:4;11747:19;;;;;;;;;;;;;;;;11779:4;11768:10;:15;;;;:::i;:::-;11724:16;:60::i;:::-;11703:81;;11843:1;11821:13;:19;11835:4;11821:19;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;11799:13;:19;11813:4;11799:19;;;;;;;;;;;;;;;:45;;;;11861:23;2077:6;11909:11;11895;:25;;;;:::i;:::-;:51;;;;:::i;:::-;11861:86;;11962:28;2077:6;12015:16;12001:11;:30;;;;:::i;:::-;:56;;;;:::i;:::-;11962:96;;12080:14;;;;;;;;;;;12076:995;;;12157:20;12139:15;:38;;;;:::i;:::-;12115:7;:19;12123:10;12115:19;;;;;;;;;;;;;;;;:62;;;;;;;:::i;:::-;;;;;;;;12201:381;12216:10;12253:3;:10;;;:19;;;12299:3;:10;;;:14;;;12340:3;:14;;;:20;;;12388:13;12446:6;12435:10;:17;;;;:::i;:::-;12480:15;12523:20;12570:11;12201:381;;;;;;;;;;;;;;:::i;:::-;;;;;;;;12638:20;12620:15;:38;;;;:::i;:::-;12601:57;;;;;:::i;:::-;;;12076:995;;;12704:351;12721:10;12754:3;:10;;;:19;;;12796:3;:10;;;:14;;;12833:3;:14;;;:20;;;12877:13;12931:6;12920:10;:17;;;;:::i;:::-;12961:15;13000:20;13043:11;12704:351;;;;;;;;;;;;;;:::i;:::-;;;;;;;;12076:995;13110:130;;;;;;;;13125:3;:10;;;:19;;;13110:130;;;;;;13145:3;:10;;;:14;;;13110:130;;;;;;13160:3;:14;;;:21;;;13110:130;;;;;;13182:3;:14;;;:20;;;13110:130;;;;;;13203:15;13110:130;;;;13219:20;13110:130;;;13087:15;13103:3;13087:20;;;;;;;;:::i;:::-;;;;;;;:153;;;;10302:2950;;;;;;;;10250:3002;10295:5;;;;;;;10250:3002;;;;13278:15;13262:12;;:31;;;;;;;:::i;:::-;;;;;;;;13306:22;;;;9771:3565;;;:::o;7252:733::-;7513:11;:23;7525:10;7513:23;;;;;;;;;;;;;;;;;;;;;;;;;7505:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;7593:2;7577:13;:18;;;;;;:::i;:::-;;;;7625:17;7606:16;:36;;;;7672:17;7653:16;:36;;;;7718:16;7700:15;:34;;;;7761:14;7745:13;;:30;;;;;;;;;;;;;;;;;;7804:2;:18;;;7788:13;:34;;;;7849:2;:18;;;7833:13;:34;;;;7899:2;:23;;;7878:18;:44;;;;7954:2;:23;;;7933:18;:44;;;;7252:733;;;;;;:::o;5671:116::-;5734:7;5761:12;:18;5774:4;5761:18;;;;;;;;;;;;;;;;5754:25;;5671:116;;;:::o;6085:95::-;6133:7;6160:12;;6153:19;;6085:95;:::o;5157:107::-;5214:6;5240:10;:16;5251:4;5240:16;;;;;;;;;;;;;;;;5233:23;;5157:107;;;:::o;9505:258::-;9582:11;9638:8;9630:16;;9678:4;9672;9668:15;9660:23;;9715:7;9709:4;9705:18;9697:26;;9505:258;;;;:::o;20180:167::-;20265:7;20328:11;2192:6;20292:9;:35;;;;:::i;:::-;:47;;;;:::i;:::-;20285:54;;20180:167;;;;:::o;17985:449::-;18101:7;18110:4;18133:9;18145:1;18133:13;;18128:271;18152:1;:8;18148:1;:12;18128:271;;;18198:1;18186:8;:13;;;;:29;;;;;18214:1;18203:7;:12;;;;18186:29;:65;;;;;18243:8;18219:32;;:1;18221;18219:4;;;;;;;;:::i;:::-;;;;;;;;:11;;;:20;;;:32;;;18186:65;:95;;;;;18274:7;18255:26;;:1;18257;18255:4;;;;;;;;:::i;:::-;;;;;;;;:11;;;:15;;;:26;;;18186:95;18182:206;;;18309:3;18305:1;:7;18301:72;;;18345:1;18348:4;18337:16;;;;;;;18301:72;18182:206;18162:3;;;;;18128:271;;;;18417:1;18420:5;18409:17;;;;17985:449;;;;;;;;:::o;21931:199::-;22017:7;2192:6;22081:12;2236:18;22069:24;;;;:::i;:::-;22058:8;2236:18;2192:6;2304:37;;;;:::i;:::-;22045:21;;;;:::i;:::-;:48;;;;:::i;:::-;22044:78;;;;:::i;:::-;22037:85;;21931:199;;;;:::o;20011:161::-;20084:6;20158;2077;20120:8;20111:6;:17;;;;:::i;:::-;20110:45;;;;:::i;:::-;:54;;;;:::i;:::-;20103:61;;20011:161;;;;:::o;19607:396::-;19679:15;19762;2077:6;19794:13;:16;;;;;;;;;;;;19787:24;;19781:3;:30;;;;:::i;:::-;19780:58;;;;:::i;:::-;19762:76;;19849:15;2077:6;19882:13;:16;;;;;;;;;;;;19875:24;;19868:4;:31;;;;:::i;:::-;19867:59;;;;:::i;:::-;19849:77;;19987:8;19976;19951:13;:21;;;;;;;;;;;;19944:29;;:40;;;;:::i;:::-;:51;;;;:::i;:::-;19937:58;;;;19607:396;;;;:::o;18663:302::-;18725:22;18775:16;;18764:8;:27;18760:172;;;18815:16;;18808:23;;;;18760:172;18864:16;;18853:8;:27;18849:83;;;18904:16;;18897:23;;;;18849:83;18949:8;18942:15;;18663:302;;;;:::o;18973:626::-;19111:6;19299:16;;19280:15;:35;:50;;;;;19329:1;19319:7;:11;19280:50;:72;;;;;19351:1;19334:14;:18;19280:72;19276:282;;;19395:7;19376:16;:26;;;;:::i;:::-;19369:33;;;;19276:282;19443:16;;19424:15;:35;:50;;;;;19473:1;19463:7;:11;19424:50;:72;;;;;19495:1;19478:14;:18;19424:72;19420:138;;;19539:7;19520:16;:26;;;;:::i;:::-;19513:33;;;;19420:138;19575:16;19568:23;;18973:626;;;;;;;:::o;21744:179::-;21822:6;21830;21857:25;21872:9;21857:14;:25::i;:::-;21884:30;21904:9;21884:19;:30::i;:::-;21849:66;;;;21744:179;;;;;:::o;9229:268::-;9313:1;9294:21;;:7;:21;;;9286:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9379:1;9359:7;:16;9367:7;9359:16;;;;;;;;;;;;;;;;:21;9355:135;;9423:7;9397:8;:23;9406:13;;9397:23;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;9477:1;9461:13;;:17;;;;:::i;:::-;9445:13;:33;;;;9355:135;9229:268;:::o;20355:626::-;20446:17;20518:21;20542:45;20557:12;:18;20570:4;20557:18;;;;;;;;;;;;;;;;20577:9;20542:14;:45::i;:::-;20518:69;;20619:13;20598:12;:18;20611:4;20598:18;;;;;;;;;;;;;;;:34;;;;20731:13;;;;;;;;;;;20718:26;;20727:1;20718:6;:10;;;;:::i;:::-;:26;20714:89;;;2077:6;20761:30;;;;;20714:89;20893:80;20908:4;20914:58;20931:15;;20956:13;20914:9;:58::i;:::-;20893:14;:80::i;:::-;20886:87;;;20355:626;;;;;;:::o;20991:367::-;21055:6;21088:262;21110:206;2134:6;21243:9;21233;21223:8;;;;;;;;;;;21216:16;;:26;;;;:::i;:::-;:36;;;;:::i;:::-;:62;;;;:::i;:::-;2077:6;21158:9;21147;;;;;;;;;;;21140:17;;:27;;;;:::i;:::-;:51;;;;:::i;:::-;:138;;;;:::i;:::-;21302:13;;21110:3;:206::i;:::-;21336:13;;21088:3;:262::i;:::-;21081:269;;20991:367;;;:::o;21366:369::-;21435:6;21461:266;21483:206;2134:6;21612:9;21602;21590:10;;;;;;;;;;;21583:18;;:28;;;;:::i;:::-;:38;;;;:::i;:::-;:64;;;;:::i;:::-;2077:6;21526:9;21516:8;;;;;;;;;;;21509:16;;:26;;;;:::i;:::-;:50;;;;:::i;:::-;:138;;;;:::i;:::-;21670:18;;21483:3;:206::i;:::-;21708:18;;21461:3;:266::i;:::-;21454:273;;21366:369;;;:::o;22142:533::-;22209:22;22282;22307:13;:19;22321:4;22307:19;;;;;;;;;;;;;;;;22282:44;;22337:26;22384:3;22366:15;:21;;;;:::i;:::-;22337:50;;22418:55;22432:40;22447:3;22452:19;22432:14;:40::i;:::-;22418:13;:55::i;:::-;22400:73;;22508:78;22527:15;22544;22561:19;22582:3;22508:18;:78::i;:::-;22486:13;:19;22500:4;22486:19;;;;;;;;;;;;;;;:100;;;;22616:15;22597:10;:16;22608:4;22597:16;;;;;;;;;;;;;;;:34;;;;22644:22;;22142:533;;;;:::o;18553:102::-;18608:6;18638:1;18634;:5;:13;;18646:1;18634:13;;;18642:1;18634:13;18627:20;;18553:102;;;;:::o;18442:103::-;18497:6;18528:1;18523;:6;;:14;;18536:1;18523:14;;;18532:1;18523:14;18516:21;;18442:103;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:103;370:7;410:20;403:5;399:32;388:43;;334:103;;;:::o;443:120::-;515:23;532:5;515:23;:::i;:::-;508:5;505:34;495:62;;553:1;550;543:12;495:62;443:120;:::o;569:137::-;614:5;652:6;639:20;630:29;;668:32;694:5;668:32;:::i;:::-;569:137;;;;:::o;712:327::-;770:6;819:2;807:9;798:7;794:23;790:32;787:119;;;825:79;;:::i;:::-;787:119;945:1;970:52;1014:7;1005:6;994:9;990:22;970:52;:::i;:::-;960:62;;916:116;712:327;;;;:::o;1045:77::-;1082:7;1111:5;1100:16;;1045:77;;;:::o;1128:118::-;1215:24;1233:5;1215:24;:::i;:::-;1210:3;1203:37;1128:118;;:::o;1252:222::-;1345:4;1383:2;1372:9;1368:18;1360:26;;1396:71;1464:1;1453:9;1449:17;1440:6;1396:71;:::i;:::-;1252:222;;;;:::o;1480:117::-;1589:1;1586;1579:12;1603:117;1712:1;1709;1702:12;1726:117;1835:1;1832;1825:12;1865:567;1937:8;1947:6;1997:3;1990:4;1982:6;1978:17;1974:27;1964:122;;2005:79;;:::i;:::-;1964:122;2118:6;2105:20;2095:30;;2148:18;2140:6;2137:30;2134:117;;;2170:79;;:::i;:::-;2134:117;2284:4;2276:6;2272:17;2260:29;;2338:3;2330:4;2322:6;2318:17;2308:8;2304:32;2301:41;2298:128;;;2345:79;;:::i;:::-;2298:128;1865:567;;;;;:::o;2454:::-;2526:8;2536:6;2586:3;2579:4;2571:6;2567:17;2563:27;2553:122;;2594:79;;:::i;:::-;2553:122;2707:6;2694:20;2684:30;;2737:18;2729:6;2726:30;2723:117;;;2759:79;;:::i;:::-;2723:117;2873:4;2865:6;2861:17;2849:29;;2927:3;2919:4;2911:6;2907:17;2897:8;2893:32;2890:41;2887:128;;;2934:79;;:::i;:::-;2887:128;2454:567;;;;;:::o;3027:930::-;3147:6;3155;3163;3171;3220:2;3208:9;3199:7;3195:23;3191:32;3188:119;;;3226:79;;:::i;:::-;3188:119;3374:1;3363:9;3359:17;3346:31;3404:18;3396:6;3393:30;3390:117;;;3426:79;;:::i;:::-;3390:117;3539:79;3610:7;3601:6;3590:9;3586:22;3539:79;:::i;:::-;3521:97;;;;3317:311;3695:2;3684:9;3680:18;3667:32;3726:18;3718:6;3715:30;3712:117;;;3748:79;;:::i;:::-;3712:117;3861:79;3932:7;3923:6;3912:9;3908:22;3861:79;:::i;:::-;3843:97;;;;3638:312;3027:930;;;;;;;:::o;3963:126::-;4000:7;4040:42;4033:5;4029:54;4018:65;;3963:126;;;:::o;4095:96::-;4132:7;4161:24;4179:5;4161:24;:::i;:::-;4150:35;;4095:96;;;:::o;4197:122::-;4270:24;4288:5;4270:24;:::i;:::-;4263:5;4260:35;4250:63;;4309:1;4306;4299:12;4250:63;4197:122;:::o;4325:139::-;4371:5;4409:6;4396:20;4387:29;;4425:33;4452:5;4425:33;:::i;:::-;4325:139;;;;:::o;4470:76::-;4506:7;4535:5;4524:16;;4470:76;;;:::o;4552:120::-;4624:23;4641:5;4624:23;:::i;:::-;4617:5;4614:34;4604:62;;4662:1;4659;4652:12;4604:62;4552:120;:::o;4678:137::-;4723:5;4761:6;4748:20;4739:29;;4777:32;4803:5;4777:32;:::i;:::-;4678:137;;;;:::o;4821:122::-;4894:24;4912:5;4894:24;:::i;:::-;4887:5;4884:35;4874:63;;4933:1;4930;4923:12;4874:63;4821:122;:::o;4949:139::-;4995:5;5033:6;5020:20;5011:29;;5049:33;5076:5;5049:33;:::i;:::-;4949:139;;;;:::o;5094:117::-;5203:1;5200;5193:12;5256:236;5333:5;5374:3;5365:6;5360:3;5356:16;5352:26;5349:113;;;5381:79;;:::i;:::-;5349:113;5480:6;5471:15;;5256:236;;;;:::o;5538:::-;5616:5;5657:2;5648:6;5643:3;5639:16;5635:25;5632:112;;;5663:79;;:::i;:::-;5632:112;5762:6;5753:15;;5538:236;;;;:::o;5819:::-;5896:5;5937:3;5928:6;5923:3;5919:16;5915:26;5912:113;;;5944:79;;:::i;:::-;5912:113;6043:6;6034:15;;5819:236;;;;:::o;6061:93::-;6097:7;6137:10;6130:5;6126:22;6115:33;;6061:93;;;:::o;6160:120::-;6232:23;6249:5;6232:23;:::i;:::-;6225:5;6222:34;6212:62;;6270:1;6267;6260:12;6212:62;6160:120;:::o;6286:137::-;6331:5;6369:6;6356:20;6347:29;;6385:32;6411:5;6385:32;:::i;:::-;6286:137;;;;:::o;6429:89::-;6465:7;6505:6;6498:5;6494:18;6483:29;;6429:89;;;:::o;6524:120::-;6596:23;6613:5;6596:23;:::i;:::-;6589:5;6586:34;6576:62;;6634:1;6631;6624:12;6576:62;6524:120;:::o;6650:137::-;6695:5;6733:6;6720:20;6711:29;;6749:32;6775:5;6749:32;:::i;:::-;6650:137;;;;:::o;6793:1675::-;7014:6;7022;7030;7038;7046;7054;7062;7070;7078;7127:3;7115:9;7106:7;7102:23;7098:33;7095:120;;;7134:79;;:::i;:::-;7095:120;7254:1;7279:53;7324:7;7315:6;7304:9;7300:22;7279:53;:::i;:::-;7269:63;;7225:117;7381:2;7407:52;7451:7;7442:6;7431:9;7427:22;7407:52;:::i;:::-;7397:62;;7352:117;7508:2;7534:52;7578:7;7569:6;7558:9;7554:22;7534:52;:::i;:::-;7524:62;;7479:117;7635:2;7661:53;7706:7;7697:6;7686:9;7682:22;7661:53;:::i;:::-;7651:63;;7606:118;7763:3;7790:84;7866:7;7857:6;7846:9;7842:22;7790:84;:::i;:::-;7780:94;;7734:150;7923:3;7950:85;8027:7;8018:6;8007:9;8003:22;7950:85;:::i;:::-;7940:95;;7894:151;8084:3;8111:84;8187:7;8178:6;8167:9;8163:22;8111:84;:::i;:::-;8101:94;;8055:150;8244:3;8271:52;8315:7;8306:6;8295:9;8291:22;8271:52;:::i;:::-;8261:62;;8215:118;8372:3;8399:52;8443:7;8434:6;8423:9;8419:22;8399:52;:::i;:::-;8389:62;;8343:118;6793:1675;;;;;;;;;;;:::o;8474:619::-;8551:6;8559;8567;8616:2;8604:9;8595:7;8591:23;8587:32;8584:119;;;8622:79;;:::i;:::-;8584:119;8742:1;8767:53;8812:7;8803:6;8792:9;8788:22;8767:53;:::i;:::-;8757:63;;8713:117;8869:2;8895:53;8940:7;8931:6;8920:9;8916:22;8895:53;:::i;:::-;8885:63;;8840:118;8997:2;9023:53;9068:7;9059:6;9048:9;9044:22;9023:53;:::i;:::-;9013:63;;8968:118;8474:619;;;;;:::o;9099:117::-;9208:1;9205;9198:12;9222:102;9263:6;9314:2;9310:7;9305:2;9298:5;9294:14;9290:28;9280:38;;9222:102;;;:::o;9330:180::-;9378:77;9375:1;9368:88;9475:4;9472:1;9465:15;9499:4;9496:1;9489:15;9516:281;9599:27;9621:4;9599:27;:::i;:::-;9591:6;9587:40;9729:6;9717:10;9714:22;9693:18;9681:10;9678:34;9675:62;9672:88;;;9740:18;;:::i;:::-;9672:88;9780:10;9776:2;9769:22;9559:238;9516:281;;:::o;9803:129::-;9837:6;9864:20;;:::i;:::-;9854:30;;9893:33;9921:4;9913:6;9893:33;:::i;:::-;9803:129;;;:::o;9938:307::-;9999:4;10089:18;10081:6;10078:30;10075:56;;;10111:18;;:::i;:::-;10075:56;10149:29;10171:6;10149:29;:::i;:::-;10141:37;;10233:4;10227;10223:15;10215:23;;9938:307;;;:::o;10251:148::-;10349:6;10344:3;10339;10326:30;10390:1;10381:6;10376:3;10372:16;10365:27;10251:148;;;:::o;10405:423::-;10482:5;10507:65;10523:48;10564:6;10523:48;:::i;:::-;10507:65;:::i;:::-;10498:74;;10595:6;10588:5;10581:21;10633:4;10626:5;10622:16;10671:3;10662:6;10657:3;10653:16;10650:25;10647:112;;;10678:79;;:::i;:::-;10647:112;10768:54;10815:6;10810:3;10805;10768:54;:::i;:::-;10488:340;10405:423;;;;;:::o;10847:338::-;10902:5;10951:3;10944:4;10936:6;10932:17;10928:27;10918:122;;10959:79;;:::i;:::-;10918:122;11076:6;11063:20;11101:78;11175:3;11167:6;11160:4;11152:6;11148:17;11101:78;:::i;:::-;11092:87;;10908:277;10847:338;;;;:::o;11191:507::-;11259:6;11308:2;11296:9;11287:7;11283:23;11279:32;11276:119;;;11314:79;;:::i;:::-;11276:119;11462:1;11451:9;11447:17;11434:31;11492:18;11484:6;11481:30;11478:117;;;11514:79;;:::i;:::-;11478:117;11619:62;11673:7;11664:6;11653:9;11649:22;11619:62;:::i;:::-;11609:72;;11405:286;11191:507;;;;:::o;11704:145::-;11802:6;11836:5;11830:12;11820:22;;11704:145;;;:::o;11855:215::-;11985:11;12019:6;12014:3;12007:19;12059:4;12054:3;12050:14;12035:29;;11855:215;;;;:::o;12076:163::-;12174:4;12197:3;12189:11;;12227:4;12222:3;12218:14;12210:22;;12076:163;;;:::o;12245:86::-;12280:7;12320:4;12313:5;12309:16;12298:27;;12245:86;;;:::o;12337:102::-;12410:22;12426:5;12410:22;:::i;:::-;12405:3;12398:35;12337:102;;:::o;12445:101::-;12481:7;12521:18;12514:5;12510:30;12499:41;;12445:101;;;:::o;12552:105::-;12627:23;12644:5;12627:23;:::i;:::-;12622:3;12615:36;12552:105;;:::o;12663:146::-;12700:7;12740:62;12733:5;12729:74;12718:85;;12663:146;;;:::o;12815:108::-;12892:24;12910:5;12892:24;:::i;:::-;12887:3;12880:37;12815:108;;:::o;12929:::-;13006:24;13024:5;13006:24;:::i;:::-;13001:3;12994:37;12929:108;;:::o;13121:1232::-;13270:4;13265:3;13261:14;13362:4;13355:5;13351:16;13345:23;13381:59;13434:4;13429:3;13425:14;13411:12;13381:59;:::i;:::-;13285:165;13536:4;13529:5;13525:16;13519:23;13555:61;13610:4;13605:3;13601:14;13587:12;13555:61;:::i;:::-;13460:166;13710:4;13703:5;13699:16;13693:23;13729:61;13784:4;13779:3;13775:14;13761:12;13729:61;:::i;:::-;13636:164;13887:4;13880:5;13876:16;13870:23;13906:63;13963:4;13958:3;13954:14;13940:12;13906:63;:::i;:::-;13810:169;14068:4;14061:5;14057:16;14051:23;14087:63;14144:4;14139:3;14135:14;14121:12;14087:63;:::i;:::-;13989:171;14254:4;14247:5;14243:16;14237:23;14273:63;14330:4;14325:3;14321:14;14307:12;14273:63;:::i;:::-;14170:176;13239:1114;13121:1232;;:::o;14359:303::-;14490:10;14511:108;14615:3;14607:6;14511:108;:::i;:::-;14651:4;14646:3;14642:14;14628:28;;14359:303;;;;:::o;14668:144::-;14769:4;14801;14796:3;14792:14;14784:22;;14668:144;;;:::o;14900:980::-;15081:3;15110:85;15189:5;15110:85;:::i;:::-;15211:117;15321:6;15316:3;15211:117;:::i;:::-;15204:124;;15352:87;15433:5;15352:87;:::i;:::-;15462:7;15493:1;15478:377;15503:6;15500:1;15497:13;15478:377;;;15579:6;15573:13;15606:125;15727:3;15712:13;15606:125;:::i;:::-;15599:132;;15754:91;15838:6;15754:91;:::i;:::-;15744:101;;15538:317;15525:1;15522;15518:9;15513:14;;15478:377;;;15482:14;15871:3;15864:10;;15086:794;;;14900:980;;;;:::o;15886:497::-;16091:4;16129:2;16118:9;16114:18;16106:26;;16178:9;16172:4;16168:20;16164:1;16153:9;16149:17;16142:47;16206:170;16371:4;16362:6;16206:170;:::i;:::-;16198:178;;15886:497;;;;:::o;16406:568::-;16479:8;16489:6;16539:3;16532:4;16524:6;16520:17;16516:27;16506:122;;16547:79;;:::i;:::-;16506:122;16660:6;16647:20;16637:30;;16690:18;16682:6;16679:30;16676:117;;;16712:79;;:::i;:::-;16676:117;16826:4;16818:6;16814:17;16802:29;;16880:3;16872:4;16864:6;16860:17;16850:8;16846:32;16843:41;16840:128;;;16887:79;;:::i;:::-;16840:128;16406:568;;;;;:::o;16980:932::-;17101:6;17109;17117;17125;17174:2;17162:9;17153:7;17149:23;17145:32;17142:119;;;17180:79;;:::i;:::-;17142:119;17328:1;17317:9;17313:17;17300:31;17358:18;17350:6;17347:30;17344:117;;;17380:79;;:::i;:::-;17344:117;17493:79;17564:7;17555:6;17544:9;17540:22;17493:79;:::i;:::-;17475:97;;;;17271:311;17649:2;17638:9;17634:18;17621:32;17680:18;17672:6;17669:30;17666:117;;;17702:79;;:::i;:::-;17666:117;17815:80;17887:7;17878:6;17867:9;17863:22;17815:80;:::i;:::-;17797:98;;;;17592:313;16980:932;;;;;;;:::o;17918:90::-;17952:7;17995:5;17988:13;17981:21;17970:32;;17918:90;;;:::o;18014:116::-;18084:21;18099:5;18084:21;:::i;:::-;18077:5;18074:32;18064:60;;18120:1;18117;18110:12;18064:60;18014:116;:::o;18136:133::-;18179:5;18217:6;18204:20;18195:29;;18233:30;18257:5;18233:30;:::i;:::-;18136:133;;;;:::o;18275:323::-;18331:6;18380:2;18368:9;18359:7;18355:23;18351:32;18348:119;;;18386:79;;:::i;:::-;18348:119;18506:1;18531:50;18573:7;18564:6;18553:9;18549:22;18531:50;:::i;:::-;18521:60;;18477:114;18275:323;;;;:::o;18604:90::-;18639:7;18682:5;18679:1;18668:20;18657:31;;18604:90;;;:::o;18700:102::-;18773:22;18789:5;18773:22;:::i;:::-;18768:3;18761:35;18700:102;;:::o;18884:678::-;19041:4;19036:3;19032:14;19126:4;19119:5;19115:16;19109:23;19145:59;19198:4;19193:3;19189:14;19175:12;19145:59;:::i;:::-;19056:158;19294:4;19287:5;19283:16;19277:23;19313:59;19366:4;19361:3;19357:14;19343:12;19313:59;:::i;:::-;19224:158;19467:4;19460:5;19456:16;19450:23;19486:59;19539:4;19534:3;19530:14;19516:12;19486:59;:::i;:::-;19392:163;19010:552;18884:678;;:::o;19568:115::-;19653:23;19670:5;19653:23;:::i;:::-;19648:3;19641:36;19568:115;;:::o;19689:::-;19774:23;19791:5;19774:23;:::i;:::-;19769:3;19762:36;19689:115;;:::o;19810:105::-;19885:23;19902:5;19885:23;:::i;:::-;19880:3;19873:36;19810:105;;:::o;19995:909::-;20150:4;20145:3;20141:14;20248:4;20241:5;20237:16;20231:23;20267:61;20322:4;20317:3;20313:14;20299:12;20267:61;:::i;:::-;20165:173;20431:4;20424:5;20420:16;20414:23;20450:61;20505:4;20500:3;20496:14;20482:12;20450:61;:::i;:::-;20348:173;20619:4;20612:5;20608:16;20602:23;20638:61;20693:4;20688:3;20684:14;20670:12;20638:61;:::i;:::-;20531:178;20807:4;20800:5;20796:16;20790:23;20826:61;20881:4;20876:3;20872:14;20858:12;20826:61;:::i;:::-;20719:178;20119:785;19995:909;;:::o;20910:1001::-;21255:4;21293:3;21282:9;21278:19;21270:27;;21307:131;21435:1;21424:9;21420:17;21411:6;21307:131;:::i;:::-;21448:70;21514:2;21503:9;21499:18;21490:6;21448:70;:::i;:::-;21528:71;21594:3;21583:9;21579:19;21570:6;21528:71;:::i;:::-;21609:73;21677:3;21666:9;21662:19;21653:6;21609:73;:::i;:::-;21692:71;21758:3;21747:9;21743:19;21734:6;21692:71;:::i;:::-;21773:131;21899:3;21888:9;21884:19;21875:6;21773:131;:::i;:::-;20910:1001;;;;;;;;;:::o;21917:329::-;21976:6;22025:2;22013:9;22004:7;22000:23;21996:32;21993:119;;;22031:79;;:::i;:::-;21993:119;22151:1;22176:53;22221:7;22212:6;22201:9;22197:22;22176:53;:::i;:::-;22166:63;;22122:117;21917:329;;;;:::o;22252:392::-;22342:6;22391:3;22379:9;22370:7;22366:23;22362:33;22359:120;;;22398:79;;:::i;:::-;22359:120;22518:1;22543:84;22619:7;22610:6;22599:9;22595:22;22543:84;:::i;:::-;22533:94;;22489:148;22252:392;;;;:::o;22650:115::-;22735:23;22752:5;22735:23;:::i;:::-;22730:3;22723:36;22650:115;;:::o;22771:218::-;22862:4;22900:2;22889:9;22885:18;22877:26;;22913:69;22979:1;22968:9;22964:17;22955:6;22913:69;:::i;:::-;22771:218;;;;:::o;22995:474::-;23063:6;23071;23120:2;23108:9;23099:7;23095:23;23091:32;23088:119;;;23126:79;;:::i;:::-;23088:119;23246:1;23271:53;23316:7;23307:6;23296:9;23292:22;23271:53;:::i;:::-;23261:63;;23217:117;23373:2;23399:53;23444:7;23435:6;23424:9;23420:22;23399:53;:::i;:::-;23389:63;;23344:118;22995:474;;;;;:::o;23475:141::-;23569:6;23603:5;23597:12;23587:22;;23475:141;;;:::o;23622:211::-;23748:11;23782:6;23777:3;23770:19;23822:4;23817:3;23813:14;23798:29;;23622:211;;;;:::o;23839:159::-;23933:4;23956:3;23948:11;;23986:4;23981:3;23977:14;23969:22;;23839:159;;;:::o;24004:108::-;24081:24;24099:5;24081:24;:::i;:::-;24076:3;24069:37;24004:108;;:::o;24190:510::-;24331:4;24326:3;24322:14;24418:4;24411:5;24407:16;24401:23;24437:63;24494:4;24489:3;24485:14;24471:12;24437:63;:::i;:::-;24346:164;24601:4;24594:5;24590:16;24584:23;24620:63;24677:4;24672:3;24668:14;24654:12;24620:63;:::i;:::-;24520:173;24300:400;24190:510;;:::o;24706:287::-;24829:10;24850:100;24946:3;24938:6;24850:100;:::i;:::-;24982:4;24977:3;24973:14;24959:28;;24706:287;;;;:::o;24999:140::-;25096:4;25128;25123:3;25119:14;25111:22;;24999:140;;;:::o;25221:948::-;25394:3;25423:81;25498:5;25423:81;:::i;:::-;25520:113;25626:6;25621:3;25520:113;:::i;:::-;25513:120;;25657:83;25734:5;25657:83;:::i;:::-;25763:7;25794:1;25779:365;25804:6;25801:1;25798:13;25779:365;;;25880:6;25874:13;25907:117;26020:3;26005:13;25907:117;:::i;:::-;25900:124;;26047:87;26127:6;26047:87;:::i;:::-;26037:97;;25839:305;25826:1;25823;25819:9;25814:14;;25779:365;;;25783:14;26160:3;26153:10;;25399:770;;;25221:948;;;;:::o;26175:481::-;26372:4;26410:2;26399:9;26395:18;26387:26;;26459:9;26453:4;26449:20;26445:1;26434:9;26430:17;26423:47;26487:162;26644:4;26635:6;26487:162;:::i;:::-;26479:170;;26175:481;;;;:::o;26662:91::-;26697:7;26741:5;26737:2;26726:21;26715:32;;26662:91;;;:::o;26759:102::-;26832:22;26848:5;26832:22;:::i;:::-;26827:3;26820:35;26759:102;;:::o;26941:846::-;27096:4;27091:3;27087:14;27183:4;27176:5;27172:16;27166:23;27202:59;27255:4;27250:3;27246:14;27232:12;27202:59;:::i;:::-;27111:160;27352:4;27345:5;27341:16;27335:23;27371:59;27424:4;27419:3;27415:14;27401:12;27371:59;:::i;:::-;27281:159;27521:4;27514:5;27510:16;27504:23;27540:59;27593:4;27588:3;27584:14;27570:12;27540:59;:::i;:::-;27450:159;27692:4;27685:5;27681:16;27675:23;27711:59;27764:4;27759:3;27755:14;27741:12;27711:59;:::i;:::-;27619:161;27065:722;26941:846;;:::o;27793:339::-;27944:4;27982:3;27971:9;27967:19;27959:27;;27996:129;28122:1;28111:9;28107:17;28098:6;27996:129;:::i;:::-;27793:339;;;;:::o;28138:118::-;28225:24;28243:5;28225:24;:::i;:::-;28220:3;28213:37;28138:118;;:::o;28262:222::-;28355:4;28393:2;28382:9;28378:18;28370:26;;28406:71;28474:1;28463:9;28459:17;28450:6;28406:71;:::i;:::-;28262:222;;;;:::o;28490:468::-;28555:6;28563;28612:2;28600:9;28591:7;28587:23;28583:32;28580:119;;;28618:79;;:::i;:::-;28580:119;28738:1;28763:53;28808:7;28799:6;28788:9;28784:22;28763:53;:::i;:::-;28753:63;;28709:117;28865:2;28891:50;28933:7;28924:6;28913:9;28909:22;28891:50;:::i;:::-;28881:60;;28836:115;28490:468;;;;;:::o;28964:327::-;29022:6;29071:2;29059:9;29050:7;29046:23;29042:32;29039:119;;;29077:79;;:::i;:::-;29039:119;29197:1;29222:52;29266:7;29257:6;29246:9;29242:22;29222:52;:::i;:::-;29212:62;;29168:116;28964:327;;;;:::o;29297:218::-;29388:4;29426:2;29415:9;29411:18;29403:26;;29439:69;29505:1;29494:9;29490:17;29481:6;29439:69;:::i;:::-;29297:218;;;;:::o;29521:1179::-;29685:6;29693;29701;29709;29717;29725;29774:3;29762:9;29753:7;29749:23;29745:33;29742:120;;;29781:79;;:::i;:::-;29742:120;29901:1;29926:85;30003:7;29994:6;29983:9;29979:22;29926:85;:::i;:::-;29916:95;;29872:149;30060:2;30086:52;30130:7;30121:6;30110:9;30106:22;30086:52;:::i;:::-;30076:62;;30031:117;30187:3;30214:52;30258:7;30249:6;30238:9;30234:22;30214:52;:::i;:::-;30204:62;;30158:118;30315:3;30342:53;30387:7;30378:6;30367:9;30363:22;30342:53;:::i;:::-;30332:63;;30286:119;30444:3;30471:84;30547:7;30538:6;30527:9;30523:22;30471:84;:::i;:::-;30461:94;;30415:150;30604:3;30631:52;30675:7;30666:6;30655:9;30651:22;30631:52;:::i;:::-;30621:62;;30575:118;29521:1179;;;;;;;;:::o;30706:169::-;30790:11;30824:6;30819:3;30812:19;30864:4;30859:3;30855:14;30840:29;;30706:169;;;;:::o;30881:221::-;31021:34;31017:1;31009:6;31005:14;30998:58;31090:4;31085:2;31077:6;31073:15;31066:29;30881:221;:::o;31108:366::-;31250:3;31271:67;31335:2;31330:3;31271:67;:::i;:::-;31264:74;;31347:93;31436:3;31347:93;:::i;:::-;31465:2;31460:3;31456:12;31449:19;;31108:366;;;:::o;31480:419::-;31646:4;31684:2;31673:9;31669:18;31661:26;;31733:9;31727:4;31723:20;31719:1;31708:9;31704:17;31697:47;31761:131;31887:4;31761:131;:::i;:::-;31753:139;;31480:419;;;:::o;31905:221::-;32045:34;32041:1;32033:6;32029:14;32022:58;32114:4;32109:2;32101:6;32097:15;32090:29;31905:221;:::o;32132:366::-;32274:3;32295:67;32359:2;32354:3;32295:67;:::i;:::-;32288:74;;32371:93;32460:3;32371:93;:::i;:::-;32489:2;32484:3;32480:12;32473:19;;32132:366;;;:::o;32504:419::-;32670:4;32708:2;32697:9;32693:18;32685:26;;32757:9;32751:4;32747:20;32743:1;32732:9;32728:17;32721:47;32785:131;32911:4;32785:131;:::i;:::-;32777:139;;32504:419;;;:::o;32929:180::-;32977:77;32974:1;32967:88;33074:4;33071:1;33064:15;33098:4;33095:1;33088:15;33115:178;33255:30;33251:1;33243:6;33239:14;33232:54;33115:178;:::o;33299:366::-;33441:3;33462:67;33526:2;33521:3;33462:67;:::i;:::-;33455:74;;33538:93;33627:3;33538:93;:::i;:::-;33656:2;33651:3;33647:12;33640:19;;33299:366;;;:::o;33671:419::-;33837:4;33875:2;33864:9;33860:18;33852:26;;33924:9;33918:4;33914:20;33910:1;33899:9;33895:17;33888:47;33952:131;34078:4;33952:131;:::i;:::-;33944:139;;33671:419;;;:::o;34096:176::-;34236:28;34232:1;34224:6;34220:14;34213:52;34096:176;:::o;34278:366::-;34420:3;34441:67;34505:2;34500:3;34441:67;:::i;:::-;34434:74;;34517:93;34606:3;34517:93;:::i;:::-;34635:2;34630:3;34626:12;34619:19;;34278:366;;;:::o;34650:419::-;34816:4;34854:2;34843:9;34839:18;34831:26;;34903:9;34897:4;34893:20;34889:1;34878:9;34874:17;34867:47;34931:131;35057:4;34931:131;:::i;:::-;34923:139;;34650:419;;;:::o;35075:98::-;35126:6;35160:5;35154:12;35144:22;;35075:98;;;:::o;35179:168::-;35262:11;35296:6;35291:3;35284:19;35336:4;35331:3;35327:14;35312:29;;35179:168;;;;:::o;35353:139::-;35442:6;35437:3;35432;35426:23;35483:1;35474:6;35469:3;35465:16;35458:27;35353:139;;;:::o;35498:373::-;35584:3;35612:38;35644:5;35612:38;:::i;:::-;35666:70;35729:6;35724:3;35666:70;:::i;:::-;35659:77;;35745:65;35803:6;35798:3;35791:4;35784:5;35780:16;35745:65;:::i;:::-;35835:29;35857:6;35835:29;:::i;:::-;35830:3;35826:39;35819:46;;35588:283;35498:373;;;;:::o;35877:309::-;35988:4;36026:2;36015:9;36011:18;36003:26;;36075:9;36069:4;36065:20;36061:1;36050:9;36046:17;36039:47;36103:76;36174:4;36165:6;36103:76;:::i;:::-;36095:84;;35877:309;;;;:::o;36192:340::-;36298:4;36388:18;36380:6;36377:30;36374:56;;;36410:18;;:::i;:::-;36374:56;36460:4;36452:6;36448:17;36440:25;;36520:4;36514;36510:15;36502:23;;36192:340;;;:::o;36538:117::-;36647:1;36644;36637:12;36784:118;36855:22;36871:5;36855:22;:::i;:::-;36848:5;36845:33;36835:61;;36892:1;36889;36882:12;36835:61;36784:118;:::o;36908:139::-;36963:5;36994:6;36988:13;36979:22;;37010:31;37035:5;37010:31;:::i;:::-;36908:139;;;;:::o;37053:120::-;37125:23;37142:5;37125:23;:::i;:::-;37118:5;37115:34;37105:62;;37163:1;37160;37153:12;37105:62;37053:120;:::o;37179:141::-;37235:5;37266:6;37260:13;37251:22;;37282:32;37308:5;37282:32;:::i;:::-;37179:141;;;;:::o;37326:::-;37382:5;37413:6;37407:13;37398:22;;37429:32;37455:5;37429:32;:::i;:::-;37326:141;;;;:::o;37497:777::-;37582:5;37626:4;37614:9;37609:3;37605:19;37601:30;37598:117;;;37634:79;;:::i;:::-;37598:117;37733:21;37749:4;37733:21;:::i;:::-;37724:30;;37817:1;37857:58;37911:3;37902:6;37891:9;37887:22;37857:58;:::i;:::-;37850:4;37843:5;37839:16;37832:84;37764:163;37985:2;38026:59;38081:3;38072:6;38061:9;38057:22;38026:59;:::i;:::-;38019:4;38012:5;38008:16;38001:85;37937:160;38155:2;38196:59;38251:3;38242:6;38231:9;38227:22;38196:59;:::i;:::-;38189:4;38182:5;38178:16;38171:85;38107:160;37497:777;;;;:::o;38280:97::-;38316:7;38356:14;38349:5;38345:26;38334:37;;38280:97;;;:::o;38383:120::-;38455:23;38472:5;38455:23;:::i;:::-;38448:5;38445:34;38435:62;;38493:1;38490;38483:12;38435:62;38383:120;:::o;38509:141::-;38565:5;38596:6;38590:13;38581:22;;38612:32;38638:5;38612:32;:::i;:::-;38509:141;;;;:::o;38656:122::-;38729:24;38747:5;38729:24;:::i;:::-;38722:5;38719:35;38709:63;;38768:1;38765;38758:12;38709:63;38656:122;:::o;38784:143::-;38841:5;38872:6;38866:13;38857:22;;38888:33;38915:5;38888:33;:::i;:::-;38784:143;;;;:::o;38954:782::-;39036:5;39080:4;39068:9;39063:3;39059:19;39055:30;39052:117;;;39088:79;;:::i;:::-;39052:117;39187:21;39203:4;39187:21;:::i;:::-;39178:30;;39269:1;39309:59;39364:3;39355:6;39344:9;39340:22;39309:59;:::i;:::-;39302:4;39295:5;39291:16;39284:85;39218:162;39444:2;39485:59;39540:3;39531:6;39520:9;39516:22;39485:59;:::i;:::-;39478:4;39471:5;39467:16;39460:85;39390:166;39616:2;39657:60;39713:3;39704:6;39693:9;39689:22;39657:60;:::i;:::-;39650:4;39643:5;39639:16;39632:86;39566:163;38954:782;;;;:::o;39770:869::-;39859:5;39903:6;39891:9;39886:3;39882:19;39878:32;39875:119;;;39913:79;;:::i;:::-;39875:119;40012:21;40028:4;40012:21;:::i;:::-;40003:30;;40094:1;40134:85;40215:3;40206:6;40195:9;40191:22;40134:85;:::i;:::-;40127:4;40120:5;40116:16;40109:111;40043:188;40296:2;40337:82;40415:3;40406:6;40395:9;40391:22;40337:82;:::i;:::-;40330:4;40323:5;40319:16;40312:108;40241:190;40496:3;40538:82;40616:3;40607:6;40596:9;40592:22;40538:82;:::i;:::-;40531:4;40524:5;40520:16;40513:108;40441:191;39770:869;;;;:::o;40675:823::-;40811:5;40836:110;40852:93;40938:6;40852:93;:::i;:::-;40836:110;:::i;:::-;40827:119;;40966:5;40995:6;40988:5;40981:21;41029:4;41022:5;41018:16;41011:23;;41082:6;41074;41070:19;41062:6;41058:32;41113:3;41105:6;41102:15;41099:122;;;41132:79;;:::i;:::-;41099:122;41247:6;41230:262;41264:6;41259:3;41256:15;41230:262;;;41341:3;41370:77;41443:3;41431:10;41370:77;:::i;:::-;41365:3;41358:90;41477:4;41472:3;41468:14;41461:21;;41308:184;41290:6;41285:3;41281:16;41274:23;;41230:262;;;41234:21;40817:681;;40675:823;;;;;:::o;41534:443::-;41645:5;41694:3;41687:4;41679:6;41675:17;41671:27;41661:122;;41702:79;;:::i;:::-;41661:122;41812:6;41806:13;41837:134;41967:3;41959:6;41952:4;41944:6;41940:17;41837:134;:::i;:::-;41828:143;;41651:326;41534:443;;;;:::o;41983:612::-;42107:6;42156:2;42144:9;42135:7;42131:23;42127:32;42124:119;;;42162:79;;:::i;:::-;42124:119;42303:1;42292:9;42288:17;42282:24;42333:18;42325:6;42322:30;42319:117;;;42355:79;;:::i;:::-;42319:117;42460:118;42570:7;42561:6;42550:9;42546:22;42460:118;:::i;:::-;42450:128;;42253:335;41983:612;;;;:::o;42601:180::-;42649:77;42646:1;42639:88;42746:4;42743:1;42736:15;42770:4;42767:1;42760:15;42787:255;42827:4;42847:20;42865:1;42847:20;:::i;:::-;42842:25;;42881:20;42899:1;42881:20;:::i;:::-;42876:25;;42925:1;42922;42918:9;42910:17;;42949:62;42943:4;42940:72;42937:98;;;43015:18;;:::i;:::-;42937:98;42787:255;;;;:::o;43048:204::-;43087:4;43107:19;43124:1;43107:19;:::i;:::-;43102:24;;43140:19;43157:1;43140:19;:::i;:::-;43135:24;;43183:1;43180;43176:9;43168:17;;43207:14;43201:4;43198:24;43195:50;;;43225:18;;:::i;:::-;43195:50;43048:204;;;;:::o;43258:410::-;43298:7;43321:20;43339:1;43321:20;:::i;:::-;43316:25;;43355:20;43373:1;43355:20;:::i;:::-;43350:25;;43410:1;43407;43403:9;43432:30;43450:11;43432:30;:::i;:::-;43421:41;;43611:1;43602:7;43598:15;43595:1;43592:22;43572:1;43565:9;43545:83;43522:139;;43641:18;;:::i;:::-;43522:139;43306:362;43258:410;;;;:::o;43674:180::-;43722:77;43719:1;43712:88;43819:4;43816:1;43809:15;43843:4;43840:1;43833:15;43860:185;43900:1;43917:20;43935:1;43917:20;:::i;:::-;43912:25;;43951:20;43969:1;43951:20;:::i;:::-;43946:25;;43990:1;43980:35;;43995:18;;:::i;:::-;43980:35;44037:1;44034;44030:9;44025:14;;43860:185;;;;:::o;44051:191::-;44091:3;44110:20;44128:1;44110:20;:::i;:::-;44105:25;;44144:20;44162:1;44144:20;:::i;:::-;44139:25;;44187:1;44184;44180:9;44173:16;;44208:3;44205:1;44202:10;44199:36;;;44215:18;;:::i;:::-;44199:36;44051:191;;;;:::o;44248:375::-;44287:3;44306:19;44323:1;44306:19;:::i;:::-;44301:24;;44339:19;44356:1;44339:19;:::i;:::-;44334:24;;44381:1;44378;44374:9;44367:16;;44579:1;44574:3;44570:11;44563:19;44559:1;44556;44552:9;44548:35;44531:1;44526:3;44522:11;44517:1;44514;44510:9;44503:17;44499:35;44483:110;44480:136;;;44596:18;;:::i;:::-;44480:136;44248:375;;;;:::o;44629:385::-;44668:1;44685:19;44702:1;44685:19;:::i;:::-;44680:24;;44718:19;44735:1;44718:19;:::i;:::-;44713:24;;44756:1;44746:35;;44761:18;;:::i;:::-;44746:35;44947:1;44944;44940:9;44937:1;44934:16;44853:66;44850:1;44847:73;44830:130;44827:156;;;44963:18;;:::i;:::-;44827:156;45006:1;45003;44998:10;44993:15;;44629:385;;;;:::o;45020:556::-;45059:7;45082:19;45099:1;45082:19;:::i;:::-;45077:24;;45115:19;45132:1;45115:19;:::i;:::-;45110:24;;45169:1;45166;45162:9;45191:29;45208:11;45191:29;:::i;:::-;45180:40;;45278:66;45275:1;45272:73;45268:1;45265;45261:9;45257:89;45254:115;;;45349:18;;:::i;:::-;45254:115;45519:1;45510:7;45505:16;45502:1;45499:23;45479:1;45472:9;45452:84;45429:140;;45549:18;;:::i;:::-;45429:140;45067:509;45020:556;;;;:::o;45582:175::-;45722:27;45718:1;45710:6;45706:14;45699:51;45582:175;:::o;45763:366::-;45905:3;45926:67;45990:2;45985:3;45926:67;:::i;:::-;45919:74;;46002:93;46091:3;46002:93;:::i;:::-;46120:2;46115:3;46111:12;46104:19;;45763:366;;;:::o;46135:419::-;46301:4;46339:2;46328:9;46324:18;46316:26;;46388:9;46382:4;46378:20;46374:1;46363:9;46359:17;46352:47;46416:131;46542:4;46416:131;:::i;:::-;46408:139;;46135:419;;;:::o;46560:180::-;46700:32;46696:1;46688:6;46684:14;46677:56;46560:180;:::o;46746:366::-;46888:3;46909:67;46973:2;46968:3;46909:67;:::i;:::-;46902:74;;46985:93;47074:3;46985:93;:::i;:::-;47103:2;47098:3;47094:12;47087:19;;46746:366;;;:::o;47118:419::-;47284:4;47322:2;47311:9;47307:18;47299:26;;47371:9;47365:4;47361:20;47357:1;47346:9;47342:17;47335:47;47399:131;47525:4;47399:131;:::i;:::-;47391:139;;47118:419;;;:::o;47543:109::-;47624:21;47639:5;47624:21;:::i;:::-;47619:3;47612:34;47543:109;;:::o;47658:210::-;47745:4;47783:2;47772:9;47768:18;47760:26;;47796:65;47858:1;47847:9;47843:17;47834:6;47796:65;:::i;:::-;47658:210;;;;:::o;47874:182::-;48014:34;48010:1;48002:6;47998:14;47991:58;47874:182;:::o;48062:366::-;48204:3;48225:67;48289:2;48284:3;48225:67;:::i;:::-;48218:74;;48301:93;48390:3;48301:93;:::i;:::-;48419:2;48414:3;48410:12;48403:19;;48062:366;;;:::o;48434:419::-;48600:4;48638:2;48627:9;48623:18;48615:26;;48687:9;48681:4;48677:20;48673:1;48662:9;48658:17;48651:47;48715:131;48841:4;48715:131;:::i;:::-;48707:139;;48434:419;;;:::o;48859:179::-;48999:31;48995:1;48987:6;48983:14;48976:55;48859:179;:::o;49044:366::-;49186:3;49207:67;49271:2;49266:3;49207:67;:::i;:::-;49200:74;;49283:93;49372:3;49283:93;:::i;:::-;49401:2;49396:3;49392:12;49385:19;;49044:366;;;:::o;49416:419::-;49582:4;49620:2;49609:9;49605:18;49597:26;;49669:9;49663:4;49659:20;49655:1;49644:9;49640:17;49633:47;49697:131;49823:4;49697:131;:::i;:::-;49689:139;;49416:419;;;:::o;49841:221::-;49981:34;49977:1;49969:6;49965:14;49958:58;50050:4;50045:2;50037:6;50033:15;50026:29;49841:221;:::o;50068:366::-;50210:3;50231:67;50295:2;50290:3;50231:67;:::i;:::-;50224:74;;50307:93;50396:3;50307:93;:::i;:::-;50425:2;50420:3;50416:12;50409:19;;50068:366;;;:::o;50440:419::-;50606:4;50644:2;50633:9;50629:18;50621:26;;50693:9;50687:4;50683:20;50679:1;50668:9;50664:17;50657:47;50721:131;50847:4;50721:131;:::i;:::-;50713:139;;50440:419;;;:::o;50865:118::-;50936:22;50952:5;50936:22;:::i;:::-;50929:5;50926:33;50916:61;;50973:1;50970;50963:12;50916:61;50865:118;:::o;50989:135::-;51033:5;51071:6;51058:20;51049:29;;51087:31;51112:5;51087:31;:::i;:::-;50989:135;;;;:::o;51130:325::-;51187:6;51236:2;51224:9;51215:7;51211:23;51207:32;51204:119;;;51242:79;;:::i;:::-;51204:119;51362:1;51387:51;51430:7;51421:6;51410:9;51406:22;51387:51;:::i;:::-;51377:61;;51333:115;51130:325;;;;:::o;51461:220::-;51601:34;51597:1;51589:6;51585:14;51578:58;51670:3;51665:2;51657:6;51653:15;51646:28;51461:220;:::o;51687:366::-;51829:3;51850:67;51914:2;51909:3;51850:67;:::i;:::-;51843:74;;51926:93;52015:3;51926:93;:::i;:::-;52044:2;52039:3;52035:12;52028:19;;51687:366;;;:::o;52059:419::-;52225:4;52263:2;52252:9;52248:18;52240:26;;52312:9;52306:4;52302:20;52298:1;52287:9;52283:17;52276:47;52340:131;52466:4;52340:131;:::i;:::-;52332:139;;52059:419;;;:::o;52484:174::-;52624:26;52620:1;52612:6;52608:14;52601:50;52484:174;:::o;52664:366::-;52806:3;52827:67;52891:2;52886:3;52827:67;:::i;:::-;52820:74;;52903:93;52992:3;52903:93;:::i;:::-;53021:2;53016:3;53012:12;53005:19;;52664:366;;;:::o;53036:419::-;53202:4;53240:2;53229:9;53225:18;53217:26;;53289:9;53283:4;53279:20;53275:1;53264:9;53260:17;53253:47;53317:131;53443:4;53317:131;:::i;:::-;53309:139;;53036:419;;;:::o;53461:180::-;53601:32;53597:1;53589:6;53585:14;53578:56;53461:180;:::o;53647:366::-;53789:3;53810:67;53874:2;53869:3;53810:67;:::i;:::-;53803:74;;53886:93;53975:3;53886:93;:::i;:::-;54004:2;53999:3;53995:12;53988:19;;53647:366;;;:::o;54019:419::-;54185:4;54223:2;54212:9;54208:18;54200:26;;54272:9;54266:4;54262:20;54258:1;54247:9;54243:17;54236:47;54300:131;54426:4;54300:131;:::i;:::-;54292:139;;54019:419;;;:::o;54444:112::-;54527:22;54543:5;54527:22;:::i;:::-;54522:3;54515:35;54444:112;;:::o;54562:115::-;54647:23;54664:5;54647:23;:::i;:::-;54642:3;54635:36;54562:115;;:::o;54683:118::-;54770:24;54788:5;54770:24;:::i;:::-;54765:3;54758:37;54683:118;;:::o;54807:115::-;54892:23;54909:5;54892:23;:::i;:::-;54887:3;54880:36;54807:115;;:::o;54928:1088::-;55235:4;55273:3;55262:9;55258:19;55250:27;;55287:71;55355:1;55344:9;55340:17;55331:6;55287:71;:::i;:::-;55368:68;55432:2;55421:9;55417:18;55408:6;55368:68;:::i;:::-;55446:70;55512:2;55501:9;55497:18;55488:6;55446:70;:::i;:::-;55526:72;55594:2;55583:9;55579:18;55570:6;55526:72;:::i;:::-;55608:73;55676:3;55665:9;55661:19;55652:6;55608:73;:::i;:::-;55691:71;55757:3;55746:9;55742:19;55733:6;55691:71;:::i;:::-;55772:73;55840:3;55829:9;55825:19;55816:6;55772:73;:::i;:::-;55855;55923:3;55912:9;55908:19;55899:6;55855:73;:::i;:::-;55938:71;56004:3;55993:9;55989:19;55980:6;55938:71;:::i;:::-;54928:1088;;;;;;;;;;;;:::o;56022:175::-;56162:27;56158:1;56150:6;56146:14;56139:51;56022:175;:::o;56203:366::-;56345:3;56366:67;56430:2;56425:3;56366:67;:::i;:::-;56359:74;;56442:93;56531:3;56442:93;:::i;:::-;56560:2;56555:3;56551:12;56544:19;;56203:366;;;:::o;56575:419::-;56741:4;56779:2;56768:9;56764:18;56756:26;;56828:9;56822:4;56818:20;56814:1;56803:9;56799:17;56792:47;56856:131;56982:4;56856:131;:::i;:::-;56848:139;;56575:419;;;:::o;57186:118::-;57257:22;57273:5;57257:22;:::i;:::-;57250:5;57247:33;57237:61;;57294:1;57291;57284:12;57237:61;57186:118;:::o;57310:182::-;57353:11;57402:3;57389:17;57415:31;57440:5;57415:31;:::i;:::-;57480:5;57456:29;;57365:127;57310:182;;;:::o;57498:92::-;57530:8;57577:5;57574:1;57570:13;57549:34;;57498:92;;;:::o;57596:246::-;57654:6;57683:22;57726;57739:8;57726:22;:::i;:::-;57714:34;;57781:4;57777:9;57770:5;57766:21;57757:30;;57830:4;57820:8;57816:19;57809:5;57806:30;57796:40;;57661:181;57596:246;;;;:::o;57848:60::-;57876:3;57897:5;57890:12;;57848:60;;;:::o;57914:134::-;57960:9;57993:49;58009:32;58018:22;58034:5;58018:22;:::i;:::-;58009:32;:::i;:::-;57993:49;:::i;:::-;57980:62;;57914:134;;;:::o;58054:73::-;58095:3;58116:5;58109:12;;58054:73;;;:::o;58133:253::-;58240:35;58267:7;58240:35;:::i;:::-;58297:82;58339:39;58361:16;58339:39;:::i;:::-;58332:4;58326:11;58297:82;:::i;:::-;58291:4;58284:96;58206:180;58133:253;;:::o;58392:94::-;58425:8;58473:5;58469:2;58465:14;58444:35;;58392:94;;;:::o;58492:268::-;58551:6;58580:42;58643:23;58657:8;58643:23;:::i;:::-;58631:35;;58699:4;58695:9;58688:5;58684:21;58675:30;;58748:4;58738:8;58734:19;58727:5;58724:30;58714:40;;58558:202;58492:268;;;;:::o;58766:255::-;58874:35;58901:7;58874:35;:::i;:::-;58931:83;58974:39;58996:16;58974:39;:::i;:::-;58967:4;58961:11;58931:83;:::i;:::-;58925:4;58918:97;58840:181;58766:255;;:::o;59027:96::-;59061:8;59110:5;59105:3;59101:15;59080:36;;59027:96;;;:::o;59129:289::-;59188:6;59217:62;59300:24;59315:8;59300:24;:::i;:::-;59288:36;;59357:4;59353:9;59346:5;59342:21;59333:30;;59406:4;59396:8;59392:19;59385:5;59382:30;59372:40;;59195:223;59129:289;;;;:::o;59424:255::-;59532:35;59559:7;59532:35;:::i;:::-;59589:83;59632:39;59654:16;59632:39;:::i;:::-;59625:4;59619:11;59589:83;:::i;:::-;59583:4;59576:97;59498:181;59424:255;;:::o;59685:1140::-;59871:1;59865:4;59861:12;59917:1;59910:5;59906:13;59967:12;60010:40;60036:13;60010:40;:::i;:::-;59993:57;;60064:75;60125:13;60113:10;60064:75;:::i;:::-;59828:322;;;60203:1;60197:4;60193:12;60249:2;60242:5;60238:14;60300:12;60343:40;60369:13;60343:40;:::i;:::-;60326:57;;60397:76;60459:13;60447:10;60397:76;:::i;:::-;60160:324;;;60537:1;60531:4;60527:12;60583:2;60576:5;60572:14;60634:12;60677:40;60703:13;60677:40;:::i;:::-;60660:57;;60731:76;60793:13;60781:10;60731:76;:::i;:::-;60494:324;;;59685:1140;;:::o;60831:277::-;60978:124;61094:7;61088:4;60978:124;:::i;:::-;60831:277;;:::o;61114:194::-;61154:4;61174:20;61192:1;61174:20;:::i;:::-;61169:25;;61208:20;61226:1;61208:20;:::i;:::-;61203:25;;61252:1;61249;61245:9;61237:17;;61276:1;61270:4;61267:11;61264:37;;;61281:18;;:::i;:::-;61264:37;61114:194;;;;:::o;61314:372::-;61353:4;61373:19;61390:1;61373:19;:::i;:::-;61368:24;;61406:19;61423:1;61406:19;:::i;:::-;61401:24;;61449:1;61446;61442:9;61434:17;;61643:1;61637:4;61633:12;61629:1;61626;61622:9;61618:28;61601:1;61595:4;61591:12;61586:1;61583;61579:9;61572:17;61568:36;61552:104;61549:130;;;61659:18;;:::i;:::-;61549:130;61314:372;;;;:::o;61692:174::-;61832:26;61828:1;61820:6;61816:14;61809:50;61692:174;:::o;61872:366::-;62014:3;62035:67;62099:2;62094:3;62035:67;:::i;:::-;62028:74;;62111:93;62200:3;62111:93;:::i;:::-;62229:2;62224:3;62220:12;62213:19;;61872:366;;;:::o;62244:419::-;62410:4;62448:2;62437:9;62433:18;62425:26;;62497:9;62491:4;62487:20;62483:1;62472:9;62468:17;62461:47;62525:131;62651:4;62525:131;:::i;:::-;62517:139;;62244:419;;;:::o

Swarm Source

ipfs://372aff0000e1448b18abce3e0b689da67572a653d0c19904d318f22a557bbd1d

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.