Contract 0x04c451e7f6e391ee0d004139ffe125bd75535de6 1

 

Contract Overview

Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa4f4bdf15ff8e1660ba293719eb8362a04e79e5d32bc27aad23970516eb0b63bReceive Idea Tok...517597922023-01-09 5:23:5221 days 19 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000929
0x4d115283c0f3d1a79292dc407c66737e6a7d6621684bbc7a9d022c3e26fc79e9Receive Idea Tok...354355392022-11-05 10:43:3986 days 14 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000881
0xaf12a73271b81398e16d8f3a40cea513c4dafce0609f13e2a8c61df3bc60c1d0Receive Idea Tok...343313552022-11-01 3:28:2490 days 21 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000929
0x725d57abcee4a6c66e7bba06260addf778a7648b82425e0f8f7bdeb4929846b1Receive Idea Tok...299312042022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000881
0x49f1f8ba82af818abedad3ec87b0964e42f76b3072d02c509a48ddda54603cefReceive Idea Tok...299312032022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000928
0x4e3f00c198e40fd6c42741a7622b3ab2786790c49e8df52f7cd205c4035d29d2Receive Idea Tok...299312012022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.0000088
0x133c5ee213cf0b7fadb883523c535d0302dbf1e0b48ab9651e83fb050f98d448Receive Idea Tok...299311992022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.0000088
0x9eab27aeca2bc9d92ed57aa0d29a103d7f54ce88372dabd563f534c5ab819255Receive Idea Tok...299311982022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.0000088
0x2df681e759258fe0906d6418aaee106b2c61d2d7a03db0ad6463bc26fdb59ac4Receive Idea Tok...299311972022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000928
0x7003a7e0cb4febb4fb655790fa51215bec8a9a2b8567fff6f470d7256bc648dfReceive Idea Tok...299311962022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.0000088
0x794086fc68fa067d96c6ee2629386d51c30ec0ca34ad5451c47b58f3d90e83f5Receive Idea Tok...299311952022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000928
0x2d09b286d9604efa6348b0bfe329f348fe3eaee6b63ab2248b0ee3610ae22a68Receive Idea Tok...299311942022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000928
0x94a7e75ba7243f8ab6ce6c670ba61c4482978997fbbea56bf664a286e459cf7bReceive Idea Tok...299311932022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000881
0xbeffd2a51df37ff620fe41a131dbfa84bed22f64d1d1ab89f729667797ae3875Receive Idea Tok...299311922022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000881
0x3d7b7843a6f7ae7547c0d028428348614b5186fdf887a86233c2e8bbfc926cf5Receive Idea Tok...299311912022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000881
0x426f26e253071f87dc7f9f7ad1099f69451b0e953de35ea4e016e398c9ab2caeReceive Idea Tok...299311892022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000881
0x67ef9e8b85c7003c9c0ea5e57bd923525e69e5453eb509249fc8953b931138b5Receive Idea Tok...299311882022-10-13 18:31:03109 days 6 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000929
0x94d4379d7e00e58689882773cc7ec7c7817bdb73ca9d235f818a0d884ee96f33Receive Idea Tok...284954262022-10-05 11:03:03117 days 14 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000928
0xf4e672dbc0c12ec23b9651bec42b4757f40d90a95268c3dd1dc7314e29d8be75Receive Idea Tok...271754872022-09-28 9:27:04124 days 15 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000881
0x348acde15cb3797edc0860ee011d1bbca07f95122298b9ba7b1119b4195ba8d2Receive Idea Tok...224875172022-09-02 12:44:46150 days 12 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0.00000881
0x8503924965d8e0adde8aed01fafb16a3a6b47f5b7e82a39eae095798c3d54571Receive Idea Tok...212650962022-08-25 15:48:17158 days 9 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0 ETH
0xdcba25f17f59fd4f6e0135dffafc68ad7f83f2393fafec3afd89f75ad0a5cf30Receive Idea Tok...180432462022-07-19 19:25:43195 days 5 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0 ETH
0x866fd2a56341271fab2b284c6304c75561000751bdfc724f11603a1b4e9f854dReceive Idea Tok...180431112022-07-19 19:23:37195 days 5 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0 ETH
0x6f3561fb76057bf8967ca9abb171ca14ad2d42dbf9822a46663f9195ba3bd691Receive Idea Tok...180431112022-07-19 19:23:37195 days 5 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0 ETH
0x1fe6b125fa2ea4abf233e101a8c39a044722de27c5da05eb039827e885bc4cf8Receive Idea Tok...180431112022-07-19 19:23:37195 days 5 hrs ago0xcf8f6a7cd3bebc1776e64e988bd1518aa3ad3ab5 IN  0x04c451e7f6e391ee0d004139ffe125bd75535de60 ETH0 ETH
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xa4f4bdf15ff8e1660ba293719eb8362a04e79e5d32bc27aad23970516eb0b63b517597922023-01-09 5:23:5221 days 19 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xc3988f64324b797b314e21b8f8f52c1cb0f8fd1e0 ETH
0xa4f4bdf15ff8e1660ba293719eb8362a04e79e5d32bc27aad23970516eb0b63b517597922023-01-09 5:23:5221 days 19 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xe490a4517f1e8a1551ecb03af5eb116c6bbd450b0 ETH
0xa4f4bdf15ff8e1660ba293719eb8362a04e79e5d32bc27aad23970516eb0b63b517597922023-01-09 5:23:5221 days 19 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 Arbitrum: ArbSys0 ETH
0x4d115283c0f3d1a79292dc407c66737e6a7d6621684bbc7a9d022c3e26fc79e9354355392022-11-05 10:43:3986 days 14 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xece5d49f91d1957cce599b87d4b43e79daa79ed00 ETH
0x4d115283c0f3d1a79292dc407c66737e6a7d6621684bbc7a9d022c3e26fc79e9354355392022-11-05 10:43:3986 days 14 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xe490a4517f1e8a1551ecb03af5eb116c6bbd450b0 ETH
0x4d115283c0f3d1a79292dc407c66737e6a7d6621684bbc7a9d022c3e26fc79e9354355392022-11-05 10:43:3986 days 14 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 Arbitrum: ArbSys0 ETH
0xaf12a73271b81398e16d8f3a40cea513c4dafce0609f13e2a8c61df3bc60c1d0343313552022-11-01 3:28:2490 days 21 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0x53762a68eec2768452b8daa14e481c10faf5f0ea0 ETH
0xaf12a73271b81398e16d8f3a40cea513c4dafce0609f13e2a8c61df3bc60c1d0343313552022-11-01 3:28:2490 days 21 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xe490a4517f1e8a1551ecb03af5eb116c6bbd450b0 ETH
0xaf12a73271b81398e16d8f3a40cea513c4dafce0609f13e2a8c61df3bc60c1d0343313552022-11-01 3:28:2490 days 21 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 Arbitrum: ArbSys0 ETH
0x725d57abcee4a6c66e7bba06260addf778a7648b82425e0f8f7bdeb4929846b1299312042022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de60xa0d7a9e3ead0cb3c0394ee6f0c0bb7fc69cc9d750 ETH
0x725d57abcee4a6c66e7bba06260addf778a7648b82425e0f8f7bdeb4929846b1299312042022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xe490a4517f1e8a1551ecb03af5eb116c6bbd450b0 ETH
0x725d57abcee4a6c66e7bba06260addf778a7648b82425e0f8f7bdeb4929846b1299312042022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 Arbitrum: ArbSys0 ETH
0x49f1f8ba82af818abedad3ec87b0964e42f76b3072d02c509a48ddda54603cef299312032022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xf75c8cc873fa1c278a2ad007a09a88e43adff2320 ETH
0x49f1f8ba82af818abedad3ec87b0964e42f76b3072d02c509a48ddda54603cef299312032022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xe490a4517f1e8a1551ecb03af5eb116c6bbd450b0 ETH
0x49f1f8ba82af818abedad3ec87b0964e42f76b3072d02c509a48ddda54603cef299312032022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 Arbitrum: ArbSys0 ETH
0x4e3f00c198e40fd6c42741a7622b3ab2786790c49e8df52f7cd205c4035d29d2299312012022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de60x06ae369d1065e4b0c36808aa55809714063902660 ETH
0x4e3f00c198e40fd6c42741a7622b3ab2786790c49e8df52f7cd205c4035d29d2299312012022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xe490a4517f1e8a1551ecb03af5eb116c6bbd450b0 ETH
0x4e3f00c198e40fd6c42741a7622b3ab2786790c49e8df52f7cd205c4035d29d2299312012022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 Arbitrum: ArbSys0 ETH
0x133c5ee213cf0b7fadb883523c535d0302dbf1e0b48ab9651e83fb050f98d448299311992022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de60x56467428e54b2f3fb16483b04ea236c9c2a74a560 ETH
0x133c5ee213cf0b7fadb883523c535d0302dbf1e0b48ab9651e83fb050f98d448299311992022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xe490a4517f1e8a1551ecb03af5eb116c6bbd450b0 ETH
0x133c5ee213cf0b7fadb883523c535d0302dbf1e0b48ab9651e83fb050f98d448299311992022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 Arbitrum: ArbSys0 ETH
0x9eab27aeca2bc9d92ed57aa0d29a103d7f54ce88372dabd563f534c5ab819255299311982022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de60xe4a6123d0682e719b0418862e1bdabd384d16c2d0 ETH
0x9eab27aeca2bc9d92ed57aa0d29a103d7f54ce88372dabd563f534c5ab819255299311982022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xe490a4517f1e8a1551ecb03af5eb116c6bbd450b0 ETH
0x9eab27aeca2bc9d92ed57aa0d29a103d7f54ce88372dabd563f534c5ab819255299311982022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 Arbitrum: ArbSys0 ETH
0x2df681e759258fe0906d6418aaee106b2c61d2d7a03db0ad6463bc26fdb59ac4299311972022-10-13 18:31:03109 days 6 hrs ago 0x04c451e7f6e391ee0d004139ffe125bd75535de6 0xf2a8a313ecd36625ebd23b6d954927f5ab9088fe0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BridgeAVM

Compiler Version
v0.6.9+commit.3e3065ac

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 10: BridgeAVM.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;

import "./IIdeaTokenExchangeStateTransferAVM.sol";
import "./IArbSys.sol";
import "./IIdeaTokenFactory.sol";
import "./IBridgeAVM.sol";
import "./Ownable.sol";
import "./Initializable.sol";

/**
 * @title BridgeAVM
 * @author Alexander Schlindwein
 *
 * This contract is the target of all L1 -> L2 calls originating from
 * the `IdeaTokenExchange` on L1. 
 * 
 */
contract BridgeAVM is Ownable, Initializable, IBridgeAVM {

    // Struct to temporarily store state from L1
    struct TMPTokenInfo {
        uint tokenID;
        string name;
        uint supply;
        uint dai;
        uint invested;
    }

    event TokensRedeemed(uint marketID, uint tokenID, uint amount, address to);

    // Address of the IdeaTokenExchange on L1
    address public _l1Exchange;
    // Address of the IdeaTokenExchange on L2
    IIdeaTokenExchangeStateTransferAVM public _l2Exchange;
    // Address of the IdeaTokenFactory on L2
    IIdeaTokenFactory public _l2Factory;

    // Stores if the static vars have been set already
    bool public _exchangeStaticVarsSet;
    // Stores if platform vars have been set already
    mapping(uint => bool) public _exchangePlatformVarsSet;
    // Stores token vars per market
    mapping(uint => TMPTokenInfo[]) public _tmpTokenInfos;
    // Stores the array lengths of the above mapping
    mapping(uint => uint) public _numTokensInMarket;

    modifier onlyL1Exchange {
        require(IArbSys(100).isTopLevelCall() && msg.sender == _l1Exchange, "only-l1-exchange");
        _;
    } 

    /**
     * Initializes the contract
     *
     * @param l1Exchange The address of the IdeaTokenExchange on L1
     * @param l2Exchange The address of the IdeaTokenExchange on L2
     * @param l2Factory The address of the IdeaTokenFactory on L2
     */
    function initialize(address l1Exchange, address l2Exchange, address l2Factory) external override initializer {
        require(l1Exchange != address(0) && l2Exchange != address(0) && l2Factory != address(0), "invalid-args");
        setOwnerInternal(msg.sender);
        _l1Exchange = address(uint160(l1Exchange) + uint160(0x1111000000000000000000000000000000001111));
        _l2Exchange = IIdeaTokenExchangeStateTransferAVM(l2Exchange);
        _l2Factory = IIdeaTokenFactory(l2Factory);
    }

    /**
     * Receives static vars from the IdeaTokenExchange on L1 and sets them on the L2 IdeaTokenExchange.
     *
     * @param tradingFeeInvested The tradingFeeInvested on L1
     */
    function receiveExchangeStaticVars(uint tradingFeeInvested) external override onlyL1Exchange {
        require(!_exchangeStaticVarsSet, "already-set");
        _exchangeStaticVarsSet = true;
        _l2Exchange.setStaticVars(tradingFeeInvested);
    }

    /**
     * Receives platform vars from the IdeaTokenExchange on L1 and sets them on the L2 IdeaTokenExchange.
     *
     * @param marketID The market's ID
     * @param dai The dai on L1
     * @param invested The invested on L1
     * @param platformFeeInvested The platformFeeInvested
     */
    function receiveExchangePlatformVars(uint marketID, uint dai, uint invested, uint platformFeeInvested) external override onlyL1Exchange {
        require(!_exchangePlatformVarsSet[marketID], "already-set");
        _exchangePlatformVarsSet[marketID] = true;
        _l2Exchange.setPlatformVars(marketID, dai, invested, platformFeeInvested);
    }

    /**
     * Receives token vars from the IdeaTokenExchange on L1.
     * The vars are not immediately set, but instead stored until setTokenVars is called.
     * Ensures that the token vars are received in the correct order.
     *
     * @param marketID The market's ID
     * @param tokenIDs The IDs of the tokens
     * @param names The names of the tokens
     * @param supplies The supplies of the tokens
     * @param dais The dais of the tokens
     * @param investeds The investeds of the tokens
     */
    function receiveExchangeTokenVars(uint marketID,
                                      uint[] calldata tokenIDs,
                                      string[] calldata names,
                                      uint[] calldata supplies,
                                      uint[] calldata dais,
                                      uint[] calldata investeds) external override onlyL1Exchange {
        {
        uint length = tokenIDs.length;
        require(length > 0, "length-0");
        require(length == names.length && length == dais.length && length == investeds.length && length == supplies.length, "length-mismatch");
        }

        TMPTokenInfo[] storage tmpTokenInfos = _tmpTokenInfos[marketID];
        uint prevID = tmpTokenInfos.length;

        for(uint i = 0; i < tokenIDs.length; i++) {
            require(tokenIDs[i] == prevID + 1, "id-gap");
            pushTMPTokenInfoInternal(tmpTokenInfos, tokenIDs[i], names[i], supplies[i], dais[i], investeds[i]);
            prevID = tokenIDs[i];
        }

        // `tokenID`s being an array makes this safe from overflowing
        _numTokensInMarket[marketID] += tokenIDs.length;
    }

    /// Using seperate function due to stack too deep
    function pushTMPTokenInfoInternal(TMPTokenInfo[] storage tmpTokenInfos, uint tokenID, string memory name, uint supply, uint dai, uint invested) internal {
        tmpTokenInfos.push(TMPTokenInfo({
            tokenID: tokenID,
            name: name,
            supply: supply,
            dai: dai,
            invested: invested
        }));
    }

    /**
     * Sets previously received token vars on L2.
     * May only be called by the owner.
     * Ensures that the token vars are received in the correct order.
     * 
     * @param marketID The market's ID
     * @param tokenIDs The IDs of the tokens
     */
    function setTokenVars(uint marketID, uint[] calldata tokenIDs) external override onlyOwner {
        uint length = tokenIDs.length;
        require(length > 0, "zero-length");
        require(tokenIDs[0] > 0, "tokenid-0");

        MarketDetails memory marketDetails = _l2Factory.getMarketDetailsByID(marketID);
        require(marketDetails.exists, "invalid-market");
        uint numTokens = marketDetails.numTokens;

        for(uint i = 0; i < length; i++) {
            uint tokenID = tokenIDs[i];
            require(numTokens + i + 1 == tokenID, "gap");

            TMPTokenInfo memory tmpTokenInfo = _tmpTokenInfos[marketID][tokenID - 1];
            _l2Factory.addToken(tmpTokenInfo.name, marketID, address(this));
            _l2Exchange.setTokenVarsAndMint(marketID, tmpTokenInfo.tokenID, tmpTokenInfo.supply, tmpTokenInfo.dai, tmpTokenInfo.invested);
        }
    }

    /**
     * Transfers a user's IdeaTokens from L1 to L2.
     *
     * @param marketID The market ID of the token
     * @param tokenID The token ID of the token
     * @param amount The amount to transfer
     * @param to The recipient
     */
    function receiveIdeaTokenTransfer(uint marketID, uint tokenID, uint amount, address to) external override onlyL1Exchange {
        TokenInfo memory tokenInfo = _l2Factory.getTokenInfo(marketID, tokenID);
        require(tokenInfo.exists, "not-exist");
        require(tokenInfo.ideaToken.transfer(to, amount), "transfer");
        
        emit TokensRedeemed(marketID, tokenID, amount, to);
    }
}

File 2 of 10: IArbSys.sol
// SPDX-License-Identifier: MIT
// https://github.com/OffchainLabs/arb-os/blob/develop/contracts/arbos/builtin/ArbSys.sol

pragma solidity 0.6.9;

/**
 * @title IArbSys
 * @author Alexander Schlindwein
 */
interface IArbSys {
    function isTopLevelCall() external view returns (bool);
}

File 3 of 10: IBridgeAVM.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;

/**
 * @title IBridgeAVM
 * @author Alexander Schlindwein
 */
interface IBridgeAVM {
    function initialize(address l1Exchange, address l2Exchange, address l2Factory) external;
    function receiveExchangeStaticVars(uint tradingFeeInvested) external;
    function receiveExchangePlatformVars(uint marketID, uint dai, uint invested, uint platformFeeInvested) external;
    function receiveExchangeTokenVars(uint marketID, uint[] calldata tokenIDs, string[] calldata names, uint[] calldata supplies, uint[] calldata dais, uint[] calldata investeds) external;
    function setTokenVars(uint marketID, uint[] calldata tokenID) external;
    function receiveIdeaTokenTransfer(uint marketID, uint tokenID, uint amount, address to) external;
}

File 4 of 10: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 5 of 10: IIdeaToken.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.9;

import "./IERC20.sol";

/**
 * @title IIdeaToken
 * @author Alexander Schlindwein
 */
interface IIdeaToken is IERC20 {
    function initialize(string calldata __name, address owner) external;
    function mint(address account, uint256 amount) external;
    function burn(address account, uint256 amount) external;
}

File 6 of 10: IIdeaTokenExchangeStateTransferAVM.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.9;

/**
 * @title IIdeaTokenExchangeStateTransferAVM
 * @author Alexander Schlindwein
 */
interface IIdeaTokenExchangeStateTransferAVM {
    function setStaticVars(uint tradingFeeInvested) external;
    function setPlatformVars(uint marketID, uint dai, uint invested, uint platformFeeInvested) external;
    function setTokenVarsAndMint(uint marketID, uint tokenID, uint supply, uint dai, uint invested) external;
}

File 7 of 10: IIdeaTokenFactory.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;

import "./IERC20.sol";
import "./IIdeaToken.sol";
import "./IIdeaTokenNameVerifier.sol";

/**
 * @title IIdeaTokenFactory
 * @author Alexander Schlindwein
 */

struct IDPair {
    bool exists;
    uint marketID;
    uint tokenID;
}

struct TokenInfo {
    bool exists;
    uint id;
    string name;
    IIdeaToken ideaToken;
}

struct MarketDetails {
    bool exists;
    uint id;
    string name;

    IIdeaTokenNameVerifier nameVerifier;
    uint numTokens;

    uint baseCost;
    uint priceRise;
    uint hatchTokens;
    uint tradingFeeRate;
    uint platformFeeRate;

    bool allInterestToPlatform;
}

interface IIdeaTokenFactory {
    function addMarket(string calldata marketName, address nameVerifier,
                       uint baseCost, uint priceRise, uint hatchTokens,
                       uint tradingFeeRate, uint platformFeeRate, bool allInterestToPlatform) external;

    function addToken(string calldata tokenName, uint marketID, address lister) external;

    function isValidTokenName(string calldata tokenName, uint marketID) external view returns (bool);
    function getMarketIDByName(string calldata marketName) external view returns (uint);
    function getMarketDetailsByID(uint marketID) external view returns (MarketDetails memory);
    function getMarketDetailsByName(string calldata marketName) external view returns (MarketDetails memory);
    function getMarketDetailsByTokenAddress(address ideaToken) external view returns (MarketDetails memory);
    function getNumMarkets() external view returns (uint);
    function getTokenIDByName(string calldata tokenName, uint marketID) external view returns (uint);
    function getTokenInfo(uint marketID, uint tokenID) external view returns (TokenInfo memory);
    function getTokenIDPair(address token) external view returns (IDPair memory);
    function setTradingFee(uint marketID, uint tradingFeeRate) external;
    function setPlatformFee(uint marketID, uint platformFeeRate) external;
    function setNameVerifier(uint marketID, address nameVerifier) external;
}

File 8 of 10: IIdeaTokenNameVerifier.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.9;

/**
 * @title IIdeaTokenNameVerifier
 * @author Alexander Schlindwein
 *
 * Interface for token name verifiers
 */
interface IIdeaTokenNameVerifier {
    function verifyTokenName(string calldata name) external pure returns (bool);
}

File 9 of 10: Initializable.sol
// SPDX-License-Identifier: MIT
// https://github.com/OpenZeppelin/openzeppelin-upgrades/blob/master/packages/core/contracts/Initializable.sol

pragma solidity 0.6.9;


/**
 * @title Initializable
 *
 * @dev Helper contract to support initializer functions. To use it, replace
 * the constructor with a function that has the `initializer` modifier.
 * WARNING: Unlike constructors, initializer functions must be manually
 * invoked. This applies both to deploying an Initializable contract, as well
 * as extending an Initializable contract via inheritance.
 * WARNING: When used with inheritance, manual care must be taken to not invoke
 * a parent initializer twice, or ensure that all initializers are idempotent,
 * because this is not dealt with automatically as with constructors.
 */
contract Initializable {

  /**
   * @dev Indicates that the contract has been initialized.
   */
  bool private initialized;

  /**
   * @dev Indicates that the contract is in the process of being initialized.
   */
  bool private initializing;

  /**
   * @dev Modifier to use in the initializer function of a contract.
   */
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "already-initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  /// @dev Returns true if and only if the function is running in the constructor
  function isConstructor() private view returns (bool) {
    // extcodesize checks the size of the code stored in an address, and
    // address returns the current address. Since the code is still not
    // deployed when running a constructor, any checks on its code size will
    // yield zero, making it an effective way to detect if a contract is
    // under construction or not.
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  // Reserved storage space to allow for layout changes in the future.
  uint256[50] private ______gap;
}

File 10 of 10: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.9;

/**
 * @title Ownable
 * @author Alexander Schlindwein
 *
 * @dev Implements only-owner functionality
 */
contract Ownable {

    address _owner;

    event OwnershipChanged(address oldOwner, address newOwner);

    modifier onlyOwner {
        require(_owner == msg.sender, "only-owner");
        _;
    }

    function setOwner(address newOwner) external onlyOwner {
        setOwnerInternal(newOwner);
    }

    function setOwnerInternal(address newOwner) internal {
        require(newOwner != address(0), "zero-addr");

        address oldOwner = _owner;
        _owner = newOwner;

        emit OwnershipChanged(oldOwner, newOwner);
    }

    function getOwner() external view returns (address) {
        return _owner;
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"TokensRedeemed","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_exchangePlatformVarsSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_exchangeStaticVarsSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_l1Exchange","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_l2Exchange","outputs":[{"internalType":"contract IIdeaTokenExchangeStateTransferAVM","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_l2Factory","outputs":[{"internalType":"contract IIdeaTokenFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_numTokensInMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_tmpTokenInfos","outputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"dai","type":"uint256"},{"internalType":"uint256","name":"invested","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"l1Exchange","type":"address"},{"internalType":"address","name":"l2Exchange","type":"address"},{"internalType":"address","name":"l2Factory","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketID","type":"uint256"},{"internalType":"uint256","name":"dai","type":"uint256"},{"internalType":"uint256","name":"invested","type":"uint256"},{"internalType":"uint256","name":"platformFeeInvested","type":"uint256"}],"name":"receiveExchangePlatformVars","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tradingFeeInvested","type":"uint256"}],"name":"receiveExchangeStaticVars","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketID","type":"uint256"},{"internalType":"uint256[]","name":"tokenIDs","type":"uint256[]"},{"internalType":"string[]","name":"names","type":"string[]"},{"internalType":"uint256[]","name":"supplies","type":"uint256[]"},{"internalType":"uint256[]","name":"dais","type":"uint256[]"},{"internalType":"uint256[]","name":"investeds","type":"uint256[]"}],"name":"receiveExchangeTokenVars","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketID","type":"uint256"},{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"receiveIdeaTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketID","type":"uint256"},{"internalType":"uint256[]","name":"tokenIDs","type":"uint256[]"}],"name":"setTokenVars","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50612d11806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063861b153c11610097578063b4c93eba11610066578063b4c93eba1461024e578063c0c53b8b1461026c578063c474601914610288578063e02223e2146102b8576100f5565b8063861b153c146101c2578063893d20e8146101de578063895ecf12146101fc5780639f3f600e1461021a576100f5565b80635e22df26116100d35780635e22df261461014e578063657ad7d51461016c57806366b8721b1461018857806385aab3f1146101a4576100f5565b806313af4035146100fa5780633e1f79d2146101165780634f394fab14610132575b600080fd5b610114600480360381019061010f9190611e4a565b6102e8565b005b610130600480360381019061012b9190611f6d565b610383565b005b61014c60048036038101906101479190611f96565b610595565b005b610156610a98565b604051610163919061264d565b60405180910390f35b61018660048036038101906101819190612143565b610abe565b005b6101a2600480360381019061019d9190611fee565b610de9565b005b6101ac61114f565b6040516101b991906126d5565b60405180910390f35b6101dc60048036038101906101d791906121a6565b611175565b005b6101e66113b2565b6040516101f3919061264d565b60405180910390f35b6102046113db565b60405161021191906126ba565b60405180910390f35b610234600480360381019061022f9190612107565b6113ee565b604051610245959493929190612944565b60405180910390f35b6102566114d6565b60405161026391906126f0565b60405180910390f35b61028660048036038101906102819190611e73565b6114fc565b005b6102a2600480360381019061029d9190611f6d565b6117ae565b6040516102af91906126ba565b60405180910390f35b6102d260048036038101906102cd9190611f6d565b6117ce565b6040516102df9190612929565b60405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036e90612789565b60405180910390fd5b610380816117e6565b50565b606473ffffffffffffffffffffffffffffffffffffffff166308bd624c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103ca57600080fd5b505afa1580156103de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104029190611ec2565b801561045b5750603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61049a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610491906127c9565b60405180910390fd5b603560149054906101000a900460ff16156104ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e190612829565b60405180910390fd5b6001603560146101000a81548160ff021916908315150217905550603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663433980eb826040518263ffffffff1660e01b81526004016105609190612929565b600060405180830381600087803b15801561057a57600080fd5b505af115801561058e573d6000803e3d6000fd5b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061b90612789565b60405180910390fd5b60008282905090506000811161066f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066690612769565b60405180910390fd5b60008383600081811061067e57fe5b90506020020135116106c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bc906128c9565b60405180910390fd5b6106cd6119b0565b603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7d5fe55866040518263ffffffff1660e01b81526004016107289190612929565b60006040518083038186803b15801561074057600080fd5b505afa158015610754573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061077d9190611eeb565b905080600001516107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba90612889565b60405180910390fd5b60008160800151905060008090505b83811015610a8f5760008686838181106107e857fe5b9050602002013590508060018385010114610838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082f90612749565b60405180910390fd5b610840611a24565b603760008a8152602001908152602001600020600183038154811061086157fe5b90600052602060002090600502016040518060a001604052908160008201548152602001600182018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561091d5780601f106108f25761010080835404028352916020019161091d565b820191906000526020600020905b81548152906001019060200180831161090057829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820154815250509050603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631145760482602001518b306040518463ffffffff1660e01b81526004016109a99392919061270b565b600060405180830381600087803b1580156109c357600080fd5b505af11580156109d7573d6000803e3d6000fd5b50505050603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636f30b8398a83600001518460400151856060015186608001516040518663ffffffff1660e01b8152600401610a4e959493929190612a51565b600060405180830381600087803b158015610a6857600080fd5b505af1158015610a7c573d6000803e3d6000fd5b50505050505080806001019150506107d2565b50505050505050565b603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606473ffffffffffffffffffffffffffffffffffffffff166308bd624c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610b0557600080fd5b505afa158015610b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3d9190611ec2565b8015610b965750603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906127c9565b60405180910390fd5b610bdd611a53565b603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630a81adc186866040518363ffffffff1660e01b8152600401610c3a92919061299e565b60006040518083038186803b158015610c5257600080fd5b505afa158015610c66573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610c8f9190611f2c565b90508060000151610cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccc90612849565b60405180910390fd5b806060015173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83856040518363ffffffff1660e01b8152600401610d14929190612691565b602060405180830381600087803b158015610d2e57600080fd5b505af1158015610d42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d669190611ec2565b610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c906128a9565b60405180910390fd5b7fafb276115c0c75447eac1947078d8e8492cad4d143154598fc518aaee9e7f1c585858585604051610dda94939291906129c7565b60405180910390a15050505050565b606473ffffffffffffffffffffffffffffffffffffffff166308bd624c6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e3057600080fd5b505afa158015610e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e689190611ec2565b8015610ec15750603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef7906127c9565b60405180910390fd5b60008a8a9050905060008111610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290612909565b60405180910390fd5b8888905081148015610f5f57508484905081145b8015610f6d57508282905081145b8015610f7b57508686905081145b610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb1906128e9565b60405180910390fd5b506000603760008d8152602001908152602001600020905060008180549050905060008090505b8c8c905081101561111b57600182018d8d83818110610ffc57fe5b9050602002013514611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90612869565b60405180910390fd5b6110f9838e8e8481811061105357fe5b905060200201358d8d8581811061106657fe5b90506020028101906110789190612aa4565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508c8c868181106110c757fe5b905060200201358b8b878181106110da57fe5b905060200201358a8a888181106110ed57fe5b905060200201356118f9565b8c8c8281811061110557fe5b9050602002013591508080600101915050610fe1565b508b8b9050603860008f81526020019081526020016000206000828254019250508190555050505050505050505050505050565b603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606473ffffffffffffffffffffffffffffffffffffffff166308bd624c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111bc57600080fd5b505afa1580156111d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f49190611ec2565b801561124d5750603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61128c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611283906127c9565b60405180910390fd5b6036600085815260200190815260200160002060009054906101000a900460ff16156112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e490612829565b60405180910390fd5b60016036600086815260200190815260200160002060006101000a81548160ff021916908315150217905550603460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f225ffa858585856040518563ffffffff1660e01b815260040161137a9493929190612a0c565b600060405180830381600087803b15801561139457600080fd5b505af11580156113a8573d6000803e3d6000fd5b5050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b603560149054906101000a900460ff1681565b6037602052816000526040600020818154811061140757fe5b906000526020600020906005020160009150915050806000015490806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050908060020154908060030154908060040154905085565b603560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060159054906101000a900460ff168061151b575061151a611999565b5b806115335750600060149054906101000a900460ff16155b611572576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156990612809565b60405180910390fd5b60008060159054906101000a900460ff1615905080156115c3576001600060156101000a81548160ff0219169083151502179055506001600060146101000a81548160ff0219169083151502179055505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561162d5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156116665750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6116a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169c906127a9565b60405180910390fd5b6116ae336117e6565b7311110000000000000000000000000000000011118401603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082603460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081603560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156117a85760008060156101000a81548160ff0219169083151502179055505b50505050565b60366020528060005260406000206000915054906101000a900460ff1681565b60386020528060005260406000206000915090505481565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d906127e9565b60405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0384899bd253d83b23daa4d29aaa2efe0563d1132b43101e9ad667235aeb951b81836040516118ed929190612668565b60405180910390a15050565b856040518060a00160405280878152602001868152602001858152602001848152602001838152509080600181540180825580915050600190039060005260206000209060050201600090919091909150600082015181600001556020820151816001019080519060200190611970929190611a93565b506040820151816002015560608201518160030155608082015181600401555050505050505050565b6000803090506000813b9050600081149250505090565b6040518061016001604052806000151581526020016000815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b6040518060a0016040528060008152602001606081526020016000815260200160008152602001600081525090565b60405180608001604052806000151581526020016000815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611ad457805160ff1916838001178555611b02565b82800160010185558215611b02579182015b82811115611b01578251825591602001919060010190611ae6565b5b509050611b0f9190611b13565b5090565b611b3591905b80821115611b31576000816000905550600101611b19565b5090565b90565b600081359050611b4781612c68565b92915050565b60008083601f840112611b5f57600080fd5b8235905067ffffffffffffffff811115611b7857600080fd5b602083019150836020820283011115611b9057600080fd5b9250929050565b60008083601f840112611ba957600080fd5b8235905067ffffffffffffffff811115611bc257600080fd5b602083019150836020820283011115611bda57600080fd5b9250929050565b600081519050611bf081612c7f565b92915050565b600081519050611c0581612c96565b92915050565b600081519050611c1a81612cad565b92915050565b600082601f830112611c3157600080fd5b8151611c44611c3f82612b28565b612afb565b91508082526020830160208301858383011115611c6057600080fd5b611c6b838284612c24565b50505092915050565b60006101608284031215611c8757600080fd5b611c92610160612afb565b90506000611ca284828501611be1565b6000830152506020611cb684828501611e35565b602083015250604082015167ffffffffffffffff811115611cd657600080fd5b611ce284828501611c20565b6040830152506060611cf684828501611bf6565b6060830152506080611d0a84828501611e35565b60808301525060a0611d1e84828501611e35565b60a08301525060c0611d3284828501611e35565b60c08301525060e0611d4684828501611e35565b60e083015250610100611d5b84828501611e35565b61010083015250610120611d7184828501611e35565b61012083015250610140611d8784828501611be1565b6101408301525092915050565b600060808284031215611da657600080fd5b611db06080612afb565b90506000611dc084828501611be1565b6000830152506020611dd484828501611e35565b602083015250604082015167ffffffffffffffff811115611df457600080fd5b611e0084828501611c20565b6040830152506060611e1484828501611c0b565b60608301525092915050565b600081359050611e2f81612cc4565b92915050565b600081519050611e4481612cc4565b92915050565b600060208284031215611e5c57600080fd5b6000611e6a84828501611b38565b91505092915050565b600080600060608486031215611e8857600080fd5b6000611e9686828701611b38565b9350506020611ea786828701611b38565b9250506040611eb886828701611b38565b9150509250925092565b600060208284031215611ed457600080fd5b6000611ee284828501611be1565b91505092915050565b600060208284031215611efd57600080fd5b600082015167ffffffffffffffff811115611f1757600080fd5b611f2384828501611c74565b91505092915050565b600060208284031215611f3e57600080fd5b600082015167ffffffffffffffff811115611f5857600080fd5b611f6484828501611d94565b91505092915050565b600060208284031215611f7f57600080fd5b6000611f8d84828501611e20565b91505092915050565b600080600060408486031215611fab57600080fd5b6000611fb986828701611e20565b935050602084013567ffffffffffffffff811115611fd657600080fd5b611fe286828701611b97565b92509250509250925092565b600080600080600080600080600080600060c08c8e03121561200f57600080fd5b600061201d8e828f01611e20565b9b505060208c013567ffffffffffffffff81111561203a57600080fd5b6120468e828f01611b97565b9a509a505060408c013567ffffffffffffffff81111561206557600080fd5b6120718e828f01611b4d565b985098505060608c013567ffffffffffffffff81111561209057600080fd5b61209c8e828f01611b97565b965096505060808c013567ffffffffffffffff8111156120bb57600080fd5b6120c78e828f01611b97565b945094505060a08c013567ffffffffffffffff8111156120e657600080fd5b6120f28e828f01611b97565b92509250509295989b509295989b9093969950565b6000806040838503121561211a57600080fd5b600061212885828601611e20565b925050602061213985828601611e20565b9150509250929050565b6000806000806080858703121561215957600080fd5b600061216787828801611e20565b945050602061217887828801611e20565b935050604061218987828801611e20565b925050606061219a87828801611b38565b91505092959194509250565b600080600080608085870312156121bc57600080fd5b60006121ca87828801611e20565b94505060206121db87828801611e20565b93505060406121ec87828801611e20565b92505060606121fd87828801611e20565b91505092959194509250565b61221281612b70565b82525050565b61222181612b82565b82525050565b61223081612bdc565b82525050565b61223f81612c00565b82525050565b600061225082612b54565b61225a8185612b5f565b935061226a818560208601612c24565b61227381612c57565b840191505092915050565b600061228b600383612b5f565b91507f67617000000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006122cb600b83612b5f565b91507f7a65726f2d6c656e6774680000000000000000000000000000000000000000006000830152602082019050919050565b600061230b600a83612b5f565b91507f6f6e6c792d6f776e6572000000000000000000000000000000000000000000006000830152602082019050919050565b600061234b600c83612b5f565b91507f696e76616c69642d6172677300000000000000000000000000000000000000006000830152602082019050919050565b600061238b601083612b5f565b91507f6f6e6c792d6c312d65786368616e6765000000000000000000000000000000006000830152602082019050919050565b60006123cb600983612b5f565b91507f7a65726f2d6164647200000000000000000000000000000000000000000000006000830152602082019050919050565b600061240b601383612b5f565b91507f616c72656164792d696e697469616c697a6564000000000000000000000000006000830152602082019050919050565b600061244b600b83612b5f565b91507f616c72656164792d7365740000000000000000000000000000000000000000006000830152602082019050919050565b600061248b600983612b5f565b91507f6e6f742d657869737400000000000000000000000000000000000000000000006000830152602082019050919050565b60006124cb600683612b5f565b91507f69642d67617000000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061250b600e83612b5f565b91507f696e76616c69642d6d61726b65740000000000000000000000000000000000006000830152602082019050919050565b600061254b600883612b5f565b91507f7472616e736665720000000000000000000000000000000000000000000000006000830152602082019050919050565b600061258b600983612b5f565b91507f746f6b656e69642d3000000000000000000000000000000000000000000000006000830152602082019050919050565b60006125cb600f83612b5f565b91507f6c656e6774682d6d69736d6174636800000000000000000000000000000000006000830152602082019050919050565b600061260b600883612b5f565b91507f6c656e6774682d300000000000000000000000000000000000000000000000006000830152602082019050919050565b61264781612bd2565b82525050565b60006020820190506126626000830184612209565b92915050565b600060408201905061267d6000830185612209565b61268a6020830184612209565b9392505050565b60006040820190506126a66000830185612209565b6126b3602083018461263e565b9392505050565b60006020820190506126cf6000830184612218565b92915050565b60006020820190506126ea6000830184612227565b92915050565b60006020820190506127056000830184612236565b92915050565b600060608201905081810360008301526127258186612245565b9050612734602083018561263e565b6127416040830184612209565b949350505050565b600060208201905081810360008301526127628161227e565b9050919050565b60006020820190508181036000830152612782816122be565b9050919050565b600060208201905081810360008301526127a2816122fe565b9050919050565b600060208201905081810360008301526127c28161233e565b9050919050565b600060208201905081810360008301526127e28161237e565b9050919050565b60006020820190508181036000830152612802816123be565b9050919050565b60006020820190508181036000830152612822816123fe565b9050919050565b600060208201905081810360008301526128428161243e565b9050919050565b600060208201905081810360008301526128628161247e565b9050919050565b60006020820190508181036000830152612882816124be565b9050919050565b600060208201905081810360008301526128a2816124fe565b9050919050565b600060208201905081810360008301526128c28161253e565b9050919050565b600060208201905081810360008301526128e28161257e565b9050919050565b60006020820190508181036000830152612902816125be565b9050919050565b60006020820190508181036000830152612922816125fe565b9050919050565b600060208201905061293e600083018461263e565b92915050565b600060a082019050612959600083018861263e565b818103602083015261296b8187612245565b905061297a604083018661263e565b612987606083018561263e565b612994608083018461263e565b9695505050505050565b60006040820190506129b3600083018561263e565b6129c0602083018461263e565b9392505050565b60006080820190506129dc600083018761263e565b6129e9602083018661263e565b6129f6604083018561263e565b612a036060830184612209565b95945050505050565b6000608082019050612a21600083018761263e565b612a2e602083018661263e565b612a3b604083018561263e565b612a48606083018461263e565b95945050505050565b600060a082019050612a66600083018861263e565b612a73602083018761263e565b612a80604083018661263e565b612a8d606083018561263e565b612a9a608083018461263e565b9695505050505050565b60008083356001602003843603038112612abd57600080fd5b80840192508235915067ffffffffffffffff821115612adb57600080fd5b602083019250600182023603831315612af357600080fd5b509250929050565b6000604051905081810181811067ffffffffffffffff82111715612b1e57600080fd5b8060405250919050565b600067ffffffffffffffff821115612b3f57600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000612b7b82612bb2565b9050919050565b60008115159050919050565b6000612b9982612b70565b9050919050565b6000612bab82612b70565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000612be782612bee565b9050919050565b6000612bf982612bb2565b9050919050565b6000612c0b82612c12565b9050919050565b6000612c1d82612bb2565b9050919050565b60005b83811015612c42578082015181840152602081019050612c27565b83811115612c51576000848401525b50505050565b6000601f19601f8301169050919050565b612c7181612b70565b8114612c7c57600080fd5b50565b612c8881612b82565b8114612c9357600080fd5b50565b612c9f81612b8e565b8114612caa57600080fd5b50565b612cb681612ba0565b8114612cc157600080fd5b50565b612ccd81612bd2565b8114612cd857600080fd5b5056fea264697066735822122084c1992b9c9d915d6e995a5730032a3a7ffed679957da1cbee6bc2814035147264736f6c63430006090033

Deployed ByteCode Sourcemap

473:7071:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;388:100:9;;;;;;;;;;;;;;;;:::i;:::-;;2631:255:0;;;;;;;;;;;;;;;;:::i;:::-;;5978:896;;;;;;;;;;;;;;;;:::i;:::-;;865:26;;;:::i;:::-;;;;;;;;;;;;;;;;7138:403;;;;;;;;;;;;;;;;:::i;:::-;;4088:1185;;;;;;;;;;;;;;;;:::i;:::-;;945:53;;;:::i;:::-;;;;;;;;;;;;;;;;3202:350;;;;;;;;;;;;;;;;:::i;:::-;;740:84:9;;;:::i;:::-;;;;;;;;;;;;;;;;1151:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;1343:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;1051:35;;;:::i;:::-;;;;;;;;;;;;;;;;1928:501;;;;;;;;;;;;;;;;:::i;:::-;;1246:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1457:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;388:100:9;335:10;325:20;;:6;;;;;;;;;;;:20;;;317:43;;;;;;;;;;;;;;;;;;;;;;454:26:::1;471:8;454:16;:26::i;:::-;388:100:::0;:::o;2631:255:0:-;1564:3;1556:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;1603:11;;;;;;;;;;;1589:25;;:10;:25;;;1556:58;1548:87;;;;;;;;;;;;;;;;;;;;;;2744:22:::1;;;;;;;;;;;2743:23;2735:47;;;;;;;;;;;;;;;;;;;;;;2818:4;2793:22;;:29;;;;;;;;;;;;;;;;;;2833:11;;;;;;;;;;;:25;;;2859:18;2833:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;2631:255:::0;:::o;5978:896::-;335:10:9;325:20;;:6;;;;;;;;;;;:20;;;317:43;;;;;;;;;;;;;;;;;;;;;;6080:11:0::1;6094:8;;:15;;6080:29;;6137:1;6128:6;:10;6120:34;;;;;;;;;;;;;;;;;;;;;;6187:1;6173:8;;6182:1;6173:11;;;;;;;;;;;;;:15;6165:37;;;;;;;;;;;;;;;;;;;;;;6215:34;;:::i;:::-;6252:10;;;;;;;;;;;:31;;;6284:8;6252:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6215:78;;6312:13;:20;;;6304:47;;;;;;;;;;;;;;;;;;;;;;6362:14;6379:13;:23;;;6362:40;;6419:6;6428:1:::0;6419:10:::1;;6415:452;6435:6;6431:1;:10;6415:452;;;6463:12;6478:8;;6487:1;6478:11;;;;;;;;;;;;;6463:26;;6533:7;6528:1;6524;6512:9;:13;:17;:28;6504:44;;;;;;;;;;;;;;;;;;;;;;6565:32;;:::i;:::-;6600:14;:24;6615:8;6600:24;;;;;;;;;;;6635:1;6625:7;:11;6600:37;;;;;;;;;;;;;;;;;;6565:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;6652:10;;;;;;;;;;;:19;;;6672:12;:17;;;6691:8;6709:4;6652:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6730:11;;;;;;;;;;;:31;;;6762:8;6772:12;:20;;;6794:12;:19;;;6815:12;:16;;;6833:12;:21;;;6730:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6415:452;;6443:3;;;;;;;6415:452;;;;371:1:9;;;5978:896:0::0;;;:::o;865:26::-;;;;;;;;;;;;;:::o;7138:403::-;1564:3;1556:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;1603:11;;;;;;;;;;;1589:25;;:10;:25;;;1556:58;1548:87;;;;;;;;;;;;;;;;;;;;;;7270:26:::1;;:::i;:::-;7299:10;;;;;;;;;;;:23;;;7323:8;7333:7;7299:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7270:71;;7360:9;:16;;;7352:38;;;;;;;;;;;;;;;;;;;;;;7409:9;:19;;;:28;;;7438:2;7442:6;7409:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7401:61;;;;;;;;;;;;;;;;;;;;;;7488:45;7503:8;7513:7;7522:6;7530:2;7488:45;;;;;;;;;;;;;;;;;;1646:1;7138:403:::0;;;;:::o;4088:1185::-;1564:3;1556:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;1603:11;;;;;;;;;;;1589:25;;:10;:25;;;1556:58;1548:87;;;;;;;;;;;;;;;;;;;;;;4513:11:::1;4527:8;;:15;;4513:29;;4570:1;4561:6;:10;4553:31;;;;;;;;;;;;;;;;;;;;;;4613:5;;:12;;4603:6;:22;:47;;;;;4639:4;;:11;;4629:6;:21;4603:47;:77;;;;;4664:9;;:16;;4654:6;:26;4603:77;:106;;;;;4694:8;;:15;;4684:6;:25;4603:106;4595:134;;;;;;;;;;;;;;;;;;;;;;1646:1;4753:36;4792:14;:24;4807:8;4792:24;;;;;;;;;;;4753:63;;4827:11;4841:13;:20;;;;4827:34;;4878:6;4887:1:::0;4878:10:::1;;4874:261;4894:8;;:15;;4890:1;:19;4874:261;;;4963:1;4954:6;:10;4939:8;;4948:1;4939:11;;;;;;;;;;;;;:25;4931:44;;;;;;;;;;;;;;;;;;;;;;4990:98;5015:13;5030:8;;5039:1;5030:11;;;;;;;;;;;;;5043:5;;5049:1;5043:8;;;;;;;;;;;;;;;;;;;;4990:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5053:8;;5062:1;5053:11;;;;;;;;;;;;;5066:4;;5071:1;5066:7;;;;;;;;;;;;;5075:9;;5085:1;5075:12;;;;;;;;;;;;;4990:24;:98::i;:::-;5112:8;;5121:1;5112:11;;;;;;;;;;;;;5103:20;;4911:3;;;;;;;4874:261;;;;5250:8;;:15;;5218:18;:28;5237:8;5218:28;;;;;;;;;;;;:47;;;;;;;;;;;1646:1;;4088:1185:::0;;;;;;;;;;;:::o;945:53::-;;;;;;;;;;;;;:::o;3202:350::-;1564:3;1556:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:58;;;;;1603:11;;;;;;;;;;;1589:25;;:10;:25;;;1556:58;1548:87;;;;;;;;;;;;;;;;;;;;;;3358:24:::1;:34;3383:8;3358:34;;;;;;;;;;;;;;;;;;;;;3357:35;3349:59;;;;;;;;;;;;;;;;;;;;;;3456:4;3419:24;:34;3444:8;3419:34;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;3471:11;;;;;;;;;;;:27;;;3499:8;3509:3;3514:8;3524:19;3471:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3202:350:::0;;;;:::o;740:84:9:-;783:7;810:6;;;;;;;;;;;803:13;;740:84;:::o;1151:34:0:-;;;;;;;;;;;;;:::o;1343:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1051:35::-;;;;;;;;;;;;;:::o;1928:501::-;1192:12:8;;;;;;;;;;;:31;;;;1208:15;:13;:15::i;:::-;1192:31;:47;;;;1228:11;;;;;;;;;;;1227:12;1192:47;1184:79;;;;;;;;;;;;;;;;;;;;;;1272:19;1295:12;;;;;;;;;;;1294:13;1272:35;;1318:14;1314:83;;;1358:4;1343:12;;:19;;;;;;;;;;;;;;;;;;1385:4;1371:11;;:18;;;;;;;;;;;;;;;;;;1314:83;2078:1:0::1;2056:24;;:10;:24;;;;:52;;;;;2106:1;2084:24;;:10;:24;;;;2056:52;:79;;;;;2133:1;2112:23;;:9;:23;;;;2056:79;2048:104;;;;;;;;;;;;;;;;;;;;;;2163:28;2180:10;2163:16;:28::i;:::-;2254:42;2232:10;2224:73;2202:11;;:96;;;;;;;;;;;;;;;;;;2358:10;2309:11;;:60;;;;;;;;;;;;;;;;;;2411:9;2380:10;;:41;;;;;;;;;;;;;;;;;;1419:14:8::0;1415:57;;;1459:5;1444:12;;:20;;;;;;;;;;;;;;;;;;1415:57;1928:501:0;;;;:::o;1246:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;1457:47::-;;;;;;;;;;;;;;;;;:::o;496:236:9:-;588:1;568:22;;:8;:22;;;;560:44;;;;;;;;;;;;;;;;;;;;;;617:16;636:6;;;;;;;;;;;617:25;;662:8;653:6;;:17;;;;;;;;;;;;;;;;;;688:36;705:8;715;688:36;;;;;;;;;;;;;;;;496:236;;:::o;5336:358:0:-;5500:13;5519:166;;;;;;;;5556:7;5519:166;;;;5584:4;5519:166;;;;5611:6;5519:166;;;;5637:3;5519:166;;;;5665:8;5519:166;;;5500:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;5336:358;;;;;;:::o;1566:508:8:-;1613:4;1960:12;1983:4;1960:28;;1995:10;2041:4;2029:17;2023:23;;2067:1;2061:2;:7;2054:14;;;;1566:508;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;159:364;;;301:3;294:4;286:6;282:17;278:27;268:2;;319:1;316;309:12;268:2;352:6;339:20;329:30;;379:18;371:6;368:30;365:2;;;411:1;408;401:12;365:2;445:4;437:6;433:17;421:29;;496:3;488:4;480:6;476:17;466:8;462:32;459:41;456:2;;;513:1;510;503:12;456:2;261:262;;;;;;549:352;;;679:3;672:4;664:6;660:17;656:27;646:2;;697:1;694;687:12;646:2;730:6;717:20;707:30;;757:18;749:6;746:30;743:2;;;789:1;786;779:12;743:2;823:4;815:6;811:17;799:29;;874:3;866:4;858:6;854:17;844:8;840:32;837:41;834:2;;;891:1;888;881:12;834:2;639:262;;;;;;909:128;;990:6;984:13;975:22;;1002:30;1026:5;1002:30;;;969:68;;;;;1044:194;;1158:6;1152:13;1143:22;;1170:63;1227:5;1170:63;;;1137:101;;;;;1245:170;;1347:6;1341:13;1332:22;;1359:51;1404:5;1359:51;;;1326:89;;;;;1423:444;;1536:3;1529:4;1521:6;1517:17;1513:27;1503:2;;1554:1;1551;1544:12;1503:2;1584:6;1578:13;1606:65;1621:49;1663:6;1621:49;;;1606:65;;;1597:74;;1691:6;1684:5;1677:21;1727:4;1719:6;1715:17;1760:4;1753:5;1749:16;1795:3;1786:6;1781:3;1777:16;1774:25;1771:2;;;1812:1;1809;1802:12;1771:2;1822:39;1854:6;1849:3;1844;1822:39;;;1496:371;;;;;;;;1902:2097;;2032:6;2020:9;2015:3;2011:19;2007:32;2004:2;;;2052:1;2049;2042:12;2004:2;2070:22;2085:6;2070:22;;;2061:31;;2144:1;2176:57;2229:3;2220:6;2209:9;2205:22;2176:57;;;2169:4;2162:5;2158:16;2151:83;2102:143;2293:2;2326:60;2382:3;2373:6;2362:9;2358:22;2326:60;;;2319:4;2312:5;2308:16;2301:86;2255:143;2469:2;2458:9;2454:18;2448:25;2493:18;2485:6;2482:30;2479:2;;;2525:1;2522;2515:12;2479:2;2560:70;2626:3;2617:6;2606:9;2602:22;2560:70;;;2553:4;2546:5;2542:16;2535:96;2408:234;2700:2;2733:90;2819:3;2810:6;2799:9;2795:22;2733:90;;;2726:4;2719:5;2715:16;2708:116;2652:183;2890:3;2924:60;2980:3;2971:6;2960:9;2956:22;2924:60;;;2917:4;2910:5;2906:16;2899:86;2845:151;3050:3;3084:60;3140:3;3131:6;3120:9;3116:22;3084:60;;;3077:4;3070:5;3066:16;3059:86;3006:150;3211:3;3245:60;3301:3;3292:6;3281:9;3277:22;3245:60;;;3238:4;3231:5;3227:16;3220:86;3166:151;3374:3;3408:60;3464:3;3455:6;3444:9;3440:22;3408:60;;;3401:4;3394:5;3390:16;3383:86;3327:153;3540:3;3576:60;3632:3;3623:6;3612:9;3608:22;3576:60;;;3567:6;3560:5;3556:18;3549:88;3490:158;3709:3;3745:60;3801:3;3792:6;3781:9;3777:22;3745:60;;;3736:6;3729:5;3725:18;3718:88;3658:159;3884:3;3920:57;3973:3;3964:6;3953:9;3949:22;3920:57;;;3911:6;3904:5;3900:18;3893:85;3827:162;1998:2001;;;;;4029:920;;4155:4;4143:9;4138:3;4134:19;4130:30;4127:2;;;4173:1;4170;4163:12;4127:2;4191:20;4206:4;4191:20;;;4182:29;;4263:1;4295:57;4348:3;4339:6;4328:9;4324:22;4295:57;;;4288:4;4281:5;4277:16;4270:83;4221:143;4412:2;4445:60;4501:3;4492:6;4481:9;4477:22;4445:60;;;4438:4;4431:5;4427:16;4420:86;4374:143;4588:2;4577:9;4573:18;4567:25;4612:18;4604:6;4601:30;4598:2;;;4644:1;4641;4634:12;4598:2;4679:70;4745:3;4736:6;4725:9;4721:22;4679:70;;;4672:4;4665:5;4661:16;4654:96;4527:234;4816:2;4849:78;4923:3;4914:6;4903:9;4899:22;4849:78;;;4842:4;4835:5;4831:16;4824:104;4771:168;4121:828;;;;;4956:130;;5036:6;5023:20;5014:29;;5048:33;5075:5;5048:33;;;5008:78;;;;;5093:134;;5177:6;5171:13;5162:22;;5189:33;5216:5;5189:33;;;5156:71;;;;;5234:241;;5338:2;5326:9;5317:7;5313:23;5309:32;5306:2;;;5354:1;5351;5344:12;5306:2;5389:1;5406:53;5451:7;5442:6;5431:9;5427:22;5406:53;;;5396:63;;5368:97;5300:175;;;;;5482:491;;;;5620:2;5608:9;5599:7;5595:23;5591:32;5588:2;;;5636:1;5633;5626:12;5588:2;5671:1;5688:53;5733:7;5724:6;5713:9;5709:22;5688:53;;;5678:63;;5650:97;5778:2;5796:53;5841:7;5832:6;5821:9;5817:22;5796:53;;;5786:63;;5757:98;5886:2;5904:53;5949:7;5940:6;5929:9;5925:22;5904:53;;;5894:63;;5865:98;5582:391;;;;;;5980:257;;6092:2;6080:9;6071:7;6067:23;6063:32;6060:2;;;6108:1;6105;6098:12;6060:2;6143:1;6160:61;6213:7;6204:6;6193:9;6189:22;6160:61;;;6150:71;;6122:105;6054:183;;;;;6244:402;;6389:2;6377:9;6368:7;6364:23;6360:32;6357:2;;;6405:1;6402;6395:12;6357:2;6461:1;6450:9;6446:17;6440:24;6484:18;6476:6;6473:30;6470:2;;;6516:1;6513;6506:12;6470:2;6536:94;6622:7;6613:6;6602:9;6598:22;6536:94;;;6526:104;;6419:217;6351:295;;;;;6653:394;;6794:2;6782:9;6773:7;6769:23;6765:32;6762:2;;;6810:1;6807;6800:12;6762:2;6866:1;6855:9;6851:17;6845:24;6889:18;6881:6;6878:30;6875:2;;;6921:1;6918;6911:12;6875:2;6941:90;7023:7;7014:6;7003:9;6999:22;6941:90;;;6931:100;;6824:213;6756:291;;;;;7054:241;;7158:2;7146:9;7137:7;7133:23;7129:32;7126:2;;;7174:1;7171;7164:12;7126:2;7209:1;7226:53;7271:7;7262:6;7251:9;7247:22;7226:53;;;7216:63;;7188:97;7120:175;;;;;7302:522;;;;7458:2;7446:9;7437:7;7433:23;7429:32;7426:2;;;7474:1;7471;7464:12;7426:2;7509:1;7526:53;7571:7;7562:6;7551:9;7547:22;7526:53;;;7516:63;;7488:97;7644:2;7633:9;7629:18;7616:32;7668:18;7660:6;7657:30;7654:2;;;7700:1;7697;7690:12;7654:2;7728:80;7800:7;7791:6;7780:9;7776:22;7728:80;;;7718:90;;;;7595:219;7420:404;;;;;;7831:1675;;;;;;;;;;;;8208:3;8196:9;8187:7;8183:23;8179:33;8176:2;;;8225:1;8222;8215:12;8176:2;8260:1;8277:53;8322:7;8313:6;8302:9;8298:22;8277:53;;;8267:63;;8239:97;8395:2;8384:9;8380:18;8367:32;8419:18;8411:6;8408:30;8405:2;;;8451:1;8448;8441:12;8405:2;8479:80;8551:7;8542:6;8531:9;8527:22;8479:80;;;8469:90;;;;8346:219;8624:2;8613:9;8609:18;8596:32;8648:18;8640:6;8637:30;8634:2;;;8680:1;8677;8670:12;8634:2;8708:92;8792:7;8783:6;8772:9;8768:22;8708:92;;;8698:102;;;;8575:231;8865:2;8854:9;8850:18;8837:32;8889:18;8881:6;8878:30;8875:2;;;8921:1;8918;8911:12;8875:2;8949:80;9021:7;9012:6;9001:9;8997:22;8949:80;;;8939:90;;;;8816:219;9094:3;9083:9;9079:19;9066:33;9119:18;9111:6;9108:30;9105:2;;;9151:1;9148;9141:12;9105:2;9179:80;9251:7;9242:6;9231:9;9227:22;9179:80;;;9169:90;;;;9045:220;9324:3;9313:9;9309:19;9296:33;9349:18;9341:6;9338:30;9335:2;;;9381:1;9378;9371:12;9335:2;9410:80;9482:7;9473:6;9462:9;9458:22;9410:80;;;9399:91;;;;9275:221;8170:1336;;;;;;;;;;;;;;;9513:366;;;9634:2;9622:9;9613:7;9609:23;9605:32;9602:2;;;9650:1;9647;9640:12;9602:2;9685:1;9702:53;9747:7;9738:6;9727:9;9723:22;9702:53;;;9692:63;;9664:97;9792:2;9810:53;9855:7;9846:6;9835:9;9831:22;9810:53;;;9800:63;;9771:98;9596:283;;;;;;9886:617;;;;;10041:3;10029:9;10020:7;10016:23;10012:33;10009:2;;;10058:1;10055;10048:12;10009:2;10093:1;10110:53;10155:7;10146:6;10135:9;10131:22;10110:53;;;10100:63;;10072:97;10200:2;10218:53;10263:7;10254:6;10243:9;10239:22;10218:53;;;10208:63;;10179:98;10308:2;10326:53;10371:7;10362:6;10351:9;10347:22;10326:53;;;10316:63;;10287:98;10416:2;10434:53;10479:7;10470:6;10459:9;10455:22;10434:53;;;10424:63;;10395:98;10003:500;;;;;;;;10510:617;;;;;10665:3;10653:9;10644:7;10640:23;10636:33;10633:2;;;10682:1;10679;10672:12;10633:2;10717:1;10734:53;10779:7;10770:6;10759:9;10755:22;10734:53;;;10724:63;;10696:97;10824:2;10842:53;10887:7;10878:6;10867:9;10863:22;10842:53;;;10832:63;;10803:98;10932:2;10950:53;10995:7;10986:6;10975:9;10971:22;10950:53;;;10940:63;;10911:98;11040:2;11058:53;11103:7;11094:6;11083:9;11079:22;11058:53;;;11048:63;;11019:98;10627:500;;;;;;;;11134:113;11217:24;11235:5;11217:24;;;11212:3;11205:37;11199:48;;;11254:104;11331:21;11346:5;11331:21;;;11326:3;11319:34;11313:45;;;11365:210;11490:79;11563:5;11490:79;;;11485:3;11478:92;11472:103;;;11582:176;11690:62;11746:5;11690:62;;;11685:3;11678:75;11672:86;;;11765:347;;11877:39;11910:5;11877:39;;;11928:71;11992:6;11987:3;11928:71;;;11921:78;;12004:52;12049:6;12044:3;12037:4;12030:5;12026:16;12004:52;;;12077:29;12099:6;12077:29;;;12072:3;12068:39;12061:46;;11857:255;;;;;;12120:302;;12280:66;12344:1;12339:3;12280:66;;;12273:73;;12379:5;12375:1;12370:3;12366:11;12359:26;12413:2;12408:3;12404:12;12397:19;;12266:156;;;;12431:311;;12591:67;12655:2;12650:3;12591:67;;;12584:74;;12691:13;12687:1;12682:3;12678:11;12671:34;12733:2;12728:3;12724:12;12717:19;;12577:165;;;;12751:310;;12911:67;12975:2;12970:3;12911:67;;;12904:74;;13011:12;13007:1;13002:3;12998:11;12991:33;13052:2;13047:3;13043:12;13036:19;;12897:164;;;;13070:312;;13230:67;13294:2;13289:3;13230:67;;;13223:74;;13330:14;13326:1;13321:3;13317:11;13310:35;13373:2;13368:3;13364:12;13357:19;;13216:166;;;;13391:316;;13551:67;13615:2;13610:3;13551:67;;;13544:74;;13651:18;13647:1;13642:3;13638:11;13631:39;13698:2;13693:3;13689:12;13682:19;;13537:170;;;;13716:308;;13876:66;13940:1;13935:3;13876:66;;;13869:73;;13975:11;13971:1;13966:3;13962:11;13955:32;14015:2;14010:3;14006:12;13999:19;;13862:162;;;;14033:319;;14193:67;14257:2;14252:3;14193:67;;;14186:74;;14293:21;14289:1;14284:3;14280:11;14273:42;14343:2;14338:3;14334:12;14327:19;;14179:173;;;;14361:311;;14521:67;14585:2;14580:3;14521:67;;;14514:74;;14621:13;14617:1;14612:3;14608:11;14601:34;14663:2;14658:3;14654:12;14647:19;;14507:165;;;;14681:308;;14841:66;14905:1;14900:3;14841:66;;;14834:73;;14940:11;14936:1;14931:3;14927:11;14920:32;14980:2;14975:3;14971:12;14964:19;;14827:162;;;;14998:305;;15158:66;15222:1;15217:3;15158:66;;;15151:73;;15257:8;15253:1;15248:3;15244:11;15237:29;15294:2;15289:3;15285:12;15278:19;;15144:159;;;;15312:314;;15472:67;15536:2;15531:3;15472:67;;;15465:74;;15572:16;15568:1;15563:3;15559:11;15552:37;15617:2;15612:3;15608:12;15601:19;;15458:168;;;;15635:307;;15795:66;15859:1;15854:3;15795:66;;;15788:73;;15894:10;15890:1;15885:3;15881:11;15874:31;15933:2;15928:3;15924:12;15917:19;;15781:161;;;;15951:308;;16111:66;16175:1;16170:3;16111:66;;;16104:73;;16210:11;16206:1;16201:3;16197:11;16190:32;16250:2;16245:3;16241:12;16234:19;;16097:162;;;;16268:315;;16428:67;16492:2;16487:3;16428:67;;;16421:74;;16528:17;16524:1;16519:3;16515:11;16508:38;16574:2;16569:3;16565:12;16558:19;;16414:169;;;;16592:307;;16752:66;16816:1;16811:3;16752:66;;;16745:73;;16851:10;16847:1;16842:3;16838:11;16831:31;16890:2;16885:3;16881:12;16874:19;;16738:161;;;;16907:113;16990:24;17008:5;16990:24;;;16985:3;16978:37;16972:48;;;17027:222;;17154:2;17143:9;17139:18;17131:26;;17168:71;17236:1;17225:9;17221:17;17212:6;17168:71;;;17125:124;;;;;17256:333;;17411:2;17400:9;17396:18;17388:26;;17425:71;17493:1;17482:9;17478:17;17469:6;17425:71;;;17507:72;17575:2;17564:9;17560:18;17551:6;17507:72;;;17382:207;;;;;;17596:333;;17751:2;17740:9;17736:18;17728:26;;17765:71;17833:1;17822:9;17818:17;17809:6;17765:71;;;17847:72;17915:2;17904:9;17900:18;17891:6;17847:72;;;17722:207;;;;;;17936:210;;18057:2;18046:9;18042:18;18034:26;;18071:65;18133:1;18122:9;18118:17;18109:6;18071:65;;;18028:118;;;;;18153:306;;18322:2;18311:9;18307:18;18299:26;;18336:113;18446:1;18435:9;18431:17;18422:6;18336:113;;;18293:166;;;;;18466:272;;18618:2;18607:9;18603:18;18595:26;;18632:96;18725:1;18714:9;18710:17;18701:6;18632:96;;;18589:149;;;;;18745:532;;18948:2;18937:9;18933:18;18925:26;;18998:9;18992:4;18988:20;18984:1;18973:9;18969:17;18962:47;19023:78;19096:4;19087:6;19023:78;;;19015:86;;19112:72;19180:2;19169:9;19165:18;19156:6;19112:72;;;19195;19263:2;19252:9;19248:18;19239:6;19195:72;;;18919:358;;;;;;;19284:416;;19484:2;19473:9;19469:18;19461:26;;19534:9;19528:4;19524:20;19520:1;19509:9;19505:17;19498:47;19559:131;19685:4;19559:131;;;19551:139;;19455:245;;;;19707:416;;19907:2;19896:9;19892:18;19884:26;;19957:9;19951:4;19947:20;19943:1;19932:9;19928:17;19921:47;19982:131;20108:4;19982:131;;;19974:139;;19878:245;;;;20130:416;;20330:2;20319:9;20315:18;20307:26;;20380:9;20374:4;20370:20;20366:1;20355:9;20351:17;20344:47;20405:131;20531:4;20405:131;;;20397:139;;20301:245;;;;20553:416;;20753:2;20742:9;20738:18;20730:26;;20803:9;20797:4;20793:20;20789:1;20778:9;20774:17;20767:47;20828:131;20954:4;20828:131;;;20820:139;;20724:245;;;;20976:416;;21176:2;21165:9;21161:18;21153:26;;21226:9;21220:4;21216:20;21212:1;21201:9;21197:17;21190:47;21251:131;21377:4;21251:131;;;21243:139;;21147:245;;;;21399:416;;21599:2;21588:9;21584:18;21576:26;;21649:9;21643:4;21639:20;21635:1;21624:9;21620:17;21613:47;21674:131;21800:4;21674:131;;;21666:139;;21570:245;;;;21822:416;;22022:2;22011:9;22007:18;21999:26;;22072:9;22066:4;22062:20;22058:1;22047:9;22043:17;22036:47;22097:131;22223:4;22097:131;;;22089:139;;21993:245;;;;22245:416;;22445:2;22434:9;22430:18;22422:26;;22495:9;22489:4;22485:20;22481:1;22470:9;22466:17;22459:47;22520:131;22646:4;22520:131;;;22512:139;;22416:245;;;;22668:416;;22868:2;22857:9;22853:18;22845:26;;22918:9;22912:4;22908:20;22904:1;22893:9;22889:17;22882:47;22943:131;23069:4;22943:131;;;22935:139;;22839:245;;;;23091:416;;23291:2;23280:9;23276:18;23268:26;;23341:9;23335:4;23331:20;23327:1;23316:9;23312:17;23305:47;23366:131;23492:4;23366:131;;;23358:139;;23262:245;;;;23514:416;;23714:2;23703:9;23699:18;23691:26;;23764:9;23758:4;23754:20;23750:1;23739:9;23735:17;23728:47;23789:131;23915:4;23789:131;;;23781:139;;23685:245;;;;23937:416;;24137:2;24126:9;24122:18;24114:26;;24187:9;24181:4;24177:20;24173:1;24162:9;24158:17;24151:47;24212:131;24338:4;24212:131;;;24204:139;;24108:245;;;;24360:416;;24560:2;24549:9;24545:18;24537:26;;24610:9;24604:4;24600:20;24596:1;24585:9;24581:17;24574:47;24635:131;24761:4;24635:131;;;24627:139;;24531:245;;;;24783:416;;24983:2;24972:9;24968:18;24960:26;;25033:9;25027:4;25023:20;25019:1;25008:9;25004:17;24997:47;25058:131;25184:4;25058:131;;;25050:139;;24954:245;;;;25206:416;;25406:2;25395:9;25391:18;25383:26;;25456:9;25450:4;25446:20;25442:1;25431:9;25427:17;25420:47;25481:131;25607:4;25481:131;;;25473:139;;25377:245;;;;25629:222;;25756:2;25745:9;25741:18;25733:26;;25770:71;25838:1;25827:9;25823:17;25814:6;25770:71;;;25727:124;;;;;25858:756;;26117:3;26106:9;26102:19;26094:27;;26132:71;26200:1;26189:9;26185:17;26176:6;26132:71;;;26251:9;26245:4;26241:20;26236:2;26225:9;26221:18;26214:48;26276:78;26349:4;26340:6;26276:78;;;26268:86;;26365:72;26433:2;26422:9;26418:18;26409:6;26365:72;;;26448;26516:2;26505:9;26501:18;26492:6;26448:72;;;26531:73;26599:3;26588:9;26584:19;26575:6;26531:73;;;26088:526;;;;;;;;;26621:333;;26776:2;26765:9;26761:18;26753:26;;26790:71;26858:1;26847:9;26843:17;26834:6;26790:71;;;26872:72;26940:2;26929:9;26925:18;26916:6;26872:72;;;26747:207;;;;;;26961:556;;27172:3;27161:9;27157:19;27149:27;;27187:71;27255:1;27244:9;27240:17;27231:6;27187:71;;;27269:72;27337:2;27326:9;27322:18;27313:6;27269:72;;;27352;27420:2;27409:9;27405:18;27396:6;27352:72;;;27435;27503:2;27492:9;27488:18;27479:6;27435:72;;;27143:374;;;;;;;;27524:556;;27735:3;27724:9;27720:19;27712:27;;27750:71;27818:1;27807:9;27803:17;27794:6;27750:71;;;27832:72;27900:2;27889:9;27885:18;27876:6;27832:72;;;27915;27983:2;27972:9;27968:18;27959:6;27915:72;;;27998;28066:2;28055:9;28051:18;28042:6;27998:72;;;27706:374;;;;;;;;28087:668;;28326:3;28315:9;28311:19;28303:27;;28341:71;28409:1;28398:9;28394:17;28385:6;28341:71;;;28423:72;28491:2;28480:9;28476:18;28467:6;28423:72;;;28506;28574:2;28563:9;28559:18;28550:6;28506:72;;;28589;28657:2;28646:9;28642:18;28633:6;28589:72;;;28672:73;28740:3;28729:9;28725:19;28716:6;28672:73;;;28297:458;;;;;;;;;28762:507;;;28898:11;28885:25;28994:1;28988:4;28984:12;28973:8;28957:14;28953:29;28949:48;28929:18;28925:73;28915:2;;29012:1;29009;29002:12;28915:2;29043:18;29033:8;29029:33;29021:41;;29096:4;29083:18;29073:28;;29121:18;29113:6;29110:30;29107:2;;;29153:1;29150;29143:12;29107:2;29181;29175:4;29171:13;29163:21;;29235:4;29227:6;29223:17;29207:14;29203:38;29197:4;29193:49;29190:2;;;29255:1;29252;29245:12;29190:2;28853:416;;;;;;;29276:256;;29338:2;29332:9;29322:19;;29376:4;29368:6;29364:17;29475:6;29463:10;29460:22;29439:18;29427:10;29424:34;29421:62;29418:2;;;29496:1;29493;29486:12;29418:2;29516:10;29512:2;29505:22;29316:216;;;;;29539:322;;29683:18;29675:6;29672:30;29669:2;;;29715:1;29712;29705:12;29669:2;29782:4;29778:9;29771:4;29763:6;29759:17;29755:33;29747:41;;29846:4;29840;29836:15;29828:23;;29606:255;;;;29868:122;;29962:5;29956:12;29946:22;;29927:63;;;;29998:163;;30113:6;30108:3;30101:19;30150:4;30145:3;30141:14;30126:29;;30094:67;;;;;30169:91;;30231:24;30249:5;30231:24;;;30220:35;;30214:46;;;;30267:85;;30340:5;30333:13;30326:21;30315:32;;30309:43;;;;30359:121;;30451:24;30469:5;30451:24;;;30440:35;;30434:46;;;;30487:109;;30567:24;30585:5;30567:24;;;30556:35;;30550:46;;;;30603:121;;30676:42;30669:5;30665:54;30654:65;;30648:76;;;;30731:72;;30793:5;30782:16;;30776:27;;;;30810:205;;30931:79;31004:5;30931:79;;;30918:92;;30912:103;;;;31022:150;;31143:24;31161:5;31143:24;;;31130:37;;31124:48;;;;31179:171;;31283:62;31339:5;31283:62;;;31270:75;;31264:86;;;;31357:133;;31461:24;31479:5;31461:24;;;31448:37;;31442:48;;;;31498:268;31563:1;31570:101;31584:6;31581:1;31578:13;31570:101;;;31660:1;31655:3;31651:11;31645:18;31641:1;31636:3;31632:11;31625:39;31606:2;31603:1;31599:10;31594:15;;31570:101;;;31686:6;31683:1;31680:13;31677:2;;;31751:1;31742:6;31737:3;31733:16;31726:27;31677:2;31547:219;;;;;31774:97;;31862:2;31858:7;31853:2;31846:5;31842:14;31838:28;31828:38;;31822:49;;;;31879:117;31948:24;31966:5;31948:24;;;31941:5;31938:35;31928:2;;31987:1;31984;31977:12;31928:2;31922:74;;32003:111;32069:21;32084:5;32069:21;;;32062:5;32059:32;32049:2;;32105:1;32102;32095:12;32049:2;32043:71;;32121:177;32220:54;32268:5;32220:54;;;32213:5;32210:65;32200:2;;32289:1;32286;32279:12;32200:2;32194:104;;32305:153;32392:42;32428:5;32392:42;;;32385:5;32382:53;32372:2;;32449:1;32446;32439:12;32372:2;32366:92;;32465:117;32534:24;32552:5;32534:24;;;32527:5;32524:35;32514:2;;32573:1;32570;32563:12;32514:2;32508:74;

Metadata Hash

84c1992b9c9d915d6e995a5730032a3a7ffed679957da1cbee6bc28140351472
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.