Hierarchy

  • ContractFactory
    • Superfluid__factory

Constructors

  • Parameters

    • Rest ...args: SuperfluidConstructorParams

    Returns Superfluid__factory

Properties

abi: readonly [{
    inputs: readonly [{
        internalType: "bool";
        name: "nonUpgradable";
        type: "bool";
    }, {
        internalType: "bool";
        name: "appWhiteListingEnabled";
        type: "bool";
    }];
    stateMutability: "nonpayable";
    type: "constructor";
}, {
    inputs: readonly [{
        internalType: "uint256";
        name: "_code";
        type: "uint256";
    }];
    name: "APP_RULE";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_AGREEMENT_ALREADY_REGISTERED";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_AGREEMENT_CALLBACK_IS_NOT_ACTION";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_AGREEMENT_IS_NOT_REGISTERED";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_CALL_AGREEMENT_WITH_CTX_FROM_WRONG_ADDRESS";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_CALL_APP_ACTION_WITH_CTX_FROM_WRONG_ADDRESS";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_CANNOT_DOWNGRADE_TO_NON_UPGRADEABLE";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_INVALID_CONFIG_WORD";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_MAX_256_AGREEMENTS";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_MUST_BE_CONTRACT";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_NEED_MORE_GAS";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_NON_UPGRADEABLE";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_NON_ZERO_LENGTH_PLACEHOLDER_CTX";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_NOT_A_SUPER_APP";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_NO_APP_REGISTRATION_PERMISSION";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_ONLY_GOVERNANCE";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_ONLY_LISTED_AGREEMENT";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_RECEIVER_IS_NOT_SUPER_APP";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_SENDER_IS_NOT_SUPER_APP";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_SOURCE_APP_NEEDS_HIGHER_APP_LEVEL";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_SUPER_APP_ALREADY_REGISTERED";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_SUPER_APP_IS_JAILED";
    type: "error";
}, {
    inputs: readonly [];
    name: "HOST_UNKNOWN_BATCH_CALL_OPERATION_TYPE";
    type: "error";
}, {
    anonymous: false;
    inputs: readonly [{
        indexed: false;
        internalType: "bytes32";
        name: "agreementType";
        type: "bytes32";
    }, {
        indexed: false;
        internalType: "address";
        name: "code";
        type: "address";
    }];
    name: "AgreementClassRegistered";
    type: "event";
}, {
    anonymous: false;
    inputs: readonly [{
        indexed: false;
        internalType: "bytes32";
        name: "agreementType";
        type: "bytes32";
    }, {
        indexed: false;
        internalType: "address";
        name: "code";
        type: "address";
    }];
    name: "AgreementClassUpdated";
    type: "event";
}, {
    anonymous: false;
    inputs: readonly [{
        indexed: true;
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }];
    name: "AppRegistered";
    type: "event";
}, {
    anonymous: false;
    inputs: readonly [{
        indexed: false;
        internalType: "bytes32";
        name: "uuid";
        type: "bytes32";
    }, {
        indexed: false;
        internalType: "address";
        name: "codeAddress";
        type: "address";
    }];
    name: "CodeUpdated";
    type: "event";
}, {
    anonymous: false;
    inputs: readonly [{
        indexed: false;
        internalType: "contract ISuperfluidGovernance";
        name: "oldGov";
        type: "address";
    }, {
        indexed: false;
        internalType: "contract ISuperfluidGovernance";
        name: "newGov";
        type: "address";
    }];
    name: "GovernanceReplaced";
    type: "event";
}, {
    anonymous: false;
    inputs: readonly [{
        indexed: false;
        internalType: "uint8";
        name: "version";
        type: "uint8";
    }];
    name: "Initialized";
    type: "event";
}, {
    anonymous: false;
    inputs: readonly [{
        indexed: true;
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }, {
        indexed: false;
        internalType: "uint256";
        name: "reason";
        type: "uint256";
    }];
    name: "Jail";
    type: "event";
}, {
    anonymous: false;
    inputs: readonly [{
        indexed: true;
        internalType: "address";
        name: "beaconProxy";
        type: "address";
    }, {
        indexed: false;
        internalType: "address";
        name: "newBeaconLogic";
        type: "address";
    }];
    name: "PoolBeaconLogicUpdated";
    type: "event";
}, {
    anonymous: false;
    inputs: readonly [{
        indexed: false;
        internalType: "contract ISuperTokenFactory";
        name: "newFactory";
        type: "address";
    }];
    name: "SuperTokenFactoryUpdated";
    type: "event";
}, {
    anonymous: false;
    inputs: readonly [{
        indexed: true;
        internalType: "contract ISuperToken";
        name: "token";
        type: "address";
    }, {
        indexed: false;
        internalType: "address";
        name: "code";
        type: "address";
    }];
    name: "SuperTokenLogicUpdated";
    type: "event";
}, {
    inputs: readonly [];
    name: "APP_WHITE_LISTING_ENABLED";
    outputs: readonly [{
        internalType: "bool";
        name: "";
        type: "bool";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [];
    name: "CALLBACK_GAS_LIMIT";
    outputs: readonly [{
        internalType: "uint64";
        name: "";
        type: "uint64";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [];
    name: "MAX_APP_CALLBACK_LEVEL";
    outputs: readonly [{
        internalType: "uint256";
        name: "";
        type: "uint256";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [];
    name: "MAX_NUM_AGREEMENTS";
    outputs: readonly [{
        internalType: "uint32";
        name: "";
        type: "uint32";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [];
    name: "NON_UPGRADABLE_DEPLOYMENT";
    outputs: readonly [{
        internalType: "bool";
        name: "";
        type: "bool";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "uint256";
        name: "bitmap";
        type: "uint256";
    }, {
        internalType: "bytes32";
        name: "agreementType";
        type: "bytes32";
    }];
    name: "addToAgreementClassesBitmap";
    outputs: readonly [{
        internalType: "uint256";
        name: "newBitmap";
        type: "uint256";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "targetApp";
        type: "address";
    }];
    name: "allowCompositeApp";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "bytes";
        name: "ctx";
        type: "bytes";
    }, {
        internalType: "int256";
        name: "appCreditUsedDelta";
        type: "int256";
    }];
    name: "appCallbackPop";
    outputs: readonly [{
        internalType: "bytes";
        name: "newCtx";
        type: "bytes";
    }];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "bytes";
        name: "ctx";
        type: "bytes";
    }, {
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }, {
        internalType: "uint256";
        name: "appCreditGranted";
        type: "uint256";
    }, {
        internalType: "int256";
        name: "appCreditUsed";
        type: "int256";
    }, {
        internalType: "contract ISuperfluidToken";
        name: "appCreditToken";
        type: "address";
    }];
    name: "appCallbackPush";
    outputs: readonly [{
        internalType: "bytes";
        name: "appCtx";
        type: "bytes";
    }];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        components: readonly [{
            internalType: "uint32";
            name: "operationType";
            type: "uint32";
        }, {
            internalType: "address";
            name: "target";
            type: "address";
        }, {
            internalType: "bytes";
            name: "data";
            type: "bytes";
        }];
        internalType: "struct ISuperfluid.Operation[]";
        name: "operations";
        type: "tuple[]";
    }];
    name: "batchCall";
    outputs: readonly [];
    stateMutability: "payable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperAgreement";
        name: "agreementClass";
        type: "address";
    }, {
        internalType: "bytes";
        name: "callData";
        type: "bytes";
    }, {
        internalType: "bytes";
        name: "userData";
        type: "bytes";
    }];
    name: "callAgreement";
    outputs: readonly [{
        internalType: "bytes";
        name: "returnedData";
        type: "bytes";
    }];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperAgreement";
        name: "agreementClass";
        type: "address";
    }, {
        internalType: "bytes";
        name: "callData";
        type: "bytes";
    }, {
        internalType: "bytes";
        name: "userData";
        type: "bytes";
    }, {
        internalType: "bytes";
        name: "ctx";
        type: "bytes";
    }];
    name: "callAgreementWithContext";
    outputs: readonly [{
        internalType: "bytes";
        name: "newCtx";
        type: "bytes";
    }, {
        internalType: "bytes";
        name: "returnedData";
        type: "bytes";
    }];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }, {
        internalType: "bytes";
        name: "callData";
        type: "bytes";
    }];
    name: "callAppAction";
    outputs: readonly [{
        internalType: "bytes";
        name: "returnedData";
        type: "bytes";
    }];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }, {
        internalType: "bytes";
        name: "callData";
        type: "bytes";
    }, {
        internalType: "bytes";
        name: "ctx";
        type: "bytes";
    }];
    name: "callAppActionWithContext";
    outputs: readonly [{
        internalType: "bytes";
        name: "newCtx";
        type: "bytes";
    }];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }, {
        internalType: "bytes";
        name: "callData";
        type: "bytes";
    }, {
        internalType: "bool";
        name: "isTermination";
        type: "bool";
    }, {
        internalType: "bytes";
        name: "ctx";
        type: "bytes";
    }];
    name: "callAppAfterCallback";
    outputs: readonly [{
        internalType: "bytes";
        name: "newCtx";
        type: "bytes";
    }];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }, {
        internalType: "bytes";
        name: "callData";
        type: "bytes";
    }, {
        internalType: "bool";
        name: "isTermination";
        type: "bool";
    }, {
        internalType: "bytes";
        name: "ctx";
        type: "bytes";
    }];
    name: "callAppBeforeCallback";
    outputs: readonly [{
        internalType: "bytes";
        name: "cbdata";
        type: "bytes";
    }];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [];
    name: "castrate";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperToken";
        name: "token";
        type: "address";
    }, {
        internalType: "address";
        name: "newAdmin";
        type: "address";
    }];
    name: "changeSuperTokenAdmin";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "bytes";
        name: "ctx";
        type: "bytes";
    }, {
        internalType: "int256";
        name: "appCreditUsedMore";
        type: "int256";
    }];
    name: "ctxUseCredit";
    outputs: readonly [{
        internalType: "bytes";
        name: "newCtx";
        type: "bytes";
    }];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "bytes";
        name: "ctx";
        type: "bytes";
    }];
    name: "decodeCtx";
    outputs: readonly [{
        components: readonly [{
            internalType: "uint8";
            name: "appCallbackLevel";
            type: "uint8";
        }, {
            internalType: "uint8";
            name: "callType";
            type: "uint8";
        }, {
            internalType: "uint256";
            name: "timestamp";
            type: "uint256";
        }, {
            internalType: "address";
            name: "msgSender";
            type: "address";
        }, {
            internalType: "bytes4";
            name: "agreementSelector";
            type: "bytes4";
        }, {
            internalType: "bytes";
            name: "userData";
            type: "bytes";
        }, {
            internalType: "uint256";
            name: "appCreditGranted";
            type: "uint256";
        }, {
            internalType: "uint256";
            name: "appCreditWantedDeprecated";
            type: "uint256";
        }, {
            internalType: "int256";
            name: "appCreditUsed";
            type: "int256";
        }, {
            internalType: "address";
            name: "appAddress";
            type: "address";
        }, {
            internalType: "contract ISuperfluidToken";
            name: "appCreditToken";
            type: "address";
        }];
        internalType: "struct ISuperfluid.Context";
        name: "context";
        type: "tuple";
    }];
    stateMutability: "pure";
    type: "function";
}, {
    inputs: readonly [{
        components: readonly [{
            internalType: "uint32";
            name: "operationType";
            type: "uint32";
        }, {
            internalType: "address";
            name: "target";
            type: "address";
        }, {
            internalType: "bytes";
            name: "data";
            type: "bytes";
        }];
        internalType: "struct ISuperfluid.Operation[]";
        name: "operations";
        type: "tuple[]";
    }];
    name: "forwardBatchCall";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "bytes32";
        name: "agreementType";
        type: "bytes32";
    }];
    name: "getAgreementClass";
    outputs: readonly [{
        internalType: "contract ISuperAgreement";
        name: "agreementClass";
        type: "address";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "appAddr";
        type: "address";
    }];
    name: "getAppCallbackLevel";
    outputs: readonly [{
        internalType: "uint8";
        name: "";
        type: "uint8";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }];
    name: "getAppManifest";
    outputs: readonly [{
        internalType: "bool";
        name: "isSuperApp";
        type: "bool";
    }, {
        internalType: "bool";
        name: "isJailed";
        type: "bool";
    }, {
        internalType: "uint256";
        name: "noopMask";
        type: "uint256";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [];
    name: "getCodeAddress";
    outputs: readonly [{
        internalType: "address";
        name: "codeAddress";
        type: "address";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [];
    name: "getGovernance";
    outputs: readonly [{
        internalType: "contract ISuperfluidGovernance";
        name: "";
        type: "address";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [];
    name: "getNow";
    outputs: readonly [{
        internalType: "uint256";
        name: "";
        type: "uint256";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [];
    name: "getSuperTokenFactory";
    outputs: readonly [{
        internalType: "contract ISuperTokenFactory";
        name: "factory";
        type: "address";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [];
    name: "getSuperTokenFactoryLogic";
    outputs: readonly [{
        internalType: "address";
        name: "logic";
        type: "address";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperfluidGovernance";
        name: "gov";
        type: "address";
    }];
    name: "initialize";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperAgreement";
        name: "agreementClass";
        type: "address";
    }];
    name: "isAgreementClassListed";
    outputs: readonly [{
        internalType: "bool";
        name: "yes";
        type: "bool";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "bytes32";
        name: "agreementType";
        type: "bytes32";
    }];
    name: "isAgreementTypeListed";
    outputs: readonly [{
        internalType: "bool";
        name: "yes";
        type: "bool";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }];
    name: "isApp";
    outputs: readonly [{
        internalType: "bool";
        name: "";
        type: "bool";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }];
    name: "isAppJailed";
    outputs: readonly [{
        internalType: "bool";
        name: "";
        type: "bool";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }, {
        internalType: "contract ISuperApp";
        name: "targetApp";
        type: "address";
    }];
    name: "isCompositeAppAllowed";
    outputs: readonly [{
        internalType: "bool";
        name: "";
        type: "bool";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "bytes";
        name: "ctx";
        type: "bytes";
    }];
    name: "isCtxValid";
    outputs: readonly [{
        internalType: "bool";
        name: "";
        type: "bool";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "address";
        name: "forwarder";
        type: "address";
    }];
    name: "isTrustedForwarder";
    outputs: readonly [{
        internalType: "bool";
        name: "";
        type: "bool";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "bytes";
        name: "ctx";
        type: "bytes";
    }, {
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }, {
        internalType: "uint256";
        name: "reason";
        type: "uint256";
    }];
    name: "jailApp";
    outputs: readonly [{
        internalType: "bytes";
        name: "newCtx";
        type: "bytes";
    }];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "uint256";
        name: "bitmap";
        type: "uint256";
    }];
    name: "mapAgreementClasses";
    outputs: readonly [{
        internalType: "contract ISuperAgreement[]";
        name: "agreementClasses";
        type: "address[]";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [];
    name: "proxiableUUID";
    outputs: readonly [{
        internalType: "bytes32";
        name: "";
        type: "bytes32";
    }];
    stateMutability: "pure";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperAgreement";
        name: "agreementClassLogic";
        type: "address";
    }];
    name: "registerAgreementClass";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "uint256";
        name: "configWord";
        type: "uint256";
    }];
    name: "registerApp";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }, {
        internalType: "uint256";
        name: "configWord";
        type: "uint256";
    }];
    name: "registerApp";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperApp";
        name: "app";
        type: "address";
    }, {
        internalType: "uint256";
        name: "configWord";
        type: "uint256";
    }];
    name: "registerAppByFactory";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "uint256";
        name: "configWord";
        type: "uint256";
    }, {
        internalType: "string";
        name: "registrationKey";
        type: "string";
    }];
    name: "registerAppWithKey";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "uint256";
        name: "bitmap";
        type: "uint256";
    }, {
        internalType: "bytes32";
        name: "agreementType";
        type: "bytes32";
    }];
    name: "removeFromAgreementClassesBitmap";
    outputs: readonly [{
        internalType: "uint256";
        name: "newBitmap";
        type: "uint256";
    }];
    stateMutability: "view";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperfluidGovernance";
        name: "newGov";
        type: "address";
    }];
    name: "replaceGovernance";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperAgreement";
        name: "agreementClassLogic";
        type: "address";
    }];
    name: "updateAgreementClass";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "address";
        name: "newAddress";
        type: "address";
    }];
    name: "updateCode";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "address";
        name: "newLogic";
        type: "address";
    }];
    name: "updatePoolBeaconLogic";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperTokenFactory";
        name: "newFactory";
        type: "address";
    }];
    name: "updateSuperTokenFactory";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [{
        internalType: "contract ISuperToken";
        name: "token";
        type: "address";
    }, {
        internalType: "address";
        name: "newLogicOverride";
        type: "address";
    }];
    name: "updateSuperTokenLogic";
    outputs: readonly [];
    stateMutability: "nonpayable";
    type: "function";
}, {
    inputs: readonly [];
    name: "versionRecipient";
    outputs: readonly [{
        internalType: "string";
        name: "";
        type: "string";
    }];
    stateMutability: "pure";
    type: "function";
}]
bytecode: "0x60c06040523480156200001157600080fd5b50604051620058283803806200582883398101604081905262000034916200005b565b901515608052151560a05262000093565b805180151581146200005657600080fd5b919050565b600080604083850312156200006f57600080fd5b6200007a8362000045565b91506200008a6020840162000045565b90509250929050565b60805160a051615729620000ff600039600081816107d301528181612211015281816126ed015281816129980152612adf0152600081816109e501528181610afb01528181610e1c015281816116040152818161173f0152818161189e0152612a0701526157296000f3fe60806040526004361061031a5760003560e01c8063768fabb0116101ab578063bbe4fd50116100f7578063c60944a611610095578063f2e55caf1161006f578063f2e55caf14610a36578063f373305214610a4b578063f9f522f414610a6b578063fa6e0cfe14610aa857600080fd5b8063c60944a6146109b3578063cd312ec4146109d3578063e8dccb7d14610a0757600080fd5b8063bd3252c8116100d1578063bd3252c814610931578063bf42873414610946578063c4d66de814610966578063c56a069d1461098657600080fd5b8063bbe4fd50146108de578063bced3ddc146108f1578063bd1c448b1461091157600080fd5b80639d297e3011610164578063b6d200de1161013e578063b6d200de14610835578063b724211e14610855578063ba48b5f814610875578063bb84cfa11461089557600080fd5b80639d297e30146107c1578063a5dbbbcd146107f5578063ad3915c81461081557600080fd5b8063768fabb0146106ef5780638ca484841461070f5780638ceddd7a1461072f5780639378fa131461075a578063989b0c3e1461078c5780639903ad38146107ac57600080fd5b8063486ff0cd1161026a57806359a29141116102235780636b4f3335116101fd5780636b4f3335146106715780637283100c14610691578063731aed6e146106b157806374041e02146106cf57600080fd5b806359a291411461061e578063670e77e31461063e5780636ad3ca7d1461065e57600080fd5b8063486ff0cd1461054157806350d75d251461056c57806352d1902d1461058157806354fbc493146105be57806357121e0c146105de578063572b6c05146105fe57600080fd5b80632f89bf89116102d75780633ca3ad4e116102b15780633ca3ad4e1461047e5780633f6c923a146104c65780634329d293146104f3578063469519541461052157600080fd5b80632f89bf891461040f57806333d608f11461042f57806339255d5b1461045e57600080fd5b806306cecba81461031f5780630c5650751461034157806315a024e1146103615780631e6d0a84146103815780631e855cf3146103b7578063289b3c0d146103d7575b600080fd5b34801561032b57600080fd5b5061033f61033a3660046145f8565b610ac8565b005b34801561034d57600080fd5b5061033f61035c36600461461c565b610c9f565b34801561036d57600080fd5b5061033f61037c3660046145f8565b610d2f565b34801561038d57600080fd5b506103a161039c3660046146ab565b610f7f565b6040516103ae9190614791565b60405180910390f35b3480156103c357600080fd5b506103a16103d2366004614867565b6111cb565b3480156103e357600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016103ae565b34801561041b57600080fd5b5061033f61042a3660046145f8565b6111e3565b34801561043b57600080fd5b50610446622dc6c081565b6040516001600160401b0390911681526020016103ae565b34801561046a57600080fd5b506103a16104793660046148b6565b6113a1565b34801561048a57600080fd5b506104b66104993660046145f8565b6001600160a01b0316600090815260046020526040902054151590565b60405190151581526020016103ae565b3480156104d257600080fd5b506104e66104e136600461492b565b6113b7565b6040516103ae919061495f565b3480156104ff57600080fd5b5061051361050e366004614a40565b6113c8565b6040516103ae929190614aec565b34801561052d57600080fd5b5061033f61053c3660046145f8565b6115d1565b34801561054d57600080fd5b50604080518082019091526002815261763160f01b60208201526103a1565b34801561057857600080fd5b506103f76116cd565b34801561058d57600080fd5b507fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba745b6040519081526020016103ae565b3480156105ca57600080fd5b5061033f6105d93660046145f8565b6116fc565b3480156105ea57600080fd5b5061033f6105f93660046145f8565b61197f565b34801561060a57600080fd5b506104b66106193660046145f8565b611a4d565b34801561062a57600080fd5b506103a1610639366004614b11565b611ad7565b34801561064a57600080fd5b5061033f610659366004614b5c565b611bb9565b61033f61066c366004614b5c565b611bcf565b34801561067d57600080fd5b506104b661068c3660046145f8565b611bda565b34801561069d57600080fd5b5061033f6106ac3660046145f8565b611bfe565b3480156106bd57600080fd5b506003546001600160a01b03166103f7565b3480156106db57600080fd5b506103a16106ea3660046146ab565b611ca6565b3480156106fb57600080fd5b506103a161070a366004614bd0565b611df5565b34801561071b57600080fd5b506104b661072a3660046145f8565b611f91565b34801561073b57600080fd5b5061074561010081565b60405163ffffffff90911681526020016103ae565b34801561076657600080fd5b5061077a6107753660046145f8565b612056565b60405160ff90911681526020016103ae565b34801561079857600080fd5b506103a16107a7366004614b11565b612077565b3480156107b857600080fd5b5061033f61210a565b3480156107cd57600080fd5b506104b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561080157600080fd5b506105b0610810366004614c4b565b6121c5565b34801561082157600080fd5b5061033f610830366004614c6d565b61220f565b34801561084157600080fd5b506103f7610850366004614c6d565b612263565b34801561086157600080fd5b506103a1610870366004614c86565b6122ca565b34801561088157600080fd5b506103a1610890366004614ce2565b61238b565b3480156108a157600080fd5b506104b66108b036600461461c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108ea57600080fd5b50426105b0565b3480156108fd57600080fd5b506105b061090c366004614c4b565b6126a2565b34801561091d57600080fd5b5061033f61092c366004614d64565b6126eb565b34801561093d57600080fd5b506105b0600181565b34801561095257600080fd5b506104b6610961366004614daf565b612761565b34801561097257600080fd5b5061033f6109813660046145f8565b6127a2565b34801561099257600080fd5b506109a66109a1366004614c6d565b612886565b6040516103ae9190614df0565b3480156109bf57600080fd5b5061033f6109ce366004614e3d565b61296b565b3480156109df57600080fd5b506104b67f000000000000000000000000000000000000000000000000000000000000000081565b348015610a1357600080fd5b506104b6610a22366004614c6d565b600090815260026020526040902054151590565b348015610a4257600080fd5b506103f76129ea565b348015610a5757600080fd5b5061033f610a66366004614e3d565b612ab2565b348015610a7757600080fd5b50610a8b610a863660046145f8565b612bbd565b6040805193151584529115156020840152908201526060016103ae565b348015610ab457600080fd5b5061033f610ac336600461461c565b612c0c565b6000546201000090046001600160a01b03163314610af9576040516362e9152760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015610b38576040516314f72c9f60e01b815260040160405180910390fd5b6000816001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9c9190614e69565b600081815260026020526040812054919250819003610bce57604051630e4f4df560e11b815260040160405180910390fd5b60006001610bdc8184614e98565b81548110610bec57610bec614eab565b6000918252602090912001546040516311a5465560e21b81526001600160a01b03868116600483015290911691508190634695195490602401600060405180830381600087803b158015610c3f57600080fd5b505af1158015610c53573d6000803e3d6000fd5b5050604080518681526001600160a01b03881660208201527f9279aa773f2b588996032d8de89911555039f28b13a11a7c17074330bc082d9a935001905060405180910390a150505050565b6000546201000090046001600160a01b03163314610cd0576040516362e9152760e11b815260040160405180910390fd5b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f28397090602401600060405180830381600087803b158015610d1357600080fd5b505af1158015610d27573d6000803e3d6000fd5b505050505050565b6000546201000090046001600160a01b03163314610d60576040516362e9152760e11b815260040160405180910390fd5b6000816001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614e69565b60008181526002602052604090205490915015610df457604051631b93bb7560e31b815260040160405180910390fd5b60015461010011610e1857604051630f85034f60e31b815260040160405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000610ed2576000604051610e4d9061457b565b604051809103906000f080158015610e69573d6000803e3d6000fd5b50604051634a0687ef60e01b81526001600160a01b03868116600483015291925090821690634a0687ef90602401600060405180830381600087803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b5050505080915050610ed5565b50815b6001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0384166001600160a01b0319909116179055546000838152600260205260409081902091909155517f878135063a6cfb3bc333e534b1fdc83f4f12221cad6705c31c0567048a8bd3d190610f7290849086909182526001600160a01b0316602082015260400190565b60405180910390a1505050565b6060610f8a33611f91565b610fa75760405163619c535960e01b815260040160405180910390fd5b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fe99250839150612d679050565b610ff557610ff5614ec1565b60008061106f8a6000898c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c9081908401838280828437600092019190915250612d8792505050565b9150915081156111845761108281612ed9565b1561111c578080602001905181019061109b9190614f1c565b93506110a684612d67565b61111757866110d05760405163a85ba64f60e01b8152601460048201526024015b60405180910390fd5b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965061111792508c915060149050612f2d565b6111be565b8661113d5760405163a85ba64f60e01b8152601660048201526024016110c7565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965061111792508c915060169050612f2d565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505050505b5050509695505050505050565b60606111da3384600085612fae565b90505b92915050565b6000546201000090046001600160a01b03163314611214576040516362e9152760e11b815260040160405180910390fd5b604051635b69006f60e11b81527fdfd8ece9bfbcb8c5c540edb935641f63d67686490a1ab97f000288759f30a9466004820152600090309063b6d200de90602401602060405180830381865afa158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190614f50565b90506000816001600160a01b0316635437dd976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fc9190614f50565b604051631b2ce7f360e11b81526001600160a01b03858116600483015291925090821690633659cfe690602401600060405180830381600087803b15801561134357600080fd5b505af1158015611357573d6000803e3d6000fd5b50506040516001600160a01b038681168252841692507f052cea8931962dd445ef48b0b998d3056bd0705f437087d60fe3c46a3fa09e1f91506020015b60405180910390a2505050565b60606113af338585856131eb565b949350505050565b6113bf614588565b6111dd826132fc565b60608083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140d9250839150612d679050565b61142d5760405163a85ba64f60e01b8152601460048201526024016110c7565b8961143781611f91565b6114545760405163619c535960e01b815260040160405180910390fd5b600061149587878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b792505050565b6101208101519091506001600160a01b031633146114c65760405163066875e160e11b815260040160405180910390fd5b60608101805133909152604080516020601f8c018190048102820181019092528a8152908b908b908190840183828082843760009201919091525050505060a0830152611512826133c7565b955060006115588e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508c91506134fb9050565b9650905080156115b757858060200190518101906115769190614f1c565b965061158187612d67565b61158d5761158d614ec1565b611596876113b7565b6001600160a01b038316606082015292506115b0836133c7565b96506115c0565b6115c0866135b6565b505050505097509795505050505050565b6000546201000090046001600160a01b03163314611602576040516362e9152760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015611641576040516314f72c9f60e01b815260040160405180910390fd5b806001600160a01b031663cd312ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a39190614f6d565b156116c15760405163474e764160e01b815260040160405180910390fd5b6116ca816136c1565b50565b60006116f77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b6000546201000090046001600160a01b0316331461172d576040516362e9152760e11b815260040160405180910390fd5b6003546001600160a01b031661189c577f00000000000000000000000000000000000000000000000000000000000000006118135760006040516117709061457b565b604051809103906000f08015801561178c573d6000803e3d6000fd5b50604051634a0687ef60e01b81526001600160a01b03848116600483015291925090821690634a0687ef90602401600060405180830381600087803b1580156117d457600080fd5b505af11580156117e8573d6000803e3d6000fd5b5050600380546001600160a01b0319166001600160a01b0394909416939093179092555061182f9050565b600380546001600160a01b0319166001600160a01b0383161790555b600360009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561187f57600080fd5b505af1158015611893573d6000803e3d6000fd5b5050505061193b565b7f0000000000000000000000000000000000000000000000000000000000000000156118db576040516314f72c9f60e01b815260040160405180910390fd5b6003546040516311a5465560e21b81526001600160a01b03838116600483015290911690634695195490602401600060405180830381600087803b15801561192257600080fd5b505af1158015611936573d6000803e3d6000fd5b505050505b6003546040516001600160a01b0390911681527fce13a9895a1719ad4493b2ac1a9bfb36070566161abab408e7ecbe586da8d499906020015b60405180910390a150565b336000818152600460205260409020546119ac576040516302eb3f7160e61b815260040160405180910390fd5b6001600160a01b0382166000908152600460205260409020546119e257604051634b5518af60e11b815260040160405180910390fd5b6119eb82612056565b60ff166119f782612056565b60ff1611611a1857604051630447252760e41b815260040160405180910390fd5b6001600160a01b039081166000908152600560209081526040808320949093168252929092529020805460ff19166001179055565b600080546201000090046001600160a01b03166380f70cba3083611a70866138fb565b6040518463ffffffff1660e01b8152600401611a8e93929190614f8a565b602060405180830381865afa158015611aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acf9190614e69565b151592915050565b6060611ae233611f91565b611aff5760405163619c535960e01b815260040160405180910390fd5b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b419250839150612d679050565b611b4d57611b4d614ec1565b6000611b8e86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b792505050565b9050838161010001818151611ba39190614fae565b905250611baf816133c7565b9695505050505050565b611bcb611bc4613983565b83836139eb565b5050565b611bcb3383836139eb565b6001600160a01b0381166000908152600460205260408120546180001615156111dd565b6000546201000090046001600160a01b03163314611c2f576040516362e9152760e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f13abda02e63c790d0e2818b251282cfe5cbe0a8abd69c54bf5d2260c0907bd2e910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6060611cb133611f91565b611cce5760405163619c535960e01b815260040160405180910390fd5b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d109250839150612d679050565b611d1c57611d1c614ec1565b600080611d968a6001898c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c9081908401838280828437600092019190915250612d8792505050565b9150915081156111be57611da981612ed9565b15611dc95780806020019051810190611dc29190614f1c565b93506111be565b86611dea5760405163a85ba64f60e01b8152601660048201526024016110c7565b6111be8a6016612f2d565b6060611e0033611f91565b611e1d5760405163619c535960e01b815260040160405180910390fd5b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e5f9250839150612d679050565b611e6b57611e6b614ec1565b6000611eac89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b792505050565b9050611ed381606001516001600160a01b0316600090815260046020526040902054151590565b8015611ee757506001816000015160ff1610155b15611f3a5760608101516001600160a01b039081166000908152600560209081526040808320938b168352929052205460ff16611f3a5760405163a85ba64f60e01b8152601e60048201526024016110c7565b805181611f4682614fd6565b60ff169052506003602082015260c0810186905261010081018590526001600160a01b038088166101208301528416610140820152611f84816133c7565b9998505050505050505050565b600080826001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff69190614e69565b60008181526002602052604090205490915080158015906113af57506001600160a01b03841660016120288184614e98565b8154811061203857612038614eab565b6000918252602090912001546001600160a01b031614949350505050565b6001600160a01b03811660009081526004602052604081205460ff166111dd565b606061208233611f91565b61209f5760405163619c535960e01b815260040160405180910390fd5b60006120e085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b792505050565b90508281610100018181516120f59190614fae565b905250612101816133c7565b95945050505050565b600054610100900460ff161580801561212a5750600054600160ff909116105b806121445750303b158015612144575060005460ff166001145b6121605760405162461bcd60e51b81526004016110c790614ff5565b6000805460ff191660011790558015612183576000805461ff0019166101001790555b80156116ca576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611974565b6000818152600260205260408120548082036121f457604051630e4f4df560e11b815260040160405180910390fd5b6121ff600182614e98565b6001901b19841691505092915050565b7f00000000000000000000000000000000000000000000000000000000000000001561225957612259604051806040016040528060028152602001616b3160f01b81525032614187565b6116ca3382614230565b60008181526002602052604081205480820361229257604051630e4f4df560e11b815260040160405180910390fd5b600161229e8183614e98565b815481106122ae576122ae614eab565b6000918252602090912001546001600160a01b03169392505050565b60606122d533611f91565b6122f25760405163619c535960e01b815260040160405180910390fd5b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123349250839150612d679050565b61234057612340614ec1565b61234a8484612f2d565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929998505050505050505050565b606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123cf9250839150612d679050565b6123ef5760405163a85ba64f60e01b8152601460048201526024016110c7565b6001600160a01b038716600090815260046020526040812054889181900361242a5760405163163cbe4360e01b815260040160405180910390fd5b61800081161561244c57604051628e12d960e21b815260040160405180910390fd5b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061248d91508390506142ff565b90506001600160e01b031981166330d9c91560e01b14806124be57506001600160e01b0319811663d86ed3e560e01b145b806124d957506001600160e01b03198116630221347d60e61b145b806124f457506001600160e01b0319811663230dbd2960e01b145b8061250f57506001600160e01b03198116635f9e7d7760e01b145b8061252a57506001600160e01b031981166353c11f9960e01b145b15612548576040516377a14afb60e11b815260040160405180910390fd5b600061258989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b792505050565b6101208101519091506001600160a01b031633146125ba576040516311cfdef560e21b815260040160405180910390fd5b606081018051339091526125cd826133c7565b97506000806126148f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508f91506134fb9050565b91509150811561268757808060200190518101906126329190614f1c565b995061263d8a612d67565b61265d5760405163a85ba64f60e01b8152601460048201526024016110c7565b6126668a6113b7565b6001600160a01b03841660608201529350612680846133c7565b9950612690565b612690816135b6565b50505050505050505095945050505050565b6000818152600260205260408120548082036126d157604051630e4f4df560e11b815260040160405180910390fd5b6126dc600182614e98565b6001901b841791505092915050565b7f0000000000000000000000000000000000000000000000000000000000000000156127525761275282828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250329250614187915050565b61275c3384614230565b505050565b60006111da83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d6792505050565b600054610100900460ff16158080156127c25750600054600160ff909116105b806127dc5750303b1580156127dc575060005460ff166001145b6127f85760405162461bcd60e51b81526004016110c790614ff5565b6000805460ff19166001179055801561281b576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611bcb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60606000806001805490506001600160401b038111156128a8576128a86147a4565b6040519080825280602002602001820160405280156128d1578160200160208202803683370190505b50925060009050600091505b600154821015612963576001821b841615612958576001828154811061290557612905614eab565b6000918252602090912001546001600160a01b0316838261292581615043565b93508151811061293757612937614eab565b60200260200101906001600160a01b031690816001600160a01b0316815250505b8160010191506128dd565b825250919050565b816001600160a01b03163b6000036129965760405163353dacc360e21b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000156129e0576129e0604051806040016040528060028152602001616b3160f01b81525033614187565b611bcb8282614230565b6003546000906001600160a01b0316612a0557612a05614ec1565b7f000000000000000000000000000000000000000000000000000000000000000015612a3b57506003546001600160a01b031690565b600360009054906101000a90046001600160a01b03166001600160a01b03166350d75d256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a8e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f79190614f50565b816001600160a01b03163b600003612add5760405163353dacc360e21b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000156129e0576000612b0e3361435b565b6000805460405163407b865d60e11b81529293509091620100009091046001600160a01b0316906380f70cba90612b4d90309085908790600401614f8a565b602060405180830381865afa158015612b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8e9190614e69565b600114905080612bb157604051630b56455f60e41b815260040160405180910390fd5b5050611bcb8282614230565b6001600160a01b038116600090815260046020908152604080832081519283019091525480825215801592918291612c0457805161800081161515935064ff000000001691505b509193909250565b6000546201000090046001600160a01b03163314612c3d576040516362e9152760e11b815260040160405180910390fd5b60006001600160a01b038216612cc957600360009054906101000a90046001600160a01b03166001600160a01b0316639470a5b26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc49190614f50565b612ccb565b815b6040516311a5465560e21b81526001600160a01b03808316600483015291925090841690634695195490602401600060405180830381600087803b158015612d1257600080fd5b505af1158015612d26573d6000803e3d6000fd5b50506040516001600160a01b038481168252861692507f840acbd291b38534819f47f875839277e502f40e1c7bfea2c5fc2c8017442cd39150602001611394565b600081516000141580156111dd5750600654825160208401201492915050565b600060606001600160a01b038716612da157612da1614ec1565b612dab84846143d5565b9350622dc6c060005a90508715612e2157886001600160a01b03168287604051612dd5919061505c565b6000604051808303818686fa925050503d8060008114612e11576040519150601f19603f3d011682016040523d82523d6000602084013e612e16565b606091505b509094509250612e84565b886001600160a01b03168287604051612e3a919061505c565b60006040518083038160008787f1925050503d8060008114612e78576040519150601f19603f3d011682016040523d82523d6000602084013e612e7d565b606091505b5090945092505b83612ecd57612e928161448c565b612eb45786612ea957612ea4836135b6565b612ecd565b612ea489600a612f2d565b604051636a7aea4b60e11b815260040160405180910390fd5b50509550959350505050565b6000604082511015612eed57506000919050565b602082810151906000908214612f07575060009392505050565b506040830151612f16816144a2565b612f21906040615078565b84511492505050919050565b6001600160a01b038216600090815260046020526040812054618000169003611bcb576001600160a01b038216600081815260046020526040908190208054618000179055517fbe3aa33bd245135e4e26b223d79d14ea479a47bff09f2b03c53838af1edbb14b90612fa29084815260200190565b60405180910390a25050565b60065460609015612fd55760405163a85ba64f60e01b8152601560048201526024016110c7565b6001600160a01b03841660009081526004602052604081205485918190036130105760405163163cbe4360e01b815260040160405180910390fd5b61800081161561303257604051628e12d960e21b815260040160405180910390fd5b83600061303e826142ff565b90506001600160e01b031981166330d9c91560e01b148061306f57506001600160e01b0319811663d86ed3e560e01b145b8061308a57506001600160e01b03198116630221347d60e61b145b806130a557506001600160e01b0319811663230dbd2960e01b145b806130c057506001600160e01b03198116635f9e7d7760e01b145b806130db57506001600160e01b031981166353c11f9960e01b145b156130f9576040516377a14afb60e11b815260040160405180910390fd5b60408051610160810182526000808252600260208084019190915242838501526001600160a01b03808e16606085015260808401839052845191820190945281815260a083015260c0820181905260e082018190526101008201819052918a166101208201526101408101829052613170906133c7565b905060006131808a898b856134fb565b9750905080156131ce578680602001905181019061319e9190614f1c565b91506131a982612d67565b6131c95760405163a85ba64f60e01b8152601460048201526024016110c7565b6131d7565b6131d7876135b6565b505060006006555092979650505050505050565b600654606090156132125760405163a85ba64f60e01b8152601560048201526024016110c7565b8361321c81611f91565b6132395760405163619c535960e01b815260040160405180910390fd5b6000613244856142ff565b60408051610160810182526000808252600160208301529293506132c79181014281526020018a6001600160a01b03168152602001846001600160e01b031916815260200187815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152506133c7565b905060006132d888886000856134fb565b95509050806132ea576132ea856135b6565b50506000600655509095945050505050565b613304614588565b6060808380602001905181019061331b919061508b565b8151919350915060009061333890840160209081019085016150e4565b60a08901526001600160e01b03191660808801526001600160a01b031660608701526040860152602081811c600f168187015260ff9091168552825160009250613389919084018101908401615168565b6001600160a01b03908116610140890152166101208701526101008601526001600160801b03811660c086015260801c60e085015250919392505050565b60606001826000015160ff1611156133f55760405163a85ba64f60e01b8152602860048201526024016110c7565b815160208084015160009260ff1664ff000000009190921b16179050600060806134228560e001516144db565b6001600160801b0316901b61343a8560c001516144db565b6001600160801b0316179050818460400151856060015186608001518760a0015160405160200161346f9594939291906151b3565b60408051601f1981840301815282825261010087015161012088015161014089015160208601879052938501919091526001600160a01b03908116606085015290911660808301529060a00160408051601f19818403018152908290526134d99291602001614aec565b60408051601f1981840301815291905280516020820120600655949350505050565b600060606001600160a01b03861661351557613515614ec1565b61351f85846143d5565b9450856001600160a01b0316848660405161353a919061505c565b60006040518083038185875af1925050503d8060008114613577576040519150601f19603f3d011682016040523d82523d6000602084013e61357c565b606091505b50909250905081156135ad5780516000036135ad5760405163a85ba64f60e01b8152601660048201526024016110c7565b94509492505050565b6004815110156136085760405162461bcd60e51b815260206004820152601a60248201527f43616c6c5574696c733a2074617267657420726576657274282900000000000060448201526064016110c7565b602081015163b1b7848f60e01b6001600160e01b03198216016136b85760408051808201825260208082527f43616c6c5574696c733a207461726765742070616e69636b65643a2030785f5f90820190815260248501517f43616c6c5574696c733a207461726765742070616e69636b65643a2030780000600482811c600f908116603090810160081b918516011791909117909252925162461bcd60e51b81529192916110c791849101614791565b81518060208401fd5b60006136eb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036137415760405162461bcd60e51b815260206004820152601d60248201527f5555505350726f786961626c653a206e6f742075706772616461626c6500000060448201526064016110c7565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561377f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a39190614e69565b7fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba741461381d5760405162461bcd60e51b815260206004820152602360248201527f5555505350726f786961626c653a206e6f7420636f6d70617469626c65206c6f60448201526267696360e81b60648201526084016110c7565b6001600160a01b03811630036138755760405162461bcd60e51b815260206004820152601960248201527f5555505350726f786961626c653a2070726f7879206c6f6f700000000000000060448201526064016110c7565b61389d817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fe011bc04c286c344a8fcbb8de77f953da762c3e25d8cdea984147fc4168a5dcc7fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba74604080519182526001600160a01b038416602083015201611974565b6040805160208101829052603260608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527132173a393ab9ba32b22337b93bb0b93232b960711b60a08201526001600160a01b0383169181019190915260009060c0015b604051602081830303815290604052805190602001209050919050565b60006018361080159061399a575061399a33611a4d565b6139de5760405162461bcd60e51b81526020600482015260156024820152742737ba103a393ab9ba32b2103337b93bb0b93232b960591b60448201526064016110c7565b5060131936013560601c90565b6000805b82811015614140576000848483818110613a0b57613a0b614eab565b9050602002810190613a1d91906151ff565b613a2b906020810190615215565b905060001963ffffffff821601613b1f57600080868685818110613a5157613a51614eab565b9050602002810190613a6391906151ff565b613a7190604081019061523b565b810190613a7e9190614e3d565b91509150868685818110613a9457613a94614eab565b9050602002810190613aa691906151ff565b613ab79060408101906020016145f8565b6001600160a01b03166362aa52878984846040518463ffffffff1660e01b8152600401613ae693929190614f8a565b600060405180830381600087803b158015613b0057600080fd5b505af1158015613b14573d6000803e3d6000fd5b505050505050614137565b60011963ffffffff821601613c2a576000806000878786818110613b4557613b45614eab565b9050602002810190613b5791906151ff565b613b6590604081019061523b565b810190613b729190615281565b925092509250878786818110613b8a57613b8a614eab565b9050602002810190613b9c91906151ff565b613bad9060408101906020016145f8565b604051630b682aeb60e11b81526001600160a01b038b81166004830152858116602483015284811660448301526064820184905291909116906316d055d6906084015b600060405180830381600087803b158015613c0a57600080fd5b505af1158015613c1e573d6000803e3d6000fd5b50505050505050614137565b60021963ffffffff821601613ce9576000806000878786818110613c5057613c50614eab565b9050602002810190613c6291906151ff565b613c7090604081019061523b565b810190613c7d91906152c2565b925092509250878786818110613c9557613c95614eab565b9050602002810190613ca791906151ff565b613cb89060408101906020016145f8565b6001600160a01b031663ca0c1e7f8a8585856040518563ffffffff1660e01b8152600401613bf09493929190615310565b60031963ffffffff821601613da257600080868685818110613d0d57613d0d614eab565b9050602002810190613d1f91906151ff565b613d2d90604081019061523b565b810190613d3a9190614e3d565b91509150868685818110613d5057613d50614eab565b9050602002810190613d6291906151ff565b613d739060408101906020016145f8565b6001600160a01b0316634b2763b38984846040518463ffffffff1660e01b8152600401613ae693929190614f8a565b60041963ffffffff821601613e5b57600080868685818110613dc657613dc6614eab565b9050602002810190613dd891906151ff565b613de690604081019061523b565b810190613df39190614e3d565b91509150868685818110613e0957613e09614eab565b9050602002810190613e1b91906151ff565b613e2c9060408101906020016145f8565b6001600160a01b031663c780fd828984846040518463ffffffff1660e01b8152600401613ae693929190614f8a565b60641963ffffffff821601613f5057848483818110613e7c57613e7c614eab565b9050602002810190613e8e91906151ff565b613e9f9060408101906020016145f8565b6001600160a01b031663ca78946487878786818110613ec057613ec0614eab565b9050602002810190613ed291906151ff565b613ee090604081019061523b565b810190613eed9190614c6d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613f3357600080fd5b505af1158015613f47573d6000803e3d6000fd5b50505050614137565b60651963ffffffff821601613fb557848483818110613f7157613f71614eab565b9050602002810190613f8391906151ff565b613f949060408101906020016145f8565b6001600160a01b031663245887fc87878786818110613ec057613ec0614eab565b60c81963ffffffff82160161405257600080868685818110613fd957613fd9614eab565b9050602002810190613feb91906151ff565b613ff990604081019061523b565b8101906140069190615343565b9150915061404a8888888781811061402057614020614eab565b905060200281019061403291906151ff565b6140439060408101906020016145f8565b84846131eb565b505050614137565b60c91963ffffffff82160161411e576141148686868581811061407757614077614eab565b905060200281019061408991906151ff565b61409a9060408101906020016145f8565b856140a557346140a8565b60005b8888878181106140ba576140ba614eab565b90506020028101906140cc91906151ff565b6140da90604081019061523b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612fae92505050565b5060019250614137565b60405163b477011560e01b815260040160405180910390fd5b506001016139ef565b50341580159061414e575080155b156141815760405133903480156108fc02916000818181858888f1935050505015801561417f573d6000803e3d6000fd5b505b50505050565b60006141938284614548565b6000805460405163407b865d60e11b81529293504292620100009091046001600160a01b0316916380f70cba916141d09130918790600401614f8a565b602060405180830381865afa1580156141ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142119190614e69565b101561275c57604051630b56455f60e41b815260040160405180910390fd5b64ff000080ff198116151580614247575060ff8116155b806142555750618000811615155b1561427357604051633d3200a960e21b815260040160405180910390fd5b6001600160a01b038216600090815260046020526040902054156142aa576040516301b0a93560e01b815260040160405180910390fd5b60408051602080820183528382526001600160a01b038516600081815260049092528382209251909255915190917f0d540ad8f39e07d19909687352b9fa017405d93c91a6760981fbae9cf28bfef791a25050565b60006004825110156143535760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e76616c69642063616c6c44617461000000000060448201526064016110c7565b506020015190565b6040805160208101829052603960608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527f642e61707057686974654c697374696e672e666163746f72790000000000000060a08201526001600160a01b0383169181019190915260009060c001613966565b8151808301516060919080156143fe576040516367e9985b60e01b815260040160405180910390fd5b50601f1981018452825184908481614415816144a2565b61441f9190614e98565b6001600160401b03811115614436576144366147a4565b6040519080825280601f01601f191660200182016040528015614460576020820181803683370190505b50604051602001614474949392919061539c565b60405160208183030381529060405291505092915050565b60006144996040836153eb565b5a111592915050565b60008082601f16116144b55760006144b8565b60015b60ff166144c66020846153eb565b6144d09190615078565b6111dd90602061540d565b60006001600160801b038211156145445760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016110c7565b5090565b6000828260405160200161455d929190615424565b60405160208183030381529060405280519060200120905092915050565b61024a806154aa83390190565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a082015260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b6001600160a01b03811681146116ca57600080fd5b60006020828403121561460a57600080fd5b8135614615816145e3565b9392505050565b6000806040838503121561462f57600080fd5b823561463a816145e3565b9150602083013561464a816145e3565b809150509250929050565b60008083601f84011261466757600080fd5b5081356001600160401b0381111561467e57600080fd5b60208301915083602082850101111561469657600080fd5b9250929050565b80151581146116ca57600080fd5b600080600080600080608087890312156146c457600080fd5b86356146cf816145e3565b955060208701356001600160401b03808211156146eb57600080fd5b6146f78a838b01614655565b90975095506040890135915061470c8261469d565b9093506060880135908082111561472257600080fd5b5061472f89828a01614655565b979a9699509497509295939492505050565b60005b8381101561475c578181015183820152602001614744565b50506000910152565b6000815180845261477d816020860160208601614741565b601f01601f19169290920160200192915050565b6020815260006111da6020830184614765565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156147e2576147e26147a4565b604052919050565b60006001600160401b03821115614803576148036147a4565b50601f01601f191660200190565b600082601f83011261482257600080fd5b8135614835614830826147ea565b6147ba565b81815284602083860101111561484a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561487a57600080fd5b8235614885816145e3565b915060208301356001600160401b038111156148a057600080fd5b6148ac85828601614811565b9150509250929050565b6000806000606084860312156148cb57600080fd5b83356148d6816145e3565b925060208401356001600160401b03808211156148f257600080fd5b6148fe87838801614811565b9350604086013591508082111561491457600080fd5b5061492186828701614811565b9150509250925092565b60006020828403121561493d57600080fd5b81356001600160401b0381111561495357600080fd5b6113af84828501614811565b6020815261497360208201835160ff169052565b60006020830151614989604084018260ff169052565b506040830151606083015260608301516149ae60808401826001600160a01b03169052565b5060808301516001600160e01b0319811660a08401525060a08301516101608060c08501526149e1610180850183614765565b915060c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140614a27818701836001600160a01b03169052565b909501516001600160a01b031693019290925250919050565b60008060008060008060006080888a031215614a5b57600080fd5b8735614a66816145e3565b965060208801356001600160401b0380821115614a8257600080fd5b614a8e8b838c01614655565b909850965060408a0135915080821115614aa757600080fd5b614ab38b838c01614655565b909650945060608a0135915080821115614acc57600080fd5b50614ad98a828b01614655565b989b979a50959850939692959293505050565b604081526000614aff6040830185614765565b82810360208401526121018185614765565b600080600060408486031215614b2657600080fd5b83356001600160401b03811115614b3c57600080fd5b614b4886828701614655565b909790965060209590950135949350505050565b60008060208385031215614b6f57600080fd5b82356001600160401b0380821115614b8657600080fd5b818501915085601f830112614b9a57600080fd5b813581811115614ba957600080fd5b8660208260051b8501011115614bbe57600080fd5b60209290920196919550909350505050565b60008060008060008060a08789031215614be957600080fd5b86356001600160401b03811115614bff57600080fd5b614c0b89828a01614655565b9097509550506020870135614c1f816145e3565b935060408701359250606087013591506080870135614c3d816145e3565b809150509295509295509295565b60008060408385031215614c5e57600080fd5b50508035926020909101359150565b600060208284031215614c7f57600080fd5b5035919050565b60008060008060608587031215614c9c57600080fd5b84356001600160401b03811115614cb257600080fd5b614cbe87828801614655565b9095509350506020850135614cd2816145e3565b9396929550929360400135925050565b600080600080600060608688031215614cfa57600080fd5b8535614d05816145e3565b945060208601356001600160401b0380821115614d2157600080fd5b614d2d89838a01614655565b90965094506040880135915080821115614d4657600080fd5b50614d5388828901614655565b969995985093965092949392505050565b600080600060408486031215614d7957600080fd5b8335925060208401356001600160401b03811115614d9657600080fd5b614da286828701614655565b9497909650939450505050565b60008060208385031215614dc257600080fd5b82356001600160401b03811115614dd857600080fd5b614de485828601614655565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015614e315783516001600160a01b031683529284019291840191600101614e0c565b50909695505050505050565b60008060408385031215614e5057600080fd5b8235614e5b816145e3565b946020939093013593505050565b600060208284031215614e7b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156111dd576111dd614e82565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600082601f830112614ee857600080fd5b8151614ef6614830826147ea565b818152846020838601011115614f0b57600080fd5b6113af826020830160208701614741565b600060208284031215614f2e57600080fd5b81516001600160401b03811115614f4457600080fd5b6113af84828501614ed7565b600060208284031215614f6257600080fd5b8151614615816145e3565b600060208284031215614f7f57600080fd5b81516146158161469d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b8082018281126000831280158216821582161715614fce57614fce614e82565b505092915050565b600060ff821660ff8103614fec57614fec614e82565b60010192915050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60006001820161505557615055614e82565b5060010190565b6000825161506e818460208701614741565b9190910192915050565b808201808211156111dd576111dd614e82565b6000806040838503121561509e57600080fd5b82516001600160401b03808211156150b557600080fd5b6150c186838701614ed7565b935060208501519150808211156150d757600080fd5b506148ac85828601614ed7565b600080600080600060a086880312156150fc57600080fd5b85519450602086015193506040860151615115816145e3565b60608701519093506001600160e01b03198116811461513357600080fd5b60808701519092506001600160401b0381111561514f57600080fd5b61515b88828901614ed7565b9150509295509295909350565b6000806000806080858703121561517e57600080fd5b84519350602085015192506040850151615197816145e3565b60608601519092506151a8816145e3565b939692955090935050565b858152602081018590526001600160a01b03841660408201526001600160e01b03198316606082015260a0608082018190526000906151f490830184614765565b979650505050505050565b60008235605e1983360301811261506e57600080fd5b60006020828403121561522757600080fd5b813563ffffffff8116811461461557600080fd5b6000808335601e1984360301811261525257600080fd5b8301803591506001600160401b0382111561526c57600080fd5b60200191503681900382131561469657600080fd5b60008060006060848603121561529657600080fd5b83356152a1816145e3565b925060208401356152b1816145e3565b929592945050506040919091013590565b6000806000606084860312156152d757600080fd5b83356152e2816145e3565b92506020840135915060408401356001600160401b0381111561530457600080fd5b61492186828701614811565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611baf90830184614765565b6000806040838503121561535657600080fd5b82356001600160401b038082111561536d57600080fd5b61537986838701614811565b9350602085013591508082111561538f57600080fd5b506148ac85828601614811565b6000855160206153af8285838b01614741565b818401915086825285516153c881838501848a01614741565b85519201916153dc81838501848901614741565b91909101019695505050505050565b60008261540857634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176111dd576111dd614e82565b60608152604160608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527f642e61707057686974654c697374696e672e726567697374726174696f6e4b6560a0820152607960f81b60c082015260018060a01b038316602082015260e0604082015260006113af60e083018461476556fe608060405234801561001057600080fd5b5061022a806100206000396000f3fe6080604052600436106100225760003560e01c80634a0687ef1461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f6100543660046101c4565b61006b565b610069610064610171565b6101a0565b565b6001600160a01b0381166100c65760405162461bcd60e51b815260206004820152601760248201527f5555505350726f78793a207a65726f206164647265737300000000000000000060448201526064015b60405180910390fd5b60006100f07f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316146101465760405162461bcd60e51b815260206004820152601e60248201527f5555505350726f78793a20616c726561647920696e697469616c697a6564000060448201526064016100bd565b61016e817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50565b600061019b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b3660008037600080366000845af43d6000803e8080156101bf573d6000f35b3d6000fd5b6000602082840312156101d657600080fd5b81356001600160a01b03811681146101ed57600080fd5b939250505056fea26469706673582212206902a7db24b0d3a778c1f364c2041c6224c0ba5a54b2a99ab7f21c6f5b9e285964736f6c63430008170033a2646970667358221220627b9854c763ee36741743f78a34be69b7fe489729c162368aa534d6115589d964736f6c63430008170033" = "0x60c06040523480156200001157600080fd5b50604051620058283803806200582883398101604081905262000034916200005b565b901515608052151560a05262000093565b805180151581146200005657600080fd5b919050565b600080604083850312156200006f57600080fd5b6200007a8362000045565b91506200008a6020840162000045565b90509250929050565b60805160a051615729620000ff600039600081816107d301528181612211015281816126ed015281816129980152612adf0152600081816109e501528181610afb01528181610e1c015281816116040152818161173f0152818161189e0152612a0701526157296000f3fe60806040526004361061031a5760003560e01c8063768fabb0116101ab578063bbe4fd50116100f7578063c60944a611610095578063f2e55caf1161006f578063f2e55caf14610a36578063f373305214610a4b578063f9f522f414610a6b578063fa6e0cfe14610aa857600080fd5b8063c60944a6146109b3578063cd312ec4146109d3578063e8dccb7d14610a0757600080fd5b8063bd3252c8116100d1578063bd3252c814610931578063bf42873414610946578063c4d66de814610966578063c56a069d1461098657600080fd5b8063bbe4fd50146108de578063bced3ddc146108f1578063bd1c448b1461091157600080fd5b80639d297e3011610164578063b6d200de1161013e578063b6d200de14610835578063b724211e14610855578063ba48b5f814610875578063bb84cfa11461089557600080fd5b80639d297e30146107c1578063a5dbbbcd146107f5578063ad3915c81461081557600080fd5b8063768fabb0146106ef5780638ca484841461070f5780638ceddd7a1461072f5780639378fa131461075a578063989b0c3e1461078c5780639903ad38146107ac57600080fd5b8063486ff0cd1161026a57806359a29141116102235780636b4f3335116101fd5780636b4f3335146106715780637283100c14610691578063731aed6e146106b157806374041e02146106cf57600080fd5b806359a291411461061e578063670e77e31461063e5780636ad3ca7d1461065e57600080fd5b8063486ff0cd1461054157806350d75d251461056c57806352d1902d1461058157806354fbc493146105be57806357121e0c146105de578063572b6c05146105fe57600080fd5b80632f89bf89116102d75780633ca3ad4e116102b15780633ca3ad4e1461047e5780633f6c923a146104c65780634329d293146104f3578063469519541461052157600080fd5b80632f89bf891461040f57806333d608f11461042f57806339255d5b1461045e57600080fd5b806306cecba81461031f5780630c5650751461034157806315a024e1146103615780631e6d0a84146103815780631e855cf3146103b7578063289b3c0d146103d7575b600080fd5b34801561032b57600080fd5b5061033f61033a3660046145f8565b610ac8565b005b34801561034d57600080fd5b5061033f61035c36600461461c565b610c9f565b34801561036d57600080fd5b5061033f61037c3660046145f8565b610d2f565b34801561038d57600080fd5b506103a161039c3660046146ab565b610f7f565b6040516103ae9190614791565b60405180910390f35b3480156103c357600080fd5b506103a16103d2366004614867565b6111cb565b3480156103e357600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016103ae565b34801561041b57600080fd5b5061033f61042a3660046145f8565b6111e3565b34801561043b57600080fd5b50610446622dc6c081565b6040516001600160401b0390911681526020016103ae565b34801561046a57600080fd5b506103a16104793660046148b6565b6113a1565b34801561048a57600080fd5b506104b66104993660046145f8565b6001600160a01b0316600090815260046020526040902054151590565b60405190151581526020016103ae565b3480156104d257600080fd5b506104e66104e136600461492b565b6113b7565b6040516103ae919061495f565b3480156104ff57600080fd5b5061051361050e366004614a40565b6113c8565b6040516103ae929190614aec565b34801561052d57600080fd5b5061033f61053c3660046145f8565b6115d1565b34801561054d57600080fd5b50604080518082019091526002815261763160f01b60208201526103a1565b34801561057857600080fd5b506103f76116cd565b34801561058d57600080fd5b507fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba745b6040519081526020016103ae565b3480156105ca57600080fd5b5061033f6105d93660046145f8565b6116fc565b3480156105ea57600080fd5b5061033f6105f93660046145f8565b61197f565b34801561060a57600080fd5b506104b66106193660046145f8565b611a4d565b34801561062a57600080fd5b506103a1610639366004614b11565b611ad7565b34801561064a57600080fd5b5061033f610659366004614b5c565b611bb9565b61033f61066c366004614b5c565b611bcf565b34801561067d57600080fd5b506104b661068c3660046145f8565b611bda565b34801561069d57600080fd5b5061033f6106ac3660046145f8565b611bfe565b3480156106bd57600080fd5b506003546001600160a01b03166103f7565b3480156106db57600080fd5b506103a16106ea3660046146ab565b611ca6565b3480156106fb57600080fd5b506103a161070a366004614bd0565b611df5565b34801561071b57600080fd5b506104b661072a3660046145f8565b611f91565b34801561073b57600080fd5b5061074561010081565b60405163ffffffff90911681526020016103ae565b34801561076657600080fd5b5061077a6107753660046145f8565b612056565b60405160ff90911681526020016103ae565b34801561079857600080fd5b506103a16107a7366004614b11565b612077565b3480156107b857600080fd5b5061033f61210a565b3480156107cd57600080fd5b506104b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561080157600080fd5b506105b0610810366004614c4b565b6121c5565b34801561082157600080fd5b5061033f610830366004614c6d565b61220f565b34801561084157600080fd5b506103f7610850366004614c6d565b612263565b34801561086157600080fd5b506103a1610870366004614c86565b6122ca565b34801561088157600080fd5b506103a1610890366004614ce2565b61238b565b3480156108a157600080fd5b506104b66108b036600461461c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156108ea57600080fd5b50426105b0565b3480156108fd57600080fd5b506105b061090c366004614c4b565b6126a2565b34801561091d57600080fd5b5061033f61092c366004614d64565b6126eb565b34801561093d57600080fd5b506105b0600181565b34801561095257600080fd5b506104b6610961366004614daf565b612761565b34801561097257600080fd5b5061033f6109813660046145f8565b6127a2565b34801561099257600080fd5b506109a66109a1366004614c6d565b612886565b6040516103ae9190614df0565b3480156109bf57600080fd5b5061033f6109ce366004614e3d565b61296b565b3480156109df57600080fd5b506104b67f000000000000000000000000000000000000000000000000000000000000000081565b348015610a1357600080fd5b506104b6610a22366004614c6d565b600090815260026020526040902054151590565b348015610a4257600080fd5b506103f76129ea565b348015610a5757600080fd5b5061033f610a66366004614e3d565b612ab2565b348015610a7757600080fd5b50610a8b610a863660046145f8565b612bbd565b6040805193151584529115156020840152908201526060016103ae565b348015610ab457600080fd5b5061033f610ac336600461461c565b612c0c565b6000546201000090046001600160a01b03163314610af9576040516362e9152760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015610b38576040516314f72c9f60e01b815260040160405180910390fd5b6000816001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9c9190614e69565b600081815260026020526040812054919250819003610bce57604051630e4f4df560e11b815260040160405180910390fd5b60006001610bdc8184614e98565b81548110610bec57610bec614eab565b6000918252602090912001546040516311a5465560e21b81526001600160a01b03868116600483015290911691508190634695195490602401600060405180830381600087803b158015610c3f57600080fd5b505af1158015610c53573d6000803e3d6000fd5b5050604080518681526001600160a01b03881660208201527f9279aa773f2b588996032d8de89911555039f28b13a11a7c17074330bc082d9a935001905060405180910390a150505050565b6000546201000090046001600160a01b03163314610cd0576040516362e9152760e11b815260040160405180910390fd5b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f28397090602401600060405180830381600087803b158015610d1357600080fd5b505af1158015610d27573d6000803e3d6000fd5b505050505050565b6000546201000090046001600160a01b03163314610d60576040516362e9152760e11b815260040160405180910390fd5b6000816001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc49190614e69565b60008181526002602052604090205490915015610df457604051631b93bb7560e31b815260040160405180910390fd5b60015461010011610e1857604051630f85034f60e31b815260040160405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000610ed2576000604051610e4d9061457b565b604051809103906000f080158015610e69573d6000803e3d6000fd5b50604051634a0687ef60e01b81526001600160a01b03868116600483015291925090821690634a0687ef90602401600060405180830381600087803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b5050505080915050610ed5565b50815b6001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0384166001600160a01b0319909116179055546000838152600260205260409081902091909155517f878135063a6cfb3bc333e534b1fdc83f4f12221cad6705c31c0567048a8bd3d190610f7290849086909182526001600160a01b0316602082015260400190565b60405180910390a1505050565b6060610f8a33611f91565b610fa75760405163619c535960e01b815260040160405180910390fd5b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fe99250839150612d679050565b610ff557610ff5614ec1565b60008061106f8a6000898c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c9081908401838280828437600092019190915250612d8792505050565b9150915081156111845761108281612ed9565b1561111c578080602001905181019061109b9190614f1c565b93506110a684612d67565b61111757866110d05760405163a85ba64f60e01b8152601460048201526024015b60405180910390fd5b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965061111792508c915060149050612f2d565b6111be565b8661113d5760405163a85ba64f60e01b8152601660048201526024016110c7565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965061111792508c915060169050612f2d565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505050505b5050509695505050505050565b60606111da3384600085612fae565b90505b92915050565b6000546201000090046001600160a01b03163314611214576040516362e9152760e11b815260040160405180910390fd5b604051635b69006f60e11b81527fdfd8ece9bfbcb8c5c540edb935641f63d67686490a1ab97f000288759f30a9466004820152600090309063b6d200de90602401602060405180830381865afa158015611272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112969190614f50565b90506000816001600160a01b0316635437dd976040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fc9190614f50565b604051631b2ce7f360e11b81526001600160a01b03858116600483015291925090821690633659cfe690602401600060405180830381600087803b15801561134357600080fd5b505af1158015611357573d6000803e3d6000fd5b50506040516001600160a01b038681168252841692507f052cea8931962dd445ef48b0b998d3056bd0705f437087d60fe3c46a3fa09e1f91506020015b60405180910390a2505050565b60606113af338585856131eb565b949350505050565b6113bf614588565b6111dd826132fc565b60608083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140d9250839150612d679050565b61142d5760405163a85ba64f60e01b8152601460048201526024016110c7565b8961143781611f91565b6114545760405163619c535960e01b815260040160405180910390fd5b600061149587878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b792505050565b6101208101519091506001600160a01b031633146114c65760405163066875e160e11b815260040160405180910390fd5b60608101805133909152604080516020601f8c018190048102820181019092528a8152908b908b908190840183828082843760009201919091525050505060a0830152611512826133c7565b955060006115588e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508c91506134fb9050565b9650905080156115b757858060200190518101906115769190614f1c565b965061158187612d67565b61158d5761158d614ec1565b611596876113b7565b6001600160a01b038316606082015292506115b0836133c7565b96506115c0565b6115c0866135b6565b505050505097509795505050505050565b6000546201000090046001600160a01b03163314611602576040516362e9152760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015611641576040516314f72c9f60e01b815260040160405180910390fd5b806001600160a01b031663cd312ec46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561167f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a39190614f6d565b156116c15760405163474e764160e01b815260040160405180910390fd5b6116ca816136c1565b50565b60006116f77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b6000546201000090046001600160a01b0316331461172d576040516362e9152760e11b815260040160405180910390fd5b6003546001600160a01b031661189c577f00000000000000000000000000000000000000000000000000000000000000006118135760006040516117709061457b565b604051809103906000f08015801561178c573d6000803e3d6000fd5b50604051634a0687ef60e01b81526001600160a01b03848116600483015291925090821690634a0687ef90602401600060405180830381600087803b1580156117d457600080fd5b505af11580156117e8573d6000803e3d6000fd5b5050600380546001600160a01b0319166001600160a01b0394909416939093179092555061182f9050565b600380546001600160a01b0319166001600160a01b0383161790555b600360009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561187f57600080fd5b505af1158015611893573d6000803e3d6000fd5b5050505061193b565b7f0000000000000000000000000000000000000000000000000000000000000000156118db576040516314f72c9f60e01b815260040160405180910390fd5b6003546040516311a5465560e21b81526001600160a01b03838116600483015290911690634695195490602401600060405180830381600087803b15801561192257600080fd5b505af1158015611936573d6000803e3d6000fd5b505050505b6003546040516001600160a01b0390911681527fce13a9895a1719ad4493b2ac1a9bfb36070566161abab408e7ecbe586da8d499906020015b60405180910390a150565b336000818152600460205260409020546119ac576040516302eb3f7160e61b815260040160405180910390fd5b6001600160a01b0382166000908152600460205260409020546119e257604051634b5518af60e11b815260040160405180910390fd5b6119eb82612056565b60ff166119f782612056565b60ff1611611a1857604051630447252760e41b815260040160405180910390fd5b6001600160a01b039081166000908152600560209081526040808320949093168252929092529020805460ff19166001179055565b600080546201000090046001600160a01b03166380f70cba3083611a70866138fb565b6040518463ffffffff1660e01b8152600401611a8e93929190614f8a565b602060405180830381865afa158015611aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acf9190614e69565b151592915050565b6060611ae233611f91565b611aff5760405163619c535960e01b815260040160405180910390fd5b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b419250839150612d679050565b611b4d57611b4d614ec1565b6000611b8e86868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b792505050565b9050838161010001818151611ba39190614fae565b905250611baf816133c7565b9695505050505050565b611bcb611bc4613983565b83836139eb565b5050565b611bcb3383836139eb565b6001600160a01b0381166000908152600460205260408120546180001615156111dd565b6000546201000090046001600160a01b03163314611c2f576040516362e9152760e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f13abda02e63c790d0e2818b251282cfe5cbe0a8abd69c54bf5d2260c0907bd2e910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6060611cb133611f91565b611cce5760405163619c535960e01b815260040160405180910390fd5b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d109250839150612d679050565b611d1c57611d1c614ec1565b600080611d968a6001898c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c9081908401838280828437600092019190915250612d8792505050565b9150915081156111be57611da981612ed9565b15611dc95780806020019051810190611dc29190614f1c565b93506111be565b86611dea5760405163a85ba64f60e01b8152601660048201526024016110c7565b6111be8a6016612f2d565b6060611e0033611f91565b611e1d5760405163619c535960e01b815260040160405180910390fd5b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e5f9250839150612d679050565b611e6b57611e6b614ec1565b6000611eac89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b792505050565b9050611ed381606001516001600160a01b0316600090815260046020526040902054151590565b8015611ee757506001816000015160ff1610155b15611f3a5760608101516001600160a01b039081166000908152600560209081526040808320938b168352929052205460ff16611f3a5760405163a85ba64f60e01b8152601e60048201526024016110c7565b805181611f4682614fd6565b60ff169052506003602082015260c0810186905261010081018590526001600160a01b038088166101208301528416610140820152611f84816133c7565b9998505050505050505050565b600080826001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff69190614e69565b60008181526002602052604090205490915080158015906113af57506001600160a01b03841660016120288184614e98565b8154811061203857612038614eab565b6000918252602090912001546001600160a01b031614949350505050565b6001600160a01b03811660009081526004602052604081205460ff166111dd565b606061208233611f91565b61209f5760405163619c535960e01b815260040160405180910390fd5b60006120e085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b792505050565b90508281610100018181516120f59190614fae565b905250612101816133c7565b95945050505050565b600054610100900460ff161580801561212a5750600054600160ff909116105b806121445750303b158015612144575060005460ff166001145b6121605760405162461bcd60e51b81526004016110c790614ff5565b6000805460ff191660011790558015612183576000805461ff0019166101001790555b80156116ca576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611974565b6000818152600260205260408120548082036121f457604051630e4f4df560e11b815260040160405180910390fd5b6121ff600182614e98565b6001901b19841691505092915050565b7f00000000000000000000000000000000000000000000000000000000000000001561225957612259604051806040016040528060028152602001616b3160f01b81525032614187565b6116ca3382614230565b60008181526002602052604081205480820361229257604051630e4f4df560e11b815260040160405180910390fd5b600161229e8183614e98565b815481106122ae576122ae614eab565b6000918252602090912001546001600160a01b03169392505050565b60606122d533611f91565b6122f25760405163619c535960e01b815260040160405180910390fd5b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123349250839150612d679050565b61234057612340614ec1565b61234a8484612f2d565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929998505050505050505050565b606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123cf9250839150612d679050565b6123ef5760405163a85ba64f60e01b8152601460048201526024016110c7565b6001600160a01b038716600090815260046020526040812054889181900361242a5760405163163cbe4360e01b815260040160405180910390fd5b61800081161561244c57604051628e12d960e21b815260040160405180910390fd5b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061248d91508390506142ff565b90506001600160e01b031981166330d9c91560e01b14806124be57506001600160e01b0319811663d86ed3e560e01b145b806124d957506001600160e01b03198116630221347d60e61b145b806124f457506001600160e01b0319811663230dbd2960e01b145b8061250f57506001600160e01b03198116635f9e7d7760e01b145b8061252a57506001600160e01b031981166353c11f9960e01b145b15612548576040516377a14afb60e11b815260040160405180910390fd5b600061258989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113b792505050565b6101208101519091506001600160a01b031633146125ba576040516311cfdef560e21b815260040160405180910390fd5b606081018051339091526125cd826133c7565b97506000806126148f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508f91506134fb9050565b91509150811561268757808060200190518101906126329190614f1c565b995061263d8a612d67565b61265d5760405163a85ba64f60e01b8152601460048201526024016110c7565b6126668a6113b7565b6001600160a01b03841660608201529350612680846133c7565b9950612690565b612690816135b6565b50505050505050505095945050505050565b6000818152600260205260408120548082036126d157604051630e4f4df560e11b815260040160405180910390fd5b6126dc600182614e98565b6001901b841791505092915050565b7f0000000000000000000000000000000000000000000000000000000000000000156127525761275282828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250329250614187915050565b61275c3384614230565b505050565b60006111da83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d6792505050565b600054610100900460ff16158080156127c25750600054600160ff909116105b806127dc5750303b1580156127dc575060005460ff166001145b6127f85760405162461bcd60e51b81526004016110c790614ff5565b6000805460ff19166001179055801561281b576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611bcb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60606000806001805490506001600160401b038111156128a8576128a86147a4565b6040519080825280602002602001820160405280156128d1578160200160208202803683370190505b50925060009050600091505b600154821015612963576001821b841615612958576001828154811061290557612905614eab565b6000918252602090912001546001600160a01b0316838261292581615043565b93508151811061293757612937614eab565b60200260200101906001600160a01b031690816001600160a01b0316815250505b8160010191506128dd565b825250919050565b816001600160a01b03163b6000036129965760405163353dacc360e21b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000156129e0576129e0604051806040016040528060028152602001616b3160f01b81525033614187565b611bcb8282614230565b6003546000906001600160a01b0316612a0557612a05614ec1565b7f000000000000000000000000000000000000000000000000000000000000000015612a3b57506003546001600160a01b031690565b600360009054906101000a90046001600160a01b03166001600160a01b03166350d75d256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a8e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f79190614f50565b816001600160a01b03163b600003612add5760405163353dacc360e21b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000156129e0576000612b0e3361435b565b6000805460405163407b865d60e11b81529293509091620100009091046001600160a01b0316906380f70cba90612b4d90309085908790600401614f8a565b602060405180830381865afa158015612b6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8e9190614e69565b600114905080612bb157604051630b56455f60e41b815260040160405180910390fd5b5050611bcb8282614230565b6001600160a01b038116600090815260046020908152604080832081519283019091525480825215801592918291612c0457805161800081161515935064ff000000001691505b509193909250565b6000546201000090046001600160a01b03163314612c3d576040516362e9152760e11b815260040160405180910390fd5b60006001600160a01b038216612cc957600360009054906101000a90046001600160a01b03166001600160a01b0316639470a5b26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc49190614f50565b612ccb565b815b6040516311a5465560e21b81526001600160a01b03808316600483015291925090841690634695195490602401600060405180830381600087803b158015612d1257600080fd5b505af1158015612d26573d6000803e3d6000fd5b50506040516001600160a01b038481168252861692507f840acbd291b38534819f47f875839277e502f40e1c7bfea2c5fc2c8017442cd39150602001611394565b600081516000141580156111dd5750600654825160208401201492915050565b600060606001600160a01b038716612da157612da1614ec1565b612dab84846143d5565b9350622dc6c060005a90508715612e2157886001600160a01b03168287604051612dd5919061505c565b6000604051808303818686fa925050503d8060008114612e11576040519150601f19603f3d011682016040523d82523d6000602084013e612e16565b606091505b509094509250612e84565b886001600160a01b03168287604051612e3a919061505c565b60006040518083038160008787f1925050503d8060008114612e78576040519150601f19603f3d011682016040523d82523d6000602084013e612e7d565b606091505b5090945092505b83612ecd57612e928161448c565b612eb45786612ea957612ea4836135b6565b612ecd565b612ea489600a612f2d565b604051636a7aea4b60e11b815260040160405180910390fd5b50509550959350505050565b6000604082511015612eed57506000919050565b602082810151906000908214612f07575060009392505050565b506040830151612f16816144a2565b612f21906040615078565b84511492505050919050565b6001600160a01b038216600090815260046020526040812054618000169003611bcb576001600160a01b038216600081815260046020526040908190208054618000179055517fbe3aa33bd245135e4e26b223d79d14ea479a47bff09f2b03c53838af1edbb14b90612fa29084815260200190565b60405180910390a25050565b60065460609015612fd55760405163a85ba64f60e01b8152601560048201526024016110c7565b6001600160a01b03841660009081526004602052604081205485918190036130105760405163163cbe4360e01b815260040160405180910390fd5b61800081161561303257604051628e12d960e21b815260040160405180910390fd5b83600061303e826142ff565b90506001600160e01b031981166330d9c91560e01b148061306f57506001600160e01b0319811663d86ed3e560e01b145b8061308a57506001600160e01b03198116630221347d60e61b145b806130a557506001600160e01b0319811663230dbd2960e01b145b806130c057506001600160e01b03198116635f9e7d7760e01b145b806130db57506001600160e01b031981166353c11f9960e01b145b156130f9576040516377a14afb60e11b815260040160405180910390fd5b60408051610160810182526000808252600260208084019190915242838501526001600160a01b03808e16606085015260808401839052845191820190945281815260a083015260c0820181905260e082018190526101008201819052918a166101208201526101408101829052613170906133c7565b905060006131808a898b856134fb565b9750905080156131ce578680602001905181019061319e9190614f1c565b91506131a982612d67565b6131c95760405163a85ba64f60e01b8152601460048201526024016110c7565b6131d7565b6131d7876135b6565b505060006006555092979650505050505050565b600654606090156132125760405163a85ba64f60e01b8152601560048201526024016110c7565b8361321c81611f91565b6132395760405163619c535960e01b815260040160405180910390fd5b6000613244856142ff565b60408051610160810182526000808252600160208301529293506132c79181014281526020018a6001600160a01b03168152602001846001600160e01b031916815260200187815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152506133c7565b905060006132d888886000856134fb565b95509050806132ea576132ea856135b6565b50506000600655509095945050505050565b613304614588565b6060808380602001905181019061331b919061508b565b8151919350915060009061333890840160209081019085016150e4565b60a08901526001600160e01b03191660808801526001600160a01b031660608701526040860152602081811c600f168187015260ff9091168552825160009250613389919084018101908401615168565b6001600160a01b03908116610140890152166101208701526101008601526001600160801b03811660c086015260801c60e085015250919392505050565b60606001826000015160ff1611156133f55760405163a85ba64f60e01b8152602860048201526024016110c7565b815160208084015160009260ff1664ff000000009190921b16179050600060806134228560e001516144db565b6001600160801b0316901b61343a8560c001516144db565b6001600160801b0316179050818460400151856060015186608001518760a0015160405160200161346f9594939291906151b3565b60408051601f1981840301815282825261010087015161012088015161014089015160208601879052938501919091526001600160a01b03908116606085015290911660808301529060a00160408051601f19818403018152908290526134d99291602001614aec565b60408051601f1981840301815291905280516020820120600655949350505050565b600060606001600160a01b03861661351557613515614ec1565b61351f85846143d5565b9450856001600160a01b0316848660405161353a919061505c565b60006040518083038185875af1925050503d8060008114613577576040519150601f19603f3d011682016040523d82523d6000602084013e61357c565b606091505b50909250905081156135ad5780516000036135ad5760405163a85ba64f60e01b8152601660048201526024016110c7565b94509492505050565b6004815110156136085760405162461bcd60e51b815260206004820152601a60248201527f43616c6c5574696c733a2074617267657420726576657274282900000000000060448201526064016110c7565b602081015163b1b7848f60e01b6001600160e01b03198216016136b85760408051808201825260208082527f43616c6c5574696c733a207461726765742070616e69636b65643a2030785f5f90820190815260248501517f43616c6c5574696c733a207461726765742070616e69636b65643a2030780000600482811c600f908116603090810160081b918516011791909117909252925162461bcd60e51b81529192916110c791849101614791565b81518060208401fd5b60006136eb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036137415760405162461bcd60e51b815260206004820152601d60248201527f5555505350726f786961626c653a206e6f742075706772616461626c6500000060448201526064016110c7565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561377f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a39190614e69565b7fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba741461381d5760405162461bcd60e51b815260206004820152602360248201527f5555505350726f786961626c653a206e6f7420636f6d70617469626c65206c6f60448201526267696360e81b60648201526084016110c7565b6001600160a01b03811630036138755760405162461bcd60e51b815260206004820152601960248201527f5555505350726f786961626c653a2070726f7879206c6f6f700000000000000060448201526064016110c7565b61389d817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fe011bc04c286c344a8fcbb8de77f953da762c3e25d8cdea984147fc4168a5dcc7fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba74604080519182526001600160a01b038416602083015201611974565b6040805160208101829052603260608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527132173a393ab9ba32b22337b93bb0b93232b960711b60a08201526001600160a01b0383169181019190915260009060c0015b604051602081830303815290604052805190602001209050919050565b60006018361080159061399a575061399a33611a4d565b6139de5760405162461bcd60e51b81526020600482015260156024820152742737ba103a393ab9ba32b2103337b93bb0b93232b960591b60448201526064016110c7565b5060131936013560601c90565b6000805b82811015614140576000848483818110613a0b57613a0b614eab565b9050602002810190613a1d91906151ff565b613a2b906020810190615215565b905060001963ffffffff821601613b1f57600080868685818110613a5157613a51614eab565b9050602002810190613a6391906151ff565b613a7190604081019061523b565b810190613a7e9190614e3d565b91509150868685818110613a9457613a94614eab565b9050602002810190613aa691906151ff565b613ab79060408101906020016145f8565b6001600160a01b03166362aa52878984846040518463ffffffff1660e01b8152600401613ae693929190614f8a565b600060405180830381600087803b158015613b0057600080fd5b505af1158015613b14573d6000803e3d6000fd5b505050505050614137565b60011963ffffffff821601613c2a576000806000878786818110613b4557613b45614eab565b9050602002810190613b5791906151ff565b613b6590604081019061523b565b810190613b729190615281565b925092509250878786818110613b8a57613b8a614eab565b9050602002810190613b9c91906151ff565b613bad9060408101906020016145f8565b604051630b682aeb60e11b81526001600160a01b038b81166004830152858116602483015284811660448301526064820184905291909116906316d055d6906084015b600060405180830381600087803b158015613c0a57600080fd5b505af1158015613c1e573d6000803e3d6000fd5b50505050505050614137565b60021963ffffffff821601613ce9576000806000878786818110613c5057613c50614eab565b9050602002810190613c6291906151ff565b613c7090604081019061523b565b810190613c7d91906152c2565b925092509250878786818110613c9557613c95614eab565b9050602002810190613ca791906151ff565b613cb89060408101906020016145f8565b6001600160a01b031663ca0c1e7f8a8585856040518563ffffffff1660e01b8152600401613bf09493929190615310565b60031963ffffffff821601613da257600080868685818110613d0d57613d0d614eab565b9050602002810190613d1f91906151ff565b613d2d90604081019061523b565b810190613d3a9190614e3d565b91509150868685818110613d5057613d50614eab565b9050602002810190613d6291906151ff565b613d739060408101906020016145f8565b6001600160a01b0316634b2763b38984846040518463ffffffff1660e01b8152600401613ae693929190614f8a565b60041963ffffffff821601613e5b57600080868685818110613dc657613dc6614eab565b9050602002810190613dd891906151ff565b613de690604081019061523b565b810190613df39190614e3d565b91509150868685818110613e0957613e09614eab565b9050602002810190613e1b91906151ff565b613e2c9060408101906020016145f8565b6001600160a01b031663c780fd828984846040518463ffffffff1660e01b8152600401613ae693929190614f8a565b60641963ffffffff821601613f5057848483818110613e7c57613e7c614eab565b9050602002810190613e8e91906151ff565b613e9f9060408101906020016145f8565b6001600160a01b031663ca78946487878786818110613ec057613ec0614eab565b9050602002810190613ed291906151ff565b613ee090604081019061523b565b810190613eed9190614c6d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015613f3357600080fd5b505af1158015613f47573d6000803e3d6000fd5b50505050614137565b60651963ffffffff821601613fb557848483818110613f7157613f71614eab565b9050602002810190613f8391906151ff565b613f949060408101906020016145f8565b6001600160a01b031663245887fc87878786818110613ec057613ec0614eab565b60c81963ffffffff82160161405257600080868685818110613fd957613fd9614eab565b9050602002810190613feb91906151ff565b613ff990604081019061523b565b8101906140069190615343565b9150915061404a8888888781811061402057614020614eab565b905060200281019061403291906151ff565b6140439060408101906020016145f8565b84846131eb565b505050614137565b60c91963ffffffff82160161411e576141148686868581811061407757614077614eab565b905060200281019061408991906151ff565b61409a9060408101906020016145f8565b856140a557346140a8565b60005b8888878181106140ba576140ba614eab565b90506020028101906140cc91906151ff565b6140da90604081019061523b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612fae92505050565b5060019250614137565b60405163b477011560e01b815260040160405180910390fd5b506001016139ef565b50341580159061414e575080155b156141815760405133903480156108fc02916000818181858888f1935050505015801561417f573d6000803e3d6000fd5b505b50505050565b60006141938284614548565b6000805460405163407b865d60e11b81529293504292620100009091046001600160a01b0316916380f70cba916141d09130918790600401614f8a565b602060405180830381865afa1580156141ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142119190614e69565b101561275c57604051630b56455f60e41b815260040160405180910390fd5b64ff000080ff198116151580614247575060ff8116155b806142555750618000811615155b1561427357604051633d3200a960e21b815260040160405180910390fd5b6001600160a01b038216600090815260046020526040902054156142aa576040516301b0a93560e01b815260040160405180910390fd5b60408051602080820183528382526001600160a01b038516600081815260049092528382209251909255915190917f0d540ad8f39e07d19909687352b9fa017405d93c91a6760981fbae9cf28bfef791a25050565b60006004825110156143535760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e76616c69642063616c6c44617461000000000060448201526064016110c7565b506020015190565b6040805160208101829052603960608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527f642e61707057686974654c697374696e672e666163746f72790000000000000060a08201526001600160a01b0383169181019190915260009060c001613966565b8151808301516060919080156143fe576040516367e9985b60e01b815260040160405180910390fd5b50601f1981018452825184908481614415816144a2565b61441f9190614e98565b6001600160401b03811115614436576144366147a4565b6040519080825280601f01601f191660200182016040528015614460576020820181803683370190505b50604051602001614474949392919061539c565b60405160208183030381529060405291505092915050565b60006144996040836153eb565b5a111592915050565b60008082601f16116144b55760006144b8565b60015b60ff166144c66020846153eb565b6144d09190615078565b6111dd90602061540d565b60006001600160801b038211156145445760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016110c7565b5090565b6000828260405160200161455d929190615424565b60405160208183030381529060405280519060200120905092915050565b61024a806154aa83390190565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a082015260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b6001600160a01b03811681146116ca57600080fd5b60006020828403121561460a57600080fd5b8135614615816145e3565b9392505050565b6000806040838503121561462f57600080fd5b823561463a816145e3565b9150602083013561464a816145e3565b809150509250929050565b60008083601f84011261466757600080fd5b5081356001600160401b0381111561467e57600080fd5b60208301915083602082850101111561469657600080fd5b9250929050565b80151581146116ca57600080fd5b600080600080600080608087890312156146c457600080fd5b86356146cf816145e3565b955060208701356001600160401b03808211156146eb57600080fd5b6146f78a838b01614655565b90975095506040890135915061470c8261469d565b9093506060880135908082111561472257600080fd5b5061472f89828a01614655565b979a9699509497509295939492505050565b60005b8381101561475c578181015183820152602001614744565b50506000910152565b6000815180845261477d816020860160208601614741565b601f01601f19169290920160200192915050565b6020815260006111da6020830184614765565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156147e2576147e26147a4565b604052919050565b60006001600160401b03821115614803576148036147a4565b50601f01601f191660200190565b600082601f83011261482257600080fd5b8135614835614830826147ea565b6147ba565b81815284602083860101111561484a57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561487a57600080fd5b8235614885816145e3565b915060208301356001600160401b038111156148a057600080fd5b6148ac85828601614811565b9150509250929050565b6000806000606084860312156148cb57600080fd5b83356148d6816145e3565b925060208401356001600160401b03808211156148f257600080fd5b6148fe87838801614811565b9350604086013591508082111561491457600080fd5b5061492186828701614811565b9150509250925092565b60006020828403121561493d57600080fd5b81356001600160401b0381111561495357600080fd5b6113af84828501614811565b6020815261497360208201835160ff169052565b60006020830151614989604084018260ff169052565b506040830151606083015260608301516149ae60808401826001600160a01b03169052565b5060808301516001600160e01b0319811660a08401525060a08301516101608060c08501526149e1610180850183614765565b915060c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140614a27818701836001600160a01b03169052565b909501516001600160a01b031693019290925250919050565b60008060008060008060006080888a031215614a5b57600080fd5b8735614a66816145e3565b965060208801356001600160401b0380821115614a8257600080fd5b614a8e8b838c01614655565b909850965060408a0135915080821115614aa757600080fd5b614ab38b838c01614655565b909650945060608a0135915080821115614acc57600080fd5b50614ad98a828b01614655565b989b979a50959850939692959293505050565b604081526000614aff6040830185614765565b82810360208401526121018185614765565b600080600060408486031215614b2657600080fd5b83356001600160401b03811115614b3c57600080fd5b614b4886828701614655565b909790965060209590950135949350505050565b60008060208385031215614b6f57600080fd5b82356001600160401b0380821115614b8657600080fd5b818501915085601f830112614b9a57600080fd5b813581811115614ba957600080fd5b8660208260051b8501011115614bbe57600080fd5b60209290920196919550909350505050565b60008060008060008060a08789031215614be957600080fd5b86356001600160401b03811115614bff57600080fd5b614c0b89828a01614655565b9097509550506020870135614c1f816145e3565b935060408701359250606087013591506080870135614c3d816145e3565b809150509295509295509295565b60008060408385031215614c5e57600080fd5b50508035926020909101359150565b600060208284031215614c7f57600080fd5b5035919050565b60008060008060608587031215614c9c57600080fd5b84356001600160401b03811115614cb257600080fd5b614cbe87828801614655565b9095509350506020850135614cd2816145e3565b9396929550929360400135925050565b600080600080600060608688031215614cfa57600080fd5b8535614d05816145e3565b945060208601356001600160401b0380821115614d2157600080fd5b614d2d89838a01614655565b90965094506040880135915080821115614d4657600080fd5b50614d5388828901614655565b969995985093965092949392505050565b600080600060408486031215614d7957600080fd5b8335925060208401356001600160401b03811115614d9657600080fd5b614da286828701614655565b9497909650939450505050565b60008060208385031215614dc257600080fd5b82356001600160401b03811115614dd857600080fd5b614de485828601614655565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b81811015614e315783516001600160a01b031683529284019291840191600101614e0c565b50909695505050505050565b60008060408385031215614e5057600080fd5b8235614e5b816145e3565b946020939093013593505050565b600060208284031215614e7b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156111dd576111dd614e82565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600082601f830112614ee857600080fd5b8151614ef6614830826147ea565b818152846020838601011115614f0b57600080fd5b6113af826020830160208701614741565b600060208284031215614f2e57600080fd5b81516001600160401b03811115614f4457600080fd5b6113af84828501614ed7565b600060208284031215614f6257600080fd5b8151614615816145e3565b600060208284031215614f7f57600080fd5b81516146158161469d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b8082018281126000831280158216821582161715614fce57614fce614e82565b505092915050565b600060ff821660ff8103614fec57614fec614e82565b60010192915050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60006001820161505557615055614e82565b5060010190565b6000825161506e818460208701614741565b9190910192915050565b808201808211156111dd576111dd614e82565b6000806040838503121561509e57600080fd5b82516001600160401b03808211156150b557600080fd5b6150c186838701614ed7565b935060208501519150808211156150d757600080fd5b506148ac85828601614ed7565b600080600080600060a086880312156150fc57600080fd5b85519450602086015193506040860151615115816145e3565b60608701519093506001600160e01b03198116811461513357600080fd5b60808701519092506001600160401b0381111561514f57600080fd5b61515b88828901614ed7565b9150509295509295909350565b6000806000806080858703121561517e57600080fd5b84519350602085015192506040850151615197816145e3565b60608601519092506151a8816145e3565b939692955090935050565b858152602081018590526001600160a01b03841660408201526001600160e01b03198316606082015260a0608082018190526000906151f490830184614765565b979650505050505050565b60008235605e1983360301811261506e57600080fd5b60006020828403121561522757600080fd5b813563ffffffff8116811461461557600080fd5b6000808335601e1984360301811261525257600080fd5b8301803591506001600160401b0382111561526c57600080fd5b60200191503681900382131561469657600080fd5b60008060006060848603121561529657600080fd5b83356152a1816145e3565b925060208401356152b1816145e3565b929592945050506040919091013590565b6000806000606084860312156152d757600080fd5b83356152e2816145e3565b92506020840135915060408401356001600160401b0381111561530457600080fd5b61492186828701614811565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611baf90830184614765565b6000806040838503121561535657600080fd5b82356001600160401b038082111561536d57600080fd5b61537986838701614811565b9350602085013591508082111561538f57600080fd5b506148ac85828601614811565b6000855160206153af8285838b01614741565b818401915086825285516153c881838501848a01614741565b85519201916153dc81838501848901614741565b91909101019695505050505050565b60008261540857634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176111dd576111dd614e82565b60608152604160608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527f642e61707057686974654c697374696e672e726567697374726174696f6e4b6560a0820152607960f81b60c082015260018060a01b038316602082015260e0604082015260006113af60e083018461476556fe608060405234801561001057600080fd5b5061022a806100206000396000f3fe6080604052600436106100225760003560e01c80634a0687ef1461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f6100543660046101c4565b61006b565b610069610064610171565b6101a0565b565b6001600160a01b0381166100c65760405162461bcd60e51b815260206004820152601760248201527f5555505350726f78793a207a65726f206164647265737300000000000000000060448201526064015b60405180910390fd5b60006100f07f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316146101465760405162461bcd60e51b815260206004820152601e60248201527f5555505350726f78793a20616c726561647920696e697469616c697a6564000060448201526064016100bd565b61016e817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50565b600061019b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b3660008037600080366000845af43d6000803e8080156101bf573d6000f35b3d6000fd5b6000602082840312156101d657600080fd5b81356001600160a01b03811681146101ed57600080fd5b939250505056fea26469706673582212206902a7db24b0d3a778c1f364c2041c6224c0ba5a54b2a99ab7f21c6f5b9e285964736f6c63430008170033a2646970667358221220627b9854c763ee36741743f78a34be69b7fe489729c162368aa534d6115589d964736f6c63430008170033"

Methods

  • Parameters

    • address: string

    Returns Superfluid

  • Parameters

    • signer: Signer

    Returns Superfluid__factory

  • Parameters

    • nonUpgradable: boolean
    • appWhiteListingEnabled: boolean
    • Optional overrides: Overrides & {
          from?: string;
      }

    Returns Promise<Superfluid>

  • Parameters

    • nonUpgradable: boolean
    • appWhiteListingEnabled: boolean
    • Optional overrides: Overrides & {
          from?: string;
      }

    Returns TransactionRequest

  • Parameters

    • address: string
    • signerOrProvider: Signer | Provider

    Returns Superfluid

  • Returns SuperfluidInterface

Generated using TypeDoc