Contract 0xD7c295E399CA928A3a14b01D760E794f1AdF8990 7

Contract Overview

Balance:
48.036500000100000101 FTM

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x18225d59e9f62d541e146da1a0da2319d43dd5cf34fa619449c913e2d9535d28Calc Src Fees112116472022-10-15 16:37:1148 days 10 hrs ago0x5b221785698780bd544e287e0b0c58fa2d848ff1 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.0000916075
0x48e710a72aab389382760d0a2ffb9f69ed79eea0846e614db3adc0a0c3e7bf45Any Exec110170202022-10-05 13:38:0258 days 13 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000363125566
0xacf162e0fcc0baa210d0015251055619988bfbdcb1fea3682de88d90d272549bAny Exec110169392022-10-05 13:30:5158 days 13 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000363125566
0x33502a4a09f6714dacfcd2f7d5b8c743da91926acc349a6ec10b6a6b988e5734Any Exec110008602022-10-04 14:58:0259 days 12 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000168250649
0x19bab356e6482b6851a1515776ac9c48d2a5daea57ecf087bf0e5a7e85288fefAny Exec109971252022-10-04 10:15:0059 days 16 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000484612087
0x6e3f4f9f20635f53afdddc9e2c48b32fc077d9bb11237b8ccdd2108536b9158aAny Exec109913082022-10-04 2:57:1560 days 10 mins ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000705660123
0xda9737abf26873bfb194af11ebb79dc1ce22c8ed7b0c8d7ae48578d7a680198fAny Exec109912742022-10-04 2:54:1160 days 13 mins ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000245253691
0xec371f1fbfbd66b2ad6833eecc3f4deefc410f09dd40aebdadeb04f414dca3feAny Exec109844912022-10-03 16:50:0960 days 10 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000436134701
0xb6f6d1188705ed727db33954dafbdbee1ef62a564c1ba8cadffca45ee43f8912Any Exec109811412022-10-03 12:16:3160 days 14 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000571569063
0x0d2b2c013f7f806aa10ccf141f706f430149c16968ca727c9b43b22a6b4a655eAny Exec109811382022-10-03 12:16:2060 days 14 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000199289971
0xfd22377af6e8f09b04b3031809b0fef13c22402db5ba616cc77815f351f06051Any Exec109811342022-10-03 12:16:0460 days 14 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000245253691
0xe93ee9bc496e243e678c4aed03c5999bad18811fd20bf6b7759a12fc3d2d211cAny Exec109811282022-10-03 12:15:5060 days 14 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000624106997
0x585929b95f7a71bede7d086c7990e1e0a703811e612e24ca7657abcf459b0a90Any Exec109811242022-10-03 12:15:2760 days 14 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000161424876
0x76cdc8911f5ef78227b715ff70c3af3a7fc2e7ea2304b9db309e09b22942da85Any Exec109811202022-10-03 12:15:1360 days 14 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000245234386
0x2dc701c4749a9035bb1995c06601f50c902551d7c6ed14ebc40915b4fcf105e2Deposit109753682022-10-03 6:03:2760 days 21 hrs ago0x51e8c347f85082603b90dd1381e128dedc825b49 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900.01 FTM0.000029145412
0xad922c3b397b225d28002c15652d809a2d219bdfd6de70c698873a4a4ae2f866Deposit109753632022-10-03 6:03:1060 days 21 hrs ago0x51e8c347f85082603b90dd1381e128dedc825b49 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900.01 FTM0.000046683737
0xe5f1ddccd378a5c9a7bca83c97f6142f9480e329b53159b0800c1e1409da9e0fDeposit109752002022-10-03 5:50:0260 days 21 hrs ago0x51e8c347f85082603b90dd1381e128dedc825b49 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM0.000029145412
0x7b4378cdf9260c48e77afa89c7f4fb126c8b024ec667e103cfdff71e9e37b8b2Deposit109751922022-10-03 5:49:3360 days 21 hrs ago0x51e8c347f85082603b90dd1381e128dedc825b49 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM0.000046655289
0xdbf7ecdc80aabdc57ddaef2121bbc74daaf1f539c47090aa17f177f331e0fa1cDeposit109735412022-10-03 3:27:5760 days 23 hrs ago0x51e8c347f85082603b90dd1381e128dedc825b49 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM0.00004665538
0xc708b2aca592e57726c41e97845d8683c7f9d95d120c4240337d60497e514789Deposit109423592022-10-01 6:42:1662 days 20 hrs ago0x51e8c347f85082603b90dd1381e128dedc825b49 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM0.000029145412
0x069d57b695a56b81158eea02d1b76174253a0a229c91123671b46b85ba56d6cfDeposit109423522022-10-01 6:41:5362 days 20 hrs ago0x51e8c347f85082603b90dd1381e128dedc825b49 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM0.000029135438
0x4757008e61c9ff7b3e2dc38bec578cfa89b2c761b44d0cb54b16c59b81a52b74Deposit109423482022-10-01 6:41:4262 days 20 hrs ago0x51e8c347f85082603b90dd1381e128dedc825b49 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM0.00002913953
0x07920ee9dd55353c56242c01410a4c51e2d2f4968a3e121f182fb7b76506513bDeposit109423422022-10-01 6:41:0362 days 20 hrs ago0x51e8c347f85082603b90dd1381e128dedc825b49 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM0.000029137001
0x363e7d4db8173f0aa0b5c79153df21c0c2854f63690185050355df65f7782774Any Exec109420122022-10-01 6:16:3062 days 20 hrs ago0x99c5be48d2f47a1b518de27246baba8ea96319bd IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900 FTM0.000657182596
0xd4e5f9ac23faa08f28e3cafeb89d09a41cb4b6d96a4218f960a1b104725dbb33Deposit109419722022-10-01 6:14:0062 days 20 hrs ago0x51e8c347f85082603b90dd1381e128dedc825b49 IN  0xd7c295e399ca928a3a14b01d760e794f1adf89900.1 FTM0.000049003861
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x28ecc956a49357c9378dee817aa49f135528669b48ab3dc2022ca5bf1e9d557f113041672022-10-20 16:47:0043 days 10 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0x3580e64fdaebe99cda8d371dd912e4a782cc4f710.00969999999999999 FTM
0x28ecc956a49357c9378dee817aa49f135528669b48ab3dc2022ca5bf1e9d557f113041672022-10-20 16:47:0043 days 10 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf89900x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 FTM
0x28ecc956a49357c9378dee817aa49f135528669b48ab3dc2022ca5bf1e9d557f113041672022-10-20 16:47:0043 days 10 hrs ago 0x3580e64fdaebe99cda8d371dd912e4a782cc4f71 0xd7c295e399ca928a3a14b01d760e794f1adf89900.00999999999999999 FTM
0xb34e09dafad988d0453e4ff1218f4ab5a409c9148398dc165d99fbe9b05f251e113040622022-10-20 16:37:5343 days 10 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0x3580e64fdaebe99cda8d371dd912e4a782cc4f710.00969999999999999 FTM
0xb34e09dafad988d0453e4ff1218f4ab5a409c9148398dc165d99fbe9b05f251e113040622022-10-20 16:37:5343 days 10 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf89900x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 FTM
0xb34e09dafad988d0453e4ff1218f4ab5a409c9148398dc165d99fbe9b05f251e113040622022-10-20 16:37:5343 days 10 hrs ago 0x3580e64fdaebe99cda8d371dd912e4a782cc4f71 0xd7c295e399ca928a3a14b01d760e794f1adf89900.00999999999999999 FTM
0x48753f69a1215d97e79501c5fee932c157556b6b40693ab08c6e11f757b1b646113038752022-10-20 16:24:4643 days 10 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0x394f7fb8cb6800cb315206c630ac128720a12e750.00969999999999999 FTM
0x48753f69a1215d97e79501c5fee932c157556b6b40693ab08c6e11f757b1b646113038752022-10-20 16:24:4643 days 10 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf89900x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 FTM
0x48753f69a1215d97e79501c5fee932c157556b6b40693ab08c6e11f757b1b646113038752022-10-20 16:24:4643 days 10 hrs ago 0x394f7fb8cb6800cb315206c630ac128720a12e75 0xd7c295e399ca928a3a14b01d760e794f1adf89900.00999999999999999 FTM
0xc5081587c6794468ee75c09edea04a1ada5371c9018efde7151f226ff9aa8f54113031072022-10-20 15:40:2643 days 11 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0xc6a81a81fdf849ea3cc50865490d54881f6bfc1b0.00969999999999999 FTM
0xc5081587c6794468ee75c09edea04a1ada5371c9018efde7151f226ff9aa8f54113031072022-10-20 15:40:2643 days 11 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf89900x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 FTM
0xc5081587c6794468ee75c09edea04a1ada5371c9018efde7151f226ff9aa8f54113031072022-10-20 15:40:2643 days 11 hrs ago 0xc6a81a81fdf849ea3cc50865490d54881f6bfc1b 0xd7c295e399ca928a3a14b01d760e794f1adf89900.00999999999999999 FTM
0xba0eb381f5da725fbdc97cb490a878fe15e13c716ecefe4b44b4965a480e77dc112509842022-10-17 19:48:1346 days 7 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0x75c9c77c26fd90336a04a60e57aa22750c7803f40.001 FTM
0xba0eb381f5da725fbdc97cb490a878fe15e13c716ecefe4b44b4965a480e77dc112509842022-10-17 19:48:1346 days 7 hrs ago 0x75c9c77c26fd90336a04a60e57aa22750c7803f4 0xd7c295e399ca928a3a14b01d760e794f1adf89900.001 FTM
0xf3e314d2d20a77ab2c3be52cb7f65f9fd5b21a273e62927e020a2371b14a3c18112462142022-10-17 13:43:1946 days 13 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0x6cfad9fad4a0f8d65a7f134ad1cb421000cb05010.0007 FTM
0xf3e314d2d20a77ab2c3be52cb7f65f9fd5b21a273e62927e020a2371b14a3c18112462142022-10-17 13:43:1946 days 13 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf89900x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 FTM
0xf3e314d2d20a77ab2c3be52cb7f65f9fd5b21a273e62927e020a2371b14a3c18112462142022-10-17 13:43:1946 days 13 hrs ago 0x6cfad9fad4a0f8d65a7f134ad1cb421000cb0501 0xd7c295e399ca928a3a14b01d760e794f1adf89900.001 FTM
0x5849e4184272b365aebd70d39ad70e4d49acfcbfa739f9ce13e58391294c9e29111591012022-10-12 20:37:5751 days 6 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0x6cfad9fad4a0f8d65a7f134ad1cb421000cb05010.0007 FTM
0x5849e4184272b365aebd70d39ad70e4d49acfcbfa739f9ce13e58391294c9e29111591012022-10-12 20:37:5751 days 6 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf89900x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 FTM
0x5849e4184272b365aebd70d39ad70e4d49acfcbfa739f9ce13e58391294c9e29111591012022-10-12 20:37:5751 days 6 hrs ago 0x6cfad9fad4a0f8d65a7f134ad1cb421000cb0501 0xd7c295e399ca928a3a14b01d760e794f1adf89900.001 FTM
0xc79de9c107168b0d5418510c40a484281deab994c7baaa21f4af27160ec18b97111549742022-10-12 16:23:1651 days 10 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0x6cfad9fad4a0f8d65a7f134ad1cb421000cb05010.0007 FTM
0xc79de9c107168b0d5418510c40a484281deab994c7baaa21f4af27160ec18b97111549742022-10-12 16:23:1651 days 10 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf89900x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 FTM
0xc79de9c107168b0d5418510c40a484281deab994c7baaa21f4af27160ec18b97111549742022-10-12 16:23:1651 days 10 hrs ago 0x6cfad9fad4a0f8d65a7f134ad1cb421000cb0501 0xd7c295e399ca928a3a14b01d760e794f1adf89900.001 FTM
0xba4287539d6a8298e39ff33552b62ec82dd9be1d6ed8e258e22df7e2574ffda1111542052022-10-12 15:27:5851 days 11 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf8990 0x6cfad9fad4a0f8d65a7f134ad1cb421000cb05010.0007 FTM
0xba4287539d6a8298e39ff33552b62ec82dd9be1d6ed8e258e22df7e2574ffda1111542052022-10-12 15:27:5851 days 11 hrs ago 0xd7c295e399ca928a3a14b01d760e794f1adf89900x99c5be48d2f47a1b518de27246baba8ea96319bd0.0003 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyCallV6Proxy

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2022-05-26
*/

/**
 *Submitted for verification at Etherscan.io on 2022-05-10
*/

/**
 *Submitted for verification at BscScan.com on 2022-05-10
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.6;

/// IApp interface of the application
interface IApp {
    /// (required) call on the destination chain to exec the interaction
    function anyExecute(bytes calldata _data) external returns (bool success, bytes memory result);

    /// (optional,advised) call back on the originating chain if the cross chain interaction fails
    function anyFallback(address _to, bytes calldata _data) external;
}

/// anycall executor is the delegator to execute contract calling (like a sandbox)
contract AnyCallExecutor {
    struct Context {
        address from;
        uint256 fromChainID;
        uint256 nonce;
    }

    Context public context;
    address public creator;

    constructor() {
        creator = msg.sender;
    }

    function execute(
        address _to,
        bytes calldata _data,
        address _from,
        uint256 _fromChainID,
        uint256 _nonce
    ) external returns (bool success, bytes memory result) {
        if (msg.sender != creator) {
            return (false, "AnyCallExecutor: caller is not the creator");
        }
        context = Context({from: _from, fromChainID: _fromChainID, nonce: _nonce});
        (success, result) = IApp(_to).anyExecute(_data);
        context = Context({from: address(0), fromChainID: 0, nonce: 0});
    }
}

/// anycall proxy is a universal protocal to complete cross-chain interaction.
/// 1. the client call `anyCall` on the originating chain
///         to submit a request for a cross chain interaction
/// 2. the mpc network verify the request and call `anyExec` on the destination chain
///         to execute a cross chain interaction
/// 3. if step 2 failed and step 1 has set non-zero fallback,
///         then call `anyFallback` on the originating chain
contract AnyCallV6Proxy {
    // Packed fee information (only 1 storage slot)
    struct FeeData {
        uint128 accruedFees;
        uint128 premium;
    }

    // App config
    struct AppConfig {
        address app; // the application contract address
        address appAdmin; // account who admin the application's config
        uint256 appFlags; // flags of the application
    }

    // Src fee is (baseFees + msg.data.length*feesPerByte)
    struct SrcFeeConfig {
        uint256 baseFees;
        uint256 feesPerByte;
    }

    // Exec record
    struct ExecRecord {
        address to;
        bytes data;
    }

    // Context of the request on originating chain
    struct RequestContext {
        bytes32 txhash;
        address from;
        uint256 fromChainID;
        uint256 nonce;
        uint256 flags;
    }

    // anycall version
    string constant ANYCALL_VERSION = "v6.0";

    // Flags constant
    uint256 public constant FLAG_MERGE_CONFIG_FLAGS = 0x1;
    uint256 public constant FLAG_PAY_FEE_ON_SRC = 0x1 << 1;

    // App Modes constant
    uint256 public constant APPMODE_USE_CUSTOM_SRC_FEES = 0x1;

    // Modes constant
    uint256 public constant PERMISSIONLESS_MODE = 0x1;
    uint256 public constant FREE_MODE = 0x1 << 1;

    // Extra cost of execution (SSTOREs.SLOADs,ADDs,etc..)
    // TODO: analysis to verify the correct overhead gas usage
    uint256 constant EXECUTION_OVERHEAD = 100000;

    // key is app address
    mapping(address => string) public appIdentifier;

    // key is appID, a unique identifier for each project
    mapping(string => AppConfig) public appConfig;
    mapping(string => mapping(address => bool)) public appExecWhitelist;
    mapping(string => address[]) public appHistoryWhitelist;
    mapping(string => bool) public appBlacklist;
    mapping(uint256 => SrcFeeConfig) public srcDefaultFees; // key is chainID
    mapping(string => mapping(uint256 => SrcFeeConfig)) public srcCustomFees;
    mapping(string => uint256) public appDefaultModes;
    mapping(string => mapping(uint256 => uint256)) public appCustomModes;

    mapping(address => bool) public isAdmin;
    address[] public admins;

    address public mpc;
    address public pendingMPC;

    uint256 public mode;
    bool public paused;

    uint256 public minReserveBudget;
    mapping(address => uint256) public executionBudget;
    FeeData private _feeData;

    // applications should give permission to this executor
    AnyCallExecutor public executor;

    mapping(bytes32 => ExecRecord) public retryExecRecords;

    mapping(bytes32 => bool) public execCompleted;
    uint256 nonce;

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1);
        unlocked = 0;
        _;
        unlocked = 1;
    }

    event LogAnyCall(
        address indexed from,
        address indexed to,
        bytes data,
        address _fallback,
        uint256 indexed toChainID,
        uint256 flags,
        string appID,
        uint256 nonce
    );

    event LogAnyExec(
        bytes32 indexed txhash,
        address indexed from,
        address indexed to,
        uint256 fromChainID,
        uint256 nonce,
        bool success,
        bytes result
    );

    event Deposit(address indexed account, uint256 amount);
    event Withdraw(address indexed account, uint256 amount);
    event SetBlacklist(string appID, bool flag);
    event SetWhitelist(string appID, address indexed whitelist, bool flag);
    event UpdatePremium(uint256 oldPremium, uint256 newPremium);
    event AddAdmin(address admin);
    event RemoveAdmin(address admin);
    event ChangeMPC(address indexed oldMPC, address indexed newMPC, uint256 timestamp);
    event ApplyMPC(address indexed oldMPC, address indexed newMPC, uint256 timestamp);
    event SetAppConfig(string appID, address indexed app, address indexed appAdmin, uint256 appFlags);
    event UpgradeApp(string appID, address indexed oldApp, address indexed newApp);
    event StoreRetryExecRecord(bytes32 indexed txhash, address indexed from, address indexed to, uint256 fromChainID, uint256 nonce, bytes data);
    event DoneRetryExecRecord(bytes32 indexed txhash, address indexed from, uint256 fromChainID, uint256 nonce);

    constructor(
        address _admin,
        address _mpc,
        uint128 _premium,
        uint256 _mode
    ) {
        require(_mpc != address(0), "zero mpc address");
        if (_admin != address(0)) {
            isAdmin[_admin] = true;
            admins.push(_admin);
        }
        if (_mpc != _admin) {
            isAdmin[_mpc] = true;
            admins.push(_mpc);
        }

        mpc = _mpc;
        _feeData.premium = _premium;
        mode = _mode;

        executor = new AnyCallExecutor();

        emit ApplyMPC(address(0), _mpc, block.timestamp);
        emit UpdatePremium(0, _premium);
    }

    /// @dev Access control function
    modifier onlyMPC() {
        require(msg.sender == mpc, "only MPC");
        _;
    }

    /// @dev Access control function
    modifier onlyAdmin() {
        require(isAdmin[msg.sender], "only admin");
        _;
    }

    /// @dev pausable control function
    modifier whenNotPaused() {
        require(!paused, "paused");
        _;
    }

    /// @dev Charge an account for execution costs on this chain
    /// @param _from The account to charge for execution costs
    modifier charge(address _from, uint256 _flags) {
        uint256 gasUsed;

        // Prepare charge fee on the destination chain
        if (!_isSet(mode, FREE_MODE)) {
            if (!_isSet(_flags, FLAG_PAY_FEE_ON_SRC)) {
                require(executionBudget[_from] >= minReserveBudget, "less than min budget");
                gasUsed = gasleft() + EXECUTION_OVERHEAD;
            }
        }

        _;

        // Charge fee on the dest chain
        if (gasUsed > 0) {
            uint256 totalCost = (gasUsed - gasleft()) * (tx.gasprice + _feeData.premium);
            uint256 budget = executionBudget[_from];
            require(budget > totalCost, "no enough budget");
            executionBudget[_from] = budget - totalCost;
            _feeData.accruedFees += uint128(totalCost);
        }
    }

    /// @dev set paused flag to pause/unpause functions
    function setPaused(bool _paused) external onlyAdmin {
        paused = _paused;
    }

    function _paySrcFees(uint256 fees) internal {
        require(msg.value >= fees, "no enough src fee");
        if (fees > 0) { // pay fees
            (bool success,) = mpc.call{value: fees}("");
            require(success);
        }
        if (msg.value > fees) { // return remaining amount
            (bool success,) = msg.sender.call{value: msg.value - fees}("");
            require(success);
        }
    }

    /**
        @notice Submit a request for a cross chain interaction
        @param _to The target to interact with on `_toChainID`
        @param _data The calldata supplied for the interaction with `_to`
        @param _fallback The address to call back on the originating chain
            if the cross chain interaction fails
            for security reason, it must be zero or `msg.sender` address
        @param _toChainID The target chain id to interact with
        @param _flags The flags of app on the originating chain
    */
    function anyCall(
        address _to,
        bytes calldata _data,
        address _fallback,
        uint256 _toChainID,
        uint256 _flags
    ) external lock payable whenNotPaused {
        require(_fallback == address(0) || _fallback == msg.sender, "wrong fallback");
        string memory _appID = appIdentifier[msg.sender];

        require(!appBlacklist[_appID], "blacklist");

        bool _permissionlessMode = _isSet(mode, PERMISSIONLESS_MODE);
        if (!_permissionlessMode) {
            require(appExecWhitelist[_appID][msg.sender], "no permission");
        }

        if (!_isSet(mode, FREE_MODE)) {
            AppConfig storage config = appConfig[_appID];
            require(
                (_permissionlessMode && config.app == address(0)) ||
                msg.sender == config.app,
                "app not exist"
            );

            if (_isSet(_flags, FLAG_MERGE_CONFIG_FLAGS) && config.app == msg.sender) {
                _flags |= config.appFlags;
            }

            if (_isSet(_flags, FLAG_PAY_FEE_ON_SRC)) {
                uint256 fees = _calcSrcFees(_appID, _toChainID, _data.length);
                _paySrcFees(fees);
            } else if (msg.value > 0) {
                _paySrcFees(0);
            }
        }

        nonce++;
        emit LogAnyCall(msg.sender, _to, _data, _fallback, _toChainID, _flags, _appID, nonce);
    }

    /**
        @notice Execute a cross chain interaction
        @dev Only callable by the MPC
        @param _to The cross chain interaction target
        @param _data The calldata supplied for interacting with target
        @param _fallback The address to call on originating chain if the interaction fails
        @param _appID The app identifier to check whitelist
        @param _ctx The context of the request on originating chain
    */
    function anyExec(
        address _to,
        bytes memory _data,
        address _fallback,
        string memory _appID,
        RequestContext memory _ctx
    ) external lock whenNotPaused charge(_ctx.from, _ctx.flags) onlyMPC {
        address _from = _ctx.from;

        require(_fallback == address(0) || _fallback == _from, "wrong fallback");

        require(!appBlacklist[_appID], "blacklist");

        if (!_isSet(mode, PERMISSIONLESS_MODE)) {
            require(appExecWhitelist[_appID][_to], "no permission");
        }

        bytes32 uniqID = calcUniqID(_ctx.txhash, _from, _ctx.fromChainID, _ctx.nonce);
        require(!execCompleted[uniqID], "exec completed");

        bool success;
        {
            bytes memory result;
            try executor.execute(_to, _data, _from, _ctx.fromChainID, _ctx.nonce) returns (bool succ, bytes memory res) {
                (success, result) = (succ, res);
            } catch Error(string memory reason) {
                result = bytes(reason);
            } catch (bytes memory reason) {
                result = reason;
            }
            emit LogAnyExec(_ctx.txhash, _from, _to, _ctx.fromChainID, _ctx.nonce, success, result);
        }

        if (success) {
            execCompleted[uniqID] = true;
        } else if (_fallback == address(0)) {
            retryExecRecords[uniqID] = ExecRecord(_to, _data);
            emit StoreRetryExecRecord(_ctx.txhash, _from, _to, _ctx.fromChainID, _ctx.nonce, _data);
        } else {
            // Call the fallback on the originating chain with the call information (to, data)
            nonce++;
            emit LogAnyCall(
                _from,
                _fallback,
                abi.encodeWithSelector(IApp.anyFallback.selector, _to, _data),
                address(0),
                _ctx.fromChainID,
                0, // pay fee on dest chain
                _appID,
                nonce);
        }
    }

    function _isSet(uint256 _value, uint256 _testBits) internal pure returns (bool) {
        return (_value & _testBits) == _testBits;
    }

    // @notice Calc unique ID
    function calcUniqID(bytes32 _txhash, address _from, uint256 _fromChainID, uint256 _nonce) public pure returns (bytes32) {
        return keccak256(abi.encode(_txhash, _from, _fromChainID, _nonce));
    }

    /// @notice Retry stored exec record
    function retryExec(bytes32 _txhash, address _from, uint256 _fromChainID, uint256 _nonce) external {
        bytes32 uniqID = calcUniqID(_txhash, _from, _fromChainID, _nonce);
        require(!execCompleted[uniqID], "exec completed");

        ExecRecord storage record = retryExecRecords[uniqID];
        require(record.to != address(0), "no retry record");

        address _to = record.to;
        bytes memory _data = record.data;

        // Clear record
        record.to = address(0);
        record.data = "";

        (bool success,) = executor.execute(_to, _data, _from, _fromChainID, _nonce);
        require(success);

        execCompleted[uniqID] = true;
        emit DoneRetryExecRecord(_txhash, _from, _fromChainID, _nonce);
    }

    /// @notice Deposit native currency crediting `_account` for execution costs on this chain
    /// @param _account The account to deposit and credit for
    function deposit(address _account) external payable {
        executionBudget[_account] += msg.value;
        emit Deposit(_account, msg.value);
    }

    /// @notice Withdraw a previous deposit from your account
    /// @param _amount The amount to withdraw from your account
    function withdraw(uint256 _amount) external {
        executionBudget[msg.sender] -= _amount;
        emit Withdraw(msg.sender, _amount);
        (bool success,) = msg.sender.call{value: _amount}("");
        require(success);
    }

    /// @notice Withdraw all accrued execution fees
    /// @dev The MPC is credited in the native currency
    function withdrawAccruedFees() external {
        uint256 fees = _feeData.accruedFees;
        _feeData.accruedFees = 0;
        (bool success,) = mpc.call{value: fees}("");
        require(success);
    }

    /// @notice Set app blacklist
    function setBlacklist(string calldata _appID, bool _flag) external onlyAdmin {
        appBlacklist[_appID] = _flag;
        emit SetBlacklist(_appID, _flag);
    }

    /// @notice Set app blacklist in batch
    function setBlacklists(string[] calldata _appIDs, bool _flag) external onlyAdmin {
        for (uint256 i = 0; i < _appIDs.length; i++) {
            this.setBlacklist(_appIDs[i], _flag);
        }
    }

    /// @notice Set the premimum for cross chain executions
    /// @param _premium The premium per gas
    function setPremium(uint128 _premium) external onlyAdmin {
        emit UpdatePremium(_feeData.premium, _premium);
        _feeData.premium = _premium;
    }

    /// @notice Set minimum exection budget for cross chain executions
    /// @param _minBudget The minimum exection budget
    function setMinReserveBudget(uint128 _minBudget) external onlyAdmin {
        minReserveBudget = _minBudget;
    }

    /// @notice Set mode
    function setMode(uint256 _mode) external onlyAdmin {
        mode = _mode;
    }

    /// @notice Change mpc
    function changeMPC(address _mpc) external onlyMPC {
        pendingMPC = _mpc;
        emit ChangeMPC(mpc, _mpc, block.timestamp);
    }

    /// @notice Apply mpc
    function applyMPC() external {
        require(msg.sender == pendingMPC);
        emit ApplyMPC(mpc, pendingMPC, block.timestamp);
        mpc = pendingMPC;
        pendingMPC = address(0);
    }

    /// @notice Get the total accrued fees in native currency
    /// @dev Fees increase when executing cross chain requests
    function accruedFees() external view returns(uint128) {
        return _feeData.accruedFees;
    }

    /// @notice Get the gas premium cost
    /// @dev This is similar to priority fee in eip-1559, except instead of going
    ///     to the miner it is given to the MPC executing cross chain requests
    function premium() external view returns(uint128) {
        return _feeData.premium;
    }

    /// @notice Add admin
    function addAdmin(address _admin) external onlyMPC {
        require(!isAdmin[_admin]);
        isAdmin[_admin] = true;
        admins.push(_admin);
        emit AddAdmin(_admin);
    }

    /// @notice Remove admin
    function removeAdmin(address _admin) external onlyMPC {
        require(isAdmin[_admin]);
        isAdmin[_admin] = false;
        uint256 length = admins.length;
        for (uint256 i = 0; i < length - 1; i++) {
            if (admins[i] == _admin) {
                admins[i] = admins[length - 1];
                break;
            }
        }
        admins.pop();
        emit RemoveAdmin(_admin);
    }

    /// @notice Get all admins
    function getAllAdmins() external view returns (address[] memory) {
        return admins;
    }

    /// @notice Init app config
    function initAppConfig(
        string calldata _appID,
        address _app,
        address _admin,
        uint256 _flags,
        address[] calldata _whitelist
    ) external onlyAdmin {
        require(bytes(_appID).length > 0, "empty appID");
        require(_app != address(0), "zero app address");

        AppConfig storage config = appConfig[_appID];
        require(config.app == address(0), "app exist");

        appIdentifier[_app] = _appID;

        config.app = _app;
        config.appAdmin = _admin;
        config.appFlags = _flags;

        address[] memory whitelist = new address[](1+_whitelist.length);
        whitelist[0] = _app;
        for (uint256 i = 0; i < _whitelist.length; i++) {
            whitelist[i+1] = _whitelist[i];
        }
        _setAppWhitelist(_appID, whitelist, true);

        emit SetAppConfig(_appID, _app, _admin, _flags);
    }

    /// @notice Update app config
    /// can be operated only by mpc or app admin
    /// the config.app will always keep unchanged here
    function updateAppConfig(
        address _app,
        address _admin,
        uint256 _flags,
        address[] calldata _whitelist
    ) external {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");

        if (_admin != address(0)) {
            config.appAdmin = _admin;
        }
        config.appFlags = _flags;
        if (_whitelist.length > 0) {
            _setAppWhitelist(_appID, _whitelist, true);
        }

        emit SetAppConfig(_appID, _app, _admin, _flags);
    }

    /// @notice Upgrade app
    /// can be operated only by mpc or app admin
    /// change config.app to a new address
    /// require the `_newApp` is not inited
    function upgradeApp(address _oldApp, address _newApp) external {
        string memory _appID = appIdentifier[_oldApp];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _oldApp && _oldApp != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");
        require(bytes(appIdentifier[_newApp]).length == 0, "new app is inited");

        config.app = _newApp;

        emit UpgradeApp(_appID, _oldApp, _newApp);
    }

    /// @notice Add whitelist
    function addWhitelist(address _app, address[] memory _whitelist) external {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");

        _setAppWhitelist(_appID, _whitelist, true);
    }

    /// @notice Remove whitelist
    function removeWhitelist(address _app, address[] memory _whitelist) external {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(msg.sender == mpc || msg.sender == config.appAdmin, "forbid");

        _setAppWhitelist(_appID, _whitelist, false);
    }

    function _setAppWhitelist(string memory _appID, address[] memory _whitelist, bool _flag) internal {
        mapping(address => bool) storage whitelist = appExecWhitelist[_appID];
        address[] storage historyWhitelist = appHistoryWhitelist[_appID];
        address addr;
        for (uint256 i = 0; i < _whitelist.length; i++) {
            addr = _whitelist[i];
            if (whitelist[addr] == _flag) {
                continue;
            }
            if (_flag) {
                historyWhitelist.push(addr);
            }
            whitelist[addr] = _flag;
            emit SetWhitelist(_appID, addr, _flag);
        }
    }

    /// @notice Get history whitelist length
    function getHistoryWhitelistLength(string memory _appID) external view returns (uint256) {
        return appHistoryWhitelist[_appID].length;
    }

    /// @notice Get all history whitelist
    function getAllHistoryWhitelist(string memory _appID) external view returns (address[] memory) {
        return appHistoryWhitelist[_appID];
    }

    /// @notice Tidy history whitelist to be same with actual whitelist
    function tidyHistoryWhitelist(string memory _appID) external {
        mapping(address => bool) storage actualWhitelist = appExecWhitelist[_appID];
        address[] storage historyWhitelist = appHistoryWhitelist[_appID];
        uint256 histLength = historyWhitelist.length;
        uint256 popIndex = histLength;
        address addr;
        for (uint256 i = 0; i < popIndex; ) {
            addr = historyWhitelist[i];
            if (actualWhitelist[addr]) {
                i++;
            } else {
                popIndex--;
                historyWhitelist[i] = historyWhitelist[popIndex];
            }
        }
        for (uint256 i = popIndex; i < histLength; i++) {
            historyWhitelist.pop();
        }
    }

    /// @notice Set default src fees
    function setDefaultSrcFees(
        uint256[] calldata _toChainIDs,
        uint256[] calldata _baseFees,
        uint256[] calldata _feesPerByte
    ) external onlyAdmin {
        uint256 length = _toChainIDs.length;
        require(length == _baseFees.length && length == _feesPerByte.length);

        for (uint256 i = 0; i < length; i++) {
            srcDefaultFees[_toChainIDs[i]] = SrcFeeConfig(_baseFees[i], _feesPerByte[i]);
        }
    }

    /// @notice Set custom src fees
    function setCustomSrcFees(
        address _app,
        uint256[] calldata _toChainIDs,
        uint256[] calldata _baseFees,
        uint256[] calldata _feesPerByte
    ) external onlyAdmin {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];

        require(config.app == _app && _app != address(0), "app not exist");
        require(_isSet(config.appFlags, FLAG_PAY_FEE_ON_SRC), "flag not set");

        uint256 length = _toChainIDs.length;
        require(length == _baseFees.length && length == _feesPerByte.length);

        mapping(uint256 => SrcFeeConfig) storage _srcFees = srcCustomFees[_appID];
        for (uint256 i = 0; i < length; i++) {
            _srcFees[_toChainIDs[i]] = SrcFeeConfig(_baseFees[i], _feesPerByte[i]);
        }
    }

    /// @notice Set app modes
    function setAppModes(
        address _app,
        uint256 _appDefaultMode,
        uint256[] calldata _toChainIDs,
        uint256[] calldata _appCustomModes
    ) external onlyAdmin {
        string memory _appID = appIdentifier[_app];
        AppConfig storage config = appConfig[_appID];
        require(config.app == _app && _app != address(0), "app not exist");

        uint256 length = _toChainIDs.length;
        require(length == _appCustomModes.length);

        appDefaultModes[_appID] = _appDefaultMode;

        for (uint256 i = 0; i < length; i++) {
            appCustomModes[_appID][_toChainIDs[i]] = _appCustomModes[i];
        }
    }

    /// @notice Calc fees
    function calcSrcFees(
        address _app,
        uint256 _toChainID,
        uint256 _dataLength
    ) external view returns (uint256) {
        string memory _appID = appIdentifier[_app];
        return _calcSrcFees(_appID, _toChainID, _dataLength);
    }

    /// @notice Calc fees
    function calcSrcFees(
        string calldata _appID,
        uint256 _toChainID,
        uint256 _dataLength
    ) external view returns (uint256) {
        return _calcSrcFees(_appID, _toChainID, _dataLength);
    }

    /// @notice Is use custom src fees
    function isUseCustomSrcFees(string memory _appID, uint256 _toChainID) public view returns (bool) {
        uint256 _appMode = appCustomModes[_appID][_toChainID];
        if (_isSet(_appMode, APPMODE_USE_CUSTOM_SRC_FEES)) {
            return true;
        }
        _appMode = appDefaultModes[_appID];
        return _isSet(_appMode, APPMODE_USE_CUSTOM_SRC_FEES);
    }

    function _calcSrcFees(
        string memory _appID,
        uint256 _toChainID,
        uint256 _dataLength
    ) internal view returns (uint256) {
        SrcFeeConfig memory customFees = srcCustomFees[_appID][_toChainID];
        uint256 customBaseFees = customFees.baseFees;
        uint256 customFeesPerBytes = customFees.feesPerByte;

        if (isUseCustomSrcFees(_appID, _toChainID)) {
            return customBaseFees + _dataLength * customFeesPerBytes;
        }

        SrcFeeConfig memory defaultFees = srcDefaultFees[_toChainID];
        uint256 defaultBaseFees = defaultFees.baseFees;
        uint256 defaultFeesPerBytes = defaultFees.feesPerByte;

        uint256 baseFees = (customBaseFees > defaultBaseFees) ? customBaseFees : defaultBaseFees;
        uint256 feesPerByte = (customFeesPerBytes > defaultFeesPerBytes) ? customFeesPerBytes : defaultFeesPerBytes;

        return baseFees + _dataLength * feesPerByte;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"address","name":"_mpc","type":"address"},{"internalType":"uint128","name":"_premium","type":"uint128"},{"internalType":"uint256","name":"_mode","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"AddAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ApplyMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ChangeMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"DoneRetryExecRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"address","name":"_fallback","type":"address"},{"indexed":true,"internalType":"uint256","name":"toChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"flags","type":"uint256"},{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"LogAnyCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"bytes","name":"result","type":"bytes"}],"name":"LogAnyExec","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"RemoveAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"app","type":"address"},{"indexed":true,"internalType":"address","name":"appAdmin","type":"address"},{"indexed":false,"internalType":"uint256","name":"appFlags","type":"uint256"}],"name":"SetAppConfig","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SetBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"whitelist","type":"address"},{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"SetWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"StoreRetryExecRecord","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPremium","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPremium","type":"uint256"}],"name":"UpdatePremium","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"appID","type":"string"},{"indexed":true,"internalType":"address","name":"oldApp","type":"address"},{"indexed":true,"internalType":"address","name":"newApp","type":"address"}],"name":"UpgradeApp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"APPMODE_USE_CUSTOM_SRC_FEES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLAG_MERGE_CONFIG_FLAGS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FLAG_PAY_FEE_ON_SRC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_MODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMISSIONLESS_MODE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accruedFees","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"admins","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_fallback","type":"address"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_flags","type":"uint256"}],"name":"anyCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"address","name":"_fallback","type":"address"},{"internalType":"string","name":"_appID","type":"string"},{"components":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"fromChainID","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"flags","type":"uint256"}],"internalType":"struct AnyCallV6Proxy.RequestContext","name":"_ctx","type":"tuple"}],"name":"anyExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appConfig","outputs":[{"internalType":"address","name":"app","type":"address"},{"internalType":"address","name":"appAdmin","type":"address"},{"internalType":"uint256","name":"appFlags","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"appCustomModes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"appDefaultModes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"address","name":"","type":"address"}],"name":"appExecWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"appHistoryWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"appIdentifier","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"applyMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_dataLength","type":"uint256"}],"name":"calcSrcFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256","name":"_toChainID","type":"uint256"},{"internalType":"uint256","name":"_dataLength","type":"uint256"}],"name":"calcSrcFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_txhash","type":"bytes32"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_fromChainID","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"calcUniqID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_mpc","type":"address"}],"name":"changeMPC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"execCompleted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"executionBudget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"contract AnyCallExecutor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllAdmins","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"getAllHistoryWhitelist","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"getHistoryWhitelistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"address","name":"_app","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_flags","type":"uint256"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"initAppConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"uint256","name":"_toChainID","type":"uint256"}],"name":"isUseCustomSrcFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minReserveBudget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingMPC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premium","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_txhash","type":"bytes32"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_fromChainID","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"retryExec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"retryExecRecords","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256","name":"_appDefaultMode","type":"uint256"},{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_appCustomModes","type":"uint256[]"}],"name":"setAppModes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_appIDs","type":"string[]"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setBlacklists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_baseFees","type":"uint256[]"},{"internalType":"uint256[]","name":"_feesPerByte","type":"uint256[]"}],"name":"setCustomSrcFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_toChainIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"_baseFees","type":"uint256[]"},{"internalType":"uint256[]","name":"_feesPerByte","type":"uint256[]"}],"name":"setDefaultSrcFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_minBudget","type":"uint128"}],"name":"setMinReserveBudget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mode","type":"uint256"}],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"_premium","type":"uint128"}],"name":"setPremium","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"srcCustomFees","outputs":[{"internalType":"uint256","name":"baseFees","type":"uint256"},{"internalType":"uint256","name":"feesPerByte","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"srcDefaultFees","outputs":[{"internalType":"uint256","name":"baseFees","type":"uint256"},{"internalType":"uint256","name":"feesPerByte","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_appID","type":"string"}],"name":"tidyHistoryWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_app","type":"address"},{"internalType":"address","name":"_admin","type":"address"},{"internalType":"uint256","name":"_flags","type":"uint256"},{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"updateAppConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldApp","type":"address"},{"internalType":"address","name":"_newApp","type":"address"}],"name":"upgradeApp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAccruedFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260016016553480156200001657600080fd5b506040516200518d3803806200518d833981016040819052620000399162000290565b6001600160a01b038316620000875760405162461bcd60e51b815260206004820152601060248201526f7a65726f206d7063206164647265737360801b604482015260640160405180910390fd5b6001600160a01b03841615620000ec576001600160a01b0384166000818152600960205260408120805460ff19166001908117909155600a805491820181559091526000805160206200516d8339815191520180546001600160a01b03191690911790555b836001600160a01b0316836001600160a01b0316146200015b576001600160a01b0383166000818152600960205260408120805460ff19166001908117909155600a805491820181559091526000805160206200516d8339815191520180546001600160a01b03191690911790555b600b80546001600160a01b0385166001600160a01b0319909116179055601180546001600160801b03808516600160801b029116179055600d819055604051620001a59062000265565b604051809103906000f080158015620001c2573d6000803e3d6000fd5b50601280546001600160a01b0319166001600160a01b03928316179055604051428152908416906000907fa2e29fe96457476993f3188189d22408c86df0c977ec90a31b979c899800d0659060200160405180910390a360408051600081526001600160801b03841660208201527fec6b0785fd83ba51c66ca8c8bb1e4fbdd02a0cced0457a21583fdf399eb3e000910160405180910390a150505050620002f0565b6104d28062004c9b83390190565b80516001600160a01b03811681146200028b57600080fd5b919050565b60008060008060808587031215620002a757600080fd5b620002b28562000273565b9350620002c26020860162000273565b60408601519093506001600160801b0381168114620002e057600080fd5b6060959095015193969295505050565b61499b80620003006000396000f3fe60806040526004361061038b5760003560e01c806384271a6c116101dc578063bd45c4e711610102578063d8f1bd68116100a0578063f340fa011161006f578063f340fa0114610b98578063f75c266414610bab578063f830e7b414610bcb578063fadd10a214610beb57600080fd5b8063d8f1bd6814610b0e578063dfde3fdb14610b2e578063e0a73a9314610b5e578063e9523c9714610b8357600080fd5b8063c1e26e33116100dc578063c1e26e3314610aae578063c3294bb5146105bb578063c34c08e514610ace578063d72dd3b414610aee57600080fd5b8063bd45c4e714610a7b578063bf5d3f2414610a8e578063c0ab8899146109af57600080fd5b8063ab818db71161017a578063afdd2aed11610149578063afdd2aed146109f9578063b041758714610a19578063b63b38d014610a46578063b854bb5614610a5b57600080fd5b8063ab818db71461098f578063ac61b46f146109af578063ada82c7d146109c4578063aeb79211146109d957600080fd5b806395ec1be8116101b657806395ec1be8146105bb57806397f8a94f146109045780639a295d4914610924578063a86529d81461094457600080fd5b806384271a6c1461087557806389168e1814610895578063908c07c5146108b557600080fd5b806354b09ac5116102c1578063682c20581161025f578063732a8eda1161022e578063732a8eda146107c357806374bdda60146107fb578063796a9e43146108285780637a67bbf91461085557600080fd5b8063682c2058146107095780636c0cf7b71461073b5780636e6e8a021461078357806370480275146107a357600080fd5b80635c975abb1161029b5780635c975abb146106665780635ffdc9ca14610680578063667cb4b7146106c957806366c96b37146106e957600080fd5b806354b09ac5146106105780635689f039146106305780635b7b018c1461064657600080fd5b80632898bff81161032e578063304281cb11610308578063304281cb1461053c5780633083d598146105bb578063439b3e1c146105d05780634a578150146105f057600080fd5b80632898bff8146104d8578063295a5212146104f85780632e1a7d4d1461051c57600080fd5b80631785f53c1161036a5780631785f53c1461043a57806322b6a4e11461045a57806324d7806c146104885780632687b2b1146104b857600080fd5b80626a5fa11461039057806314bfd6d0146103e057806316c38b3c14610418575b600080fd5b34801561039c57600080fd5b506103cb6103ab366004613b0a565b805160208183018101805160048252928201919093012091525460ff1681565b60405190151581526020015b60405180910390f35b3480156103ec57600080fd5b506104006103fb366004613b3e565b610c0b565b6040516001600160a01b0390911681526020016103d7565b34801561042457600080fd5b50610438610433366004613b65565b610c35565b005b34801561044657600080fd5b50610438610455366004613b9e565b610c80565b34801561046657600080fd5b5061047a610475366004613b3e565b610e43565b6040516103d7929190613c11565b34801561049457600080fd5b506103cb6104a3366004613b9e565b60096020526000908152604090205460ff1681565b3480156104c457600080fd5b506104386104d3366004613cc9565b610ef2565b3480156104e457600080fd5b506104386104f3366004613d66565b611207565b34801561050457600080fd5b5061050e600d5481565b6040519081526020016103d7565b34801561052857600080fd5b50610438610537366004613b3e565b611244565b34801561054857600080fd5b50610595610557366004613b0a565b805180820160209081018051600180835293830192909401919091209290528154908201546002909201546001600160a01b03918216929091169083565b604080516001600160a01b039485168152939092166020840152908201526060016103d7565b3480156105c757600080fd5b5061050e600181565b3480156105dc57600080fd5b506104386105eb366004613d66565b611302565b3480156105fc57600080fd5b5061043861060b366004613d8f565b61139e565b34801561061c57600080fd5b5061050e61062b366004613e86565b611a8f565b34801561063c57600080fd5b5061050e600f5481565b34801561065257600080fd5b50610438610661366004613b9e565b611ad6565b34801561067257600080fd5b50600e546103cb9060ff1681565b34801561068c57600080fd5b506106b461069b366004613b3e565b6005602052600090815260409020805460019091015482565b604080519283526020830191909152016103d7565b3480156106d557600080fd5b506104386106e4366004613ec1565b611b5c565b3480156106f557600080fd5b5061050e610704366004613ef4565b611d69565b34801561071557600080fd5b506011546001600160801b03165b6040516001600160801b0390911681526020016103d7565b34801561074757600080fd5b5061050e610756366004613f44565b81516020818401810180516008825292820194820194909420919093529091526000908152604090205481565b34801561078f57600080fd5b5061043861079e366004613f88565b611db7565b3480156107af57600080fd5b506104386107be366004613b9e565b611f12565b3480156107cf57600080fd5b5061050e6107de366004613b0a565b805160208183018101805160078252928201919093012091525481565b34801561080757600080fd5b5061050e610816366004613b9e565b60106020526000908152604090205481565b34801561083457600080fd5b50610848610843366004613b0a565b611ffe565b6040516103d79190614048565b34801561086157600080fd5b50610438610870366004614095565b612078565b34801561088157600080fd5b50610438610890366004613e86565b612140565b3480156108a157600080fd5b506104386108b03660046140eb565b6123b7565b3480156108c157600080fd5b506106b46108d0366004613f44565b8151602081840181018051600682529282019482019490942091909352909152600090815260409020805460019091015482565b34801561091057600080fd5b5061040061091f366004613f44565b6124a7565b34801561093057600080fd5b5061043861093f366004614184565b6124ee565b34801561095057600080fd5b506103cb61095f3660046141ee565b81516020818401810180516002825292820194820194909420919093529091526000908152604090205460ff1681565b34801561099b57600080fd5b5061050e6109aa366004614232565b6126e1565b3480156109bb57600080fd5b5061050e600281565b3480156109d057600080fd5b5061043861279d565b3480156109e557600080fd5b506104386109f4366004614265565b6127de565b348015610a0557600080fd5b50610438610a143660046142d3565b6129f7565b348015610a2557600080fd5b50610a39610a34366004613b9e565b612c58565b6040516103d7919061435d565b348015610a5257600080fd5b50610438612cf2565b348015610a6757600080fd5b506103cb610a76366004613f44565b612d79565b610438610a89366004614370565b612df1565b348015610a9a57600080fd5b50610438610aa93660046143e6565b61316a565b348015610aba57600080fd5b50610438610ac9366004613b0a565b61320b565b348015610ada57600080fd5b50601254610400906001600160a01b031681565b348015610afa57600080fd5b50610438610b09366004613b3e565b61338d565b348015610b1a57600080fd5b50610438610b29366004613f88565b6133c1565b348015610b3a57600080fd5b506103cb610b49366004613b3e565b60146020526000908152604090205460ff1681565b348015610b6a57600080fd5b50601154600160801b90046001600160801b0316610723565b348015610b8f57600080fd5b50610848613516565b610438610ba6366004613b9e565b613578565b348015610bb757600080fd5b50600b54610400906001600160a01b031681565b348015610bd757600080fd5b50600c54610400906001600160a01b031681565b348015610bf757600080fd5b5061050e610c06366004613b0a565b6135e6565b600a8181548110610c1b57600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526009602052604090205460ff16610c6d5760405162461bcd60e51b8152600401610c649061441d565b60405180910390fd5b600e805460ff1916911515919091179055565b600b546001600160a01b03163314610caa5760405162461bcd60e51b8152600401610c6490614441565b6001600160a01b03811660009081526009602052604090205460ff16610ccf57600080fd5b6001600160a01b0381166000908152600960205260408120805460ff19169055600a54905b610cff600183614479565b811015610dcc57826001600160a01b0316600a8281548110610d2357610d23614490565b6000918252602090912001546001600160a01b03161415610dba57600a610d4b600184614479565b81548110610d5b57610d5b614490565b600091825260209091200154600a80546001600160a01b039092169183908110610d8757610d87614490565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610dcc565b80610dc4816144a6565b915050610cf4565b50600a805480610dde57610dde6144c1565b6000828152602090819020600019908301810180546001600160a01b03191690559091019091556040516001600160a01b03841681527f753f40ca3312b2408759a67875b367955e7baa221daf08aa3d643d96202ac12b910160405180910390a15050565b601360205260009081526040902080546001820180546001600160a01b039092169291610e6f906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9b906144d7565b8015610ee85780601f10610ebd57610100808354040283529160200191610ee8565b820191906000526020600020905b815481529060010190602001808311610ecb57829003601f168201915b5050505050905082565b3360009081526009602052604090205460ff16610f215760405162461bcd60e51b8152600401610c649061441d565b85610f5c5760405162461bcd60e51b815260206004820152600b60248201526a195b5c1d1e48185c1c125160aa1b6044820152606401610c64565b6001600160a01b038516610fa55760405162461bcd60e51b815260206004820152601060248201526f7a65726f20617070206164647265737360801b6044820152606401610c64565b600060018888604051610fb9929190614512565b90815260405190819003602001902080549091506001600160a01b03161561100f5760405162461bcd60e51b8152602060048201526009602482015268185c1c08195e1a5cdd60ba1b6044820152606401610c64565b6001600160a01b0386166000908152602081905260409020611032908989613909565b5080546001600160a01b038088166001600160a01b031992831617835560018084018054928916929093169190911790915560028201859055600090611079908490614522565b6001600160401b0381111561109057611090613a16565b6040519080825280602002602001820160405280156110b9578160200160208202803683370190505b50905086816000815181106110d0576110d0614490565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b838110156111685784848281811061110d5761110d614490565b90506020020160208101906111229190613b9e565b8261112e836001614522565b8151811061113e5761113e614490565b6001600160a01b039092166020928302919091019091015280611160816144a6565b9150506110f3565b506111ad89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592506001915061360e9050565b856001600160a01b0316876001600160a01b03167fe6814e9c971e79d8cfa0cb8a20ef274c921710f5df7a6e19ca62fb272dc45cf58b8b896040516111f493929190614563565b60405180910390a3505050505050505050565b3360009081526009602052604090205460ff166112365760405162461bcd60e51b8152600401610c649061441d565b6001600160801b0316600f55565b3360009081526010602052604081208054839290611263908490614479565b909155505060405181815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a26000336001600160a01b0316826040515b60006040518083038185875af1925050503d80600081146112eb576040519150601f19603f3d011682016040523d82523d6000602084013e6112f0565b606091505b50509050806112fe57600080fd5b5050565b3360009081526009602052604090205460ff166113315760405162461bcd60e51b8152600401610c649061441d565b60115460408051600160801b9092046001600160801b039081168352831660208301527fec6b0785fd83ba51c66ca8c8bb1e4fbdd02a0cced0457a21583fdf399eb3e000910160405180910390a1601180546001600160801b03928316600160801b029216919091179055565b6016546001146113ad57600080fd5b6000601655600e5460ff16156113ee5760405162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b6044820152606401610c64565b806020015181608001516000611409600d5460029081161490565b61148a5760028083161461148a57600f546001600160a01b03841660009081526010602052604090205410156114785760405162461bcd60e51b81526020600482015260146024820152731b195cdcc81d1a185b881b5a5b88189d5919d95d60621b6044820152606401610c64565b620186a05a6114879190614522565b90505b600b546001600160a01b031633146114b45760405162461bcd60e51b8152600401610c6490614441565b60208401516001600160a01b03871615806114e05750806001600160a01b0316876001600160a01b0316145b61151d5760405162461bcd60e51b815260206004820152600e60248201526d77726f6e672066616c6c6261636b60901b6044820152606401610c64565b60048660405161152d9190614587565b9081526040519081900360200190205460ff16156115795760405162461bcd60e51b8152602060048201526009602482015268189b1858dadb1a5cdd60ba1b6044820152606401610c64565b600d546001908116146115fa576002866040516115969190614587565b90815260408051602092819003830190206001600160a01b038c166000908152925290205460ff166115fa5760405162461bcd60e51b815260206004820152600d60248201526c3737903832b936b4b9b9b4b7b760991b6044820152606401610c64565b600061161486600001518388604001518960600151611a8f565b60008181526014602052604090205490915060ff16156116675760405162461bcd60e51b815260206004820152600e60248201526d195e1958c818dbdb5c1b195d195960921b6044820152606401610c64565b60006060601260009054906101000a90046001600160a01b03166001600160a01b031663978802398d8d878c604001518d606001516040518663ffffffff1660e01b81526004016116bc9594939291906145a3565b6000604051808303816000875af19250505080156116fc57506040513d6000823e601f3d908101601f191682016040526116f991908101906145e1565b60015b61176857611708614678565b806308c379a0141561172f575061171d614694565b806117285750611731565b905061176e565b505b3d80801561175b576040519150601f19603f3d011682016040523d82523d6000602084013e611760565b606091505b50905061176e565b90925090505b8b6001600160a01b0316846001600160a01b031689600001517f0a2dd9a3c77dd69c3b4a5c5ef91fe5f43dfa5365029792e918b9db16ad2c35aa8b604001518c6060015187876040516117c4949392919061471d565b60405180910390a45080156117f1576000828152601460205260409020805460ff1916600117905561197b565b6001600160a01b0389166118bd576040805180820182526001600160a01b038d8116825260208083018e815260008781526013835294909420835181546001600160a01b03191693169290921782559251805192939192611858926001850192019061398d565b509050508a6001600160a01b0316836001600160a01b031688600001517fdad73de9dcb4c7934ccf673a532ca1547846f401631886090cb5c83c2e9ccd498a604001518b606001518f6040516118b09392919061474e565b60405180910390a461197b565b601580549060006118cd836144a6565b91905055508660400151896001600160a01b0316846001600160a01b03167fa17aef042e1a5dd2b8e68f0d0d92f9a6a0b35dc25be1d12c0cb3135bfd8951c963a35fe8bf60e01b8f8f604051602401611927929190613c11565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506000808e60155460405161197295949392919061476d565b60405180910390a45b505081159050611a80576011546000906119a590600160801b90046001600160801b03163a614522565b5a6119b09084614479565b6119ba91906147bb565b6001600160a01b038516600090815260106020526040902054909150818111611a185760405162461bcd60e51b815260206004820152601060248201526f1b9bc8195b9bdd59da08189d5919d95d60821b6044820152606401610c64565b611a228282614479565b6001600160a01b03861660009081526010602052604081209190915560118054849290611a599084906001600160801b03166147da565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555050505b50506001601655505050505050565b604080516020808201969096526001600160a01b03949094168482015260608401929092526080808401919091528151808403909101815260a09092019052805191012090565b600b546001600160a01b03163314611b005760405162461bcd60e51b8152600401610c6490614441565b600c80546001600160a01b0319166001600160a01b03838116918217909255600b54604051428152919216907f587ad0bc9a6955b6c850bc4f90ab8c66b32e2a6919d4244e459ac74ffa4a88849060200160405180910390a350565b6001600160a01b03821660009081526020819052604081208054611b7f906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611bab906144d7565b8015611bf85780601f10611bcd57610100808354040283529160200191611bf8565b820191906000526020600020905b815481529060010190602001808311611bdb57829003601f168201915b505050505090506000600182604051611c119190614587565b90815260405190819003602001902080549091506001600160a01b03908116908516148015611c4857506001600160a01b03841615155b611c645760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b0316331480611c89575060018101546001600160a01b031633145b611ca55760405162461bcd60e51b8152600401610c649061482c565b6001600160a01b03831660009081526020819052604090208054611cc8906144d7565b159050611d0b5760405162461bcd60e51b81526020600482015260116024820152701b995dc8185c1c081a5cc81a5b9a5d1959607a1b6044820152606401610c64565b80546001600160a01b0319166001600160a01b038481169182178355604051908616907fd037ce9f8e96b2c7cdea421a50a484949e5f9e1e4914834059493cbfbf65862290611d5b90869061435d565b60405180910390a350505050565b6000611dae85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508792508691506137509050565b95945050505050565b6001600160a01b03821660009081526020819052604081208054611dda906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e06906144d7565b8015611e535780601f10611e2857610100808354040283529160200191611e53565b820191906000526020600020905b815481529060010190602001808311611e3657829003601f168201915b505050505090506000600182604051611e6c9190614587565b90815260405190819003602001902080549091506001600160a01b03908116908516148015611ea357506001600160a01b03841615155b611ebf5760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b0316331480611ee4575060018101546001600160a01b031633145b611f005760405162461bcd60e51b8152600401610c649061482c565b611f0c8284600161360e565b50505050565b600b546001600160a01b03163314611f3c5760405162461bcd60e51b8152600401610c6490614441565b6001600160a01b03811660009081526009602052604090205460ff1615611f6257600080fd5b6001600160a01b0381166000818152600960209081526040808320805460ff19166001908117909155600a805491820181559093527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890920180546001600160a01b0319168417905590519182527fad6de4452a631e641cb59902236607946ce9272b9b981f2f80e8d129cb9084ba910160405180910390a150565b60606003826040516120109190614587565b908152604080519182900360209081018320805480830285018301909352828452919083018282801561206c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161204e575b50505050509050919050565b3360009081526009602052604090205460ff166120a75760405162461bcd60e51b8152600401610c649061441d565b60005b82811015611f0c573063bf5d3f248585848181106120ca576120ca614490565b90506020028101906120dc919061484c565b856040518463ffffffff1660e01b81526004016120fb93929190614892565b600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b505050508080612138906144a6565b9150506120aa565b600061214e85858585611a8f565b60008181526014602052604090205490915060ff16156121a15760405162461bcd60e51b815260206004820152600e60248201526d195e1958c818dbdb5c1b195d195960921b6044820152606401610c64565b600081815260136020526040902080546001600160a01b03166121f85760405162461bcd60e51b815260206004820152600f60248201526e1b9bc81c995d1c9e481c9958dbdc99608a1b6044820152606401610c64565b80546001820180546001600160a01b039092169160009190612219906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612245906144d7565b80156122925780601f1061226757610100808354040283529160200191612292565b820191906000526020600020905b81548152906001019060200180831161227557829003601f168201915b505086546001600160a01b031916875550506040805160208101918290526000908190529293506122c89260018701925061398d565b50601254604051639788023960e01b81526000916001600160a01b03169063978802399061230290869086908d908d908d906004016145a3565b6000604051808303816000875af1158015612321573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261234991908101906145e1565b5090508061235657600080fd5b60008581526014602052604090819020805460ff19166001179055516001600160a01b038916908a907f819e22d91cf6246af3647f0722340d66b71cae69d9c6b1cbbf015ed0ec46c9c4906111f4908b908b90918252602082015260400190565b3360009081526009602052604090205460ff166123e65760405162461bcd60e51b8152600401610c649061441d565b8483811480156123f557508082145b6123fe57600080fd5b60005b8181101561249d57604051806040016040528087878481811061242657612426614490565b90506020020135815260200185858481811061244457612444614490565b90506020020135815250600560008a8a8581811061246457612464614490565b60209081029290920135835250818101929092526040016000208251815591015160019091015580612495816144a6565b915050612401565b5050505050505050565b815160208184018101805160038252928201918501919091209190528054829081106124d257600080fd5b6000918252602090912001546001600160a01b03169150829050565b3360009081526009602052604090205460ff1661251d5760405162461bcd60e51b8152600401610c649061441d565b6001600160a01b03861660009081526020819052604081208054612540906144d7565b80601f016020809104026020016040519081016040528092919081815260200182805461256c906144d7565b80156125b95780601f1061258e576101008083540402835291602001916125b9565b820191906000526020600020905b81548152906001019060200180831161259c57829003601f168201915b5050505050905060006001826040516125d29190614587565b90815260405190819003602001902080549091506001600160a01b0390811690891614801561260957506001600160a01b03881615155b6126255760405162461bcd60e51b8152600401610c6490614805565b8483811461263257600080fd5b876007846040516126439190614587565b9081526040519081900360200190205560005b818110156126d55785858281811061267057612670614490565b905060200201356008856040516126879190614587565b908152602001604051809103902060008a8a858181106126a9576126a9614490565b9050602002013581526020019081526020016000208190555080806126cd906144a6565b915050612656565b50505050505050505050565b6001600160a01b03831660009081526020819052604081208054829190612707906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612733906144d7565b80156127805780601f1061275557610100808354040283529160200191612780565b820191906000526020600020905b81548152906001019060200180831161276357829003601f168201915b50505050509050612792818585613750565b9150505b9392505050565b601180546fffffffffffffffffffffffffffffffff198116909155600b546040516001600160801b03909216916000916001600160a01b03169083906112ae565b6001600160a01b03851660009081526020819052604081208054612801906144d7565b80601f016020809104026020016040519081016040528092919081815260200182805461282d906144d7565b801561287a5780601f1061284f5761010080835404028352916020019161287a565b820191906000526020600020905b81548152906001019060200180831161285d57829003601f168201915b5050505050905060006001826040516128939190614587565b90815260405190819003602001902080549091506001600160a01b039081169088161480156128ca57506001600160a01b03871615155b6128e65760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b031633148061290b575060018101546001600160a01b031633145b6129275760405162461bcd60e51b8152600401610c649061482c565b6001600160a01b03861615612954576001810180546001600160a01b0319166001600160a01b0388161790555b6002810185905582156129a1576129a1828585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506001925061360e915050565b856001600160a01b0316876001600160a01b03167fe6814e9c971e79d8cfa0cb8a20ef274c921710f5df7a6e19ca62fb272dc45cf584886040516129e69291906148b8565b60405180910390a350505050505050565b3360009081526009602052604090205460ff16612a265760405162461bcd60e51b8152600401610c649061441d565b6001600160a01b03871660009081526020819052604081208054612a49906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612a75906144d7565b8015612ac25780601f10612a9757610100808354040283529160200191612ac2565b820191906000526020600020905b815481529060010190602001808311612aa557829003601f168201915b505050505090506000600182604051612adb9190614587565b90815260405190819003602001902080549091506001600160a01b03908116908a16148015612b1257506001600160a01b03891615155b612b2e5760405162461bcd60e51b8152600401610c6490614805565b600280820154811614612b725760405162461bcd60e51b815260206004820152600c60248201526b199b1859c81b9bdd081cd95d60a21b6044820152606401610c64565b868581148015612b8157508084145b612b8a57600080fd5b6000600684604051612b9c9190614587565b9081526020016040518091039020905060005b82811015612c4a5760405180604001604052808a8a84818110612bd457612bd4614490565b905060200201358152602001888884818110612bf257612bf2614490565b905060200201358152508260008d8d85818110612c1157612c11614490565b60209081029290920135835250818101929092526040016000208251815591015160019091015580612c42816144a6565b915050612baf565b505050505050505050505050565b60006020819052908152604090208054612c71906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612c9d906144d7565b8015612cea5780601f10612cbf57610100808354040283529160200191612cea565b820191906000526020600020905b815481529060010190602001808311612ccd57829003601f168201915b505050505081565b600c546001600160a01b03163314612d0957600080fd5b600c54600b546040514281526001600160a01b0392831692909116907fa2e29fe96457476993f3188189d22408c86df0c977ec90a31b979c899800d0659060200160405180910390a3600c8054600b80546001600160a01b03199081166001600160a01b03841617909155169055565b600080600884604051612d8c9190614587565b908152604080516020928190038301902060008681529252902054905060018082161415612dbe576001915050612deb565b600784604051612dce9190614587565b9081526040519081900360200190205490506001808216145b9150505b92915050565b601654600114612e0057600080fd5b6000601655600e5460ff1615612e415760405162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b6044820152606401610c64565b6001600160a01b0383161580612e5f57506001600160a01b03831633145b612e9c5760405162461bcd60e51b815260206004820152600e60248201526d77726f6e672066616c6c6261636b60901b6044820152606401610c64565b3360009081526020819052604081208054612eb6906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054612ee2906144d7565b8015612f2f5780601f10612f0457610100808354040283529160200191612f2f565b820191906000526020600020905b815481529060010190602001808311612f1257829003601f168201915b50505050509050600481604051612f469190614587565b9081526040519081900360200190205460ff1615612f925760405162461bcd60e51b8152602060048201526009602482015268189b1858dadb1a5cdd60ba1b6044820152606401610c64565b6000612fa3600d5460019081161490565b90508061301557600282604051612fba9190614587565b9081526040805160209281900383019020336000908152925290205460ff166130155760405162461bcd60e51b815260206004820152600d60248201526c3737903832b936b4b9b9b4b7b760991b6044820152606401610c64565b600d546002908116146130ee5760006001836040516130349190614587565b90815260200160405180910390209050818015613059575080546001600160a01b0316155b8061306d575080546001600160a01b031633145b6130895760405162461bcd60e51b8152600401610c6490614805565b60018085161480156130a4575080546001600160a01b031633145b156130b3578060020154841793505b600280851614156130dc5760006130cb84878a613750565b90506130d68161383d565b506130ec565b34156130ec576130ec600061383d565b505b601580549060006130fe836144a6565b919050555083886001600160a01b0316336001600160a01b03167fa17aef042e1a5dd2b8e68f0d0d92f9a6a0b35dc25be1d12c0cb3135bfd8951c98a8a8a8989601554604051613153969594939291906148da565b60405180910390a450506001601655505050505050565b3360009081526009602052604090205460ff166131995760405162461bcd60e51b8152600401610c649061441d565b80600484846040516131ac929190614512565b908152604051908190036020018120805492151560ff19909316929092179091557f8450ad9faca1edf7a8a033ed0adf98a354d14b22658565ca76f3e11e881947c1906131fe90859085908590614892565b60405180910390a1505050565b600060028260405161321d9190614587565b90815260200160405180910390209050600060038360405161323f9190614587565b9081526040519081900360200190208054909150806000805b828110156133355784818154811061327257613272614490565b60009182526020808320909101546001600160a01b03168083529088905260409091205490925060ff16156132b357806132ab816144a6565b915050613258565b826132bd8161492a565b9350508483815481106132d2576132d2614490565b9060005260206000200160009054906101000a90046001600160a01b031685828154811061330257613302614490565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550613258565b50815b838110156133845784805480613350576133506144c1565b600082815260209020810160001990810180546001600160a01b03191690550190558061337c816144a6565b915050613338565b50505050505050565b3360009081526009602052604090205460ff166133bc5760405162461bcd60e51b8152600401610c649061441d565b600d55565b6001600160a01b038216600090815260208190526040812080546133e4906144d7565b80601f0160208091040260200160405190810160405280929190818152602001828054613410906144d7565b801561345d5780601f106134325761010080835404028352916020019161345d565b820191906000526020600020905b81548152906001019060200180831161344057829003601f168201915b5050505050905060006001826040516134769190614587565b90815260405190819003602001902080549091506001600160a01b039081169085161480156134ad57506001600160a01b03841615155b6134c95760405162461bcd60e51b8152600401610c6490614805565b600b546001600160a01b03163314806134ee575060018101546001600160a01b031633145b61350a5760405162461bcd60e51b8152600401610c649061482c565b611f0c8284600061360e565b6060600a80548060200260200160405190810160405280929190818152602001828054801561356e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613550575b5050505050905090565b6001600160a01b038116600090815260106020526040812080543492906135a0908490614522565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b60006003826040516135f89190614587565b9081526040519081900360200190205492915050565b60006002846040516136209190614587565b9081526020016040518091039020905060006003856040516136429190614587565b90815260405190819003602001902090506000805b85518110156133845785818151811061367257613672614490565b6020908102919091018101516001600160a01b03811660009081529186905260409091205490925060ff16151585151514156136ad5761373e565b84156136df5782546001810184556000848152602090200180546001600160a01b0319166001600160a01b0384161790555b6001600160a01b03821660008181526020869052604090819020805460ff1916881515179055517f5059f2158bd5a3ba277fdb58bf30871e09bae3987abede6055be2e87bbf7f79690613735908a908990614941565b60405180910390a25b80613748816144a6565b915050613657565b6000806006856040516137639190614587565b9081526040805160209281900383018120600088815290845282902081830190925281548082526001909201549281018390529250906137a38787612d79565b156137c6576137b281866147bb565b6137bc9083614522565b9350505050612796565b60008681526005602090815260408083208151808301909252805480835260019091015492820183905290929091908286116138025782613804565b855b905060008286116138155782613817565b855b9050613823818b6147bb565b61382d9083614522565b9c9b505050505050505050505050565b803410156138815760405162461bcd60e51b81526020600482015260116024820152706e6f20656e6f756768207372632066656560781b6044820152606401610c64565b80156138e957600b546040516000916001600160a01b03169083908381818185875af1925050503d80600081146138d4576040519150601f19603f3d011682016040523d82523d6000602084013e6138d9565b606091505b50509050806138e757600080fd5b505b80341115613906576000336138fe8334614479565b6040516112ae565b50565b828054613915906144d7565b90600052602060002090601f016020900481019282613937576000855561397d565b82601f106139505782800160ff1982351617855561397d565b8280016001018555821561397d579182015b8281111561397d578235825591602001919060010190613962565b50613989929150613a01565b5090565b828054613999906144d7565b90600052602060002090601f0160209004810192826139bb576000855561397d565b82601f106139d457805160ff191683800117855561397d565b8280016001018555821561397d579182015b8281111561397d5782518255916020019190600101906139e6565b5b808211156139895760008155600101613a02565b634e487b7160e01b600052604160045260246000fd5b60a081018181106001600160401b0382111715613a4b57613a4b613a16565b60405250565b601f8201601f191681016001600160401b0381118282101715613a7657613a76613a16565b6040525050565b60006001600160401b03821115613a9657613a96613a16565b50601f01601f191660200190565b6000613aaf83613a7d565b604051613abc8282613a51565b809250848152858585011115613ad157600080fd5b8484602083013760006020868301015250509392505050565b600082601f830112613afb57600080fd5b61279683833560208501613aa4565b600060208284031215613b1c57600080fd5b81356001600160401b03811115613b3257600080fd5b612de784828501613aea565b600060208284031215613b5057600080fd5b5035919050565b801515811461390657600080fd5b600060208284031215613b7757600080fd5b813561279681613b57565b80356001600160a01b0381168114613b9957600080fd5b919050565b600060208284031215613bb057600080fd5b61279682613b82565b60005b83811015613bd4578181015183820152602001613bbc565b83811115611f0c5750506000910152565b60008151808452613bfd816020860160208601613bb9565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090613c3590830184613be5565b949350505050565b60008083601f840112613c4f57600080fd5b5081356001600160401b03811115613c6657600080fd5b602083019150836020828501011115613c7e57600080fd5b9250929050565b60008083601f840112613c9757600080fd5b5081356001600160401b03811115613cae57600080fd5b6020830191508360208260051b8501011115613c7e57600080fd5b600080600080600080600060a0888a031215613ce457600080fd5b87356001600160401b0380821115613cfb57600080fd5b613d078b838c01613c3d565b9099509750879150613d1b60208b01613b82565b9650613d2960408b01613b82565b955060608a0135945060808a0135915080821115613d4657600080fd5b50613d538a828b01613c85565b989b979a50959850939692959293505050565b600060208284031215613d7857600080fd5b81356001600160801b038116811461279657600080fd5b6000806000806000858703610120811215613da957600080fd5b613db287613b82565b955060208701356001600160401b0380821115613dce57600080fd5b818901915089601f830112613de257600080fd5b613df18a833560208501613aa4565b9650613dff60408a01613b82565b95506060890135915080821115613e1557600080fd5b50613e2289828a01613aea565b93505060a0607f1982011215613e3757600080fd5b50604051613e4481613a2c565b60808701358152613e5760a08801613b82565b602082015260c0870135604082015260e087013560608201526101009096013560808701525092959194509290565b60008060008060808587031215613e9c57600080fd5b84359350613eac60208601613b82565b93969395505050506040820135916060013590565b60008060408385031215613ed457600080fd5b613edd83613b82565b9150613eeb60208401613b82565b90509250929050565b60008060008060608587031215613f0a57600080fd5b84356001600160401b03811115613f2057600080fd5b613f2c87828801613c3d565b90989097506020870135966040013595509350505050565b60008060408385031215613f5757600080fd5b82356001600160401b03811115613f6d57600080fd5b613f7985828601613aea565b95602094909401359450505050565b60008060408385031215613f9b57600080fd5b613fa483613b82565b91506020808401356001600160401b0380821115613fc157600080fd5b818601915086601f830112613fd557600080fd5b813581811115613fe757613fe7613a16565b8060051b9150604051613ffc85840182613a51565b8181529183018401918481018984111561401557600080fd5b938501935b838510156140385761402b85613b82565b815293850193850161401a565b5080955050505050509250929050565b6020808252825182820181905260009190848201906040850190845b818110156140895783516001600160a01b031683529284019291840191600101614064565b50909695505050505050565b6000806000604084860312156140aa57600080fd5b83356001600160401b038111156140c057600080fd5b6140cc86828701613c85565b90945092505060208401356140e081613b57565b809150509250925092565b6000806000806000806060878903121561410457600080fd5b86356001600160401b038082111561411b57600080fd5b6141278a838b01613c85565b9098509650602089013591508082111561414057600080fd5b61414c8a838b01613c85565b9096509450604089013591508082111561416557600080fd5b5061417289828a01613c85565b979a9699509497509295939492505050565b6000806000806000806080878903121561419d57600080fd5b6141a687613b82565b95506020870135945060408701356001600160401b03808211156141c957600080fd5b6141d58a838b01613c85565b9096509450606089013591508082111561416557600080fd5b6000806040838503121561420157600080fd5b82356001600160401b0381111561421757600080fd5b61422385828601613aea565b925050613eeb60208401613b82565b60008060006060848603121561424757600080fd5b61425084613b82565b95602085013595506040909401359392505050565b60008060008060006080868803121561427d57600080fd5b61428686613b82565b945061429460208701613b82565b93506040860135925060608601356001600160401b038111156142b657600080fd5b6142c288828901613c85565b969995985093965092949392505050565b60008060008060008060006080888a0312156142ee57600080fd5b6142f788613b82565b965060208801356001600160401b038082111561431357600080fd5b61431f8b838c01613c85565b909850965060408a013591508082111561433857600080fd5b6143448b838c01613c85565b909650945060608a0135915080821115613d4657600080fd5b6020815260006127966020830184613be5565b60008060008060008060a0878903121561438957600080fd5b61439287613b82565b955060208701356001600160401b038111156143ad57600080fd5b6143b989828a01613c3d565b90965094506143cc905060408801613b82565b925060608701359150608087013590509295509295509295565b6000806000604084860312156143fb57600080fd5b83356001600160401b0381111561441157600080fd5b6140cc86828701613c3d565b6020808252600a908201526937b7363c9030b236b4b760b11b604082015260600190565b6020808252600890820152676f6e6c79204d504360c01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561448b5761448b614463565b500390565b634e487b7160e01b600052603260045260246000fd5b60006000198214156144ba576144ba614463565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600181811c908216806144eb57607f821691505b6020821081141561450c57634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6000821982111561453557614535614463565b500190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600061457760408301858761453a565b9050826020830152949350505050565b60008251614599818460208701613bb9565b9190910192915050565b600060018060a01b03808816835260a060208401526145c560a0840188613be5565b9516604083015250606081019290925260809091015292915050565b600080604083850312156145f457600080fd5b82516145ff81613b57565b60208401519092506001600160401b0381111561461b57600080fd5b8301601f8101851361462c57600080fd5b805161463781613a7d565b6040516146448282613a51565b82815287602084860101111561465957600080fd5b61466a836020830160208701613bb9565b809450505050509250929050565b600060033d11156146915760046000803e5060005160e01c5b90565b600060443d10156146a25790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156146d157505050505090565b82850191508151818111156146e95750505050505090565b843d87010160208285010111156147035750505050505090565b61471260208286010187613a51565b509095945050505050565b84815283602082015282151560408201526080606082015260006147446080830184613be5565b9695505050505050565b838152826020820152606060408201526000611dae6060830184613be5565b60a08152600061478060a0830188613be5565b6001600160a01b03871660208401526040830186905282810360608401526147a88186613be5565b9150508260808301529695505050505050565b60008160001904831182151516156147d5576147d5614463565b500290565b60006001600160801b038083168185168083038211156147fc576147fc614463565b01949350505050565b6020808252600d908201526c185c1c081b9bdd08195e1a5cdd609a1b604082015260600190565b602080825260069082015265199bdc989a5960d21b604082015260600190565b6000808335601e1984360301811261486357600080fd5b8301803591506001600160401b0382111561487d57600080fd5b602001915036819003821315613c7e57600080fd5b6040815260006148a660408301858761453a565b90508215156020830152949350505050565b6040815260006148cb6040830185613be5565b90508260208301529392505050565b60a0815260006148ee60a08301888a61453a565b6001600160a01b03871660208401526040830186905282810360608401526149168186613be5565b915050826080830152979650505050505050565b60008161493957614939614463565b506000190190565b6040815260006149546040830185613be5565b90508215156020830152939250505056fea264697066735822122085b3acbf2478e26168d89b4055ed662010a7f143a8f3653fbba44203df0417bd64736f6c634300080a0033608060405234801561001057600080fd5b50600380546001600160a01b031916331790556104a0806100326000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806302d05d3f146100465780639788023914610076578063d0496d6a14610097575b600080fd5b600354610059906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b610089610084366004610221565b6100d7565b60405161006d9291906102f7565b6000546001546002546100b2926001600160a01b0316919083565b604080516001600160a01b03909416845260208401929092529082015260600161006d565b6003546000906060906001600160a01b031633146101135760006040518060600160405280602a8152602001610441602a9139915091506101fa565b604080516060810182526001600160a01b0380881680835260208301889052918301869052600080546001600160a01b031916909217909155600186905560028590559051639abaf47960e01b815290891690639abaf4799061017c908a908a90600401610333565b6000604051808303816000875af115801561019b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101c39190810190610378565b60408051606081018252600080825260208201819052910181905280546001600160a01b0319168155600181905560025590925090505b965096945050505050565b80356001600160a01b038116811461021c57600080fd5b919050565b60008060008060008060a0878903121561023a57600080fd5b61024387610205565b9550602087013567ffffffffffffffff8082111561026057600080fd5b818901915089601f83011261027457600080fd5b81358181111561028357600080fd5b8a602082850101111561029557600080fd5b6020830197508096505050506102ad60408801610205565b925060608701359150608087013590509295509295509295565b60005b838110156102e25781810151838201526020016102ca565b838111156102f1576000848401525b50505050565b8215158152604060208201526000825180604084015261031e8160608501602087016102c7565b601f01601f1916919091016060019392505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561038b57600080fd5b8251801515811461039b57600080fd5b602084015190925067ffffffffffffffff808211156103b957600080fd5b818501915085601f8301126103cd57600080fd5b8151818111156103df576103df610362565b604051601f8201601f19908116603f0116810190838211818310171561040757610407610362565b8160405282815288602084870101111561042057600080fd5b6104318360208301602088016102c7565b8095505050505050925092905056fe416e7943616c6c4578656375746f723a2063616c6c6572206973206e6f74207468652063726561746f72a2646970667358221220e9a38cafaf225369654a1741777eac1845fb53ee65c1b88aecdac8488bb9ee5864736f6c634300080a0033c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad9925100000000000000000000000099c5be48d2f47a1b518de27246baba8ea96319bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

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

000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad9925100000000000000000000000099c5be48d2f47a1b518de27246baba8ea96319bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

-----Decoded View---------------
Arg [0] : _admin (address): 0xfa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [1] : _mpc (address): 0x99c5be48d2f47a1b518de27246baba8ea96319bd
Arg [2] : _premium (uint128): 0
Arg [3] : _mode (uint256): 1

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000fa9da51631268a30ec3ddd1ccbf46c65fad99251
Arg [1] : 00000000000000000000000099c5be48d2f47a1b518de27246baba8ea96319bd
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001


Deployed ByteCode Sourcemap

1999:25875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3824:43;;;;;;;;;;-1:-1:-1;3824:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1967:14:1;;1960:22;1942:41;;1930:2;1915:18;3824:43:0;;;;;;;;4211:23;;;;;;;;;;-1:-1:-1;4211:23:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2343:32:1;;;2325:51;;2313:2;2298:18;4211:23:0;2179:203:1;8454:87:0;;;;;;;;;;-1:-1:-1;8454:87:0;;;;;:::i;:::-;;:::i;:::-;;17972:421;;;;;;;;;;-1:-1:-1;17972:421:0;;;;;:::i;:::-;;:::i;4584:54::-;;;;;;;;;;-1:-1:-1;4584:54:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4165:39::-;;;;;;;;;;-1:-1:-1;4165:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18571:908;;;;;;;;;;-1:-1:-1;18571:908:0;;;;;:::i;:::-;;:::i;16527:116::-;;;;;;;;;;-1:-1:-1;16527:116:0;;;;;:::i;:::-;;:::i;4302:19::-;;;;;;;;;;;;;;;;;;;6301:25:1;;;6289:2;6274:18;4302:19:0;6155:177:1;15084:237:0;;;;;;;;;;-1:-1:-1;15084:237:0;;;;;:::i;:::-;;:::i;3636:45::-;;;;;;;;;;-1:-1:-1;3636:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3636:45:0;;;;;;;;;;;;;;-1:-1:-1;;;;;6595:15:1;;;6577:34;;6647:15;;;;6642:2;6627:18;;6620:43;6679:18;;;6672:34;6527:2;6512:18;3636:45:0;6337:375:1;2969:53:0;;;;;;;;;;;;3019:3;2969:53;;16232:160;;;;;;;;;;-1:-1:-1;16232:160:0;;;;;:::i;:::-;;:::i;11425:1998::-;;;;;;;;;;-1:-1:-1;11425:1998:0;;;;;:::i;:::-;;:::i;13609:205::-;;;;;;;;;;-1:-1:-1;13609:205:0;;;;;:::i;:::-;;:::i;4355:31::-;;;;;;;;;;;;;;;;16795:139;;;;;;;;;;-1:-1:-1;16795:139:0;;;;;:::i;:::-;;:::i;4328:18::-;;;;;;;;;;-1:-1:-1;4328:18:0;;;;;;;;3874:54;;;;;;;;;;-1:-1:-1;3874:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;8852:25:1;;;8908:2;8893:18;;8886:34;;;;8825:18;3874:54:0;8678:248:1;20523:516:0;;;;;;;;;;-1:-1:-1;20523:516:0;;;;;:::i;:::-;;:::i;26255:223::-;;;;;;;;;;-1:-1:-1;26255:223:0;;;;;:::i;:::-;;:::i;17304:100::-;;;;;;;;;;-1:-1:-1;17376:8:0;:20;-1:-1:-1;;;;;17376:20:0;17304:100;;;-1:-1:-1;;;;;9912:47:1;;;9894:66;;9882:2;9867:18;17304:100:0;9748:218:1;4088:68:0;;;;;;;;;;-1:-1:-1;4088:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4088:68:0;;;;;;;;;21078:404;;;;;;;;;;-1:-1:-1;21078:404:0;;;;;:::i;:::-;;:::i;17744:190::-;;;;;;;;;;-1:-1:-1;17744:190:0;;;;;:::i;:::-;;:::i;4032:49::-;;;;;;;;;;-1:-1:-1;4032:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4393:50;;;;;;;;;;-1:-1:-1;4393:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;22848:148;;;;;;;;;;-1:-1:-1;22848:148:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15911:207::-;;;;;;;;;;-1:-1:-1;15911:207:0;;;;;:::i;:::-;;:::i;13864:764::-;;;;;;;;;;-1:-1:-1;13864:764:0;;;;;:::i;:::-;;:::i;23874:460::-;;;;;;;;;;-1:-1:-1;23874:460:0;;;;;:::i;:::-;;:::i;3953:72::-;;;;;;;;;;-1:-1:-1;3953:72:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3953:72:0;;;;;;;;;;;;;;;3762:55;;;;;;;;;;-1:-1:-1;3762:55:0;;;;;:::i;:::-;;:::i;25247:672::-;;;;;;;;;;-1:-1:-1;25247:672:0;;;;;:::i;:::-;;:::i;3688:67::-;;;;;;;;;;-1:-1:-1;3688:67:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3688:67:0;;;;;;;;;;;25954:266;;;;;;;;;;-1:-1:-1;25954:266:0;;;;;:::i;:::-;;:::i;3029:54::-;;;;;;;;;;;;3075:8;3029:54;;15439:210;;;;;;;;;;;;;:::i;19628:719::-;;;;;;;;;;-1:-1:-1;19628:719:0;;;;;:::i;:::-;;:::i;24379:829::-;;;;;;;;;;-1:-1:-1;24379:829:0;;;;;:::i;:::-;;:::i;3521:47::-;;;;;;;;;;-1:-1:-1;3521:47:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16969:200::-;;;;;;;;;;;;;:::i;26526:376::-;;;;;;;;;;-1:-1:-1;26526:376:0;;;;;:::i;:::-;;:::i;9532:1429::-;;;;;;:::i;:::-;;:::i;15692:167::-;;;;;;;;;;-1:-1:-1;15692:167:0;;;;;:::i;:::-;;:::i;23077:751::-;;;;;;;;;;-1:-1:-1;23077:751:0;;;;;:::i;:::-;;:::i;4544:31::-;;;;;;;;;;-1:-1:-1;4544:31:0;;;;-1:-1:-1;;;;;4544:31:0;;;16677:82;;;;;;;;;;-1:-1:-1;16677:82:0;;;;;:::i;:::-;;:::i;21524:408::-;;;;;;;;;;-1:-1:-1;21524:408:0;;;;;:::i;:::-;;:::i;4647:45::-;;;;;;;;;;-1:-1:-1;4647:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17617:92;;;;;;;;;;-1:-1:-1;17685:8:0;:16;-1:-1:-1;;;17685:16:0;;-1:-1:-1;;;;;17685:16:0;17617:92;;18433:97;;;;;;;;;;;;;:::i;14795:153::-;;;;;;:::i;:::-;;:::i;4243:18::-;;;;;;;;;;-1:-1:-1;4243:18:0;;;;-1:-1:-1;;;;;4243:18:0;;;4268:25;;;;;;;;;;-1:-1:-1;4268:25:0;;;;-1:-1:-1;;;;;4268:25:0;;;22648:149;;;;;;;;;;-1:-1:-1;22648:149:0;;;;;:::i;:::-;;:::i;4211:23::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4211:23:0;;-1:-1:-1;4211:23:0;:::o;8454:87::-;7241:10;7233:19;;;;:7;:19;;;;;;;;7225:42;;;;-1:-1:-1;;;7225:42:0;;;;;;;:::i;:::-;;;;;;;;;8517:6:::1;:16:::0;;-1:-1:-1;;8517:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;8454:87::o;17972:421::-;7111:3;;-1:-1:-1;;;;;7111:3:0;7097:10;:17;7089:38;;;;-1:-1:-1;;;7089:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18045:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;18037:24;;;::::0;::::1;;-1:-1:-1::0;;;;;18072:15:0;::::1;18090:5;18072:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;18072:23:0::1;::::0;;18123:6:::1;:13:::0;;18147:181:::1;18171:10;18180:1;18171:6:::0;:10:::1;:::i;:::-;18167:1;:14;18147:181;;;18220:6;-1:-1:-1::0;;;;;18207:19:0::1;:6;18214:1;18207:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18207:9:0::1;:19;18203:114;;;18259:6;18266:10;18275:1;18266:6:::0;:10:::1;:::i;:::-;18259:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;18247:6:::1;:9:::0;;-1:-1:-1;;;;;18259:18:0;;::::1;::::0;18254:1;;18247:9;::::1;;;;;:::i;:::-;;;;;;;;;:30;;;;;-1:-1:-1::0;;;;;18247:30:0::1;;;;;-1:-1:-1::0;;;;;18247:30:0::1;;;;;;18296:5;;18203:114;18183:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18147:181;;;;18338:6;:12;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;18338:12:0;;;;;;;-1:-1:-1;;;;;;18338:12:0::1;::::0;;;;;;;;18366:19:::1;::::0;-1:-1:-1;;;;;2343:32:1;;2325:51;;18366:19:0::1;::::0;2298:18:1;18366:19:0::1;;;;;;;18026:367;17972:421:::0;:::o;4584:54::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4584:54:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18571:908::-;7241:10;7233:19;;;;:7;:19;;;;;;;;7225:42;;;;-1:-1:-1;;;7225:42:0;;;;;;;:::i;:::-;18785:24;18777:48:::1;;;::::0;-1:-1:-1;;;18777:48:0;;20882:2:1;18777:48:0::1;::::0;::::1;20864:21:1::0;20921:2;20901:18;;;20894:30;-1:-1:-1;;;20940:18:1;;;20933:41;20991:18;;18777:48:0::1;20680:335:1::0;18777:48:0::1;-1:-1:-1::0;;;;;18844:18:0;::::1;18836:47;;;::::0;-1:-1:-1;;;18836:47:0;;21222:2:1;18836:47:0::1;::::0;::::1;21204:21:1::0;21261:2;21241:18;;;21234:30;-1:-1:-1;;;21280:18:1;;;21273:46;21336:18;;18836:47:0::1;21020:340:1::0;18836:47:0::1;18896:24;18923:9;18933:6;;18923:17;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;18959:10;;18923:17;;-1:-1:-1;;;;;;18959:10:0::1;:24:::0;18951:46:::1;;;::::0;-1:-1:-1;;;18951:46:0;;21845:2:1;18951:46:0::1;::::0;::::1;21827:21:1::0;21884:1;21864:18;;;21857:29;-1:-1:-1;;;21902:18:1;;;21895:39;21951:18;;18951:46:0::1;21643:332:1::0;18951:46:0::1;-1:-1:-1::0;;;;;19010:19:0;::::1;:13;:19:::0;;;::::1;::::0;;;;;;:28:::1;::::0;19032:6;;19010:28:::1;:::i;:::-;-1:-1:-1::0;19051:17:0;;-1:-1:-1;;;;;19051:17:0;;::::1;-1:-1:-1::0;;;;;;19051:17:0;;::::1;;::::0;;;19079:15;;::::1;:24:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;19114:15:::1;::::0;::::1;:24:::0;;;19051:10:::1;::::0;19194:19:::1;::::0;19196:10;;19194:19:::1;:::i;:::-;-1:-1:-1::0;;;;;19180:34:0::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;19180:34:0::1;;19151:63;;19240:4;19225:9;19235:1;19225:12;;;;;;;;:::i;:::-;;;;;;:19;-1:-1:-1::0;;;;;19225:19:0::1;;;-1:-1:-1::0;;;;;19225:19:0::1;;;::::0;::::1;19260:9;19255:105;19275:21:::0;;::::1;19255:105;;;19335:10;;19346:1;19335:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19318:9:::0;19328:3:::1;:1:::0;19330::::1;19328:3;:::i;:::-;19318:14;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19318:30:0;;::::1;:14;::::0;;::::1;::::0;;;;;;;:30;19298:3;::::1;::::0;::::1;:::i;:::-;;;;19255:105;;;;19370:41;19387:6;;19370:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;19395:9:0;;-1:-1:-1;19406:4:0::1;::::0;-1:-1:-1;19370:16:0::1;::::0;-1:-1:-1;19370:41:0:i:1;:::-;19456:6;-1:-1:-1::0;;;;;19429:42:0::1;19450:4;-1:-1:-1::0;;;;;19429:42:0::1;;19442:6;;19464;19429:42;;;;;;;;:::i;:::-;;;;;;;;18766:713;;18571:908:::0;;;;;;;:::o;16527:116::-;7241:10;7233:19;;;;:7;:19;;;;;;;;7225:42;;;;-1:-1:-1;;;7225:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16606:29:0::1;:16;:29:::0;16527:116::o;15084:237::-;15155:10;15139:27;;;;:15;:27;;;;;:38;;15170:7;;15139:27;:38;;15170:7;;15139:38;:::i;:::-;;;;-1:-1:-1;;15193:29:0;;6301:25:1;;;15202:10:0;;15193:29;;6289:2:1;6274:18;15193:29:0;;;;;;;15234:12;15251:10;-1:-1:-1;;;;;15251:15:0;15274:7;15251:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15233:53;;;15305:7;15297:16;;;;;;15128:193;15084:237;:::o;16232:160::-;7241:10;7233:19;;;;:7;:19;;;;;;;;7225:42;;;;-1:-1:-1;;;7225:42:0;;;;;;;:::i;:::-;16319:8:::1;:16:::0;16305:41:::1;::::0;;-1:-1:-1;;;16319:16:0;;::::1;-1:-1:-1::0;;;;;16319:16:0;;::::1;23145:34:1::0;;23215:15;;23210:2;23195:18;;23188:43;16305:41:0::1;::::0;23065:18:1;16305:41:0::1;;;;;;;16357:8;:27:::0;;-1:-1:-1;;;;;16357:27:0;;::::1;-1:-1:-1::0;;;16357:27:0::1;::::0;::::1;::::0;;;::::1;::::0;;16232:160::o;11425:1998::-;4788:8;;4800:1;4788:13;4780:22;;;;;;4824:1;4813:8;:12;7380:6:::1;::::0;::::1;;7379:7;7371:26;;;::::0;-1:-1:-1;;;7371:26:0;;23444:2:1;7371:26:0::1;::::0;::::1;23426:21:1::0;23483:1;23463:18;;;23456:29;-1:-1:-1;;;23501:18:1;;;23494:36;23547:18;;7371:26:0::1;23242:329:1::0;7371:26:0::1;11631:4:::2;:9;;;11642:4;:10;;;7613:15;7702:23;7709:4;;3300:8;13530:18:::0;;;13529:33;;13431:139;7702:23:::2;7697:267;;3075:8;13530:18:::0;;;13529:33;7742:211:::2;;7837:16;::::0;-1:-1:-1;;;;;7811:22:0;::::2;;::::0;;;:15:::2;:22;::::0;;;;;:42:::2;;7803:75;;;::::0;-1:-1:-1;;;7803:75:0;;23778:2:1;7803:75:0::2;::::0;::::2;23760:21:1::0;23817:2;23797:18;;;23790:30;-1:-1:-1;;;23836:18:1;;;23829:50;23896:18;;7803:75:0::2;23576:344:1::0;7803:75:0::2;3479:6;7907:9;:30;;;;:::i;:::-;7897:40;;7742:211;7111:3:::3;::::0;-1:-1:-1;;;;;7111:3:0::3;7097:10;:17;7089:38;;;;-1:-1:-1::0;;;7089:38:0::3;;;;;;;:::i;:::-;11689:9:::4;::::0;::::4;::::0;-1:-1:-1;;;;;11719:23:0;::::4;::::0;;:45:::4;;;11759:5;-1:-1:-1::0;;;;;11746:18:0::4;:9;-1:-1:-1::0;;;;;11746:18:0::4;;11719:45;11711:72;;;::::0;-1:-1:-1;;;11711:72:0;;24127:2:1;11711:72:0::4;::::0;::::4;24109:21:1::0;24166:2;24146:18;;;24139:30;-1:-1:-1;;;24185:18:1;;;24178:44;24239:18;;11711:72:0::4;23925:338:1::0;11711:72:0::4;11805:12;11818:6;11805:20;;;;;;:::i;:::-;::::0;;;::::4;::::0;;;;;::::4;::::0;;;;::::4;;11804:21;11796:43;;;::::0;-1:-1:-1;;;11796:43:0;;24751:2:1;11796:43:0::4;::::0;::::4;24733:21:1::0;24790:1;24770:18;;;24763:29;-1:-1:-1;;;24808:18:1;;;24801:39;24857:18;;11796:43:0::4;24549:332:1::0;11796:43:0::4;11864:4;::::0;3254:3:::4;13530:18:::0;;;13529:33;11852:122:::4;;11915:16;11932:6;11915:24;;;;;;:::i;:::-;::::0;;;::::4;::::0;;::::4;::::0;;;;;;;;-1:-1:-1;;;;;11915:29:0;::::4;;::::0;;;;;;;;::::4;;11907:55;;;::::0;-1:-1:-1;;;11907:55:0;;25088:2:1;11907:55:0::4;::::0;::::4;25070:21:1::0;25127:2;25107:18;;;25100:30;-1:-1:-1;;;25146:18:1;;;25139:43;25199:18;;11907:55:0::4;24886:337:1::0;11907:55:0::4;11986:14;12003:60;12014:4;:11;;;12027:5;12034:4;:16;;;12052:4;:10;;;12003;:60::i;:::-;12083:21;::::0;;;:13:::4;:21;::::0;;;;;11986:77;;-1:-1:-1;12083:21:0::4;;12082:22;12074:49;;;::::0;-1:-1:-1;;;12074:49:0;;25430:2:1;12074:49:0::4;::::0;::::4;25412:21:1::0;25469:2;25449:18;;;25442:30;-1:-1:-1;;;25488:18:1;;;25481:44;25542:18;;12074:49:0::4;25228:338:1::0;12074:49:0::4;12136:12;12174:19;12212:8;;;;;;;;;-1:-1:-1::0;;;;;12212:8:0::4;-1:-1:-1::0;;;;;12212:16:0::4;;12229:3;12234:5;12241;12248:4;:16;;;12266:4;:10;;;12212:65;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::4;-1:-1:-1::0;;12212:65:0::4;::::0;::::4;;::::0;::::4;::::0;;;::::4;::::0;::::4;:::i;:::-;;;12208:345;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;12451:6:::0;-1:-1:-1;12208:345:0::4;;;;;;::::0;;;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;12531:6:0;-1:-1:-1;12208:345:0::4;;;12356:4:::0;;-1:-1:-1;12362:3:0;-1:-1:-1;12208:345:0::4;12603:3;-1:-1:-1::0;;;;;12572:82:0::4;12596:5;-1:-1:-1::0;;;;;12572:82:0::4;12583:4;:11;;;12572:82;12608:4;:16;;;12626:4;:10;;;12638:7;12647:6;12572:82;;;;;;;;;:::i;:::-;;;;;;;;12159:507;12682:7;12678:738;;;12706:21;::::0;;;:13:::4;:21;::::0;;;;:28;;-1:-1:-1;;12706:28:0::4;12730:4;12706:28;::::0;;12678:738:::4;;;-1:-1:-1::0;;;;;12756:23:0;::::4;12752:664;;12823:22;::::0;;;;::::4;::::0;;-1:-1:-1;;;;;12823:22:0;;::::4;::::0;;::::4;::::0;;::::4;::::0;;;-1:-1:-1;12796:24:0;;;:16:::4;:24:::0;;;;;;:49;;;;-1:-1:-1;;;;;;12796:49:0::4;::::0;::::4;::::0;;;::::4;::::0;;;;;;12823:22;;12796:24;;:49:::4;::::0;-1:-1:-1;12796:49:0;::::4;::::0;::::4;::::0;::::4;:::i;:::-;;;;;12906:3;-1:-1:-1::0;;;;;12865:82:0::4;12899:5;-1:-1:-1::0;;;;;12865:82:0::4;12886:4;:11;;;12865:82;12911:4;:16;;;12929:4;:10;;;12941:5;12865:82;;;;;;;;:::i;:::-;;;;;;;;12752:664;;;13076:5;:7:::0;;;:5:::4;:7;::::0;::::4;:::i;:::-;;;;;;13293:4;:16;;;13156:9;-1:-1:-1::0;;;;;13103:301:0::4;13132:5;-1:-1:-1::0;;;;;13103:301:0::4;;13207:25;;;13234:3;13239:5;13184:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1::0;;;;;13184:61:0::4;;;;;;;-1:-1:-1::0;;;;;13184:61:0::4;;;;;;;;;;;13272:1;13328::::0;13373:6:::4;13398:5;;13103:301;;;;;;;;;;:::i;:::-;;;;;;;;12752:664;-1:-1:-1::0;;8035:11:0;;;-1:-1:-1;8031:351:0::2;;8122:8;:16:::0;8063:17:::2;::::0;8108:30:::2;::::0;-1:-1:-1;;;8122:16:0;::::2;-1:-1:-1::0;;;;;8122:16:0::2;8108:11;:30;:::i;:::-;8094:9;8084:19;::::0;:7;:19:::2;:::i;:::-;8083:56;;;;:::i;:::-;-1:-1:-1::0;;;;;8171:22:0;::::2;8154:14;8171:22:::0;;;:15:::2;:22;::::0;;;;;8063:76;;-1:-1:-1;8216:18:0;;::::2;8208:47;;;::::0;-1:-1:-1;;;8208:47:0;;29633:2:1;8208:47:0::2;::::0;::::2;29615:21:1::0;29672:2;29652:18;;;29645:30;-1:-1:-1;;;29691:18:1;;;29684:46;29747:18;;8208:47:0::2;29431:340:1::0;8208:47:0::2;8295:18;8304:9:::0;8295:6;:18:::2;:::i;:::-;-1:-1:-1::0;;;;;8270:22:0;::::2;;::::0;;;:15:::2;:22;::::0;;;;:43;;;;8328:8:::2;:42:::0;;8360:9;;8270:22;8328:42:::2;::::0;8360:9;;-1:-1:-1;;;;;8328:42:0::2;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;8328:42:0::2;;;;;-1:-1:-1::0;;;;;8328:42:0::2;;;;;;8048:334;;8031:351;-1:-1:-1::0;;4859:1:0;4848:8;:12;-1:-1:-1;;;;;;11425:1998:0:o;13609:205::-;13757:48;;;;;;;30265:25:1;;;;-1:-1:-1;;;;;30326:32:1;;;;30306:18;;;30299:60;30375:18;;;30368:34;;;;30418:18;;;;30411:34;;;;13757:48:0;;;;;;;;;;30237:19:1;;;;13757:48:0;;13747:59;;;;;;13609:205::o;16795:139::-;7111:3;;-1:-1:-1;;;;;7111:3:0;7097:10;:17;7089:38;;;;-1:-1:-1;;;7089:38:0;;;;;;;:::i;:::-;16856:10:::1;:17:::0;;-1:-1:-1;;;;;;16856:17:0::1;-1:-1:-1::0;;;;;16856:17:0;;::::1;::::0;;::::1;::::0;;;16899:3:::1;::::0;16889:37:::1;::::0;16910:15:::1;6301:25:1::0;;16856:17:0;;16899:3:::1;::::0;16889:37:::1;::::0;6289:2:1;6274:18;16889:37:0::1;;;;;;;16795:139:::0;:::o;20523:516::-;-1:-1:-1;;;;;20620:22:0;;20597:20;20620:22;;;;;;;;;;20597:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20653:24;20680:9;20690:6;20680:17;;;;;;:::i;:::-;;;;;;;;;;;;;;20718:10;;20680:17;;-1:-1:-1;;;;;;20718:10:0;;;:21;;;;:46;;;;-1:-1:-1;;;;;;20743:21:0;;;;20718:46;20710:72;;;;-1:-1:-1;;;20710:72:0;;;;;;;:::i;:::-;20815:3;;-1:-1:-1;;;;;20815:3:0;20801:10;:17;;:50;;-1:-1:-1;20836:15:0;;;;-1:-1:-1;;;;;20836:15:0;20822:10;:29;20801:50;20793:69;;;;-1:-1:-1;;;20793:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20887:22:0;;:13;:22;;;;;;;;;;20881:36;;;;;:::i;:::-;:41;;-1:-1:-1;20873:71:0;;;;-1:-1:-1;;;20873:71:0;;31334:2:1;20873:71:0;;;31316:21:1;31373:2;31353:18;;;31346:30;-1:-1:-1;;;31392:18:1;;;31385:47;31449:18;;20873:71:0;31132:341:1;20873:71:0;20957:20;;-1:-1:-1;;;;;;20957:20:0;-1:-1:-1;;;;;20957:20:0;;;;;;;;20995:36;;;;;;;;;;21006:6;;20995:36;:::i;:::-;;;;;;;;20586:453;;20523:516;;:::o;26255:223::-;26398:7;26425:45;26438:6;;26425:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26446:10:0;;-1:-1:-1;26458:11:0;;-1:-1:-1;26425:12:0;;-1:-1:-1;26425:45:0:i;:::-;26418:52;26255:223;-1:-1:-1;;;;;26255:223:0:o;21078:404::-;-1:-1:-1;;;;;21186:19:0;;21163:20;21186:19;;;;;;;;;;21163:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21216:24;21243:9;21253:6;21243:17;;;;;;:::i;:::-;;;;;;;;;;;;;;21281:10;;21243:17;;-1:-1:-1;;;;;;21281:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;21303:18:0;;;;21281:40;21273:66;;;;-1:-1:-1;;;21273:66:0;;;;;;;:::i;:::-;21372:3;;-1:-1:-1;;;;;21372:3:0;21358:10;:17;;:50;;-1:-1:-1;21393:15:0;;;;-1:-1:-1;;;;;21393:15:0;21379:10;:29;21358:50;21350:69;;;;-1:-1:-1;;;21350:69:0;;;;;;;:::i;:::-;21432:42;21449:6;21457:10;21469:4;21432:16;:42::i;:::-;21152:330;;21078:404;;:::o;17744:190::-;7111:3;;-1:-1:-1;;;;;7111:3:0;7097:10;:17;7089:38;;;;-1:-1:-1;;;7089:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17815:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;17814:16;17806:25;;;::::0;::::1;;-1:-1:-1::0;;;;;17842:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;17842:22:0::1;17860:4;17842:22:::0;;::::1;::::0;;;17875:6:::1;:19:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;17875:19:0::1;::::0;::::1;::::0;;17910:16;;2325:51:1;;;17910:16:0::1;::::0;2298:18:1;17910:16:0::1;;;;;;;17744:190:::0;:::o;22848:148::-;22925:16;22961:19;22981:6;22961:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22954:34;;;;;;;;;;;;;;;22961:27;22954:34;;;22961:27;22954:34;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22954:34:0;;;;;;;;;;;;;;;;;;;;;;;22848:148;;;:::o;15911:207::-;7241:10;7233:19;;;;:7;:19;;;;;;;;7225:42;;;;-1:-1:-1;;;7225:42:0;;;;;;;:::i;:::-;16008:9:::1;16003:108;16023:18:::0;;::::1;16003:108;;;16063:4;:17;16081:7:::0;;16089:1;16081:10;;::::1;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;16093:5;16063:36;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16043:3;;;;;:::i;:::-;;;;16003:108;;13864:764:::0;13973:14;13990:48;14001:7;14010:5;14017:12;14031:6;13990:10;:48::i;:::-;14058:21;;;;:13;:21;;;;;;13973:65;;-1:-1:-1;14058:21:0;;14057:22;14049:49;;;;-1:-1:-1;;;14049:49:0;;25430:2:1;14049:49:0;;;25412:21:1;25469:2;25449:18;;;25442:30;-1:-1:-1;;;25488:18:1;;;25481:44;25542:18;;14049:49:0;25228:338:1;14049:49:0;14111:25;14139:24;;;:16;:24;;;;;14182:9;;-1:-1:-1;;;;;14182:9:0;14174:51;;;;-1:-1:-1;;;14174:51:0;;32540:2:1;14174:51:0;;;32522:21:1;32579:2;32559:18;;;32552:30;-1:-1:-1;;;32598:18:1;;;32591:45;32653:18;;14174:51:0;32338:339:1;14174:51:0;14252:9;;;14293:11;;14272:32;;-1:-1:-1;;;;;14252:9:0;;;;14238:11;;14293;14272:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14342:22:0;;-1:-1:-1;;;;;;14342:22:0;;;-1:-1:-1;;14375:16:0;;;;;;;;;;14362:1;14375:16;;;;14272:32;;-1:-1:-1;14375:16:0;;14342:22;14375:11;;;-1:-1:-1;14375:16:0;:::i;:::-;-1:-1:-1;14422:8:0;;:57;;-1:-1:-1;;;14422:57:0;;14405:12;;-1:-1:-1;;;;;14422:8:0;;:16;;:57;;14439:3;;14444:5;;14451;;14458:12;;14472:6;;14422:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14422:57:0;;;;;;;;;;;;:::i;:::-;14404:75;;;14498:7;14490:16;;;;;;14519:21;;;;:13;:21;;;;;;;:28;;-1:-1:-1;;14519:28:0;14543:4;14519:28;;;14563:57;-1:-1:-1;;;;;14563:57:0;;;14583:7;;14563:57;;;;14599:12;;14613:6;;8852:25:1;;;8908:2;8893:18;;8886:34;8840:2;8825:18;;8678:248;23874:460:0;7241:10;7233:19;;;;:7;:19;;;;;;;;7225:42;;;;-1:-1:-1;;;7225:42:0;;;;;;;:::i;:::-;24077:11;24114:26;;::::1;:59:::0;::::1;;;-1:-1:-1::0;24144:29:0;;::::1;24114:59;24106:68;;;::::0;::::1;;24192:9;24187:140;24211:6;24207:1;:10;24187:140;;;24272:43;;;;;;;;24285:9;;24295:1;24285:12;;;;;;;:::i;:::-;;;;;;;24272:43;;;;24299:12;;24312:1;24299:15;;;;;;;:::i;:::-;;;;;;;24272:43;;::::0;24239:14:::1;:30;24254:11;;24266:1;24254:14;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;24239:30:::0;;-1:-1:-1;24239:30:0;;::::1;::::0;;;;;;-1:-1:-1;24239:30:0;:76;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;24219:3;::::1;::::0;::::1;:::i;:::-;;;;24187:140;;;;24049:285;23874:460:::0;;;;;;:::o;3762:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3762:55:0;;-1:-1:-1;3762:55:0;;-1:-1:-1;3762:55:0:o;25247:672::-;7241:10;7233:19;;;;:7;:19;;;;;;;;7225:42;;;;-1:-1:-1;;;7225:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25471:19:0;::::1;25448:20;25471:19:::0;;;::::1;::::0;;;;;;25448:42;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25501:24;25528:9;25538:6;25528:17;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;25564:10;;25528:17;;-1:-1:-1;;;;;;25564:10:0;;::::1;:18:::0;;::::1;;:40:::0;::::1;;;-1:-1:-1::0;;;;;;25586:18:0;::::1;::::0;::::1;25564:40;25556:66;;;;-1:-1:-1::0;;;25556:66:0::1;;;;;;;:::i;:::-;25652:11:::0;25689:32;;::::1;25681:41;;;::::0;::::1;;25761:15;25735;25751:6;25735:23;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:41;25794:9:::1;25789:123;25813:6;25809:1;:10;25789:123;;;25882:15;;25898:1;25882:18;;;;;;;:::i;:::-;;;;;;;25841:14;25856:6;25841:22;;;;;;:::i;:::-;;;;;;;;;;;;;:38;25864:11;;25876:1;25864:14;;;;;;;:::i;:::-;;;;;;;25841:38;;;;;;;;;;;:59;;;;25821:3;;;;;:::i;:::-;;;;25789:123;;;;25437:482;;;25247:672:::0;;;;;;:::o;25954:266::-;-1:-1:-1;;;;;26130:19:0;;26087:7;26130:19;;;;;;;;;;26107:42;;26087:7;;26130:19;26107:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26167:45;26180:6;26188:10;26200:11;26167:12;:45::i;:::-;26160:52;;;25954:266;;;;;;:::o;15439:210::-;15505:8;:20;;-1:-1:-1;;15536:24:0;;;;;15589:3;;:25;;-1:-1:-1;;;;;15505:20:0;;;;15490:12;;-1:-1:-1;;;;;15589:3:0;;15505:20;;15589:25;22708:205:1;19628:719:0;-1:-1:-1;;;;;19816:19:0;;19793:20;19816:19;;;;;;;;;;19793:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19846:24;19873:9;19883:6;19873:17;;;;;;:::i;:::-;;;;;;;;;;;;;;19911:10;;19873:17;;-1:-1:-1;;;;;;19911:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;19933:18:0;;;;19911:40;19903:66;;;;-1:-1:-1;;;19903:66:0;;;;;;;:::i;:::-;20002:3;;-1:-1:-1;;;;;20002:3:0;19988:10;:17;;:50;;-1:-1:-1;20023:15:0;;;;-1:-1:-1;;;;;20023:15:0;20009:10;:29;19988:50;19980:69;;;;-1:-1:-1;;;19980:69:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20066:20:0;;;20062:77;;20103:15;;;:24;;-1:-1:-1;;;;;;20103:24:0;-1:-1:-1;;;;;20103:24:0;;;;;20062:77;20149:15;;;:24;;;20188:21;;20184:96;;20226:42;20243:6;20251:10;;20226:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20263:4:0;;-1:-1:-1;20226:16:0;;-1:-1:-1;;20226:42:0:i;:::-;20324:6;-1:-1:-1;;;;;20297:42:0;20318:4;-1:-1:-1;;;;;20297:42:0;;20310:6;20332;20297:42;;;;;;;:::i;:::-;;;;;;;;19782:565;;19628:719;;;;;:::o;24379:829::-;7241:10;7233:19;;;;:7;:19;;;;;;;;7225:42;;;;-1:-1:-1;;;7225:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24610:19:0;::::1;24587:20;24610:19:::0;;;::::1;::::0;;;;;;24587:42;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24640:24;24667:9;24677:6;24667:17;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;24705:10;;24667:17;;-1:-1:-1;;;;;;24705:10:0;;::::1;:18:::0;;::::1;;:40:::0;::::1;;;-1:-1:-1::0;;;;;;24727:18:0;::::1;::::0;::::1;24705:40;24697:66;;;;-1:-1:-1::0;;;24697:66:0::1;;;;;;;:::i;:::-;24789:15;::::0;;::::1;::::0;13530:18;;13529:33;24774:69:::1;;;::::0;-1:-1:-1;;;24774:69:0;;33179:2:1;24774:69:0::1;::::0;::::1;33161:21:1::0;33218:2;33198:18;;;33191:30;-1:-1:-1;;;33237:18:1;;;33230:42;33289:18;;24774:69:0::1;32977:336:1::0;24774:69:0::1;24873:11:::0;24910:26;;::::1;:59:::0;::::1;;;-1:-1:-1::0;24940:29:0;;::::1;24910:59;24902:68;;;::::0;::::1;;24983:49;25035:13;25049:6;25035:21;;;;;;:::i;:::-;;;;;;;;;;;;;24983:73;;25072:9;25067:134;25091:6;25087:1;:10;25067:134;;;25146:43;;;;;;;;25159:9;;25169:1;25159:12;;;;;;;:::i;:::-;;;;;;;25146:43;;;;25173:12;;25186:1;25173:15;;;;;;;:::i;:::-;;;;;;;25146:43;;::::0;25119:8:::1;:24;25128:11;;25140:1;25128:14;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;::::1;;25119:24:::0;;-1:-1:-1;25119:24:0;;::::1;::::0;;;;;;-1:-1:-1;25119:24:0;:70;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;25099:3;::::1;::::0;::::1;:::i;:::-;;;;25067:134;;;;24576:632;;;;24379:829:::0;;;;;;;:::o;3521:47::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16969:200::-;17031:10;;-1:-1:-1;;;;;17031:10:0;17017;:24;17009:33;;;;;;17072:10;;17067:3;;17058:42;;17084:15;6301:25:1;;-1:-1:-1;;;;;17072:10:0;;;;17067:3;;;;17058:42;;6289:2:1;6274:18;17058:42:0;;;;;;;17117:10;;;17111:3;:16;;-1:-1:-1;;;;;;17111:16:0;;;-1:-1:-1;;;;;17117:10:0;;17111:16;;;;17138:23;;;16969:200::o;26526:376::-;26617:4;26634:16;26653:14;26668:6;26653:22;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:34;;;;;;;;;;-1:-1:-1;3173:3:0;13530:18;;;13529:33;26698:89;;;26771:4;26764:11;;;;;26698:89;26808:15;26824:6;26808:23;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;3173:3:0;13530:18;;;13529:33;26849:45;26842:52;;;26526:376;;;;;:::o;9532:1429::-;4788:8;;4800:1;4788:13;4780:22;;;;;;4824:1;4813:8;:12;7380:6:::1;::::0;::::1;;7379:7;7371:26;;;::::0;-1:-1:-1;;;7371:26:0;;23444:2:1;7371:26:0::1;::::0;::::1;23426:21:1::0;23483:1;23463:18;;;23456:29;-1:-1:-1;;;23501:18:1;;;23494:36;23547:18;;7371:26:0::1;23242:329:1::0;7371:26:0::1;-1:-1:-1::0;;;;;9746:23:0;::::2;::::0;;:50:::2;;-1:-1:-1::0;;;;;;9773:23:0;::::2;9786:10;9773:23;9746:50;9738:77;;;::::0;-1:-1:-1;;;9738:77:0;;24127:2:1;9738:77:0::2;::::0;::::2;24109:21:1::0;24166:2;24146:18;;;24139:30;-1:-1:-1;;;24185:18:1;;;24178:44;24239:18;;9738:77:0::2;23925:338:1::0;9738:77:0::2;9863:10;9826:20;9849:25:::0;;;::::2;::::0;;;;;;9826:48;;::::2;::::0;::::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9896:12;9909:6;9896:20;;;;;;:::i;:::-;::::0;;;::::2;::::0;;;;;::::2;::::0;;;;::::2;;9895:21;9887:43;;;::::0;-1:-1:-1;;;9887:43:0;;24751:2:1;9887:43:0::2;::::0;::::2;24733:21:1::0;24790:1;24770:18;;;24763:29;-1:-1:-1;;;24808:18:1;;;24801:39;24857:18;;9887:43:0::2;24549:332:1::0;9887:43:0::2;9943:24;9970:33;9977:4;;3254:3;13530:18:::0;;;13529:33;;13431:139;9970:33:::2;9943:60;;10019:19;10014:115;;10063:16;10080:6;10063:24;;;;;;:::i;:::-;::::0;;;::::2;::::0;;::::2;::::0;;;;;;;;10088:10:::2;10063:36;::::0;;;;;;;;::::2;;10055:62;;;::::0;-1:-1:-1;;;10055:62:0;;25088:2:1;10055:62:0::2;::::0;::::2;25070:21:1::0;25127:2;25107:18;;;25100:30;-1:-1:-1;;;25146:18:1;;;25139:43;25199:18;;10055:62:0::2;24886:337:1::0;10055:62:0::2;10153:4;::::0;3300:8:::2;13530:18:::0;;;13529:33;10141:697:::2;;10186:24;10213:9;10223:6;10213:17;;;;;;:::i;:::-;;;;;;;;;;;;;10186:44;;10272:19;:47;;;;-1:-1:-1::0;10295:10:0;;-1:-1:-1;;;;;10295:10:0::2;:24:::0;10272:47:::2;10271:94;;;-1:-1:-1::0;10355:10:0;;-1:-1:-1;;;;;10355:10:0::2;10341;:24;10271:94;10245:169;;;;-1:-1:-1::0;;;10245:169:0::2;;;;;;;:::i;:::-;3019:3;13530:18:::0;;;13529:33;10435:67:::2;;;;-1:-1:-1::0;10478:10:0;;-1:-1:-1;;;;;10478:10:0::2;10492;10478:24;10435:67;10431:133;;;10533:6;:15;;;10523:25;;;;10431:133;3075:8;13530:18:::0;;;13529:33;10580:247:::2;;;10640:12;10655:46;10668:6:::0;10676:10;10688:5;10655:12:::2;:46::i;:::-;10640:61;;10720:17;10732:4;10720:11;:17::i;:::-;10621:132;10580:247;;;10763:9;:13:::0;10759:68:::2;;10797:14;10809:1;10797:11;:14::i;:::-;10171:667;10141:697;10850:5;:7:::0;;;:5:::2;:7;::::0;::::2;:::i;:::-;;;;;;10919:10;10896:3;-1:-1:-1::0;;;;;10873:80:0::2;10884:10;-1:-1:-1::0;;;;;10873:80:0::2;;10901:5;;10908:9;10931:6;10939;10947:5;;10873:80;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;4859:1:0;4848:8;:12;-1:-1:-1;;;;;;9532:1429:0:o;15692:167::-;7241:10;7233:19;;;;:7;:19;;;;;;;;7225:42;;;;-1:-1:-1;;;7225:42:0;;;;;;;:::i;:::-;15803:5:::1;15780:12;15793:6;;15780:20;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:28;;;::::1;;-1:-1:-1::0;;15780:28:0;;::::1;::::0;;;::::1;::::0;;;15824:27:::1;::::0;::::1;::::0;15837:6;;;;15845:5;;15824:27:::1;:::i;:::-;;;;;;;;15692:167:::0;;;:::o;23077:751::-;23149:48;23200:16;23217:6;23200:24;;;;;;:::i;:::-;;;;;;;;;;;;;23149:75;;23235:34;23272:19;23292:6;23272:27;;;;;;:::i;:::-;;;;;;;;;;;;;;23331:23;;23272:27;;-1:-1:-1;23331:23:0;23310:18;;23428:286;23452:8;23448:1;:12;23428:286;;;23486:16;23503:1;23486:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;23486:19:0;23524:21;;;;;;;;;;;;23486:19;;-1:-1:-1;23524:21:0;;23520:183;;;23566:3;;;;:::i;:::-;;;;23428:286;;23520:183;23610:10;;;;:::i;:::-;;;;23661:16;23678:8;23661:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23661:26:0;23639:16;23656:1;23639:19;;;;;;;;:::i;:::-;;;;;;;;;:48;;;;;-1:-1:-1;;;;;23639:48:0;;;;;-1:-1:-1;;;;;23639:48:0;;;;;;23428:286;;;-1:-1:-1;23741:8:0;23724:97;23755:10;23751:1;:14;23724:97;;;23787:16;:22;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;23787:22:0;;;;;-1:-1:-1;;;;;;23787:22:0;;;;;;23767:3;;;;:::i;:::-;;;;23724:97;;;;23138:690;;;;;23077:751;:::o;16677:82::-;7241:10;7233:19;;;;:7;:19;;;;;;;;7225:42;;;;-1:-1:-1;;;7225:42:0;;;;;;;:::i;:::-;16739:4:::1;:12:::0;16677:82::o;21524:408::-;-1:-1:-1;;;;;21635:19:0;;21612:20;21635:19;;;;;;;;;;21612:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21665:24;21692:9;21702:6;21692:17;;;;;;:::i;:::-;;;;;;;;;;;;;;21730:10;;21692:17;;-1:-1:-1;;;;;;21730:10:0;;;:18;;;;:40;;;;-1:-1:-1;;;;;;21752:18:0;;;;21730:40;21722:66;;;;-1:-1:-1;;;21722:66:0;;;;;;;:::i;:::-;21821:3;;-1:-1:-1;;;;;21821:3:0;21807:10;:17;;:50;;-1:-1:-1;21842:15:0;;;;-1:-1:-1;;;;;21842:15:0;21828:10;:29;21807:50;21799:69;;;;-1:-1:-1;;;21799:69:0;;;;;;;:::i;:::-;21881:43;21898:6;21906:10;21918:5;21881:16;:43::i;18433:97::-;18480:16;18516:6;18509:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18509:13:0;;;;;;;;;;;;;;;;;;;;;;;18433:97;:::o;14795:153::-;-1:-1:-1;;;;;14858:25:0;;;;;;:15;:25;;;;;:38;;14887:9;;14858:25;:38;;14887:9;;14858:38;:::i;:::-;;;;-1:-1:-1;;14912:28:0;;14930:9;6301:25:1;;-1:-1:-1;;;;;14912:28:0;;;;;6289:2:1;6274:18;14912:28:0;;;;;;;14795:153;:::o;22648:149::-;22728:7;22755:19;22775:6;22755:27;;;;;;:::i;:::-;;;;;;;;;;;;;;:34;;22648:149;-1:-1:-1;;22648:149:0:o;21940:654::-;22049:42;22094:16;22111:6;22094:24;;;;;;:::i;:::-;;;;;;;;;;;;;22049:69;;22129:34;22166:19;22186:6;22166:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;22204:12:0;;22227:360;22251:10;:17;22247:1;:21;22227:360;;;22297:10;22308:1;22297:13;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;22329:15:0;;;;;;;;;;;;;;;22297:13;;-1:-1:-1;22329:15:0;;:24;;;;;;22325:73;;;22374:8;;22325:73;22416:5;22412:73;;;22442:27;;;;;;;-1:-1:-1;22442:27:0;;;;;;;;;-1:-1:-1;;;;;;22442:27:0;-1:-1:-1;;;;;22442:27:0;;;;;22412:73;-1:-1:-1;;;;;22499:15:0;;;;;;;;;;;;;;;:23;;-1:-1:-1;;22499:23:0;;;;;;;22542:33;;;;;22555:6;;22499:23;;22542:33;:::i;:::-;;;;;;;;22227:360;22270:3;;;;:::i;:::-;;;;22227:360;;26910:961;27052:7;27072:30;27105:13;27119:6;27105:21;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:33;;;;;;;;;;27072:66;;;;;;;;;;;;;;;;;;;;;;27105:21;-1:-1:-1;27072:66:0;27272:38;27291:6;27105:33;27272:18;:38::i;:::-;27268:127;;;27351:32;27365:18;27351:11;:32;:::i;:::-;27334:49;;:14;:49;:::i;:::-;27327:56;;;;;;;27268:127;27407:31;27441:26;;;:14;:26;;;;;;;;27407:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27621:32;;;27620:69;;27674:15;27620:69;;;27657:14;27620:69;27601:88;;27700:19;27744;27723:18;:40;27722:85;;27788:19;27722:85;;;27767:18;27722:85;27700:107;-1:-1:-1;27838:25:0;27700:107;27838:11;:25;:::i;:::-;27827:36;;:8;:36;:::i;:::-;27820:43;26910:961;-1:-1:-1;;;;;;;;;;;;26910:961:0:o;8549:426::-;8625:4;8612:9;:17;;8604:47;;;;-1:-1:-1;;;8604:47:0;;34620:2:1;8604:47:0;;;34602:21:1;34659:2;34639:18;;;34632:30;-1:-1:-1;;;34678:18:1;;;34671:47;34735:18;;8604:47:0;34418:341:1;8604:47:0;8666:8;;8662:127;;8721:3;;:25;;8704:12;;-1:-1:-1;;;;;8721:3:0;;8737:4;;8704:12;8721:25;8704:12;8721:25;8737:4;8721:3;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8703:43;;;8769:7;8761:16;;;;;;8676:113;8662:127;8815:4;8803:9;:16;8799:169;;;8864:12;8881:10;8904:16;8916:4;8904:9;:16;:::i;:::-;8881:44;;;22708:205:1;8799:169:0;8549:426;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:127:1;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:225;232:4;224:6;220:17;303:6;291:10;288:22;-1:-1:-1;;;;;255:10:1;252:34;249:62;246:88;;;314:18;;:::i;:::-;350:2;343:22;-1:-1:-1;146:225:1:o;376:249::-;486:2;467:13;;-1:-1:-1;;463:27:1;451:40;;-1:-1:-1;;;;;506:34:1;;542:22;;;503:62;500:88;;;568:18;;:::i;:::-;604:2;597:22;-1:-1:-1;;376:249:1:o;630:187::-;679:4;-1:-1:-1;;;;;704:6:1;701:30;698:56;;;734:18;;:::i;:::-;-1:-1:-1;800:2:1;779:15;-1:-1:-1;;775:29:1;806:4;771:40;;630:187::o;822:421::-;887:5;917:36;946:6;917:36;:::i;:::-;982:2;976:9;994:31;1022:2;1014:6;994:31;:::i;:::-;1043:6;1034:15;;1073:6;1065;1058:22;1113:3;1104:6;1099:3;1095:16;1092:25;1089:45;;;1130:1;1127;1120:12;1089:45;1180:6;1175:3;1168:4;1160:6;1156:17;1143:44;1235:1;1228:4;1219:6;1211;1207:19;1203:30;1196:41;;;822:421;;;;;:::o;1248:222::-;1291:5;1344:3;1337:4;1329:6;1325:17;1321:27;1311:55;;1362:1;1359;1352:12;1311:55;1384:80;1460:3;1451:6;1438:20;1431:4;1423:6;1419:17;1384:80;:::i;1475:322::-;1544:6;1597:2;1585:9;1576:7;1572:23;1568:32;1565:52;;;1613:1;1610;1603:12;1565:52;1653:9;1640:23;-1:-1:-1;;;;;1678:6:1;1675:30;1672:50;;;1718:1;1715;1708:12;1672:50;1741;1783:7;1774:6;1763:9;1759:22;1741:50;:::i;1994:180::-;2053:6;2106:2;2094:9;2085:7;2081:23;2077:32;2074:52;;;2122:1;2119;2112:12;2074:52;-1:-1:-1;2145:23:1;;1994:180;-1:-1:-1;1994:180:1:o;2387:118::-;2473:5;2466:13;2459:21;2452:5;2449:32;2439:60;;2495:1;2492;2485:12;2510:241;2566:6;2619:2;2607:9;2598:7;2594:23;2590:32;2587:52;;;2635:1;2632;2625:12;2587:52;2674:9;2661:23;2693:28;2715:5;2693:28;:::i;2756:173::-;2824:20;;-1:-1:-1;;;;;2873:31:1;;2863:42;;2853:70;;2919:1;2916;2909:12;2853:70;2756:173;;;:::o;2934:186::-;2993:6;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;3085:29;3104:9;3085:29;:::i;3310:258::-;3382:1;3392:113;3406:6;3403:1;3400:13;3392:113;;;3482:11;;;3476:18;3463:11;;;3456:39;3428:2;3421:10;3392:113;;;3523:6;3520:1;3517:13;3514:48;;;-1:-1:-1;;3558:1:1;3540:16;;3533:27;3310:258::o;3573:257::-;3614:3;3652:5;3646:12;3679:6;3674:3;3667:19;3695:63;3751:6;3744:4;3739:3;3735:14;3728:4;3721:5;3717:16;3695:63;:::i;:::-;3812:2;3791:15;-1:-1:-1;;3787:29:1;3778:39;;;;3819:4;3774:50;;3573:257;-1:-1:-1;;3573:257:1:o;3835:314::-;-1:-1:-1;;;;;4010:32:1;;3992:51;;4079:2;4074;4059:18;;4052:30;;;-1:-1:-1;;4099:44:1;;4124:18;;4116:6;4099:44;:::i;:::-;4091:52;3835:314;-1:-1:-1;;;;3835:314:1:o;4154:348::-;4206:8;4216:6;4270:3;4263:4;4255:6;4251:17;4247:27;4237:55;;4288:1;4285;4278:12;4237:55;-1:-1:-1;4311:20:1;;-1:-1:-1;;;;;4343:30:1;;4340:50;;;4386:1;4383;4376:12;4340:50;4423:4;4415:6;4411:17;4399:29;;4475:3;4468:4;4459:6;4451;4447:19;4443:30;4440:39;4437:59;;;4492:1;4489;4482:12;4437:59;4154:348;;;;;:::o;4507:367::-;4570:8;4580:6;4634:3;4627:4;4619:6;4615:17;4611:27;4601:55;;4652:1;4649;4642:12;4601:55;-1:-1:-1;4675:20:1;;-1:-1:-1;;;;;4707:30:1;;4704:50;;;4750:1;4747;4740:12;4704:50;4787:4;4779:6;4775:17;4763:29;;4847:3;4840:4;4830:6;4827:1;4823:14;4815:6;4811:27;4807:38;4804:47;4801:67;;;4864:1;4861;4854:12;4879:965;5013:6;5021;5029;5037;5045;5053;5061;5114:3;5102:9;5093:7;5089:23;5085:33;5082:53;;;5131:1;5128;5121:12;5082:53;5171:9;5158:23;-1:-1:-1;;;;;5241:2:1;5233:6;5230:14;5227:34;;;5257:1;5254;5247:12;5227:34;5296:59;5347:7;5338:6;5327:9;5323:22;5296:59;:::i;:::-;5374:8;;-1:-1:-1;5270:85:1;-1:-1:-1;5270:85:1;;-1:-1:-1;5428:38:1;5462:2;5447:18;;5428:38;:::i;:::-;5418:48;;5485:38;5519:2;5508:9;5504:18;5485:38;:::i;:::-;5475:48;;5570:2;5559:9;5555:18;5542:32;5532:42;;5627:3;5616:9;5612:19;5599:33;5583:49;;5657:2;5647:8;5644:16;5641:36;;;5673:1;5670;5663:12;5641:36;;5712:72;5776:7;5765:8;5754:9;5750:24;5712:72;:::i;:::-;4879:965;;;;-1:-1:-1;4879:965:1;;-1:-1:-1;4879:965:1;;;;5686:98;;-1:-1:-1;;;4879:965:1:o;5849:301::-;5908:6;5961:2;5949:9;5940:7;5936:23;5932:32;5929:52;;;5977:1;5974;5967:12;5929:52;6016:9;6003:23;-1:-1:-1;;;;;6059:5:1;6055:46;6048:5;6045:57;6035:85;;6116:1;6113;6106:12;6717:1378;6862:6;6870;6878;6886;6894;6938:9;6929:7;6925:23;6968:3;6964:2;6960:12;6957:32;;;6985:1;6982;6975:12;6957:32;7008:29;7027:9;7008:29;:::i;:::-;6998:39;;7088:2;7077:9;7073:18;7060:32;-1:-1:-1;;;;;7152:2:1;7144:6;7141:14;7138:34;;;7168:1;7165;7158:12;7138:34;7206:6;7195:9;7191:22;7181:32;;7251:7;7244:4;7240:2;7236:13;7232:27;7222:55;;7273:1;7270;7263:12;7222:55;7296:74;7362:7;7357:2;7344:16;7339:2;7335;7331:11;7296:74;:::i;:::-;7286:84;;7389:38;7423:2;7412:9;7408:18;7389:38;:::i;:::-;7379:48;;7480:2;7469:9;7465:18;7452:32;7436:48;;7509:2;7499:8;7496:16;7493:36;;;7525:1;7522;7515:12;7493:36;;7548:52;7592:7;7581:8;7570:9;7566:24;7548:52;:::i;:::-;7538:62;-1:-1:-1;;7635:4:1;-1:-1:-1;;7616:17:1;;7612:28;7609:48;;;7653:1;7650;7643:12;7609:48;;7686:2;7680:9;7698:32;7723:6;7698:32;:::i;:::-;7782:3;7771:9;7767:19;7754:33;7746:6;7739:49;7821:40;7855:4;7844:9;7840:20;7821:40;:::i;:::-;7816:2;7804:15;;7797:65;7923:3;7908:19;;7895:33;7890:2;7878:15;;7871:58;7990:3;7975:19;;7962:33;7957:2;7945:15;;7938:58;8058:3;8043:19;;;8030:33;8024:3;8012:16;;8005:59;-1:-1:-1;6717:1378:1;;;;-1:-1:-1;6717:1378:1;7808:6;6717:1378::o;8100:391::-;8186:6;8194;8202;8210;8263:3;8251:9;8242:7;8238:23;8234:33;8231:53;;;8280:1;8277;8270:12;8231:53;8316:9;8303:23;8293:33;;8345:38;8379:2;8368:9;8364:18;8345:38;:::i;:::-;8100:391;;8335:48;;-1:-1:-1;;;;8430:2:1;8415:18;;8402:32;;8481:2;8466:18;8453:32;;8100:391::o;8931:260::-;8999:6;9007;9060:2;9048:9;9039:7;9035:23;9031:32;9028:52;;;9076:1;9073;9066:12;9028:52;9099:29;9118:9;9099:29;:::i;:::-;9089:39;;9147:38;9181:2;9170:9;9166:18;9147:38;:::i;:::-;9137:48;;8931:260;;;;;:::o;9196:547::-;9285:6;9293;9301;9309;9362:2;9350:9;9341:7;9337:23;9333:32;9330:52;;;9378:1;9375;9368:12;9330:52;9418:9;9405:23;-1:-1:-1;;;;;9443:6:1;9440:30;9437:50;;;9483:1;9480;9473:12;9437:50;9522:59;9573:7;9564:6;9553:9;9549:22;9522:59;:::i;:::-;9600:8;;9496:85;;-1:-1:-1;9682:2:1;9667:18;;9654:32;;9733:2;9718:18;9705:32;;-1:-1:-1;9196:547:1;-1:-1:-1;;;;9196:547:1:o;9971:390::-;10049:6;10057;10110:2;10098:9;10089:7;10085:23;10081:32;10078:52;;;10126:1;10123;10116:12;10078:52;10166:9;10153:23;-1:-1:-1;;;;;10191:6:1;10188:30;10185:50;;;10231:1;10228;10221:12;10185:50;10254;10296:7;10287:6;10276:9;10272:22;10254:50;:::i;:::-;10244:60;10351:2;10336:18;;;;10323:32;;-1:-1:-1;;;;9971:390:1:o;10366:1067::-;10459:6;10467;10520:2;10508:9;10499:7;10495:23;10491:32;10488:52;;;10536:1;10533;10526:12;10488:52;10559:29;10578:9;10559:29;:::i;:::-;10549:39;;10607:2;10660;10649:9;10645:18;10632:32;-1:-1:-1;;;;;10724:2:1;10716:6;10713:14;10710:34;;;10740:1;10737;10730:12;10710:34;10778:6;10767:9;10763:22;10753:32;;10823:7;10816:4;10812:2;10808:13;10804:27;10794:55;;10845:1;10842;10835:12;10794:55;10881:2;10868:16;10903:2;10899;10896:10;10893:36;;;10909:18;;:::i;:::-;10955:2;10952:1;10948:10;10938:20;;10987:2;10981:9;10999:40;11035:2;11031;11027:11;11019:6;10999:40;:::i;:::-;11074:18;;;11150:11;;;11146:20;;;11108:15;;;11178:19;;;11175:39;;;11210:1;11207;11200:12;11175:39;11234:11;;;;11254:148;11270:6;11265:3;11262:15;11254:148;;;11336:23;11355:3;11336:23;:::i;:::-;11324:36;;11287:12;;;;11380;;11254:148;;;11258:3;11421:6;11411:16;;;;;;;10366:1067;;;;;:::o;11438:658::-;11609:2;11661:21;;;11731:13;;11634:18;;;11753:22;;;11580:4;;11609:2;11832:15;;;;11806:2;11791:18;;;11580:4;11875:195;11889:6;11886:1;11883:13;11875:195;;;11954:13;;-1:-1:-1;;;;;11950:39:1;11938:52;;12045:15;;;;12010:12;;;;11986:1;11904:9;11875:195;;;-1:-1:-1;12087:3:1;;11438:658;-1:-1:-1;;;;;;11438:658:1:o;12101:578::-;12205:6;12213;12221;12274:2;12262:9;12253:7;12249:23;12245:32;12242:52;;;12290:1;12287;12280:12;12242:52;12330:9;12317:23;-1:-1:-1;;;;;12355:6:1;12352:30;12349:50;;;12395:1;12392;12385:12;12349:50;12434:70;12496:7;12487:6;12476:9;12472:22;12434:70;:::i;:::-;12523:8;;-1:-1:-1;12408:96:1;-1:-1:-1;;12608:2:1;12593:18;;12580:32;12621:28;12580:32;12621:28;:::i;:::-;12668:5;12658:15;;;12101:578;;;;;:::o;12684:1088::-;12842:6;12850;12858;12866;12874;12882;12935:2;12923:9;12914:7;12910:23;12906:32;12903:52;;;12951:1;12948;12941:12;12903:52;12991:9;12978:23;-1:-1:-1;;;;;13061:2:1;13053:6;13050:14;13047:34;;;13077:1;13074;13067:12;13047:34;13116:70;13178:7;13169:6;13158:9;13154:22;13116:70;:::i;:::-;13205:8;;-1:-1:-1;13090:96:1;-1:-1:-1;13293:2:1;13278:18;;13265:32;;-1:-1:-1;13309:16:1;;;13306:36;;;13338:1;13335;13328:12;13306:36;13377:72;13441:7;13430:8;13419:9;13415:24;13377:72;:::i;:::-;13468:8;;-1:-1:-1;13351:98:1;-1:-1:-1;13556:2:1;13541:18;;13528:32;;-1:-1:-1;13572:16:1;;;13569:36;;;13601:1;13598;13591:12;13569:36;;13640:72;13704:7;13693:8;13682:9;13678:24;13640:72;:::i;:::-;12684:1088;;;;-1:-1:-1;12684:1088:1;;-1:-1:-1;12684:1088:1;;13731:8;;12684:1088;-1:-1:-1;;;12684:1088:1:o;13777:916::-;13917:6;13925;13933;13941;13949;13957;14010:3;13998:9;13989:7;13985:23;13981:33;13978:53;;;14027:1;14024;14017:12;13978:53;14050:29;14069:9;14050:29;:::i;:::-;14040:39;;14126:2;14115:9;14111:18;14098:32;14088:42;;14181:2;14170:9;14166:18;14153:32;-1:-1:-1;;;;;14245:2:1;14237:6;14234:14;14231:34;;;14261:1;14258;14251:12;14231:34;14300:70;14362:7;14353:6;14342:9;14338:22;14300:70;:::i;:::-;14389:8;;-1:-1:-1;14274:96:1;-1:-1:-1;14477:2:1;14462:18;;14449:32;;-1:-1:-1;14493:16:1;;;14490:36;;;14522:1;14519;14512:12;14698:396;14776:6;14784;14837:2;14825:9;14816:7;14812:23;14808:32;14805:52;;;14853:1;14850;14843:12;14805:52;14893:9;14880:23;-1:-1:-1;;;;;14918:6:1;14915:30;14912:50;;;14958:1;14955;14948:12;14912:50;14981;15023:7;15014:6;15003:9;14999:22;14981:50;:::i;:::-;14971:60;;;15050:38;15084:2;15073:9;15069:18;15050:38;:::i;15099:322::-;15176:6;15184;15192;15245:2;15233:9;15224:7;15220:23;15216:32;15213:52;;;15261:1;15258;15251:12;15213:52;15284:29;15303:9;15284:29;:::i;:::-;15274:39;15360:2;15345:18;;15332:32;;-1:-1:-1;15411:2:1;15396:18;;;15383:32;;15099:322;-1:-1:-1;;;15099:322:1:o;15426:654::-;15539:6;15547;15555;15563;15571;15624:3;15612:9;15603:7;15599:23;15595:33;15592:53;;;15641:1;15638;15631:12;15592:53;15664:29;15683:9;15664:29;:::i;:::-;15654:39;;15712:38;15746:2;15735:9;15731:18;15712:38;:::i;:::-;15702:48;;15797:2;15786:9;15782:18;15769:32;15759:42;;15852:2;15841:9;15837:18;15824:32;-1:-1:-1;;;;;15871:6:1;15868:30;15865:50;;;15911:1;15908;15901:12;15865:50;15950:70;16012:7;16003:6;15992:9;15988:22;15950:70;:::i;:::-;15426:654;;;;-1:-1:-1;15426:654:1;;-1:-1:-1;16039:8:1;;15924:96;15426:654;-1:-1:-1;;;15426:654:1:o;16085:1163::-;16252:6;16260;16268;16276;16284;16292;16300;16353:3;16341:9;16332:7;16328:23;16324:33;16321:53;;;16370:1;16367;16360:12;16321:53;16393:29;16412:9;16393:29;:::i;:::-;16383:39;;16473:2;16462:9;16458:18;16445:32;-1:-1:-1;;;;;16537:2:1;16529:6;16526:14;16523:34;;;16553:1;16550;16543:12;16523:34;16592:70;16654:7;16645:6;16634:9;16630:22;16592:70;:::i;:::-;16681:8;;-1:-1:-1;16566:96:1;-1:-1:-1;16769:2:1;16754:18;;16741:32;;-1:-1:-1;16785:16:1;;;16782:36;;;16814:1;16811;16804:12;16782:36;16853:72;16917:7;16906:8;16895:9;16891:24;16853:72;:::i;:::-;16944:8;;-1:-1:-1;16827:98:1;-1:-1:-1;17032:2:1;17017:18;;17004:32;;-1:-1:-1;17048:16:1;;;17045:36;;;17077:1;17074;17067:12;17253:219;17402:2;17391:9;17384:21;17365:4;17422:44;17462:2;17451:9;17447:18;17439:6;17422:44;:::i;17477:696::-;17583:6;17591;17599;17607;17615;17623;17676:3;17664:9;17655:7;17651:23;17647:33;17644:53;;;17693:1;17690;17683:12;17644:53;17716:29;17735:9;17716:29;:::i;:::-;17706:39;;17796:2;17785:9;17781:18;17768:32;-1:-1:-1;;;;;17815:6:1;17812:30;17809:50;;;17855:1;17852;17845:12;17809:50;17894:59;17945:7;17936:6;17925:9;17921:22;17894:59;:::i;:::-;17972:8;;-1:-1:-1;17868:85:1;-1:-1:-1;18026:38:1;;-1:-1:-1;18060:2:1;18045:18;;18026:38;:::i;:::-;18016:48;;18111:2;18100:9;18096:18;18083:32;18073:42;;18162:3;18151:9;18147:19;18134:33;18124:43;;17477:696;;;;;;;;:::o;18178:540::-;18255:6;18263;18271;18324:2;18312:9;18303:7;18299:23;18295:32;18292:52;;;18340:1;18337;18330:12;18292:52;18380:9;18367:23;-1:-1:-1;;;;;18405:6:1;18402:30;18399:50;;;18445:1;18442;18435:12;18399:50;18484:59;18535:7;18526:6;18515:9;18511:22;18484:59;:::i;18954:334::-;19156:2;19138:21;;;19195:2;19175:18;;;19168:30;-1:-1:-1;;;19229:2:1;19214:18;;19207:40;19279:2;19264:18;;18954:334::o;19293:331::-;19495:2;19477:21;;;19534:1;19514:18;;;19507:29;-1:-1:-1;;;19567:2:1;19552:18;;19545:38;19615:2;19600:18;;19293:331::o;19629:127::-;19690:10;19685:3;19681:20;19678:1;19671:31;19721:4;19718:1;19711:15;19745:4;19742:1;19735:15;19761:125;19801:4;19829:1;19826;19823:8;19820:34;;;19834:18;;:::i;:::-;-1:-1:-1;19871:9:1;;19761:125::o;19891:127::-;19952:10;19947:3;19943:20;19940:1;19933:31;19983:4;19980:1;19973:15;20007:4;20004:1;19997:15;20023:135;20062:3;-1:-1:-1;;20083:17:1;;20080:43;;;20103:18;;:::i;:::-;-1:-1:-1;20150:1:1;20139:13;;20023:135::o;20163:127::-;20224:10;20219:3;20215:20;20212:1;20205:31;20255:4;20252:1;20245:15;20279:4;20276:1;20269:15;20295:380;20374:1;20370:12;;;;20417;;;20438:61;;20492:4;20484:6;20480:17;20470:27;;20438:61;20545:2;20537:6;20534:14;20514:18;20511:38;20508:161;;;20591:10;20586:3;20582:20;20579:1;20572:31;20626:4;20623:1;20616:15;20654:4;20651:1;20644:15;20508:161;;20295:380;;;:::o;21365:273::-;21550:6;21542;21537:3;21524:33;21506:3;21576:16;;21601:13;;;21576:16;21365:273;-1:-1:-1;21365:273:1:o;21980:128::-;22020:3;22051:1;22047:6;22044:1;22041:13;22038:39;;;22057:18;;:::i;:::-;-1:-1:-1;22093:9:1;;21980:128::o;22113:267::-;22202:6;22197:3;22190:19;22254:6;22247:5;22240:4;22235:3;22231:14;22218:43;-1:-1:-1;22306:1:1;22281:16;;;22299:4;22277:27;;;22270:38;;;;22362:2;22341:15;;;-1:-1:-1;;22337:29:1;22328:39;;;22324:50;;22113:267::o;22385:318::-;22572:2;22561:9;22554:21;22535:4;22592:62;22650:2;22639:9;22635:18;22627:6;22619;22592:62;:::i;:::-;22584:70;;22690:6;22685:2;22674:9;22670:18;22663:34;22385:318;;;;;;:::o;24268:276::-;24399:3;24437:6;24431:13;24453:53;24499:6;24494:3;24487:4;24479:6;24475:17;24453:53;:::i;:::-;24522:16;;;;;24268:276;-1:-1:-1;;24268:276:1:o;25571:560::-;25793:4;25839:1;25835;25830:3;25826:11;25822:19;25880:2;25872:6;25868:15;25857:9;25850:34;25920:3;25915:2;25904:9;25900:18;25893:31;25941:45;25981:3;25970:9;25966:19;25958:6;25941:45;:::i;:::-;26022:15;;26017:2;26002:18;;25995:43;-1:-1:-1;26069:2:1;26054:18;;26047:34;;;;26112:3;26097:19;;;26090:35;25933:53;25571:560;-1:-1:-1;;25571:560:1:o;26136:812::-;26221:6;26229;26282:2;26270:9;26261:7;26257:23;26253:32;26250:52;;;26298:1;26295;26288:12;26250:52;26330:9;26324:16;26349:28;26371:5;26349:28;:::i;:::-;26445:2;26430:18;;26424:25;26396:5;;-1:-1:-1;;;;;;26461:30:1;;26458:50;;;26504:1;26501;26494:12;26458:50;26527:22;;26580:4;26572:13;;26568:27;-1:-1:-1;26558:55:1;;26609:1;26606;26599:12;26558:55;26638:2;26632:9;26660:32;26689:2;26660:32;:::i;:::-;26721:2;26715:9;26733:31;26761:2;26753:6;26733:31;:::i;:::-;26788:2;26780:6;26773:18;26828:7;26823:2;26818;26814;26810:11;26806:20;26803:33;26800:53;;;26849:1;26846;26839:12;26800:53;26862:55;26914:2;26909;26901:6;26897:15;26892:2;26888;26884:11;26862:55;:::i;:::-;26936:6;26926:16;;;;;;26136:812;;;;;:::o;26953:179::-;26988:3;27030:1;27012:16;27009:23;27006:120;;;27076:1;27073;27070;27055:23;-1:-1:-1;27113:1:1;27107:8;27102:3;27098:18;27006:120;26953:179;:::o;27137:671::-;27176:3;27218:4;27200:16;27197:26;27194:39;;;27137:671;:::o;27194:39::-;27260:2;27254:9;-1:-1:-1;;27325:16:1;27321:25;;27318:1;27254:9;27297:50;27376:4;27370:11;27400:16;-1:-1:-1;;;;;27506:2:1;27499:4;27491:6;27487:17;27484:25;27479:2;27471:6;27468:14;27465:45;27462:58;;;27513:5;;;;;27137:671;:::o;27462:58::-;27550:6;27544:4;27540:17;27529:28;;27586:3;27580:10;27613:2;27605:6;27602:14;27599:27;;;27619:5;;;;;;27137:671;:::o;27599:27::-;27703:2;27684:16;27678:4;27674:27;27670:36;27663:4;27654:6;27649:3;27645:16;27641:27;27638:69;27635:82;;;27710:5;;;;;;27137:671;:::o;27635:82::-;27726:57;27777:4;27768:6;27760;27756:19;27752:30;27746:4;27726:57;:::i;:::-;-1:-1:-1;27799:3:1;;27137:671;-1:-1:-1;;;;;27137:671:1:o;27813:442::-;28038:6;28027:9;28020:25;28081:6;28076:2;28065:9;28061:18;28054:34;28138:6;28131:14;28124:22;28119:2;28108:9;28104:18;28097:50;28183:3;28178:2;28167:9;28163:18;28156:31;28001:4;28204:45;28244:3;28233:9;28229:19;28221:6;28204:45;:::i;:::-;28196:53;27813:442;-1:-1:-1;;;;;;27813:442:1:o;28260:359::-;28463:6;28452:9;28445:25;28506:6;28501:2;28490:9;28486:18;28479:34;28549:2;28544;28533:9;28529:18;28522:30;28426:4;28569:44;28609:2;28598:9;28594:18;28586:6;28569:44;:::i;28624:629::-;28911:3;28900:9;28893:22;28874:4;28938:45;28978:3;28967:9;28963:19;28955:6;28938:45;:::i;:::-;-1:-1:-1;;;;;29019:32:1;;29014:2;28999:18;;28992:60;29083:2;29068:18;;29061:34;;;29131:22;;;29126:2;29111:18;;29104:50;29171:32;29135:6;29188;29171:32;:::i;:::-;29163:40;;;29240:6;29234:3;29223:9;29219:19;29212:35;28624:629;;;;;;;;:::o;29258:168::-;29298:7;29364:1;29360;29356:6;29352:14;29349:1;29346:21;29341:1;29334:9;29327:17;29323:45;29320:71;;;29371:18;;:::i;:::-;-1:-1:-1;29411:9:1;;29258:168::o;29776:253::-;29816:3;-1:-1:-1;;;;;29905:2:1;29902:1;29898:10;29935:2;29932:1;29928:10;29966:3;29962:2;29958:12;29953:3;29950:21;29947:47;;;29974:18;;:::i;:::-;30010:13;;29776:253;-1:-1:-1;;;;29776:253:1:o;30456:337::-;30658:2;30640:21;;;30697:2;30677:18;;;30670:30;-1:-1:-1;;;30731:2:1;30716:18;;30709:43;30784:2;30769:18;;30456:337::o;30798:329::-;31000:2;30982:21;;;31039:1;31019:18;;;31012:29;-1:-1:-1;;;31072:2:1;31057:18;;31050:36;31118:2;31103:18;;30798:329::o;31478:522::-;31556:4;31562:6;31622:11;31609:25;31716:2;31712:7;31701:8;31685:14;31681:29;31677:43;31657:18;31653:68;31643:96;;31735:1;31732;31725:12;31643:96;31762:33;;31814:20;;;-1:-1:-1;;;;;;31846:30:1;;31843:50;;;31889:1;31886;31879:12;31843:50;31922:4;31910:17;;-1:-1:-1;31953:14:1;31949:27;;;31939:38;;31936:58;;;31990:1;31987;31980:12;32005:328;32186:2;32175:9;32168:21;32149:4;32206:62;32264:2;32253:9;32249:18;32241:6;32233;32206:62;:::i;:::-;32198:70;;32318:6;32311:14;32304:22;32299:2;32288:9;32284:18;32277:50;32005:328;;;;;;:::o;32682:290::-;32859:2;32848:9;32841:21;32822:4;32879:44;32919:2;32908:9;32904:18;32896:6;32879:44;:::i;:::-;32871:52;;32959:6;32954:2;32943:9;32939:18;32932:34;32682:290;;;;;:::o;33318:649::-;33607:3;33596:9;33589:22;33570:4;33634:63;33692:3;33681:9;33677:19;33669:6;33661;33634:63;:::i;:::-;-1:-1:-1;;;;;33733:32:1;;33728:2;33713:18;;33706:60;33797:2;33782:18;;33775:34;;;33845:22;;;33840:2;33825:18;;33818:50;33885:32;33849:6;33902;33885:32;:::i;:::-;33877:40;;;33954:6;33948:3;33937:9;33933:19;33926:35;33318:649;;;;;;;;;:::o;33972:136::-;34011:3;34039:5;34029:39;;34048:18;;:::i;:::-;-1:-1:-1;;;34084:18:1;;33972:136::o;34113:300::-;34284:2;34273:9;34266:21;34247:4;34304:44;34344:2;34333:9;34329:18;34321:6;34304:44;:::i;:::-;34296:52;;34398:6;34391:14;34384:22;34379:2;34368:9;34364:18;34357:50;34113:300;;;;;:::o

Swarm Source

ipfs://e9a38cafaf225369654a1741777eac1845fb53ee65c1b88aecdac8488bb9ee58
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading