false
false
0

Contract Address Details

0x1b0906c9454418F26b637051ED30A42D00D4c239

Contract Name
RouletteV1
Creator
0xcd08e1–8f8ddb at 0x6fb9b4–f826bf
Balance
0.0101 FTN
Tokens
Fetching tokens...
Transactions
14 Transactions
Transfers
4 Transfers
Gas Used
1,826,704
Last Balance Update
6850549
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
RouletteV1




Optimization enabled
false
Compiler version
v0.8.6+commit.11564f7e




EVM Version
berlin




Verified at
2025-07-15T14:14:46.681242Z

Constructor Arguments

0000000000000000000000007fdbf4fe2dbbdf956c010b3dd83177cb86eb1b146da22a485fc06c9bce99691a2ff5af57b7fd20b09af4a6572f6a44473d6c1514000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000005af3107a40000000000000000000000000002302c75d734d53cf511527f517716735a7a71441

 Arg [0] (&amp;amp;amp;lt;b&amp;amp;amp;gt;address&amp;amp;amp;lt;/b&amp;amp;amp;gt;) : &amp;amp;amp;lt;a href=&amp;amp;amp;quot;{#{address_path(@conn, :show, @address)}}&amp;amp;amp;quot;&amp;amp;amp;gt;0x7fdbf4fe2dbbdf956c010b3dd83177cb86eb1b14&amp;amp;amp;lt;/a&amp;amp;amp;gt; Arg [1] (&amp;amp;lt;b&amp;amp;gt;bytes32&amp;amp;lt;/b&amp;amp;gt;) : 6da22a485fc06c9bce99691a2ff5af57b7fd20b09af4a6572f6a44473d6c1514 Arg [2] (&amp;lt;b&amp;gt;uint64&amp;lt;/b&amp;gt;) : 11 Arg [3] (&lt;b&gt;uint256&lt;/b&gt;) : 100000000000000 Arg [4] (<b>address</b>) : <a href="{#{address_path(@conn, :show, @address)}}">0x2302c75d734d53cf511527f517716735a7a71441</a>
              

.sol

Sol2uml
new
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

/* 
    -----------------------------------------------------------
    BASIC ERC20 INTERFACE (LBR). Only the required methods.
    -----------------------------------------------------------
*/
interface IERC20 {
    function transfer(address to, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
}

/*
    ------------------------------------------------------------------
    ErinaceusVRF ORACLE INTERFACE. Must match your actual version.
    ------------------------------------------------------------------
*/
interface ErinaceusVRFInterface {
    function requestRandomWords(
        bytes32 keyHash,
        uint64 subId,
        uint16 requestConfirmations,
        uint32 callbackGasLimit,
        uint32 numWords
    ) external returns (uint256 requestId);
}

/*
    -----------------------------------------------------------------
    CONTRACT TestRuletaV2 
    - Supports betting in native FTN or LBR (ERC20).
    - 3 possible outcomes: Red (40%), Black (40%), Green (20%).
    - Withdraw pattern via pending balances.
    - The owner can change parameters and withdraw/deposit tokens.
    - Solidity version 0.8.6 (no OpenZeppelin or pausing).
    - The onlyEOA restriction has been removed.
    -----------------------------------------------------------------
*/
contract RouletteV1 {
    // ---------------------
    // Basic variables
    // ---------------------
    address public owner;
    uint256 public fixedBet;      // Fixed FTN amount required to place a bet

    // LBR (ERC20) token used for consolation prizes or LBR-based bets
    IERC20 public lbrToken;

    // VRF settings
    ErinaceusVRFInterface public vrf;
    uint64 public subId;
    bytes32 public keyHash;

    // ---------------------
    // Bet structure
    // ---------------------
    struct Bet {
        address player;
        bool betOnRed;    // true = red, false = black
        bool isFTNBet;    // true = FTN, false = LBR
        uint256 lbrAmount; // used if isFTNBet == false
    }

    // requestId => Bet
    mapping(uint256 => Bet) public pendingBets;

    // Prevents users from betting twice without resolving the first
    mapping(address => bool) public waitingForResult;

    // Pending balances for each user
    mapping(address => uint256) public pendingWithdrawalsFTN;
    mapping(address => uint256) public pendingWithdrawalsLBR;

    // ---------------------
    // Events
    // ---------------------
    event BetPlaced(
        address indexed player,
        bool betOnRed,
        bool isFTNBet,
        uint256 requestId,
        uint256 betValue
    );

    event ResultGenerated(
        address indexed player,
        bool won,
        uint8 result,      // 0 = red, 1 = black, 2 = green
        bool isFTNBet
    );

    event WinningsAssignedFTN(address indexed player, uint256 amount);
    event WinningsAssignedLBR(address indexed player, uint256 amount);

    // VRF changes
    event VRFUpdated(address newVRF);
    event KeyHashUpdated(bytes32 newKeyHash);
    event SubIdUpdated(uint64 newSubId);

    // Param updates
    event FixedBetUpdated(uint256 oldValue, uint256 newValue);

    // Owner deposit/withdraw
    event OwnerWithdrewFTN(uint256 amount);
    event OwnerWithdrewLBR(uint256 amount);
    event OwnerDepositedLBR(uint256 amount);

    // ---------------------
    // Modifiers
    // ---------------------
    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner");
        _;
    }

    constructor(
        address _vrfAddress,
        bytes32 _keyHash,
        uint64 _subId,
        uint256 _initialFixedBet,
        address _lbrToken
    ) {
        owner = msg.sender;
        vrf = ErinaceusVRFInterface(_vrfAddress);
        keyHash = _keyHash;
        subId = _subId;
        fixedBet = _initialFixedBet;
        lbrToken = IERC20(_lbrToken);
    }

    // ---------------------------------------------------
    //   SINGLE FUNCTION TO PLACE A BET (Red or Black)
    // ---------------------------------------------------
    /**
     * @dev The player bets on Red or Black. Whether the bet is in FTN or LBR
     *      depends on `msg.value`:
     *        - If `msg.value == fixedBet`, it's an FTN bet.
     *        - If `msg.value == 0`, it must be an LBR bet with `_lbrAmount > 0`.
     *
     * Rules:
     *  - FTN bet:
     *      * The user sends exactly `fixedBet` in the transaction.
     *      * If they win, they get 2× the FTN amount.
     *      * If they lose, they receive 1 LBR as a consolation prize.
     *  - LBR bet:
     *      * The user calls `bet(false, X)` or `bet(true, X)` with `msg.value == 0`.
     *      * Transfers `_lbrAmount` of LBR to this contract via `transferFrom`.
     *      * If they win, they receive `fixedBet` in FTN.
     *      * If they lose, they get nothing.
     */
    function bet(bool _betOnRed, uint256 _lbrAmount)
        external
        payable
    {
        // 1) Basic validations
        require(!waitingForResult[msg.sender], "You already have a pending bet");

        bool ftnBet = (msg.value > 0);

        if (ftnBet) {
            // FTN bet
            require(
                msg.value == fixedBet,
                "You must send exactly 'fixedBet' in FTN"
            );
            // Check liquidity: pay 2x on win, or 1 LBR on loss
            require(
                address(this).balance >= (2 * fixedBet),
                "Not enough FTN in contract to pay a 2x prize"
            );
            require(
                lbrToken.balanceOf(address(this)) >= 1,
                "Not enough LBR for consolation prize"
            );
        } else {
            // LBR bet
            require(msg.value == 0, "If betting in LBR, do not send FTN");
            require(_lbrAmount > 0, "LBR amount must be greater than 0");

            bool ok = lbrToken.transferFrom(msg.sender, address(this), _lbrAmount);
            require(ok, "Failed to transfer LBR to the contract");

            // Check if there's enough FTN to pay out 'fixedBet' in case of a win
            require(
                address(this).balance >= fixedBet,
                "Not enough FTN in contract to pay 'fixedBet'"
            );
        }

        // 2) Request randomness from VRF
        uint256 requestId = vrf.requestRandomWords(
            keyHash,
            subId,
            3,        // confirmations
            200000,   // gas for callback
            1         // only 1 random number
        );

        // 3) Record the bet
        pendingBets[requestId] = Bet({
            player: msg.sender,
            betOnRed: _betOnRed,
            isFTNBet: ftnBet,
            lbrAmount: _lbrAmount
        });

        // Block further bets until this one resolves
        waitingForResult[msg.sender] = true;

        emit BetPlaced(
            msg.sender,
            _betOnRed,
            ftnBet,
            requestId,
            ftnBet ? msg.value : _lbrAmount
        );
    }

    // ---------------------------------------------------
    //             VRF ORACLE CALLBACK
    // ---------------------------------------------------
    /**
     * @dev Called by the VRF contract to provide the random number
     *      and resolve the bet.
     */
    function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords)
        external
    {
        require(msg.sender == address(vrf), "Only VRF contract can fulfill");

        Bet memory betInfo = pendingBets[requestId];
        require(betInfo.player != address(0), "Bet not found");

        // Clear the bet record
        waitingForResult[betInfo.player] = false;
        delete pendingBets[requestId];

        // Roulette distribution:
        //   0-3 => red (40%)
        //   4-7 => black (40%)
        //   8-9 => green (20%)
        uint8 spin = uint8(randomWords[0] % 10);
        uint8 result; // 0 = red, 1 = black, 2 = green

        if (spin < 4) {
            result = 0; // red
        } else if (spin < 8) {
            result = 1; // black
        } else {
            result = 2; // green
        }

        // Determine if the player won
        bool won = false;
        if (result == 0 && betInfo.betOnRed) {
            // Bet on red and got red
            won = true;
        } else if (result == 1 && !betInfo.betOnRed) {
            // Bet on black and got black
            won = true;
        }

        // Payout logic
        if (betInfo.isFTNBet) {
            // The bet was in FTN
            if (won) {
                // Wins 2× the FTN
                uint256 prize = fixedBet * 2;
                pendingWithdrawalsFTN[betInfo.player] += prize;
                emit WinningsAssignedFTN(betInfo.player, prize);
            } else {
                // Loses => gets 1 LBR as consolation
                pendingWithdrawalsLBR[betInfo.player] += 1;
                emit WinningsAssignedLBR(betInfo.player, 1);
            }
        } else {
            // The bet was in LBR
            if (won) {
                // Wins `fixedBet` in FTN
                pendingWithdrawalsFTN[betInfo.player] += fixedBet;
                emit WinningsAssignedFTN(betInfo.player, fixedBet);
            }
            // Otherwise, no reward
        }

        emit ResultGenerated(betInfo.player, won, result, betInfo.isFTNBet);
    }

    // ---------------------------------------------------
    //          PLAYER WITHDRAWALS
    // ---------------------------------------------------
    /**
     * @dev The user can withdraw all pending FTN and LBR at once.
     */
    function withdrawFunds() external {
        uint256 ftnAmount = pendingWithdrawalsFTN[msg.sender];
        uint256 lbrAmount = pendingWithdrawalsLBR[msg.sender];

        require(ftnAmount > 0 || lbrAmount > 0, "No funds to withdraw");

        // Set to zero before sending
        pendingWithdrawalsFTN[msg.sender] = 0;
        pendingWithdrawalsLBR[msg.sender] = 0;

        // Send FTN (if any)
        if (ftnAmount > 0) {
            (bool success, ) = msg.sender.call{value: ftnAmount}("");
            require(success, "Failed to send FTN");
        }

        // Send LBR (if any)
        if (lbrAmount > 0) {
            bool ok = lbrToken.transfer(msg.sender, lbrAmount);
            require(ok, "Failed to send LBR");
        }
    }

    // ---------------------------------------------------
    //          OWNER (ADMIN) FUNCTIONS
    // ---------------------------------------------------
    function updateVRF(address newVRFAddress) external onlyOwner {
        require(newVRFAddress != address(0), "Invalid VRF address");
        vrf = ErinaceusVRFInterface(newVRFAddress);
        emit VRFUpdated(newVRFAddress);
    }

    function updateKeyHash(bytes32 newKeyHash) external onlyOwner {
        keyHash = newKeyHash;
        emit KeyHashUpdated(newKeyHash);
    }

    function updateSubId(uint64 newSubId) external onlyOwner {
        subId = newSubId;
        emit SubIdUpdated(newSubId);
    }

    /**
     * @dev Updates the fixed bet amount (FTN).
     */
    function updateFixedBet(uint256 newFixedBet) external onlyOwner {
        require(newFixedBet > 0, "Fixed bet must be > 0");
        uint256 oldValue = fixedBet;
        fixedBet = newFixedBet;
        emit FixedBetUpdated(oldValue, newFixedBet);
    }

    /**
     * @dev The owner can withdraw a certain amount of native FTN.
     */
    function ownerWithdrawFTN(uint256 amount) external onlyOwner {
        require(amount > 0, "Invalid amount");
        (bool success, ) = owner.call{value: amount}("");
        require(success, "Failed to withdraw FTN");
        emit OwnerWithdrewFTN(amount);
    }

    /**
     * @dev The owner can withdraw a certain amount of LBR (ERC20).
     */
    function ownerWithdrawLBR(uint256 amount) external onlyOwner {
        require(amount > 0, "Invalid amount");
        bool ok = lbrToken.transfer(owner, amount);
        require(ok, "Failed to withdraw LBR");
        emit OwnerWithdrewLBR(amount);
    }

    /**
     * @dev The owner can deposit LBR into the contract
     *      (requires prior `approve` of this contract for `amount`).
     */
    function ownerDepositLBR(uint256 amount) external onlyOwner {
        require(amount > 0, "Invalid amount");
        bool ok = lbrToken.transferFrom(msg.sender, address(this), amount);
        require(ok, "Failed to deposit LBR");
        emit OwnerDepositedLBR(amount);
    }

    // ---------------------------------------------------
    //        RECEIVE FTN (Deposit to contract)
    // ---------------------------------------------------
    /**
     * @dev Allows injecting FTN simply by sending it to the contract.
     */
    receive() external payable {}
}
        

Compiler Settings

{"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers"],"":["ast"]}},"optimizer":{"runs":200,"enabled":false},"metadata":{"bytecodeHash":"ipfs"},"libraries":{".sol":{}},"evmVersion":"berlin"}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_vrfAddress","internalType":"address"},{"type":"bytes32","name":"_keyHash","internalType":"bytes32"},{"type":"uint64","name":"_subId","internalType":"uint64"},{"type":"uint256","name":"_initialFixedBet","internalType":"uint256"},{"type":"address","name":"_lbrToken","internalType":"address"}]},{"type":"event","name":"BetPlaced","inputs":[{"type":"address","name":"player","internalType":"address","indexed":true},{"type":"bool","name":"betOnRed","internalType":"bool","indexed":false},{"type":"bool","name":"isFTNBet","internalType":"bool","indexed":false},{"type":"uint256","name":"requestId","internalType":"uint256","indexed":false},{"type":"uint256","name":"betValue","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"FixedBetUpdated","inputs":[{"type":"uint256","name":"oldValue","internalType":"uint256","indexed":false},{"type":"uint256","name":"newValue","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"KeyHashUpdated","inputs":[{"type":"bytes32","name":"newKeyHash","internalType":"bytes32","indexed":false}],"anonymous":false},{"type":"event","name":"OwnerDepositedLBR","inputs":[{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnerWithdrewFTN","inputs":[{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnerWithdrewLBR","inputs":[{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"ResultGenerated","inputs":[{"type":"address","name":"player","internalType":"address","indexed":true},{"type":"bool","name":"won","internalType":"bool","indexed":false},{"type":"uint8","name":"result","internalType":"uint8","indexed":false},{"type":"bool","name":"isFTNBet","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"SubIdUpdated","inputs":[{"type":"uint64","name":"newSubId","internalType":"uint64","indexed":false}],"anonymous":false},{"type":"event","name":"VRFUpdated","inputs":[{"type":"address","name":"newVRF","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"WinningsAssignedFTN","inputs":[{"type":"address","name":"player","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"WinningsAssignedLBR","inputs":[{"type":"address","name":"player","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"payable","outputs":[],"name":"bet","inputs":[{"type":"bool","name":"_betOnRed","internalType":"bool"},{"type":"uint256","name":"_lbrAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"fixedBet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"keyHash","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"lbrToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ownerDepositLBR","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ownerWithdrawFTN","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ownerWithdrawLBR","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"player","internalType":"address"},{"type":"bool","name":"betOnRed","internalType":"bool"},{"type":"bool","name":"isFTNBet","internalType":"bool"},{"type":"uint256","name":"lbrAmount","internalType":"uint256"}],"name":"pendingBets","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"pendingWithdrawalsFTN","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"pendingWithdrawalsLBR","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rawFulfillRandomWords","inputs":[{"type":"uint256","name":"requestId","internalType":"uint256"},{"type":"uint256[]","name":"randomWords","internalType":"uint256[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"subId","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateFixedBet","inputs":[{"type":"uint256","name":"newFixedBet","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateKeyHash","inputs":[{"type":"bytes32","name":"newKeyHash","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateSubId","inputs":[{"type":"uint64","name":"newSubId","internalType":"uint64"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateVRF","inputs":[{"type":"address","name":"newVRFAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract ErinaceusVRFInterface"}],"name":"vrf","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"waitingForResult","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawFunds","inputs":[]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x60806040523480156200001157600080fd5b506040516200365838038062003658833981810160405281019062000037919062000197565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360048190555082600360146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508160018190555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050620002e8565b6000815190506200014c8162000280565b92915050565b60008151905062000163816200029a565b92915050565b6000815190506200017a81620002b4565b92915050565b6000815190506200019181620002ce565b92915050565b600080600080600060a08688031215620001b657620001b56200027b565b5b6000620001c6888289016200013b565b9550506020620001d98882890162000152565b9450506040620001ec8882890162000180565b9350506060620001ff8882890162000169565b925050608062000212888289016200013b565b9150509295509295909350565b60006200022c826200023d565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600080fd5b6200028b816200021f565b81146200029757600080fd5b50565b620002a58162000233565b8114620002b157600080fd5b50565b620002bf816200025d565b8114620002cb57600080fd5b50565b620002d98162000267565b8114620002e557600080fd5b50565b61336080620002f86000396000f3fe6080604052600436106101235760003560e01c806361728f39116100a0578063d219750b11610064578063d219750b146103d2578063d837d14d146103fb578063e17b336014610424578063e7fa67e51461044f578063eb1d28bb146104785761012a565b806361728f39146102ed5780638da5cb5b14610318578063918dae3b14610343578063a84db89414610380578063b1986acc146103a95761012a565b80631fe543e3116100e75780631fe543e31461022957806324600fc3146102525780632a9a8fa4146102695780635229a6fd146102a6578063567990d3146102c25761012a565b806301abd6d71461012f57806308f6b8e71461016f5780630c949043146101985780630d68dd15146101c357806314621962146101ec5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612175565b6104a3565b6040516101669493929190612652565b60405180910390f35b34801561017b57600080fd5b5061019660048036038101906101919190612175565b61050d565b005b3480156101a457600080fd5b506101ad61070e565b6040516101ba91906127c5565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e59190612175565b610734565b005b3480156101f857600080fd5b50610213600480360381019061020e91906120ae565b610850565b60405161022091906126c0565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b91906121cf565b610870565b005b34801561025e57600080fd5b50610267610e39565b005b34801561027557600080fd5b50610290600480360381019061028b91906120ae565b611152565b60405161029d9190612a96565b60405180910390f35b6102c060048036038101906102bb9190612108565b61116a565b005b3480156102ce57600080fd5b506102d76117c4565b6040516102e49190612a96565b60405180910390f35b3480156102f957600080fd5b506103026117ca565b60405161030f9190612757565b60405180910390f35b34801561032457600080fd5b5061032d6117d0565b60405161033a9190612600565b60405180910390f35b34801561034f57600080fd5b5061036a600480360381019061036591906120ae565b6117f4565b6040516103779190612a96565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a2919061222b565b61180c565b005b3480156103b557600080fd5b506103d060048036038101906103cb91906120ae565b6118fd565b005b3480156103de57600080fd5b506103f960048036038101906103f49190612175565b611a76565b005b34801561040757600080fd5b50610422600480360381019061041d9190612175565b611c95565b005b34801561043057600080fd5b50610439611e6e565b60405161044691906127e0565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190612148565b611e94565b005b34801561048457600080fd5b5061048d611f63565b60405161049a9190612ada565b60405180910390f35b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16908060000160159054906101000a900460ff16908060010154905084565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461059b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059290612856565b60405180910390fd5b600081116105de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d590612876565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161063f9392919061261b565b602060405180830381600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069191906120db565b9050806106d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ca90612996565b60405180910390fd5b7ff3ec7c68ae090b3d300d039b738d38d7cacf25b4f34b3497d9e6644f70329afe826040516107029190612a96565b60405180910390a15050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990612856565b60405180910390fd5b60008111610805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fc90612836565b60405180910390fd5b60006001549050816001819055507fdda6fe71c981d0ee29c2e496a57123451905da39410f19ebe0ab14d3d482a94b8183604051610844929190612ab1565b60405180910390a15050565b60066020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790612976565b60405180910390fd5b6000600560008481526020019081526020016000206040518060800160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff161515151581526020016000820160159054906101000a900460ff161515151581526020016001820154815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2390612a16565b60405180910390fd5b600060066000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060056000848152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff02191690556000820160156101000a81549060ff0219169055600182016000905550506000600a83600081518110610b0d57610b0c612df3565b5b6020026020010151610b1f9190612d64565b9050600060048260ff161015610b385760009050610b53565b60088260ff161015610b4d5760019050610b52565b600290505b5b6000808260ff16148015610b68575083602001515b15610b765760019050610b96565b60018260ff16148015610b8b57508360200151155b15610b9557600190505b5b836040015115610d1f578015610c6b5760006002600154610bb79190612bb8565b90508060076000876000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c0c9190612b62565b92505081905550846000015173ffffffffffffffffffffffffffffffffffffffff167f31210c2475ca9ada7ebf015e4a40f32cc7c0bdd4181e390cc070187dc914156982604051610c5d9190612a96565b60405180910390a250610d1a565b600160086000866000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610cbf9190612b62565b92505081905550836000015173ffffffffffffffffffffffffffffffffffffffff167f6baab2e69b734f50a63f0225789788395f4cfbf7c2a6696128de94a92e5b73166001604051610d1191906127fb565b60405180910390a25b610dd7565b8015610dd65760015460076000866000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d7a9190612b62565b92505081905550836000015173ffffffffffffffffffffffffffffffffffffffff167f31210c2475ca9ada7ebf015e4a40f32cc7c0bdd4181e390cc070187dc9141569600154604051610dcd9190612a96565b60405180910390a25b5b836000015173ffffffffffffffffffffffffffffffffffffffff167f0478b07a0a6082755ecac218126168c1d2206e9d34be00576ab635d6350b43ff82848760400151604051610e2993929190612720565b60405180910390a2505050505050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000821180610ed05750600081115b610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690612896565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008211156110505760003373ffffffffffffffffffffffffffffffffffffffff1683604051610fc8906125eb565b60006040518083038185875af1925050503d8060008114611005576040519150601f19603f3d011682016040523d82523d6000602084013e61100a565b606091505b505090508061104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104590612956565b60405180910390fd5b505b600081111561114e576000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016110b8929190612697565b602060405180830381600087803b1580156110d257600080fd5b505af11580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110a91906120db565b90508061114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114390612a76565b60405180910390fd5b505b5050565b60076020528060005260406000206000915090505481565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee906129b6565b60405180910390fd5b60008034119050801561138c576001543414611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f906128b6565b60405180910390fd5b60015460026112579190612bb8565b471015611299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611290906129d6565b60405180910390fd5b6001600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112f69190612600565b60206040518083038186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134691906121a2565b1015611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90612a36565b60405180910390fd5b61154e565b600034146113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690612936565b60405180910390fd5b60008211611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990612a56565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b81526004016114739392919061261b565b602060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c591906120db565b905080611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906128d6565b60405180910390fd5b60015447101561154c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611543906128f6565b60405180910390fd5b505b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600454600360149054906101000a900467ffffffffffffffff16600362030d4060016040518663ffffffff1660e01b81526004016115d0959493929190612772565b602060405180830381600087803b1580156115ea57600080fd5b505af11580156115fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162291906121a2565b905060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200185151581526020018315158152602001848152506005600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160000160156101000a81548160ff021916908315150217905550606082015181600101559050506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167fa616da74b550dd11493ad87451ebfdef7153cae5f80b7d8dbc072a4e80752654858484866117a457876117a6565b345b6040516117b694939291906126db565b60405180910390a250505050565b60015481565b60045481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190612856565b60405180910390fd5b80600360146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f3fb6fc5b974e21a29292aeaa29ed6d0f23c5ae0a0e8e6599d973f88c53ea301b816040516118f29190612ada565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290612856565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290612816565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6f0e7304358d9f5acc110757d682927f66d013808aa8bf39a4a4db0d4dbe39be81604051611a6b9190612600565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90612856565b60405180910390fd5b60008111611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90612876565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611bc6929190612697565b602060405180830381600087803b158015611be057600080fd5b505af1158015611bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1891906120db565b905080611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c51906129f6565b60405180910390fd5b7fb0b2cc82911569fe0ec17ee2f98beac059df3117ce2f896acf504cca6caa887382604051611c899190612a96565b60405180910390a15050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90612856565b60405180910390fd5b60008111611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90612876565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611dad906125eb565b60006040518083038185875af1925050503d8060008114611dea576040519150601f19603f3d011682016040523d82523d6000602084013e611def565b606091505b5050905080611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90612916565b60405180910390fd5b7f641bb248dba1f49578a3373556c6c43fe770837654a334c4e02a62cab00f8a4b82604051611e629190612a96565b60405180910390a15050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990612856565b60405180910390fd5b806004819055507f21d77d94f4c9e163d289e2e4b3fa5fd25ce1f709ad72c23b6a675e94c8282b5281604051611f589190612757565b60405180910390a150565b600360149054906101000a900467ffffffffffffffff1681565b6000611f90611f8b84612b1a565b612af5565b90508083825260208201905082856020860282011115611fb357611fb2612e56565b5b60005b85811015611fe35781611fc9888261206f565b845260208401935060208301925050600181019050611fb6565b5050509392505050565b600081359050611ffc816132b7565b92915050565b600082601f83011261201757612016612e51565b5b8135612027848260208601611f7d565b91505092915050565b60008135905061203f816132ce565b92915050565b600081519050612054816132ce565b92915050565b600081359050612069816132e5565b92915050565b60008135905061207e816132fc565b92915050565b600081519050612093816132fc565b92915050565b6000813590506120a881613313565b92915050565b6000602082840312156120c4576120c3612e60565b5b60006120d284828501611fed565b91505092915050565b6000602082840312156120f1576120f0612e60565b5b60006120ff84828501612045565b91505092915050565b6000806040838503121561211f5761211e612e60565b5b600061212d85828601612030565b925050602061213e8582860161206f565b9150509250929050565b60006020828403121561215e5761215d612e60565b5b600061216c8482850161205a565b91505092915050565b60006020828403121561218b5761218a612e60565b5b60006121998482850161206f565b91505092915050565b6000602082840312156121b8576121b7612e60565b5b60006121c684828501612084565b91505092915050565b600080604083850312156121e6576121e5612e60565b5b60006121f48582860161206f565b925050602083013567ffffffffffffffff81111561221557612214612e5b565b5b61222185828601612002565b9150509250929050565b60006020828403121561224157612240612e60565b5b600061224f84828501612099565b91505092915050565b61226181612c12565b82525050565b61227081612c24565b82525050565b61227f81612c30565b82525050565b61228e81612ca3565b82525050565b61229d81612cc7565b82525050565b6122ac81612ceb565b82525050565b6122bb81612cfd565b82525050565b6122ca81612d0f565b82525050565b6122d981612d21565b82525050565b60006122ec601383612b51565b91506122f782612e76565b602082019050919050565b600061230f601583612b51565b915061231a82612e9f565b602082019050919050565b6000612332600a83612b51565b915061233d82612ec8565b602082019050919050565b6000612355600e83612b51565b915061236082612ef1565b602082019050919050565b6000612378601483612b51565b915061238382612f1a565b602082019050919050565b600061239b602783612b51565b91506123a682612f43565b604082019050919050565b60006123be602683612b51565b91506123c982612f92565b604082019050919050565b60006123e1602c83612b51565b91506123ec82612fe1565b604082019050919050565b6000612404601683612b51565b915061240f82613030565b602082019050919050565b6000612427602283612b51565b915061243282613059565b604082019050919050565b600061244a601283612b51565b9150612455826130a8565b602082019050919050565b600061246d601d83612b51565b9150612478826130d1565b602082019050919050565b6000612490601583612b51565b915061249b826130fa565b602082019050919050565b60006124b3601e83612b51565b91506124be82613123565b602082019050919050565b60006124d6602c83612b51565b91506124e18261314c565b604082019050919050565b60006124f9601683612b51565b91506125048261319b565b602082019050919050565b600061251c600083612b46565b9150612527826131c4565b600082019050919050565b600061253f600d83612b51565b915061254a826131c7565b602082019050919050565b6000612562602483612b51565b915061256d826131f0565b604082019050919050565b6000612585602183612b51565b91506125908261323f565b604082019050919050565b60006125a8601283612b51565b91506125b38261328e565b602082019050919050565b6125c781612c68565b82525050565b6125d681612c82565b82525050565b6125e581612c96565b82525050565b60006125f68261250f565b9150819050919050565b60006020820190506126156000830184612258565b92915050565b60006060820190506126306000830186612258565b61263d6020830185612258565b61264a60408301846125be565b949350505050565b60006080820190506126676000830187612258565b6126746020830186612267565b6126816040830185612267565b61268e60608301846125be565b95945050505050565b60006040820190506126ac6000830185612258565b6126b960208301846125be565b9392505050565b60006020820190506126d56000830184612267565b92915050565b60006080820190506126f06000830187612267565b6126fd6020830186612267565b61270a60408301856125be565b61271760608301846125be565b95945050505050565b60006060820190506127356000830186612267565b61274260208301856125dc565b61274f6040830184612267565b949350505050565b600060208201905061276c6000830184612276565b92915050565b600060a0820190506127876000830188612276565b61279460208301876125cd565b6127a160408301866122d0565b6127ae60608301856122c1565b6127bb60808301846122b2565b9695505050505050565b60006020820190506127da6000830184612285565b92915050565b60006020820190506127f56000830184612294565b92915050565b600060208201905061281060008301846122a3565b92915050565b6000602082019050818103600083015261282f816122df565b9050919050565b6000602082019050818103600083015261284f81612302565b9050919050565b6000602082019050818103600083015261286f81612325565b9050919050565b6000602082019050818103600083015261288f81612348565b9050919050565b600060208201905081810360008301526128af8161236b565b9050919050565b600060208201905081810360008301526128cf8161238e565b9050919050565b600060208201905081810360008301526128ef816123b1565b9050919050565b6000602082019050818103600083015261290f816123d4565b9050919050565b6000602082019050818103600083015261292f816123f7565b9050919050565b6000602082019050818103600083015261294f8161241a565b9050919050565b6000602082019050818103600083015261296f8161243d565b9050919050565b6000602082019050818103600083015261298f81612460565b9050919050565b600060208201905081810360008301526129af81612483565b9050919050565b600060208201905081810360008301526129cf816124a6565b9050919050565b600060208201905081810360008301526129ef816124c9565b9050919050565b60006020820190508181036000830152612a0f816124ec565b9050919050565b60006020820190508181036000830152612a2f81612532565b9050919050565b60006020820190508181036000830152612a4f81612555565b9050919050565b60006020820190508181036000830152612a6f81612578565b9050919050565b60006020820190508181036000830152612a8f8161259b565b9050919050565b6000602082019050612aab60008301846125be565b92915050565b6000604082019050612ac660008301856125be565b612ad360208301846125be565b9392505050565b6000602082019050612aef60008301846125cd565b92915050565b6000612aff612b10565b9050612b0b8282612d33565b919050565b6000604051905090565b600067ffffffffffffffff821115612b3557612b34612e22565b5b602082029050602081019050919050565b600081905092915050565b600082825260208201905092915050565b6000612b6d82612c68565b9150612b7883612c68565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bad57612bac612d95565b5b828201905092915050565b6000612bc382612c68565b9150612bce83612c68565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c0757612c06612d95565b5b828202905092915050565b6000612c1d82612c48565b9050919050565b60008115159050919050565b6000819050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b6000612cae82612cb5565b9050919050565b6000612cc082612c48565b9050919050565b6000612cd282612cd9565b9050919050565b6000612ce482612c48565b9050919050565b6000612cf682612c68565b9050919050565b6000612d0882612c72565b9050919050565b6000612d1a82612c72565b9050919050565b6000612d2c82612c3a565b9050919050565b612d3c82612e65565b810181811067ffffffffffffffff82111715612d5b57612d5a612e22565b5b80604052505050565b6000612d6f82612c68565b9150612d7a83612c68565b925082612d8a57612d89612dc4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e76616c696420565246206164647265737300000000000000000000000000600082015250565b7f466978656420626574206d757374206265203e20300000000000000000000000600082015250565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4e6f2066756e647320746f207769746864726177000000000000000000000000600082015250565b7f596f75206d7573742073656e642065786163746c79202766697865644265742760008201527f20696e2046544e00000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f207472616e73666572204c425220746f2074686520636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682046544e20696e20636f6e747261637420746f20706160008201527f7920276669786564426574270000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2077697468647261772046544e00000000000000000000600082015250565b7f49662062657474696e6720696e204c42522c20646f206e6f742073656e64204660008201527f544e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e642046544e0000000000000000000000000000600082015250565b7f4f6e6c792056524620636f6e74726163742063616e2066756c66696c6c000000600082015250565b7f4661696c656420746f206465706f736974204c42520000000000000000000000600082015250565b7f596f7520616c7265616479206861766520612070656e64696e67206265740000600082015250565b7f4e6f7420656e6f7567682046544e20696e20636f6e747261637420746f20706160008201527f792061203278207072697a650000000000000000000000000000000000000000602082015250565b7f4661696c656420746f207769746864726177204c425200000000000000000000600082015250565b50565b7f426574206e6f7420666f756e6400000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f756768204c425220666f7220636f6e736f6c6174696f6e207060008201527f72697a6500000000000000000000000000000000000000000000000000000000602082015250565b7f4c425220616d6f756e74206d7573742062652067726561746572207468616e2060008201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204c42520000000000000000000000000000600082015250565b6132c081612c12565b81146132cb57600080fd5b50565b6132d781612c24565b81146132e257600080fd5b50565b6132ee81612c30565b81146132f957600080fd5b50565b61330581612c68565b811461331057600080fd5b50565b61331c81612c82565b811461332757600080fd5b5056fea26469706673582212206cf4da819d69c4aa74769c7d368e14174832054dceab3a5c1abc962edff096fe64736f6c634300080600330000000000000000000000007fdbf4fe2dbbdf956c010b3dd83177cb86eb1b146da22a485fc06c9bce99691a2ff5af57b7fd20b09af4a6572f6a44473d6c1514000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000005af3107a40000000000000000000000000002302c75d734d53cf511527f517716735a7a71441

Deployed ByteCode

0x6080604052600436106101235760003560e01c806361728f39116100a0578063d219750b11610064578063d219750b146103d2578063d837d14d146103fb578063e17b336014610424578063e7fa67e51461044f578063eb1d28bb146104785761012a565b806361728f39146102ed5780638da5cb5b14610318578063918dae3b14610343578063a84db89414610380578063b1986acc146103a95761012a565b80631fe543e3116100e75780631fe543e31461022957806324600fc3146102525780632a9a8fa4146102695780635229a6fd146102a6578063567990d3146102c25761012a565b806301abd6d71461012f57806308f6b8e71461016f5780630c949043146101985780630d68dd15146101c357806314621962146101ec5761012a565b3661012a57005b600080fd5b34801561013b57600080fd5b5061015660048036038101906101519190612175565b6104a3565b6040516101669493929190612652565b60405180910390f35b34801561017b57600080fd5b5061019660048036038101906101919190612175565b61050d565b005b3480156101a457600080fd5b506101ad61070e565b6040516101ba91906127c5565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e59190612175565b610734565b005b3480156101f857600080fd5b50610213600480360381019061020e91906120ae565b610850565b60405161022091906126c0565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b91906121cf565b610870565b005b34801561025e57600080fd5b50610267610e39565b005b34801561027557600080fd5b50610290600480360381019061028b91906120ae565b611152565b60405161029d9190612a96565b60405180910390f35b6102c060048036038101906102bb9190612108565b61116a565b005b3480156102ce57600080fd5b506102d76117c4565b6040516102e49190612a96565b60405180910390f35b3480156102f957600080fd5b506103026117ca565b60405161030f9190612757565b60405180910390f35b34801561032457600080fd5b5061032d6117d0565b60405161033a9190612600565b60405180910390f35b34801561034f57600080fd5b5061036a600480360381019061036591906120ae565b6117f4565b6040516103779190612a96565b60405180910390f35b34801561038c57600080fd5b506103a760048036038101906103a2919061222b565b61180c565b005b3480156103b557600080fd5b506103d060048036038101906103cb91906120ae565b6118fd565b005b3480156103de57600080fd5b506103f960048036038101906103f49190612175565b611a76565b005b34801561040757600080fd5b50610422600480360381019061041d9190612175565b611c95565b005b34801561043057600080fd5b50610439611e6e565b60405161044691906127e0565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190612148565b611e94565b005b34801561048457600080fd5b5061048d611f63565b60405161049a9190612ada565b60405180910390f35b60056020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16908060000160159054906101000a900460ff16908060010154905084565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461059b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059290612856565b60405180910390fd5b600081116105de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d590612876565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161063f9392919061261b565b602060405180830381600087803b15801561065957600080fd5b505af115801561066d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069191906120db565b9050806106d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ca90612996565b60405180910390fd5b7ff3ec7c68ae090b3d300d039b738d38d7cacf25b4f34b3497d9e6644f70329afe826040516107029190612a96565b60405180910390a15050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b990612856565b60405180910390fd5b60008111610805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fc90612836565b60405180910390fd5b60006001549050816001819055507fdda6fe71c981d0ee29c2e496a57123451905da39410f19ebe0ab14d3d482a94b8183604051610844929190612ab1565b60405180910390a15050565b60066020528060005260406000206000915054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790612976565b60405180910390fd5b6000600560008481526020019081526020016000206040518060800160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff161515151581526020016000820160159054906101000a900460ff161515151581526020016001820154815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2390612a16565b60405180910390fd5b600060066000836000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060056000848152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff02191690556000820160156101000a81549060ff0219169055600182016000905550506000600a83600081518110610b0d57610b0c612df3565b5b6020026020010151610b1f9190612d64565b9050600060048260ff161015610b385760009050610b53565b60088260ff161015610b4d5760019050610b52565b600290505b5b6000808260ff16148015610b68575083602001515b15610b765760019050610b96565b60018260ff16148015610b8b57508360200151155b15610b9557600190505b5b836040015115610d1f578015610c6b5760006002600154610bb79190612bb8565b90508060076000876000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c0c9190612b62565b92505081905550846000015173ffffffffffffffffffffffffffffffffffffffff167f31210c2475ca9ada7ebf015e4a40f32cc7c0bdd4181e390cc070187dc914156982604051610c5d9190612a96565b60405180910390a250610d1a565b600160086000866000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610cbf9190612b62565b92505081905550836000015173ffffffffffffffffffffffffffffffffffffffff167f6baab2e69b734f50a63f0225789788395f4cfbf7c2a6696128de94a92e5b73166001604051610d1191906127fb565b60405180910390a25b610dd7565b8015610dd65760015460076000866000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d7a9190612b62565b92505081905550836000015173ffffffffffffffffffffffffffffffffffffffff167f31210c2475ca9ada7ebf015e4a40f32cc7c0bdd4181e390cc070187dc9141569600154604051610dcd9190612a96565b60405180910390a25b5b836000015173ffffffffffffffffffffffffffffffffffffffff167f0478b07a0a6082755ecac218126168c1d2206e9d34be00576ab635d6350b43ff82848760400151604051610e2993929190612720565b60405180910390a2505050505050565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000821180610ed05750600081115b610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0690612896565b60405180910390fd5b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008211156110505760003373ffffffffffffffffffffffffffffffffffffffff1683604051610fc8906125eb565b60006040518083038185875af1925050503d8060008114611005576040519150601f19603f3d011682016040523d82523d6000602084013e61100a565b606091505b505090508061104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104590612956565b60405180910390fd5b505b600081111561114e576000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016110b8929190612697565b602060405180830381600087803b1580156110d257600080fd5b505af11580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110a91906120db565b90508061114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114390612a76565b60405180910390fd5b505b5050565b60076020528060005260406000206000915090505481565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ee906129b6565b60405180910390fd5b60008034119050801561138c576001543414611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f906128b6565b60405180910390fd5b60015460026112579190612bb8565b471015611299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611290906129d6565b60405180910390fd5b6001600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112f69190612600565b60206040518083038186803b15801561130e57600080fd5b505afa158015611322573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134691906121a2565b1015611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90612a36565b60405180910390fd5b61154e565b600034146113cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c690612936565b60405180910390fd5b60008211611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990612a56565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b81526004016114739392919061261b565b602060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c591906120db565b905080611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe906128d6565b60405180910390fd5b60015447101561154c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611543906128f6565b60405180910390fd5b505b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600454600360149054906101000a900467ffffffffffffffff16600362030d4060016040518663ffffffff1660e01b81526004016115d0959493929190612772565b602060405180830381600087803b1580156115ea57600080fd5b505af11580156115fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162291906121a2565b905060405180608001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200185151581526020018315158152602001848152506005600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555060408201518160000160156101000a81548160ff021916908315150217905550606082015181600101559050506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167fa616da74b550dd11493ad87451ebfdef7153cae5f80b7d8dbc072a4e80752654858484866117a457876117a6565b345b6040516117b694939291906126db565b60405180910390a250505050565b60015481565b60045481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60086020528060005260406000206000915090505481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190612856565b60405180910390fd5b80600360146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f3fb6fc5b974e21a29292aeaa29ed6d0f23c5ae0a0e8e6599d973f88c53ea301b816040516118f29190612ada565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290612856565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290612816565b60405180910390fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6f0e7304358d9f5acc110757d682927f66d013808aa8bf39a4a4db0d4dbe39be81604051611a6b9190612600565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90612856565b60405180910390fd5b60008111611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90612876565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401611bc6929190612697565b602060405180830381600087803b158015611be057600080fd5b505af1158015611bf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1891906120db565b905080611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c51906129f6565b60405180910390fd5b7fb0b2cc82911569fe0ec17ee2f98beac059df3117ce2f896acf504cca6caa887382604051611c899190612a96565b60405180910390a15050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a90612856565b60405180910390fd5b60008111611d66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5d90612876565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611dad906125eb565b60006040518083038185875af1925050503d8060008114611dea576040519150601f19603f3d011682016040523d82523d6000602084013e611def565b606091505b5050905080611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90612916565b60405180910390fd5b7f641bb248dba1f49578a3373556c6c43fe770837654a334c4e02a62cab00f8a4b82604051611e629190612a96565b60405180910390a15050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990612856565b60405180910390fd5b806004819055507f21d77d94f4c9e163d289e2e4b3fa5fd25ce1f709ad72c23b6a675e94c8282b5281604051611f589190612757565b60405180910390a150565b600360149054906101000a900467ffffffffffffffff1681565b6000611f90611f8b84612b1a565b612af5565b90508083825260208201905082856020860282011115611fb357611fb2612e56565b5b60005b85811015611fe35781611fc9888261206f565b845260208401935060208301925050600181019050611fb6565b5050509392505050565b600081359050611ffc816132b7565b92915050565b600082601f83011261201757612016612e51565b5b8135612027848260208601611f7d565b91505092915050565b60008135905061203f816132ce565b92915050565b600081519050612054816132ce565b92915050565b600081359050612069816132e5565b92915050565b60008135905061207e816132fc565b92915050565b600081519050612093816132fc565b92915050565b6000813590506120a881613313565b92915050565b6000602082840312156120c4576120c3612e60565b5b60006120d284828501611fed565b91505092915050565b6000602082840312156120f1576120f0612e60565b5b60006120ff84828501612045565b91505092915050565b6000806040838503121561211f5761211e612e60565b5b600061212d85828601612030565b925050602061213e8582860161206f565b9150509250929050565b60006020828403121561215e5761215d612e60565b5b600061216c8482850161205a565b91505092915050565b60006020828403121561218b5761218a612e60565b5b60006121998482850161206f565b91505092915050565b6000602082840312156121b8576121b7612e60565b5b60006121c684828501612084565b91505092915050565b600080604083850312156121e6576121e5612e60565b5b60006121f48582860161206f565b925050602083013567ffffffffffffffff81111561221557612214612e5b565b5b61222185828601612002565b9150509250929050565b60006020828403121561224157612240612e60565b5b600061224f84828501612099565b91505092915050565b61226181612c12565b82525050565b61227081612c24565b82525050565b61227f81612c30565b82525050565b61228e81612ca3565b82525050565b61229d81612cc7565b82525050565b6122ac81612ceb565b82525050565b6122bb81612cfd565b82525050565b6122ca81612d0f565b82525050565b6122d981612d21565b82525050565b60006122ec601383612b51565b91506122f782612e76565b602082019050919050565b600061230f601583612b51565b915061231a82612e9f565b602082019050919050565b6000612332600a83612b51565b915061233d82612ec8565b602082019050919050565b6000612355600e83612b51565b915061236082612ef1565b602082019050919050565b6000612378601483612b51565b915061238382612f1a565b602082019050919050565b600061239b602783612b51565b91506123a682612f43565b604082019050919050565b60006123be602683612b51565b91506123c982612f92565b604082019050919050565b60006123e1602c83612b51565b91506123ec82612fe1565b604082019050919050565b6000612404601683612b51565b915061240f82613030565b602082019050919050565b6000612427602283612b51565b915061243282613059565b604082019050919050565b600061244a601283612b51565b9150612455826130a8565b602082019050919050565b600061246d601d83612b51565b9150612478826130d1565b602082019050919050565b6000612490601583612b51565b915061249b826130fa565b602082019050919050565b60006124b3601e83612b51565b91506124be82613123565b602082019050919050565b60006124d6602c83612b51565b91506124e18261314c565b604082019050919050565b60006124f9601683612b51565b91506125048261319b565b602082019050919050565b600061251c600083612b46565b9150612527826131c4565b600082019050919050565b600061253f600d83612b51565b915061254a826131c7565b602082019050919050565b6000612562602483612b51565b915061256d826131f0565b604082019050919050565b6000612585602183612b51565b91506125908261323f565b604082019050919050565b60006125a8601283612b51565b91506125b38261328e565b602082019050919050565b6125c781612c68565b82525050565b6125d681612c82565b82525050565b6125e581612c96565b82525050565b60006125f68261250f565b9150819050919050565b60006020820190506126156000830184612258565b92915050565b60006060820190506126306000830186612258565b61263d6020830185612258565b61264a60408301846125be565b949350505050565b60006080820190506126676000830187612258565b6126746020830186612267565b6126816040830185612267565b61268e60608301846125be565b95945050505050565b60006040820190506126ac6000830185612258565b6126b960208301846125be565b9392505050565b60006020820190506126d56000830184612267565b92915050565b60006080820190506126f06000830187612267565b6126fd6020830186612267565b61270a60408301856125be565b61271760608301846125be565b95945050505050565b60006060820190506127356000830186612267565b61274260208301856125dc565b61274f6040830184612267565b949350505050565b600060208201905061276c6000830184612276565b92915050565b600060a0820190506127876000830188612276565b61279460208301876125cd565b6127a160408301866122d0565b6127ae60608301856122c1565b6127bb60808301846122b2565b9695505050505050565b60006020820190506127da6000830184612285565b92915050565b60006020820190506127f56000830184612294565b92915050565b600060208201905061281060008301846122a3565b92915050565b6000602082019050818103600083015261282f816122df565b9050919050565b6000602082019050818103600083015261284f81612302565b9050919050565b6000602082019050818103600083015261286f81612325565b9050919050565b6000602082019050818103600083015261288f81612348565b9050919050565b600060208201905081810360008301526128af8161236b565b9050919050565b600060208201905081810360008301526128cf8161238e565b9050919050565b600060208201905081810360008301526128ef816123b1565b9050919050565b6000602082019050818103600083015261290f816123d4565b9050919050565b6000602082019050818103600083015261292f816123f7565b9050919050565b6000602082019050818103600083015261294f8161241a565b9050919050565b6000602082019050818103600083015261296f8161243d565b9050919050565b6000602082019050818103600083015261298f81612460565b9050919050565b600060208201905081810360008301526129af81612483565b9050919050565b600060208201905081810360008301526129cf816124a6565b9050919050565b600060208201905081810360008301526129ef816124c9565b9050919050565b60006020820190508181036000830152612a0f816124ec565b9050919050565b60006020820190508181036000830152612a2f81612532565b9050919050565b60006020820190508181036000830152612a4f81612555565b9050919050565b60006020820190508181036000830152612a6f81612578565b9050919050565b60006020820190508181036000830152612a8f8161259b565b9050919050565b6000602082019050612aab60008301846125be565b92915050565b6000604082019050612ac660008301856125be565b612ad360208301846125be565b9392505050565b6000602082019050612aef60008301846125cd565b92915050565b6000612aff612b10565b9050612b0b8282612d33565b919050565b6000604051905090565b600067ffffffffffffffff821115612b3557612b34612e22565b5b602082029050602081019050919050565b600081905092915050565b600082825260208201905092915050565b6000612b6d82612c68565b9150612b7883612c68565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612bad57612bac612d95565b5b828201905092915050565b6000612bc382612c68565b9150612bce83612c68565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c0757612c06612d95565b5b828202905092915050565b6000612c1d82612c48565b9050919050565b60008115159050919050565b6000819050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b6000612cae82612cb5565b9050919050565b6000612cc082612c48565b9050919050565b6000612cd282612cd9565b9050919050565b6000612ce482612c48565b9050919050565b6000612cf682612c68565b9050919050565b6000612d0882612c72565b9050919050565b6000612d1a82612c72565b9050919050565b6000612d2c82612c3a565b9050919050565b612d3c82612e65565b810181811067ffffffffffffffff82111715612d5b57612d5a612e22565b5b80604052505050565b6000612d6f82612c68565b9150612d7a83612c68565b925082612d8a57612d89612dc4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e76616c696420565246206164647265737300000000000000000000000000600082015250565b7f466978656420626574206d757374206265203e20300000000000000000000000600082015250565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b7f4e6f2066756e647320746f207769746864726177000000000000000000000000600082015250565b7f596f75206d7573742073656e642065786163746c79202766697865644265742760008201527f20696e2046544e00000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f207472616e73666572204c425220746f2074686520636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682046544e20696e20636f6e747261637420746f20706160008201527f7920276669786564426574270000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2077697468647261772046544e00000000000000000000600082015250565b7f49662062657474696e6720696e204c42522c20646f206e6f742073656e64204660008201527f544e000000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e642046544e0000000000000000000000000000600082015250565b7f4f6e6c792056524620636f6e74726163742063616e2066756c66696c6c000000600082015250565b7f4661696c656420746f206465706f736974204c42520000000000000000000000600082015250565b7f596f7520616c7265616479206861766520612070656e64696e67206265740000600082015250565b7f4e6f7420656e6f7567682046544e20696e20636f6e747261637420746f20706160008201527f792061203278207072697a650000000000000000000000000000000000000000602082015250565b7f4661696c656420746f207769746864726177204c425200000000000000000000600082015250565b50565b7f426574206e6f7420666f756e6400000000000000000000000000000000000000600082015250565b7f4e6f7420656e6f756768204c425220666f7220636f6e736f6c6174696f6e207060008201527f72697a6500000000000000000000000000000000000000000000000000000000602082015250565b7f4c425220616d6f756e74206d7573742062652067726561746572207468616e2060008201527f3000000000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204c42520000000000000000000000000000600082015250565b6132c081612c12565b81146132cb57600080fd5b50565b6132d781612c24565b81146132e257600080fd5b50565b6132ee81612c30565b81146132f957600080fd5b50565b61330581612c68565b811461331057600080fd5b50565b61331c81612c82565b811461332757600080fd5b5056fea26469706673582212206cf4da819d69c4aa74769c7d368e14174832054dceab3a5c1abc962edff096fe64736f6c63430008060033
<script src="{@file}"> </script>