Hierarchy

  • ContractFactory
    • SuperfluidUpgradabilityTester__factory

Constructors

  • Parameters

    • Rest ...args: SuperfluidUpgradabilityTesterConstructorParams

    Returns SuperfluidUpgradabilityTester__factory

Properties

abi: readonly [{
    inputs: readonly [];
    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: "validateContextStructLayout";
    outputs: readonly [];
    stateMutability: "pure";
    type: "function";
}, {
    inputs: readonly [];
    name: "validateStorageLayout";
    outputs: readonly [];
    stateMutability: "pure";
    type: "function";
}, {
    inputs: readonly [];
    name: "versionRecipient";
    outputs: readonly [{
        internalType: "string";
        name: "";
        type: "string";
    }];
    stateMutability: "pure";
    type: "function";
}]
bytecode: "0x60c060405234801561001057600080fd5b506000608081905260a0819052806158f9620000838239600081816108090152818161226801528181612744015281816129ef0152612b36015260008181610a1b01528181610b5201528181610e730152818161165b01528181611796015281816118f50152612a5e01526158f96000f3fe6080604052600436106103505760003560e01c80638ca48484116101c6578063bd1c448b116100f7578063e8dccb7d11610095578063f99a38c41161006f578063f99a38c414610aa1578063f9f522f414610aad578063fa6e0cfe14610aea578063fbdb0ee214610b0a57600080fd5b8063e8dccb7d14610a3d578063f2e55caf14610a6c578063f373305214610a8157600080fd5b8063c4d66de8116100d1578063c4d66de81461099c578063c56a069d146109bc578063c60944a6146109e9578063cd312ec414610a0957600080fd5b8063bd1c448b14610947578063bd3252c814610967578063bf4287341461097c57600080fd5b8063ad3915c811610164578063ba48b5f81161013e578063ba48b5f8146108ab578063bb84cfa1146108cb578063bbe4fd5014610914578063bced3ddc1461092757600080fd5b8063ad3915c81461084b578063b6d200de1461086b578063b724211e1461088b57600080fd5b8063989b0c3e116101a0578063989b0c3e146107c25780639903ad38146107e25780639d297e30146107f7578063a5dbbbcd1461082b57600080fd5b80638ca48484146107455780638ceddd7a146107655780639378fa131461079057600080fd5b8063486ff0cd116102a0578063670e77e31161023e5780637283100c116102185780637283100c146106c7578063731aed6e146106e757806374041e0214610705578063768fabb01461072557600080fd5b8063670e77e3146106745780636ad3ca7d146106945780636b4f3335146106a757600080fd5b806354fbc4931161027a57806354fbc493146105f457806357121e0c14610614578063572b6c051461063457806359a291411461065457600080fd5b8063486ff0cd1461057757806350d75d25146105a257806352d1902d146105b757600080fd5b80632f89bf891161030d5780633ca3ad4e116102e75780633ca3ad4e146104b45780633f6c923a146104fc5780634329d29314610529578063469519541461055757600080fd5b80632f89bf891461044557806333d608f11461046557806339255d5b1461049457600080fd5b806306cecba8146103555780630c5650751461037757806315a024e1146103975780631e6d0a84146103b75780631e855cf3146103ed578063289b3c0d1461040d575b600080fd5b34801561036157600080fd5b506103756103703660046147c8565b610b1f565b005b34801561038357600080fd5b506103756103923660046147ec565b610cf6565b3480156103a357600080fd5b506103756103b23660046147c8565b610d86565b3480156103c357600080fd5b506103d76103d236600461487b565b610fd6565b6040516103e49190614961565b60405180910390f35b3480156103f957600080fd5b506103d7610408366004614a37565b611222565b34801561041957600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016103e4565b34801561045157600080fd5b506103756104603660046147c8565b61123a565b34801561047157600080fd5b5061047c622dc6c081565b6040516001600160401b0390911681526020016103e4565b3480156104a057600080fd5b506103d76104af366004614a86565b6113f8565b3480156104c057600080fd5b506104ec6104cf3660046147c8565b6001600160a01b0316600090815260046020526040902054151590565b60405190151581526020016103e4565b34801561050857600080fd5b5061051c610517366004614afb565b61140e565b6040516103e49190614b2f565b34801561053557600080fd5b50610549610544366004614c10565b61141f565b6040516103e4929190614cbc565b34801561056357600080fd5b506103756105723660046147c8565b611628565b34801561058357600080fd5b50604080518082019091526002815261763160f01b60208201526103d7565b3480156105ae57600080fd5b5061042d611724565b3480156105c357600080fd5b507fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba745b6040519081526020016103e4565b34801561060057600080fd5b5061037561060f3660046147c8565b611753565b34801561062057600080fd5b5061037561062f3660046147c8565b6119d6565b34801561064057600080fd5b506104ec61064f3660046147c8565b611aa4565b34801561066057600080fd5b506103d761066f366004614ce1565b611b2e565b34801561068057600080fd5b5061037561068f366004614d2c565b611c10565b6103756106a2366004614d2c565b611c26565b3480156106b357600080fd5b506104ec6106c23660046147c8565b611c31565b3480156106d357600080fd5b506103756106e23660046147c8565b611c55565b3480156106f357600080fd5b506003546001600160a01b031661042d565b34801561071157600080fd5b506103d761072036600461487b565b611cfd565b34801561073157600080fd5b506103d7610740366004614da0565b611e4c565b34801561075157600080fd5b506104ec6107603660046147c8565b611fe8565b34801561077157600080fd5b5061077b61010081565b60405163ffffffff90911681526020016103e4565b34801561079c57600080fd5b506107b06107ab3660046147c8565b6120ad565b60405160ff90911681526020016103e4565b3480156107ce57600080fd5b506103d76107dd366004614ce1565b6120ce565b3480156107ee57600080fd5b50610375612161565b34801561080357600080fd5b506104ec7f000000000000000000000000000000000000000000000000000000000000000081565b34801561083757600080fd5b506105e6610846366004614e1b565b61221c565b34801561085757600080fd5b50610375610866366004614e3d565b612266565b34801561087757600080fd5b5061042d610886366004614e3d565b6122ba565b34801561089757600080fd5b506103d76108a6366004614e56565b612321565b3480156108b757600080fd5b506103d76108c6366004614eb2565b6123e2565b3480156108d757600080fd5b506104ec6108e63660046147ec565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561092057600080fd5b50426105e6565b34801561093357600080fd5b506105e6610942366004614e1b565b6126f9565b34801561095357600080fd5b50610375610962366004614f34565b612742565b34801561097357600080fd5b506105e6600181565b34801561098857600080fd5b506104ec610997366004614f7f565b6127b8565b3480156109a857600080fd5b506103756109b73660046147c8565b6127f9565b3480156109c857600080fd5b506109dc6109d7366004614e3d565b6128dd565b6040516103e49190614fc0565b3480156109f557600080fd5b50610375610a0436600461500d565b6129c2565b348015610a1557600080fd5b506104ec7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a4957600080fd5b506104ec610a58366004614e3d565b600090815260026020526040902054151590565b348015610a7857600080fd5b5061042d612a41565b348015610a8d57600080fd5b50610375610a9c36600461500d565b612b09565b34801561037557600080fd5b348015610ab957600080fd5b50610acd610ac83660046147c8565b612c14565b6040805193151584529115156020840152908201526060016103e4565b348015610af657600080fd5b50610375610b053660046147ec565b612c63565b348015610b1657600080fd5b50610375612dbe565b6000546201000090046001600160a01b03163314610b50576040516362e9152760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015610b8f576040516314f72c9f60e01b815260040160405180910390fd5b6000816001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190615039565b600081815260026020526040812054919250819003610c2557604051630e4f4df560e11b815260040160405180910390fd5b60006001610c338184615068565b81548110610c4357610c4361507b565b6000918252602090912001546040516311a5465560e21b81526001600160a01b03868116600483015290911691508190634695195490602401600060405180830381600087803b158015610c9657600080fd5b505af1158015610caa573d6000803e3d6000fd5b5050604080518681526001600160a01b03881660208201527f9279aa773f2b588996032d8de89911555039f28b13a11a7c17074330bc082d9a935001905060405180910390a150505050565b6000546201000090046001600160a01b03163314610d27576040516362e9152760e11b815260040160405180910390fd5b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f28397090602401600060405180830381600087803b158015610d6a57600080fd5b505af1158015610d7e573d6000803e3d6000fd5b505050505050565b6000546201000090046001600160a01b03163314610db7576040516362e9152760e11b815260040160405180910390fd5b6000816001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190615039565b60008181526002602052604090205490915015610e4b57604051631b93bb7560e31b815260040160405180910390fd5b60015461010011610e6f57604051630f85034f60e31b815260040160405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000610f29576000604051610ea49061474b565b604051809103906000f080158015610ec0573d6000803e3d6000fd5b50604051634a0687ef60e01b81526001600160a01b03868116600483015291925090821690634a0687ef90602401600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b5050505080915050610f2c565b50815b6001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0384166001600160a01b0319909116179055546000838152600260205260409081902091909155517f878135063a6cfb3bc333e534b1fdc83f4f12221cad6705c31c0567048a8bd3d190610fc990849086909182526001600160a01b0316602082015260400190565b60405180910390a1505050565b6060610fe133611fe8565b610ffe5760405163619c535960e01b815260040160405180910390fd5b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110409250839150612f379050565b61104c5761104c615091565b6000806110c68a6000898c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c9081908401838280828437600092019190915250612f5792505050565b9150915081156111db576110d9816130a9565b1561117357808060200190518101906110f291906150ec565b93506110fd84612f37565b61116e57866111275760405163a85ba64f60e01b8152601460048201526024015b60405180910390fd5b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965061116e92508c9150601490506130fd565b611215565b866111945760405163a85ba64f60e01b81526016600482015260240161111e565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965061116e92508c9150601690506130fd565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505050505b5050509695505050505050565b6060611231338460008561317e565b90505b92915050565b6000546201000090046001600160a01b0316331461126b576040516362e9152760e11b815260040160405180910390fd5b604051635b69006f60e11b81527fdfd8ece9bfbcb8c5c540edb935641f63d67686490a1ab97f000288759f30a9466004820152600090309063b6d200de90602401602060405180830381865afa1580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed9190615120565b90506000816001600160a01b0316635437dd976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190615120565b604051631b2ce7f360e11b81526001600160a01b03858116600483015291925090821690633659cfe690602401600060405180830381600087803b15801561139a57600080fd5b505af11580156113ae573d6000803e3d6000fd5b50506040516001600160a01b038681168252841692507f052cea8931962dd445ef48b0b998d3056bd0705f437087d60fe3c46a3fa09e1f91506020015b60405180910390a2505050565b6060611406338585856133bb565b949350505050565b611416614758565b611234826134cc565b60608083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114649250839150612f379050565b6114845760405163a85ba64f60e01b81526014600482015260240161111e565b8961148e81611fe8565b6114ab5760405163619c535960e01b815260040160405180910390fd5b60006114ec87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140e92505050565b6101208101519091506001600160a01b0316331461151d5760405163066875e160e11b815260040160405180910390fd5b60608101805133909152604080516020601f8c018190048102820181019092528a8152908b908b908190840183828082843760009201919091525050505060a083015261156982613597565b955060006115af8e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508c91506136cb9050565b96509050801561160e57858060200190518101906115cd91906150ec565b96506115d887612f37565b6115e4576115e4615091565b6115ed8761140e565b6001600160a01b0383166060820152925061160783613597565b9650611617565b61161786613786565b505050505097509795505050505050565b6000546201000090046001600160a01b03163314611659576040516362e9152760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015611698576040516314f72c9f60e01b815260040160405180910390fd5b806001600160a01b031663cd312ec46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fa919061513d565b156117185760405163474e764160e01b815260040160405180910390fd5b61172181613891565b50565b600061174e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b6000546201000090046001600160a01b03163314611784576040516362e9152760e11b815260040160405180910390fd5b6003546001600160a01b03166118f3577f000000000000000000000000000000000000000000000000000000000000000061186a5760006040516117c79061474b565b604051809103906000f0801580156117e3573d6000803e3d6000fd5b50604051634a0687ef60e01b81526001600160a01b03848116600483015291925090821690634a0687ef90602401600060405180830381600087803b15801561182b57600080fd5b505af115801561183f573d6000803e3d6000fd5b5050600380546001600160a01b0319166001600160a01b039490941693909317909255506118869050565b600380546001600160a01b0319166001600160a01b0383161790555b600360009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118d657600080fd5b505af11580156118ea573d6000803e3d6000fd5b50505050611992565b7f000000000000000000000000000000000000000000000000000000000000000015611932576040516314f72c9f60e01b815260040160405180910390fd5b6003546040516311a5465560e21b81526001600160a01b03838116600483015290911690634695195490602401600060405180830381600087803b15801561197957600080fd5b505af115801561198d573d6000803e3d6000fd5b505050505b6003546040516001600160a01b0390911681527fce13a9895a1719ad4493b2ac1a9bfb36070566161abab408e7ecbe586da8d499906020015b60405180910390a150565b33600081815260046020526040902054611a03576040516302eb3f7160e61b815260040160405180910390fd5b6001600160a01b038216600090815260046020526040902054611a3957604051634b5518af60e11b815260040160405180910390fd5b611a42826120ad565b60ff16611a4e826120ad565b60ff1611611a6f57604051630447252760e41b815260040160405180910390fd5b6001600160a01b039081166000908152600560209081526040808320949093168252929092529020805460ff19166001179055565b600080546201000090046001600160a01b03166380f70cba3083611ac786613acb565b6040518463ffffffff1660e01b8152600401611ae59392919061515a565b602060405180830381865afa158015611b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b269190615039565b151592915050565b6060611b3933611fe8565b611b565760405163619c535960e01b815260040160405180910390fd5b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b989250839150612f379050565b611ba457611ba4615091565b6000611be586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140e92505050565b9050838161010001818151611bfa919061517e565b905250611c0681613597565b9695505050505050565b611c22611c1b613b53565b8383613bbb565b5050565b611c22338383613bbb565b6001600160a01b038116600090815260046020526040812054618000161515611234565b6000546201000090046001600160a01b03163314611c86576040516362e9152760e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f13abda02e63c790d0e2818b251282cfe5cbe0a8abd69c54bf5d2260c0907bd2e910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6060611d0833611fe8565b611d255760405163619c535960e01b815260040160405180910390fd5b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d679250839150612f379050565b611d7357611d73615091565b600080611ded8a6001898c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c9081908401838280828437600092019190915250612f5792505050565b91509150811561121557611e00816130a9565b15611e205780806020019051810190611e1991906150ec565b9350611215565b86611e415760405163a85ba64f60e01b81526016600482015260240161111e565b6112158a60166130fd565b6060611e5733611fe8565b611e745760405163619c535960e01b815260040160405180910390fd5b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb69250839150612f379050565b611ec257611ec2615091565b6000611f0389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140e92505050565b9050611f2a81606001516001600160a01b0316600090815260046020526040902054151590565b8015611f3e57506001816000015160ff1610155b15611f915760608101516001600160a01b039081166000908152600560209081526040808320938b168352929052205460ff16611f915760405163a85ba64f60e01b8152601e600482015260240161111e565b805181611f9d826151a6565b60ff169052506003602082015260c0810186905261010081018590526001600160a01b038088166101208301528416610140820152611fdb81613597565b9998505050505050505050565b600080826001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204d9190615039565b600081815260026020526040902054909150801580159061140657506001600160a01b038416600161207f8184615068565b8154811061208f5761208f61507b565b6000918252602090912001546001600160a01b031614949350505050565b6001600160a01b03811660009081526004602052604081205460ff16611234565b60606120d933611fe8565b6120f65760405163619c535960e01b815260040160405180910390fd5b600061213785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140e92505050565b905082816101000181815161214c919061517e565b90525061215881613597565b95945050505050565b600054610100900460ff16158080156121815750600054600160ff909116105b8061219b5750303b15801561219b575060005460ff166001145b6121b75760405162461bcd60e51b815260040161111e906151c5565b6000805460ff1916600117905580156121da576000805461ff0019166101001790555b8015611721576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119cb565b60008181526002602052604081205480820361224b57604051630e4f4df560e11b815260040160405180910390fd5b612256600182615068565b6001901b19841691505092915050565b7f0000000000000000000000000000000000000000000000000000000000000000156122b0576122b0604051806040016040528060028152602001616b3160f01b81525032614357565b6117213382614400565b6000818152600260205260408120548082036122e957604051630e4f4df560e11b815260040160405180910390fd5b60016122f58183615068565b815481106123055761230561507b565b6000918252602090912001546001600160a01b03169392505050565b606061232c33611fe8565b6123495760405163619c535960e01b815260040160405180910390fd5b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061238b9250839150612f379050565b61239757612397615091565b6123a184846130fd565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929998505050505050505050565b606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506124269250839150612f379050565b6124465760405163a85ba64f60e01b81526014600482015260240161111e565b6001600160a01b03871660009081526004602052604081205488918190036124815760405163163cbe4360e01b815260040160405180910390fd5b6180008116156124a357604051628e12d960e21b815260040160405180910390fd5b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506124e491508390506144cf565b90506001600160e01b031981166330d9c91560e01b148061251557506001600160e01b0319811663d86ed3e560e01b145b8061253057506001600160e01b03198116630221347d60e61b145b8061254b57506001600160e01b0319811663230dbd2960e01b145b8061256657506001600160e01b03198116635f9e7d7760e01b145b8061258157506001600160e01b031981166353c11f9960e01b145b1561259f576040516377a14afb60e11b815260040160405180910390fd5b60006125e089898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140e92505050565b6101208101519091506001600160a01b03163314612611576040516311cfdef560e21b815260040160405180910390fd5b6060810180513390915261262482613597565b975060008061266b8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508f91506136cb9050565b9150915081156126de578080602001905181019061268991906150ec565b99506126948a612f37565b6126b45760405163a85ba64f60e01b81526014600482015260240161111e565b6126bd8a61140e565b6001600160a01b038416606082015293506126d784613597565b99506126e7565b6126e781613786565b50505050505050505095945050505050565b60008181526002602052604081205480820361272857604051630e4f4df560e11b815260040160405180910390fd5b612733600182615068565b6001901b841791505092915050565b7f0000000000000000000000000000000000000000000000000000000000000000156127a9576127a982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250329250614357915050565b6127b33384614400565b505050565b600061123183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f3792505050565b600054610100900460ff16158080156128195750600054600160ff909116105b806128335750303b158015612833575060005460ff166001145b61284f5760405162461bcd60e51b815260040161111e906151c5565b6000805460ff191660011790558015612872576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611c22576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60606000806001805490506001600160401b038111156128ff576128ff614974565b604051908082528060200260200182016040528015612928578160200160208202803683370190505b50925060009050600091505b6001548210156129ba576001821b8416156129af576001828154811061295c5761295c61507b565b6000918252602090912001546001600160a01b0316838261297c81615213565b93508151811061298e5761298e61507b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b816001019150612934565b825250919050565b816001600160a01b03163b6000036129ed5760405163353dacc360e21b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015612a3757612a37604051806040016040528060028152602001616b3160f01b81525033614357565b611c228282614400565b6003546000906001600160a01b0316612a5c57612a5c615091565b7f000000000000000000000000000000000000000000000000000000000000000015612a9257506003546001600160a01b031690565b600360009054906101000a90046001600160a01b03166001600160a01b03166350d75d256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ae5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174e9190615120565b816001600160a01b03163b600003612b345760405163353dacc360e21b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015612a37576000612b653361452b565b6000805460405163407b865d60e11b81529293509091620100009091046001600160a01b0316906380f70cba90612ba49030908590879060040161515a565b602060405180830381865afa158015612bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be59190615039565b600114905080612c0857604051630b56455f60e41b815260040160405180910390fd5b5050611c228282614400565b6001600160a01b038116600090815260046020908152604080832081519283019091525480825215801592918291612c5b57805161800081161515935064ff000000001691505b509193909250565b6000546201000090046001600160a01b03163314612c94576040516362e9152760e11b815260040160405180910390fd5b60006001600160a01b038216612d2057600360009054906101000a90046001600160a01b03166001600160a01b0316639470a5b26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1b9190615120565b612d22565b815b6040516311a5465560e21b81526001600160a01b03808316600483015291925090841690634695195490602401600060405180830381600087803b158015612d6957600080fd5b505af1158015612d7d573d6000803e3d6000fd5b50506040516001600160a01b038481168252861692507f840acbd291b38534819f47f875839277e502f40e1c7bfea2c5fc2c8017442cd391506020016113eb565b612dc6614758565b602a9052612dd2614758565b602a602082015250612de2614758565b602a604082015250612df2614758565b602a606082015250612e02614758565b63deadbeef60e01b608082015250612e18614758565b60408051602a808252606082019092529060208201818036833750505060a082018190526000819003612e8d5760405162461bcd60e51b815260206004820152601760248201527f7573657244617461206f6666736574206973207a65726f000000000000000000604482015260640161111e565b8051602a8114612edf5760405162461bcd60e51b815260206004820152601960248201527f7573657244617461206368616e676564206c6f636174696f6e00000000000000604482015260640161111e565b505050612eea614758565b602a60c082015250612efa614758565b602a60e082015250612f0a614758565b602a61010082015250612f1b614758565b602a61012082015250612f2c614758565b602a61014082015250565b600081516000141580156112345750600654825160208401201492915050565b600060606001600160a01b038716612f7157612f71615091565b612f7b84846145a5565b9350622dc6c060005a90508715612ff157886001600160a01b03168287604051612fa5919061522c565b6000604051808303818686fa925050503d8060008114612fe1576040519150601f19603f3d011682016040523d82523d6000602084013e612fe6565b606091505b509094509250613054565b886001600160a01b0316828760405161300a919061522c565b60006040518083038160008787f1925050503d8060008114613048576040519150601f19603f3d011682016040523d82523d6000602084013e61304d565b606091505b5090945092505b8361309d576130628161465c565b61308457866130795761307483613786565b61309d565b61307489600a6130fd565b604051636a7aea4b60e11b815260040160405180910390fd5b50509550959350505050565b60006040825110156130bd57506000919050565b6020828101519060009082146130d7575060009392505050565b5060408301516130e681614672565b6130f1906040615248565b84511492505050919050565b6001600160a01b038216600090815260046020526040812054618000169003611c22576001600160a01b038216600081815260046020526040908190208054618000179055517fbe3aa33bd245135e4e26b223d79d14ea479a47bff09f2b03c53838af1edbb14b906131729084815260200190565b60405180910390a25050565b600654606090156131a55760405163a85ba64f60e01b81526015600482015260240161111e565b6001600160a01b03841660009081526004602052604081205485918190036131e05760405163163cbe4360e01b815260040160405180910390fd5b61800081161561320257604051628e12d960e21b815260040160405180910390fd5b83600061320e826144cf565b90506001600160e01b031981166330d9c91560e01b148061323f57506001600160e01b0319811663d86ed3e560e01b145b8061325a57506001600160e01b03198116630221347d60e61b145b8061327557506001600160e01b0319811663230dbd2960e01b145b8061329057506001600160e01b03198116635f9e7d7760e01b145b806132ab57506001600160e01b031981166353c11f9960e01b145b156132c9576040516377a14afb60e11b815260040160405180910390fd5b60408051610160810182526000808252600260208084019190915242838501526001600160a01b03808e16606085015260808401839052845191820190945281815260a083015260c0820181905260e082018190526101008201819052918a16610120820152610140810182905261334090613597565b905060006133508a898b856136cb565b97509050801561339e578680602001905181019061336e91906150ec565b915061337982612f37565b6133995760405163a85ba64f60e01b81526014600482015260240161111e565b6133a7565b6133a787613786565b505060006006555092979650505050505050565b600654606090156133e25760405163a85ba64f60e01b81526015600482015260240161111e565b836133ec81611fe8565b6134095760405163619c535960e01b815260040160405180910390fd5b6000613414856144cf565b60408051610160810182526000808252600160208301529293506134979181014281526020018a6001600160a01b03168152602001846001600160e01b031916815260200187815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815250613597565b905060006134a888886000856136cb565b95509050806134ba576134ba85613786565b50506000600655509095945050505050565b6134d4614758565b606080838060200190518101906134eb919061525b565b8151919350915060009061350890840160209081019085016152b4565b60a08901526001600160e01b03191660808801526001600160a01b031660608701526040860152602081811c600f168187015260ff9091168552825160009250613559919084018101908401615338565b6001600160a01b03908116610140890152166101208701526101008601526001600160801b03811660c086015260801c60e085015250919392505050565b60606001826000015160ff1611156135c55760405163a85ba64f60e01b81526028600482015260240161111e565b815160208084015160009260ff1664ff000000009190921b16179050600060806135f28560e001516146ab565b6001600160801b0316901b61360a8560c001516146ab565b6001600160801b0316179050818460400151856060015186608001518760a0015160405160200161363f959493929190615383565b60408051601f1981840301815282825261010087015161012088015161014089015160208601879052938501919091526001600160a01b03908116606085015290911660808301529060a00160408051601f19818403018152908290526136a99291602001614cbc565b60408051601f1981840301815291905280516020820120600655949350505050565b600060606001600160a01b0386166136e5576136e5615091565b6136ef85846145a5565b9450856001600160a01b0316848660405161370a919061522c565b60006040518083038185875af1925050503d8060008114613747576040519150601f19603f3d011682016040523d82523d6000602084013e61374c565b606091505b509092509050811561377d57805160000361377d5760405163a85ba64f60e01b81526016600482015260240161111e565b94509492505050565b6004815110156137d85760405162461bcd60e51b815260206004820152601a60248201527f43616c6c5574696c733a20746172676574207265766572742829000000000000604482015260640161111e565b602081015163b1b7848f60e01b6001600160e01b03198216016138885760408051808201825260208082527f43616c6c5574696c733a207461726765742070616e69636b65643a2030785f5f90820190815260248501517f43616c6c5574696c733a207461726765742070616e69636b65643a2030780000600482811c600f908116603090810160081b918516011791909117909252925162461bcd60e51b815291929161111e91849101614961565b81518060208401fd5b60006138bb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036139115760405162461bcd60e51b815260206004820152601d60248201527f5555505350726f786961626c653a206e6f742075706772616461626c65000000604482015260640161111e565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561394f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139739190615039565b7fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba74146139ed5760405162461bcd60e51b815260206004820152602360248201527f5555505350726f786961626c653a206e6f7420636f6d70617469626c65206c6f60448201526267696360e81b606482015260840161111e565b6001600160a01b0381163003613a455760405162461bcd60e51b815260206004820152601960248201527f5555505350726f786961626c653a2070726f7879206c6f6f7000000000000000604482015260640161111e565b613a6d817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fe011bc04c286c344a8fcbb8de77f953da762c3e25d8cdea984147fc4168a5dcc7fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba74604080519182526001600160a01b0384166020830152016119cb565b6040805160208101829052603260608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527132173a393ab9ba32b22337b93bb0b93232b960711b60a08201526001600160a01b0383169181019190915260009060c0015b604051602081830303815290604052805190602001209050919050565b600060183610801590613b6a5750613b6a33611aa4565b613bae5760405162461bcd60e51b81526020600482015260156024820152742737ba103a393ab9ba32b2103337b93bb0b93232b960591b604482015260640161111e565b5060131936013560601c90565b6000805b82811015614310576000848483818110613bdb57613bdb61507b565b9050602002810190613bed91906153cf565b613bfb9060208101906153e5565b905060001963ffffffff821601613cef57600080868685818110613c2157613c2161507b565b9050602002810190613c3391906153cf565b613c4190604081019061540b565b810190613c4e919061500d565b91509150868685818110613c6457613c6461507b565b9050602002810190613c7691906153cf565b613c879060408101906020016147c8565b6001600160a01b03166362aa52878984846040518463ffffffff1660e01b8152600401613cb69392919061515a565b600060405180830381600087803b158015613cd057600080fd5b505af1158015613ce4573d6000803e3d6000fd5b505050505050614307565b60011963ffffffff821601613dfa576000806000878786818110613d1557613d1561507b565b9050602002810190613d2791906153cf565b613d3590604081019061540b565b810190613d429190615451565b925092509250878786818110613d5a57613d5a61507b565b9050602002810190613d6c91906153cf565b613d7d9060408101906020016147c8565b604051630b682aeb60e11b81526001600160a01b038b81166004830152858116602483015284811660448301526064820184905291909116906316d055d6906084015b600060405180830381600087803b158015613dda57600080fd5b505af1158015613dee573d6000803e3d6000fd5b50505050505050614307565b60021963ffffffff821601613eb9576000806000878786818110613e2057613e2061507b565b9050602002810190613e3291906153cf565b613e4090604081019061540b565b810190613e4d9190615492565b925092509250878786818110613e6557613e6561507b565b9050602002810190613e7791906153cf565b613e889060408101906020016147c8565b6001600160a01b031663ca0c1e7f8a8585856040518563ffffffff1660e01b8152600401613dc094939291906154e0565b60031963ffffffff821601613f7257600080868685818110613edd57613edd61507b565b9050602002810190613eef91906153cf565b613efd90604081019061540b565b810190613f0a919061500d565b91509150868685818110613f2057613f2061507b565b9050602002810190613f3291906153cf565b613f439060408101906020016147c8565b6001600160a01b0316634b2763b38984846040518463ffffffff1660e01b8152600401613cb69392919061515a565b60041963ffffffff82160161402b57600080868685818110613f9657613f9661507b565b9050602002810190613fa891906153cf565b613fb690604081019061540b565b810190613fc3919061500d565b91509150868685818110613fd957613fd961507b565b9050602002810190613feb91906153cf565b613ffc9060408101906020016147c8565b6001600160a01b031663c780fd828984846040518463ffffffff1660e01b8152600401613cb69392919061515a565b60641963ffffffff8216016141205784848381811061404c5761404c61507b565b905060200281019061405e91906153cf565b61406f9060408101906020016147c8565b6001600160a01b031663ca789464878787868181106140905761409061507b565b90506020028101906140a291906153cf565b6140b090604081019061540b565b8101906140bd9190614e3d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561410357600080fd5b505af1158015614117573d6000803e3d6000fd5b50505050614307565b60651963ffffffff821601614185578484838181106141415761414161507b565b905060200281019061415391906153cf565b6141649060408101906020016147c8565b6001600160a01b031663245887fc878787868181106140905761409061507b565b60c81963ffffffff821601614222576000808686858181106141a9576141a961507b565b90506020028101906141bb91906153cf565b6141c990604081019061540b565b8101906141d69190615513565b9150915061421a888888878181106141f0576141f061507b565b905060200281019061420291906153cf565b6142139060408101906020016147c8565b84846133bb565b505050614307565b60c91963ffffffff8216016142ee576142e4868686858181106142475761424761507b565b905060200281019061425991906153cf565b61426a9060408101906020016147c8565b856142755734614278565b60005b88888781811061428a5761428a61507b565b905060200281019061429c91906153cf565b6142aa90604081019061540b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317e92505050565b5060019250614307565b60405163b477011560e01b815260040160405180910390fd5b50600101613bbf565b50341580159061431e575080155b156143515760405133903480156108fc02916000818181858888f1935050505015801561434f573d6000803e3d6000fd5b505b50505050565b60006143638284614718565b6000805460405163407b865d60e11b81529293504292620100009091046001600160a01b0316916380f70cba916143a0913091879060040161515a565b602060405180830381865afa1580156143bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143e19190615039565b10156127b357604051630b56455f60e41b815260040160405180910390fd5b64ff000080ff198116151580614417575060ff8116155b806144255750618000811615155b1561444357604051633d3200a960e21b815260040160405180910390fd5b6001600160a01b0382166000908152600460205260409020541561447a576040516301b0a93560e01b815260040160405180910390fd5b60408051602080820183528382526001600160a01b038516600081815260049092528382209251909255915190917f0d540ad8f39e07d19909687352b9fa017405d93c91a6760981fbae9cf28bfef791a25050565b60006004825110156145235760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e76616c69642063616c6c446174610000000000604482015260640161111e565b506020015190565b6040805160208101829052603960608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527f642e61707057686974654c697374696e672e666163746f72790000000000000060a08201526001600160a01b0383169181019190915260009060c001613b36565b8151808301516060919080156145ce576040516367e9985b60e01b815260040160405180910390fd5b50601f19810184528251849084816145e581614672565b6145ef9190615068565b6001600160401b0381111561460657614606614974565b6040519080825280601f01601f191660200182016040528015614630576020820181803683370190505b50604051602001614644949392919061556c565b60405160208183030381529060405291505092915050565b60006146696040836155bb565b5a111592915050565b60008082601f1611614685576000614688565b60015b60ff166146966020846155bb565b6146a09190615248565b6112349060206155dd565b60006001600160801b038211156147145760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b606482015260840161111e565b5090565b6000828260405160200161472d9291906155f4565b60405160208183030381529060405280519060200120905092915050565b61024a8061567a83390190565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a082015260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b6001600160a01b038116811461172157600080fd5b6000602082840312156147da57600080fd5b81356147e5816147b3565b9392505050565b600080604083850312156147ff57600080fd5b823561480a816147b3565b9150602083013561481a816147b3565b809150509250929050565b60008083601f84011261483757600080fd5b5081356001600160401b0381111561484e57600080fd5b60208301915083602082850101111561486657600080fd5b9250929050565b801515811461172157600080fd5b6000806000806000806080878903121561489457600080fd5b863561489f816147b3565b955060208701356001600160401b03808211156148bb57600080fd5b6148c78a838b01614825565b9097509550604089013591506148dc8261486d565b909350606088013590808211156148f257600080fd5b506148ff89828a01614825565b979a9699509497509295939492505050565b60005b8381101561492c578181015183820152602001614914565b50506000910152565b6000815180845261494d816020860160208601614911565b601f01601f19169290920160200192915050565b6020815260006112316020830184614935565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156149b2576149b2614974565b604052919050565b60006001600160401b038211156149d3576149d3614974565b50601f01601f191660200190565b600082601f8301126149f257600080fd5b8135614a05614a00826149ba565b61498a565b818152846020838601011115614a1a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614a4a57600080fd5b8235614a55816147b3565b915060208301356001600160401b03811115614a7057600080fd5b614a7c858286016149e1565b9150509250929050565b600080600060608486031215614a9b57600080fd5b8335614aa6816147b3565b925060208401356001600160401b0380821115614ac257600080fd5b614ace878388016149e1565b93506040860135915080821115614ae457600080fd5b50614af1868287016149e1565b9150509250925092565b600060208284031215614b0d57600080fd5b81356001600160401b03811115614b2357600080fd5b611406848285016149e1565b60208152614b4360208201835160ff169052565b60006020830151614b59604084018260ff169052565b50604083015160608301526060830151614b7e60808401826001600160a01b03169052565b5060808301516001600160e01b0319811660a08401525060a08301516101608060c0850152614bb1610180850183614935565b915060c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140614bf7818701836001600160a01b03169052565b909501516001600160a01b031693019290925250919050565b60008060008060008060006080888a031215614c2b57600080fd5b8735614c36816147b3565b965060208801356001600160401b0380821115614c5257600080fd5b614c5e8b838c01614825565b909850965060408a0135915080821115614c7757600080fd5b614c838b838c01614825565b909650945060608a0135915080821115614c9c57600080fd5b50614ca98a828b01614825565b989b979a50959850939692959293505050565b604081526000614ccf6040830185614935565b82810360208401526121588185614935565b600080600060408486031215614cf657600080fd5b83356001600160401b03811115614d0c57600080fd5b614d1886828701614825565b909790965060209590950135949350505050565b60008060208385031215614d3f57600080fd5b82356001600160401b0380821115614d5657600080fd5b818501915085601f830112614d6a57600080fd5b813581811115614d7957600080fd5b8660208260051b8501011115614d8e57600080fd5b60209290920196919550909350505050565b60008060008060008060a08789031215614db957600080fd5b86356001600160401b03811115614dcf57600080fd5b614ddb89828a01614825565b9097509550506020870135614def816147b3565b935060408701359250606087013591506080870135614e0d816147b3565b809150509295509295509295565b60008060408385031215614e2e57600080fd5b50508035926020909101359150565b600060208284031215614e4f57600080fd5b5035919050565b60008060008060608587031215614e6c57600080fd5b84356001600160401b03811115614e8257600080fd5b614e8e87828801614825565b9095509350506020850135614ea2816147b3565b9396929550929360400135925050565b600080600080600060608688031215614eca57600080fd5b8535614ed5816147b3565b945060208601356001600160401b0380821115614ef157600080fd5b614efd89838a01614825565b90965094506040880135915080821115614f1657600080fd5b50614f2388828901614825565b969995985093965092949392505050565b600080600060408486031215614f4957600080fd5b8335925060208401356001600160401b03811115614f6657600080fd5b614f7286828701614825565b9497909650939450505050565b60008060208385031215614f9257600080fd5b82356001600160401b03811115614fa857600080fd5b614fb485828601614825565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156150015783516001600160a01b031683529284019291840191600101614fdc565b50909695505050505050565b6000806040838503121561502057600080fd5b823561502b816147b3565b946020939093013593505050565b60006020828403121561504b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561123457611234615052565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600082601f8301126150b857600080fd5b81516150c6614a00826149ba565b8181528460208386010111156150db57600080fd5b611406826020830160208701614911565b6000602082840312156150fe57600080fd5b81516001600160401b0381111561511457600080fd5b611406848285016150a7565b60006020828403121561513257600080fd5b81516147e5816147b3565b60006020828403121561514f57600080fd5b81516147e58161486d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b808201828112600083128015821682158216171561519e5761519e615052565b505092915050565b600060ff821660ff81036151bc576151bc615052565b60010192915050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60006001820161522557615225615052565b5060010190565b6000825161523e818460208701614911565b9190910192915050565b8082018082111561123457611234615052565b6000806040838503121561526e57600080fd5b82516001600160401b038082111561528557600080fd5b615291868387016150a7565b935060208501519150808211156152a757600080fd5b50614a7c858286016150a7565b600080600080600060a086880312156152cc57600080fd5b855194506020860151935060408601516152e5816147b3565b60608701519093506001600160e01b03198116811461530357600080fd5b60808701519092506001600160401b0381111561531f57600080fd5b61532b888289016150a7565b9150509295509295909350565b6000806000806080858703121561534e57600080fd5b84519350602085015192506040850151615367816147b3565b6060860151909250615378816147b3565b939692955090935050565b858152602081018590526001600160a01b03841660408201526001600160e01b03198316606082015260a0608082018190526000906153c490830184614935565b979650505050505050565b60008235605e1983360301811261523e57600080fd5b6000602082840312156153f757600080fd5b813563ffffffff811681146147e557600080fd5b6000808335601e1984360301811261542257600080fd5b8301803591506001600160401b0382111561543c57600080fd5b60200191503681900382131561486657600080fd5b60008060006060848603121561546657600080fd5b8335615471816147b3565b92506020840135615481816147b3565b929592945050506040919091013590565b6000806000606084860312156154a757600080fd5b83356154b2816147b3565b92506020840135915060408401356001600160401b038111156154d457600080fd5b614af1868287016149e1565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611c0690830184614935565b6000806040838503121561552657600080fd5b82356001600160401b038082111561553d57600080fd5b615549868387016149e1565b9350602085013591508082111561555f57600080fd5b50614a7c858286016149e1565b60008551602061557f8285838b01614911565b8184019150868252855161559881838501848a01614911565b85519201916155ac81838501848901614911565b91909101019695505050505050565b6000826155d857634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761123457611234615052565b60608152604160608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527f642e61707057686974654c697374696e672e726567697374726174696f6e4b6560a0820152607960f81b60c082015260018060a01b038316602082015260e06040820152600061140660e083018461493556fe608060405234801561001057600080fd5b5061022a806100206000396000f3fe6080604052600436106100225760003560e01c80634a0687ef1461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f6100543660046101c4565b61006b565b610069610064610171565b6101a0565b565b6001600160a01b0381166100c65760405162461bcd60e51b815260206004820152601760248201527f5555505350726f78793a207a65726f206164647265737300000000000000000060448201526064015b60405180910390fd5b60006100f07f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316146101465760405162461bcd60e51b815260206004820152601e60248201527f5555505350726f78793a20616c726561647920696e697469616c697a6564000060448201526064016100bd565b61016e817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50565b600061019b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b3660008037600080366000845af43d6000803e8080156101bf573d6000f35b3d6000fd5b6000602082840312156101d657600080fd5b81356001600160a01b03811681146101ed57600080fd5b939250505056fea26469706673582212206902a7db24b0d3a778c1f364c2041c6224c0ba5a54b2a99ab7f21c6f5b9e285964736f6c63430008170033a2646970667358221220d812f2fe61571436bd6066cc3c93f8e4b50786b66c44ed7eeef13c9d325376a664736f6c63430008170033" = "0x60c060405234801561001057600080fd5b506000608081905260a0819052806158f9620000838239600081816108090152818161226801528181612744015281816129ef0152612b36015260008181610a1b01528181610b5201528181610e730152818161165b01528181611796015281816118f50152612a5e01526158f96000f3fe6080604052600436106103505760003560e01c80638ca48484116101c6578063bd1c448b116100f7578063e8dccb7d11610095578063f99a38c41161006f578063f99a38c414610aa1578063f9f522f414610aad578063fa6e0cfe14610aea578063fbdb0ee214610b0a57600080fd5b8063e8dccb7d14610a3d578063f2e55caf14610a6c578063f373305214610a8157600080fd5b8063c4d66de8116100d1578063c4d66de81461099c578063c56a069d146109bc578063c60944a6146109e9578063cd312ec414610a0957600080fd5b8063bd1c448b14610947578063bd3252c814610967578063bf4287341461097c57600080fd5b8063ad3915c811610164578063ba48b5f81161013e578063ba48b5f8146108ab578063bb84cfa1146108cb578063bbe4fd5014610914578063bced3ddc1461092757600080fd5b8063ad3915c81461084b578063b6d200de1461086b578063b724211e1461088b57600080fd5b8063989b0c3e116101a0578063989b0c3e146107c25780639903ad38146107e25780639d297e30146107f7578063a5dbbbcd1461082b57600080fd5b80638ca48484146107455780638ceddd7a146107655780639378fa131461079057600080fd5b8063486ff0cd116102a0578063670e77e31161023e5780637283100c116102185780637283100c146106c7578063731aed6e146106e757806374041e0214610705578063768fabb01461072557600080fd5b8063670e77e3146106745780636ad3ca7d146106945780636b4f3335146106a757600080fd5b806354fbc4931161027a57806354fbc493146105f457806357121e0c14610614578063572b6c051461063457806359a291411461065457600080fd5b8063486ff0cd1461057757806350d75d25146105a257806352d1902d146105b757600080fd5b80632f89bf891161030d5780633ca3ad4e116102e75780633ca3ad4e146104b45780633f6c923a146104fc5780634329d29314610529578063469519541461055757600080fd5b80632f89bf891461044557806333d608f11461046557806339255d5b1461049457600080fd5b806306cecba8146103555780630c5650751461037757806315a024e1146103975780631e6d0a84146103b75780631e855cf3146103ed578063289b3c0d1461040d575b600080fd5b34801561036157600080fd5b506103756103703660046147c8565b610b1f565b005b34801561038357600080fd5b506103756103923660046147ec565b610cf6565b3480156103a357600080fd5b506103756103b23660046147c8565b610d86565b3480156103c357600080fd5b506103d76103d236600461487b565b610fd6565b6040516103e49190614961565b60405180910390f35b3480156103f957600080fd5b506103d7610408366004614a37565b611222565b34801561041957600080fd5b506000546201000090046001600160a01b03165b6040516001600160a01b0390911681526020016103e4565b34801561045157600080fd5b506103756104603660046147c8565b61123a565b34801561047157600080fd5b5061047c622dc6c081565b6040516001600160401b0390911681526020016103e4565b3480156104a057600080fd5b506103d76104af366004614a86565b6113f8565b3480156104c057600080fd5b506104ec6104cf3660046147c8565b6001600160a01b0316600090815260046020526040902054151590565b60405190151581526020016103e4565b34801561050857600080fd5b5061051c610517366004614afb565b61140e565b6040516103e49190614b2f565b34801561053557600080fd5b50610549610544366004614c10565b61141f565b6040516103e4929190614cbc565b34801561056357600080fd5b506103756105723660046147c8565b611628565b34801561058357600080fd5b50604080518082019091526002815261763160f01b60208201526103d7565b3480156105ae57600080fd5b5061042d611724565b3480156105c357600080fd5b507fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba745b6040519081526020016103e4565b34801561060057600080fd5b5061037561060f3660046147c8565b611753565b34801561062057600080fd5b5061037561062f3660046147c8565b6119d6565b34801561064057600080fd5b506104ec61064f3660046147c8565b611aa4565b34801561066057600080fd5b506103d761066f366004614ce1565b611b2e565b34801561068057600080fd5b5061037561068f366004614d2c565b611c10565b6103756106a2366004614d2c565b611c26565b3480156106b357600080fd5b506104ec6106c23660046147c8565b611c31565b3480156106d357600080fd5b506103756106e23660046147c8565b611c55565b3480156106f357600080fd5b506003546001600160a01b031661042d565b34801561071157600080fd5b506103d761072036600461487b565b611cfd565b34801561073157600080fd5b506103d7610740366004614da0565b611e4c565b34801561075157600080fd5b506104ec6107603660046147c8565b611fe8565b34801561077157600080fd5b5061077b61010081565b60405163ffffffff90911681526020016103e4565b34801561079c57600080fd5b506107b06107ab3660046147c8565b6120ad565b60405160ff90911681526020016103e4565b3480156107ce57600080fd5b506103d76107dd366004614ce1565b6120ce565b3480156107ee57600080fd5b50610375612161565b34801561080357600080fd5b506104ec7f000000000000000000000000000000000000000000000000000000000000000081565b34801561083757600080fd5b506105e6610846366004614e1b565b61221c565b34801561085757600080fd5b50610375610866366004614e3d565b612266565b34801561087757600080fd5b5061042d610886366004614e3d565b6122ba565b34801561089757600080fd5b506103d76108a6366004614e56565b612321565b3480156108b757600080fd5b506103d76108c6366004614eb2565b6123e2565b3480156108d757600080fd5b506104ec6108e63660046147ec565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561092057600080fd5b50426105e6565b34801561093357600080fd5b506105e6610942366004614e1b565b6126f9565b34801561095357600080fd5b50610375610962366004614f34565b612742565b34801561097357600080fd5b506105e6600181565b34801561098857600080fd5b506104ec610997366004614f7f565b6127b8565b3480156109a857600080fd5b506103756109b73660046147c8565b6127f9565b3480156109c857600080fd5b506109dc6109d7366004614e3d565b6128dd565b6040516103e49190614fc0565b3480156109f557600080fd5b50610375610a0436600461500d565b6129c2565b348015610a1557600080fd5b506104ec7f000000000000000000000000000000000000000000000000000000000000000081565b348015610a4957600080fd5b506104ec610a58366004614e3d565b600090815260026020526040902054151590565b348015610a7857600080fd5b5061042d612a41565b348015610a8d57600080fd5b50610375610a9c36600461500d565b612b09565b34801561037557600080fd5b348015610ab957600080fd5b50610acd610ac83660046147c8565b612c14565b6040805193151584529115156020840152908201526060016103e4565b348015610af657600080fd5b50610375610b053660046147ec565b612c63565b348015610b1657600080fd5b50610375612dbe565b6000546201000090046001600160a01b03163314610b50576040516362e9152760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015610b8f576040516314f72c9f60e01b815260040160405180910390fd5b6000816001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf39190615039565b600081815260026020526040812054919250819003610c2557604051630e4f4df560e11b815260040160405180910390fd5b60006001610c338184615068565b81548110610c4357610c4361507b565b6000918252602090912001546040516311a5465560e21b81526001600160a01b03868116600483015290911691508190634695195490602401600060405180830381600087803b158015610c9657600080fd5b505af1158015610caa573d6000803e3d6000fd5b5050604080518681526001600160a01b03881660208201527f9279aa773f2b588996032d8de89911555039f28b13a11a7c17074330bc082d9a935001905060405180910390a150505050565b6000546201000090046001600160a01b03163314610d27576040516362e9152760e11b815260040160405180910390fd5b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f28397090602401600060405180830381600087803b158015610d6a57600080fd5b505af1158015610d7e573d6000803e3d6000fd5b505050505050565b6000546201000090046001600160a01b03163314610db7576040516362e9152760e11b815260040160405180910390fd5b6000816001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190615039565b60008181526002602052604090205490915015610e4b57604051631b93bb7560e31b815260040160405180910390fd5b60015461010011610e6f57604051630f85034f60e31b815260040160405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000610f29576000604051610ea49061474b565b604051809103906000f080158015610ec0573d6000803e3d6000fd5b50604051634a0687ef60e01b81526001600160a01b03868116600483015291925090821690634a0687ef90602401600060405180830381600087803b158015610f0857600080fd5b505af1158015610f1c573d6000803e3d6000fd5b5050505080915050610f2c565b50815b6001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0384166001600160a01b0319909116179055546000838152600260205260409081902091909155517f878135063a6cfb3bc333e534b1fdc83f4f12221cad6705c31c0567048a8bd3d190610fc990849086909182526001600160a01b0316602082015260400190565b60405180910390a1505050565b6060610fe133611fe8565b610ffe5760405163619c535960e01b815260040160405180910390fd5b82828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506110409250839150612f379050565b61104c5761104c615091565b6000806110c68a6000898c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c9081908401838280828437600092019190915250612f5792505050565b9150915081156111db576110d9816130a9565b1561117357808060200190518101906110f291906150ec565b93506110fd84612f37565b61116e57866111275760405163a85ba64f60e01b8152601460048201526024015b60405180910390fd5b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965061116e92508c9150601490506130fd565b611215565b866111945760405163a85ba64f60e01b81526016600482015260240161111e565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092965061116e92508c9150601690506130fd565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509296505050505b5050509695505050505050565b6060611231338460008561317e565b90505b92915050565b6000546201000090046001600160a01b0316331461126b576040516362e9152760e11b815260040160405180910390fd5b604051635b69006f60e11b81527fdfd8ece9bfbcb8c5c540edb935641f63d67686490a1ab97f000288759f30a9466004820152600090309063b6d200de90602401602060405180830381865afa1580156112c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ed9190615120565b90506000816001600160a01b0316635437dd976040518163ffffffff1660e01b8152600401602060405180830381865afa15801561132f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113539190615120565b604051631b2ce7f360e11b81526001600160a01b03858116600483015291925090821690633659cfe690602401600060405180830381600087803b15801561139a57600080fd5b505af11580156113ae573d6000803e3d6000fd5b50506040516001600160a01b038681168252841692507f052cea8931962dd445ef48b0b998d3056bd0705f437087d60fe3c46a3fa09e1f91506020015b60405180910390a2505050565b6060611406338585856133bb565b949350505050565b611416614758565b611234826134cc565b60608083838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114649250839150612f379050565b6114845760405163a85ba64f60e01b81526014600482015260240161111e565b8961148e81611fe8565b6114ab5760405163619c535960e01b815260040160405180910390fd5b60006114ec87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140e92505050565b6101208101519091506001600160a01b0316331461151d5760405163066875e160e11b815260040160405180910390fd5b60608101805133909152604080516020601f8c018190048102820181019092528a8152908b908b908190840183828082843760009201919091525050505060a083015261156982613597565b955060006115af8e8e8e8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508c91506136cb9050565b96509050801561160e57858060200190518101906115cd91906150ec565b96506115d887612f37565b6115e4576115e4615091565b6115ed8761140e565b6001600160a01b0383166060820152925061160783613597565b9650611617565b61161786613786565b505050505097509795505050505050565b6000546201000090046001600160a01b03163314611659576040516362e9152760e11b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015611698576040516314f72c9f60e01b815260040160405180910390fd5b806001600160a01b031663cd312ec46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fa919061513d565b156117185760405163474e764160e01b815260040160405180910390fd5b61172181613891565b50565b600061174e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b6000546201000090046001600160a01b03163314611784576040516362e9152760e11b815260040160405180910390fd5b6003546001600160a01b03166118f3577f000000000000000000000000000000000000000000000000000000000000000061186a5760006040516117c79061474b565b604051809103906000f0801580156117e3573d6000803e3d6000fd5b50604051634a0687ef60e01b81526001600160a01b03848116600483015291925090821690634a0687ef90602401600060405180830381600087803b15801561182b57600080fd5b505af115801561183f573d6000803e3d6000fd5b5050600380546001600160a01b0319166001600160a01b039490941693909317909255506118869050565b600380546001600160a01b0319166001600160a01b0383161790555b600360009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156118d657600080fd5b505af11580156118ea573d6000803e3d6000fd5b50505050611992565b7f000000000000000000000000000000000000000000000000000000000000000015611932576040516314f72c9f60e01b815260040160405180910390fd5b6003546040516311a5465560e21b81526001600160a01b03838116600483015290911690634695195490602401600060405180830381600087803b15801561197957600080fd5b505af115801561198d573d6000803e3d6000fd5b505050505b6003546040516001600160a01b0390911681527fce13a9895a1719ad4493b2ac1a9bfb36070566161abab408e7ecbe586da8d499906020015b60405180910390a150565b33600081815260046020526040902054611a03576040516302eb3f7160e61b815260040160405180910390fd5b6001600160a01b038216600090815260046020526040902054611a3957604051634b5518af60e11b815260040160405180910390fd5b611a42826120ad565b60ff16611a4e826120ad565b60ff1611611a6f57604051630447252760e41b815260040160405180910390fd5b6001600160a01b039081166000908152600560209081526040808320949093168252929092529020805460ff19166001179055565b600080546201000090046001600160a01b03166380f70cba3083611ac786613acb565b6040518463ffffffff1660e01b8152600401611ae59392919061515a565b602060405180830381865afa158015611b02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b269190615039565b151592915050565b6060611b3933611fe8565b611b565760405163619c535960e01b815260040160405180910390fd5b83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b989250839150612f379050565b611ba457611ba4615091565b6000611be586868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140e92505050565b9050838161010001818151611bfa919061517e565b905250611c0681613597565b9695505050505050565b611c22611c1b613b53565b8383613bbb565b5050565b611c22338383613bbb565b6001600160a01b038116600090815260046020526040812054618000161515611234565b6000546201000090046001600160a01b03163314611c86576040516362e9152760e11b815260040160405180910390fd5b600054604080516001600160a01b03620100009093048316815291831660208301527f13abda02e63c790d0e2818b251282cfe5cbe0a8abd69c54bf5d2260c0907bd2e910160405180910390a1600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6060611d0833611fe8565b611d255760405163619c535960e01b815260040160405180910390fd5b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d679250839150612f379050565b611d7357611d73615091565b600080611ded8a6001898c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8f018190048102820181019092528d815292508d91508c9081908401838280828437600092019190915250612f5792505050565b91509150811561121557611e00816130a9565b15611e205780806020019051810190611e1991906150ec565b9350611215565b86611e415760405163a85ba64f60e01b81526016600482015260240161111e565b6112158a60166130fd565b6060611e5733611fe8565b611e745760405163619c535960e01b815260040160405180910390fd5b86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb69250839150612f379050565b611ec257611ec2615091565b6000611f0389898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140e92505050565b9050611f2a81606001516001600160a01b0316600090815260046020526040902054151590565b8015611f3e57506001816000015160ff1610155b15611f915760608101516001600160a01b039081166000908152600560209081526040808320938b168352929052205460ff16611f915760405163a85ba64f60e01b8152601e600482015260240161111e565b805181611f9d826151a6565b60ff169052506003602082015260c0810186905261010081018590526001600160a01b038088166101208301528416610140820152611fdb81613597565b9998505050505050505050565b600080826001600160a01b0316637730599e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204d9190615039565b600081815260026020526040902054909150801580159061140657506001600160a01b038416600161207f8184615068565b8154811061208f5761208f61507b565b6000918252602090912001546001600160a01b031614949350505050565b6001600160a01b03811660009081526004602052604081205460ff16611234565b60606120d933611fe8565b6120f65760405163619c535960e01b815260040160405180910390fd5b600061213785858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140e92505050565b905082816101000181815161214c919061517e565b90525061215881613597565b95945050505050565b600054610100900460ff16158080156121815750600054600160ff909116105b8061219b5750303b15801561219b575060005460ff166001145b6121b75760405162461bcd60e51b815260040161111e906151c5565b6000805460ff1916600117905580156121da576000805461ff0019166101001790555b8015611721576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119cb565b60008181526002602052604081205480820361224b57604051630e4f4df560e11b815260040160405180910390fd5b612256600182615068565b6001901b19841691505092915050565b7f0000000000000000000000000000000000000000000000000000000000000000156122b0576122b0604051806040016040528060028152602001616b3160f01b81525032614357565b6117213382614400565b6000818152600260205260408120548082036122e957604051630e4f4df560e11b815260040160405180910390fd5b60016122f58183615068565b815481106123055761230561507b565b6000918252602090912001546001600160a01b03169392505050565b606061232c33611fe8565b6123495760405163619c535960e01b815260040160405180910390fd5b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061238b9250839150612f379050565b61239757612397615091565b6123a184846130fd565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929998505050505050505050565b606082828080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506124269250839150612f379050565b6124465760405163a85ba64f60e01b81526014600482015260240161111e565b6001600160a01b03871660009081526004602052604081205488918190036124815760405163163cbe4360e01b815260040160405180910390fd5b6180008116156124a357604051628e12d960e21b815260040160405180910390fd5b87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506124e491508390506144cf565b90506001600160e01b031981166330d9c91560e01b148061251557506001600160e01b0319811663d86ed3e560e01b145b8061253057506001600160e01b03198116630221347d60e61b145b8061254b57506001600160e01b0319811663230dbd2960e01b145b8061256657506001600160e01b03198116635f9e7d7760e01b145b8061258157506001600160e01b031981166353c11f9960e01b145b1561259f576040516377a14afb60e11b815260040160405180910390fd5b60006125e089898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061140e92505050565b6101208101519091506001600160a01b03163314612611576040516311cfdef560e21b815260040160405180910390fd5b6060810180513390915261262482613597565b975060008061266b8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092508f91506136cb9050565b9150915081156126de578080602001905181019061268991906150ec565b99506126948a612f37565b6126b45760405163a85ba64f60e01b81526014600482015260240161111e565b6126bd8a61140e565b6001600160a01b038416606082015293506126d784613597565b99506126e7565b6126e781613786565b50505050505050505095945050505050565b60008181526002602052604081205480820361272857604051630e4f4df560e11b815260040160405180910390fd5b612733600182615068565b6001901b841791505092915050565b7f0000000000000000000000000000000000000000000000000000000000000000156127a9576127a982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250329250614357915050565b6127b33384614400565b505050565b600061123183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f3792505050565b600054610100900460ff16158080156128195750600054600160ff909116105b806128335750303b158015612833575060005460ff166001145b61284f5760405162461bcd60e51b815260040161111e906151c5565b6000805460ff191660011790558015612872576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611c22576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60606000806001805490506001600160401b038111156128ff576128ff614974565b604051908082528060200260200182016040528015612928578160200160208202803683370190505b50925060009050600091505b6001548210156129ba576001821b8416156129af576001828154811061295c5761295c61507b565b6000918252602090912001546001600160a01b0316838261297c81615213565b93508151811061298e5761298e61507b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b816001019150612934565b825250919050565b816001600160a01b03163b6000036129ed5760405163353dacc360e21b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015612a3757612a37604051806040016040528060028152602001616b3160f01b81525033614357565b611c228282614400565b6003546000906001600160a01b0316612a5c57612a5c615091565b7f000000000000000000000000000000000000000000000000000000000000000015612a9257506003546001600160a01b031690565b600360009054906101000a90046001600160a01b03166001600160a01b03166350d75d256040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ae5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174e9190615120565b816001600160a01b03163b600003612b345760405163353dacc360e21b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000015612a37576000612b653361452b565b6000805460405163407b865d60e11b81529293509091620100009091046001600160a01b0316906380f70cba90612ba49030908590879060040161515a565b602060405180830381865afa158015612bc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be59190615039565b600114905080612c0857604051630b56455f60e41b815260040160405180910390fd5b5050611c228282614400565b6001600160a01b038116600090815260046020908152604080832081519283019091525480825215801592918291612c5b57805161800081161515935064ff000000001691505b509193909250565b6000546201000090046001600160a01b03163314612c94576040516362e9152760e11b815260040160405180910390fd5b60006001600160a01b038216612d2057600360009054906101000a90046001600160a01b03166001600160a01b0316639470a5b26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1b9190615120565b612d22565b815b6040516311a5465560e21b81526001600160a01b03808316600483015291925090841690634695195490602401600060405180830381600087803b158015612d6957600080fd5b505af1158015612d7d573d6000803e3d6000fd5b50506040516001600160a01b038481168252861692507f840acbd291b38534819f47f875839277e502f40e1c7bfea2c5fc2c8017442cd391506020016113eb565b612dc6614758565b602a9052612dd2614758565b602a602082015250612de2614758565b602a604082015250612df2614758565b602a606082015250612e02614758565b63deadbeef60e01b608082015250612e18614758565b60408051602a808252606082019092529060208201818036833750505060a082018190526000819003612e8d5760405162461bcd60e51b815260206004820152601760248201527f7573657244617461206f6666736574206973207a65726f000000000000000000604482015260640161111e565b8051602a8114612edf5760405162461bcd60e51b815260206004820152601960248201527f7573657244617461206368616e676564206c6f636174696f6e00000000000000604482015260640161111e565b505050612eea614758565b602a60c082015250612efa614758565b602a60e082015250612f0a614758565b602a61010082015250612f1b614758565b602a61012082015250612f2c614758565b602a61014082015250565b600081516000141580156112345750600654825160208401201492915050565b600060606001600160a01b038716612f7157612f71615091565b612f7b84846145a5565b9350622dc6c060005a90508715612ff157886001600160a01b03168287604051612fa5919061522c565b6000604051808303818686fa925050503d8060008114612fe1576040519150601f19603f3d011682016040523d82523d6000602084013e612fe6565b606091505b509094509250613054565b886001600160a01b0316828760405161300a919061522c565b60006040518083038160008787f1925050503d8060008114613048576040519150601f19603f3d011682016040523d82523d6000602084013e61304d565b606091505b5090945092505b8361309d576130628161465c565b61308457866130795761307483613786565b61309d565b61307489600a6130fd565b604051636a7aea4b60e11b815260040160405180910390fd5b50509550959350505050565b60006040825110156130bd57506000919050565b6020828101519060009082146130d7575060009392505050565b5060408301516130e681614672565b6130f1906040615248565b84511492505050919050565b6001600160a01b038216600090815260046020526040812054618000169003611c22576001600160a01b038216600081815260046020526040908190208054618000179055517fbe3aa33bd245135e4e26b223d79d14ea479a47bff09f2b03c53838af1edbb14b906131729084815260200190565b60405180910390a25050565b600654606090156131a55760405163a85ba64f60e01b81526015600482015260240161111e565b6001600160a01b03841660009081526004602052604081205485918190036131e05760405163163cbe4360e01b815260040160405180910390fd5b61800081161561320257604051628e12d960e21b815260040160405180910390fd5b83600061320e826144cf565b90506001600160e01b031981166330d9c91560e01b148061323f57506001600160e01b0319811663d86ed3e560e01b145b8061325a57506001600160e01b03198116630221347d60e61b145b8061327557506001600160e01b0319811663230dbd2960e01b145b8061329057506001600160e01b03198116635f9e7d7760e01b145b806132ab57506001600160e01b031981166353c11f9960e01b145b156132c9576040516377a14afb60e11b815260040160405180910390fd5b60408051610160810182526000808252600260208084019190915242838501526001600160a01b03808e16606085015260808401839052845191820190945281815260a083015260c0820181905260e082018190526101008201819052918a16610120820152610140810182905261334090613597565b905060006133508a898b856136cb565b97509050801561339e578680602001905181019061336e91906150ec565b915061337982612f37565b6133995760405163a85ba64f60e01b81526014600482015260240161111e565b6133a7565b6133a787613786565b505060006006555092979650505050505050565b600654606090156133e25760405163a85ba64f60e01b81526015600482015260240161111e565b836133ec81611fe8565b6134095760405163619c535960e01b815260040160405180910390fd5b6000613414856144cf565b60408051610160810182526000808252600160208301529293506134979181014281526020018a6001600160a01b03168152602001846001600160e01b031916815260200187815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815250613597565b905060006134a888886000856136cb565b95509050806134ba576134ba85613786565b50506000600655509095945050505050565b6134d4614758565b606080838060200190518101906134eb919061525b565b8151919350915060009061350890840160209081019085016152b4565b60a08901526001600160e01b03191660808801526001600160a01b031660608701526040860152602081811c600f168187015260ff9091168552825160009250613559919084018101908401615338565b6001600160a01b03908116610140890152166101208701526101008601526001600160801b03811660c086015260801c60e085015250919392505050565b60606001826000015160ff1611156135c55760405163a85ba64f60e01b81526028600482015260240161111e565b815160208084015160009260ff1664ff000000009190921b16179050600060806135f28560e001516146ab565b6001600160801b0316901b61360a8560c001516146ab565b6001600160801b0316179050818460400151856060015186608001518760a0015160405160200161363f959493929190615383565b60408051601f1981840301815282825261010087015161012088015161014089015160208601879052938501919091526001600160a01b03908116606085015290911660808301529060a00160408051601f19818403018152908290526136a99291602001614cbc565b60408051601f1981840301815291905280516020820120600655949350505050565b600060606001600160a01b0386166136e5576136e5615091565b6136ef85846145a5565b9450856001600160a01b0316848660405161370a919061522c565b60006040518083038185875af1925050503d8060008114613747576040519150601f19603f3d011682016040523d82523d6000602084013e61374c565b606091505b509092509050811561377d57805160000361377d5760405163a85ba64f60e01b81526016600482015260240161111e565b94509492505050565b6004815110156137d85760405162461bcd60e51b815260206004820152601a60248201527f43616c6c5574696c733a20746172676574207265766572742829000000000000604482015260640161111e565b602081015163b1b7848f60e01b6001600160e01b03198216016138885760408051808201825260208082527f43616c6c5574696c733a207461726765742070616e69636b65643a2030785f5f90820190815260248501517f43616c6c5574696c733a207461726765742070616e69636b65643a2030780000600482811c600f908116603090810160081b918516011791909117909252925162461bcd60e51b815291929161111e91849101614961565b81518060208401fd5b60006138bb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036139115760405162461bcd60e51b815260206004820152601d60248201527f5555505350726f786961626c653a206e6f742075706772616461626c65000000604482015260640161111e565b806001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561394f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139739190615039565b7fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba74146139ed5760405162461bcd60e51b815260206004820152602360248201527f5555505350726f786961626c653a206e6f7420636f6d70617469626c65206c6f60448201526267696360e81b606482015260840161111e565b6001600160a01b0381163003613a455760405162461bcd60e51b815260206004820152601960248201527f5555505350726f786961626c653a2070726f7879206c6f6f7000000000000000604482015260640161111e565b613a6d817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b7fe011bc04c286c344a8fcbb8de77f953da762c3e25d8cdea984147fc4168a5dcc7fcd355cae2c435f8c5e0c626c4691d22fd85aa7422a424c6f0bced6e64c7aba74604080519182526001600160a01b0384166020830152016119cb565b6040805160208101829052603260608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527132173a393ab9ba32b22337b93bb0b93232b960711b60a08201526001600160a01b0383169181019190915260009060c0015b604051602081830303815290604052805190602001209050919050565b600060183610801590613b6a5750613b6a33611aa4565b613bae5760405162461bcd60e51b81526020600482015260156024820152742737ba103a393ab9ba32b2103337b93bb0b93232b960591b604482015260640161111e565b5060131936013560601c90565b6000805b82811015614310576000848483818110613bdb57613bdb61507b565b9050602002810190613bed91906153cf565b613bfb9060208101906153e5565b905060001963ffffffff821601613cef57600080868685818110613c2157613c2161507b565b9050602002810190613c3391906153cf565b613c4190604081019061540b565b810190613c4e919061500d565b91509150868685818110613c6457613c6461507b565b9050602002810190613c7691906153cf565b613c879060408101906020016147c8565b6001600160a01b03166362aa52878984846040518463ffffffff1660e01b8152600401613cb69392919061515a565b600060405180830381600087803b158015613cd057600080fd5b505af1158015613ce4573d6000803e3d6000fd5b505050505050614307565b60011963ffffffff821601613dfa576000806000878786818110613d1557613d1561507b565b9050602002810190613d2791906153cf565b613d3590604081019061540b565b810190613d429190615451565b925092509250878786818110613d5a57613d5a61507b565b9050602002810190613d6c91906153cf565b613d7d9060408101906020016147c8565b604051630b682aeb60e11b81526001600160a01b038b81166004830152858116602483015284811660448301526064820184905291909116906316d055d6906084015b600060405180830381600087803b158015613dda57600080fd5b505af1158015613dee573d6000803e3d6000fd5b50505050505050614307565b60021963ffffffff821601613eb9576000806000878786818110613e2057613e2061507b565b9050602002810190613e3291906153cf565b613e4090604081019061540b565b810190613e4d9190615492565b925092509250878786818110613e6557613e6561507b565b9050602002810190613e7791906153cf565b613e889060408101906020016147c8565b6001600160a01b031663ca0c1e7f8a8585856040518563ffffffff1660e01b8152600401613dc094939291906154e0565b60031963ffffffff821601613f7257600080868685818110613edd57613edd61507b565b9050602002810190613eef91906153cf565b613efd90604081019061540b565b810190613f0a919061500d565b91509150868685818110613f2057613f2061507b565b9050602002810190613f3291906153cf565b613f439060408101906020016147c8565b6001600160a01b0316634b2763b38984846040518463ffffffff1660e01b8152600401613cb69392919061515a565b60041963ffffffff82160161402b57600080868685818110613f9657613f9661507b565b9050602002810190613fa891906153cf565b613fb690604081019061540b565b810190613fc3919061500d565b91509150868685818110613fd957613fd961507b565b9050602002810190613feb91906153cf565b613ffc9060408101906020016147c8565b6001600160a01b031663c780fd828984846040518463ffffffff1660e01b8152600401613cb69392919061515a565b60641963ffffffff8216016141205784848381811061404c5761404c61507b565b905060200281019061405e91906153cf565b61406f9060408101906020016147c8565b6001600160a01b031663ca789464878787868181106140905761409061507b565b90506020028101906140a291906153cf565b6140b090604081019061540b565b8101906140bd9190614e3d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561410357600080fd5b505af1158015614117573d6000803e3d6000fd5b50505050614307565b60651963ffffffff821601614185578484838181106141415761414161507b565b905060200281019061415391906153cf565b6141649060408101906020016147c8565b6001600160a01b031663245887fc878787868181106140905761409061507b565b60c81963ffffffff821601614222576000808686858181106141a9576141a961507b565b90506020028101906141bb91906153cf565b6141c990604081019061540b565b8101906141d69190615513565b9150915061421a888888878181106141f0576141f061507b565b905060200281019061420291906153cf565b6142139060408101906020016147c8565b84846133bb565b505050614307565b60c91963ffffffff8216016142ee576142e4868686858181106142475761424761507b565b905060200281019061425991906153cf565b61426a9060408101906020016147c8565b856142755734614278565b60005b88888781811061428a5761428a61507b565b905060200281019061429c91906153cf565b6142aa90604081019061540b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317e92505050565b5060019250614307565b60405163b477011560e01b815260040160405180910390fd5b50600101613bbf565b50341580159061431e575080155b156143515760405133903480156108fc02916000818181858888f1935050505015801561434f573d6000803e3d6000fd5b505b50505050565b60006143638284614718565b6000805460405163407b865d60e11b81529293504292620100009091046001600160a01b0316916380f70cba916143a0913091879060040161515a565b602060405180830381865afa1580156143bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143e19190615039565b10156127b357604051630b56455f60e41b815260040160405180910390fd5b64ff000080ff198116151580614417575060ff8116155b806144255750618000811615155b1561444357604051633d3200a960e21b815260040160405180910390fd5b6001600160a01b0382166000908152600460205260409020541561447a576040516301b0a93560e01b815260040160405180910390fd5b60408051602080820183528382526001600160a01b038516600081815260049092528382209251909255915190917f0d540ad8f39e07d19909687352b9fa017405d93c91a6760981fbae9cf28bfef791a25050565b60006004825110156145235760405162461bcd60e51b815260206004820152601b60248201527f43616c6c5574696c733a20696e76616c69642063616c6c446174610000000000604482015260640161111e565b506020015190565b6040805160208101829052603960608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527f642e61707057686974654c697374696e672e666163746f72790000000000000060a08201526001600160a01b0383169181019190915260009060c001613b36565b8151808301516060919080156145ce576040516367e9985b60e01b815260040160405180910390fd5b50601f19810184528251849084816145e581614672565b6145ef9190615068565b6001600160401b0381111561460657614606614974565b6040519080825280601f01601f191660200182016040528015614630576020820181803683370190505b50604051602001614644949392919061556c565b60405160208183030381529060405291505092915050565b60006146696040836155bb565b5a111592915050565b60008082601f1611614685576000614688565b60015b60ff166146966020846155bb565b6146a09190615248565b6112349060206155dd565b60006001600160801b038211156147145760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b606482015260840161111e565b5090565b6000828260405160200161472d9291906155f4565b60405160208183030381529060405280519060200120905092915050565b61024a8061567a83390190565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a082015260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b6001600160a01b038116811461172157600080fd5b6000602082840312156147da57600080fd5b81356147e5816147b3565b9392505050565b600080604083850312156147ff57600080fd5b823561480a816147b3565b9150602083013561481a816147b3565b809150509250929050565b60008083601f84011261483757600080fd5b5081356001600160401b0381111561484e57600080fd5b60208301915083602082850101111561486657600080fd5b9250929050565b801515811461172157600080fd5b6000806000806000806080878903121561489457600080fd5b863561489f816147b3565b955060208701356001600160401b03808211156148bb57600080fd5b6148c78a838b01614825565b9097509550604089013591506148dc8261486d565b909350606088013590808211156148f257600080fd5b506148ff89828a01614825565b979a9699509497509295939492505050565b60005b8381101561492c578181015183820152602001614914565b50506000910152565b6000815180845261494d816020860160208601614911565b601f01601f19169290920160200192915050565b6020815260006112316020830184614935565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156149b2576149b2614974565b604052919050565b60006001600160401b038211156149d3576149d3614974565b50601f01601f191660200190565b600082601f8301126149f257600080fd5b8135614a05614a00826149ba565b61498a565b818152846020838601011115614a1a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614a4a57600080fd5b8235614a55816147b3565b915060208301356001600160401b03811115614a7057600080fd5b614a7c858286016149e1565b9150509250929050565b600080600060608486031215614a9b57600080fd5b8335614aa6816147b3565b925060208401356001600160401b0380821115614ac257600080fd5b614ace878388016149e1565b93506040860135915080821115614ae457600080fd5b50614af1868287016149e1565b9150509250925092565b600060208284031215614b0d57600080fd5b81356001600160401b03811115614b2357600080fd5b611406848285016149e1565b60208152614b4360208201835160ff169052565b60006020830151614b59604084018260ff169052565b50604083015160608301526060830151614b7e60808401826001600160a01b03169052565b5060808301516001600160e01b0319811660a08401525060a08301516101608060c0850152614bb1610180850183614935565b915060c085015160e085015260e0850151610100818187015280870151915050610120818187015280870151915050610140614bf7818701836001600160a01b03169052565b909501516001600160a01b031693019290925250919050565b60008060008060008060006080888a031215614c2b57600080fd5b8735614c36816147b3565b965060208801356001600160401b0380821115614c5257600080fd5b614c5e8b838c01614825565b909850965060408a0135915080821115614c7757600080fd5b614c838b838c01614825565b909650945060608a0135915080821115614c9c57600080fd5b50614ca98a828b01614825565b989b979a50959850939692959293505050565b604081526000614ccf6040830185614935565b82810360208401526121588185614935565b600080600060408486031215614cf657600080fd5b83356001600160401b03811115614d0c57600080fd5b614d1886828701614825565b909790965060209590950135949350505050565b60008060208385031215614d3f57600080fd5b82356001600160401b0380821115614d5657600080fd5b818501915085601f830112614d6a57600080fd5b813581811115614d7957600080fd5b8660208260051b8501011115614d8e57600080fd5b60209290920196919550909350505050565b60008060008060008060a08789031215614db957600080fd5b86356001600160401b03811115614dcf57600080fd5b614ddb89828a01614825565b9097509550506020870135614def816147b3565b935060408701359250606087013591506080870135614e0d816147b3565b809150509295509295509295565b60008060408385031215614e2e57600080fd5b50508035926020909101359150565b600060208284031215614e4f57600080fd5b5035919050565b60008060008060608587031215614e6c57600080fd5b84356001600160401b03811115614e8257600080fd5b614e8e87828801614825565b9095509350506020850135614ea2816147b3565b9396929550929360400135925050565b600080600080600060608688031215614eca57600080fd5b8535614ed5816147b3565b945060208601356001600160401b0380821115614ef157600080fd5b614efd89838a01614825565b90965094506040880135915080821115614f1657600080fd5b50614f2388828901614825565b969995985093965092949392505050565b600080600060408486031215614f4957600080fd5b8335925060208401356001600160401b03811115614f6657600080fd5b614f7286828701614825565b9497909650939450505050565b60008060208385031215614f9257600080fd5b82356001600160401b03811115614fa857600080fd5b614fb485828601614825565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156150015783516001600160a01b031683529284019291840191600101614fdc565b50909695505050505050565b6000806040838503121561502057600080fd5b823561502b816147b3565b946020939093013593505050565b60006020828403121561504b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561123457611234615052565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600082601f8301126150b857600080fd5b81516150c6614a00826149ba565b8181528460208386010111156150db57600080fd5b611406826020830160208701614911565b6000602082840312156150fe57600080fd5b81516001600160401b0381111561511457600080fd5b611406848285016150a7565b60006020828403121561513257600080fd5b81516147e5816147b3565b60006020828403121561514f57600080fd5b81516147e58161486d565b6001600160a01b039384168152919092166020820152604081019190915260600190565b808201828112600083128015821682158216171561519e5761519e615052565b505092915050565b600060ff821660ff81036151bc576151bc615052565b60010192915050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60006001820161522557615225615052565b5060010190565b6000825161523e818460208701614911565b9190910192915050565b8082018082111561123457611234615052565b6000806040838503121561526e57600080fd5b82516001600160401b038082111561528557600080fd5b615291868387016150a7565b935060208501519150808211156152a757600080fd5b50614a7c858286016150a7565b600080600080600060a086880312156152cc57600080fd5b855194506020860151935060408601516152e5816147b3565b60608701519093506001600160e01b03198116811461530357600080fd5b60808701519092506001600160401b0381111561531f57600080fd5b61532b888289016150a7565b9150509295509295909350565b6000806000806080858703121561534e57600080fd5b84519350602085015192506040850151615367816147b3565b6060860151909250615378816147b3565b939692955090935050565b858152602081018590526001600160a01b03841660408201526001600160e01b03198316606082015260a0608082018190526000906153c490830184614935565b979650505050505050565b60008235605e1983360301811261523e57600080fd5b6000602082840312156153f757600080fd5b813563ffffffff811681146147e557600080fd5b6000808335601e1984360301811261542257600080fd5b8301803591506001600160401b0382111561543c57600080fd5b60200191503681900382131561486657600080fd5b60008060006060848603121561546657600080fd5b8335615471816147b3565b92506020840135615481816147b3565b929592945050506040919091013590565b6000806000606084860312156154a757600080fd5b83356154b2816147b3565b92506020840135915060408401356001600160401b038111156154d457600080fd5b614af1868287016149e1565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611c0690830184614935565b6000806040838503121561552657600080fd5b82356001600160401b038082111561553d57600080fd5b615549868387016149e1565b9350602085013591508082111561555f57600080fd5b50614a7c858286016149e1565b60008551602061557f8285838b01614911565b8184019150868252855161559881838501848a01614911565b85519201916155ac81838501848901614911565b91909101019695505050505050565b6000826155d857634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761123457611234615052565b60608152604160608201527f6f72672e7375706572666c7569642d66696e616e63652e7375706572666c756960808201527f642e61707057686974654c697374696e672e726567697374726174696f6e4b6560a0820152607960f81b60c082015260018060a01b038316602082015260e06040820152600061140660e083018461493556fe608060405234801561001057600080fd5b5061022a806100206000396000f3fe6080604052600436106100225760003560e01c80634a0687ef1461003957610031565b366100315761002f610059565b005b61002f610059565b34801561004557600080fd5b5061002f6100543660046101c4565b61006b565b610069610064610171565b6101a0565b565b6001600160a01b0381166100c65760405162461bcd60e51b815260206004820152601760248201527f5555505350726f78793a207a65726f206164647265737300000000000000000060448201526064015b60405180910390fd5b60006100f07f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316146101465760405162461bcd60e51b815260206004820152601e60248201527f5555505350726f78793a20616c726561647920696e697469616c697a6564000060448201526064016100bd565b61016e817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b50565b600061019b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b3660008037600080366000845af43d6000803e8080156101bf573d6000f35b3d6000fd5b6000602082840312156101d657600080fd5b81356001600160a01b03811681146101ed57600080fd5b939250505056fea26469706673582212206902a7db24b0d3a778c1f364c2041c6224c0ba5a54b2a99ab7f21c6f5b9e285964736f6c63430008170033a2646970667358221220d812f2fe61571436bd6066cc3c93f8e4b50786b66c44ed7eeef13c9d325376a664736f6c63430008170033"

Methods

  • Parameters

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

    Returns Promise<SuperfluidUpgradabilityTester>

  • Parameters

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

    Returns TransactionRequest

  • Parameters

    • address: string
    • signerOrProvider: Signer | Provider

    Returns SuperfluidUpgradabilityTester

  • Returns SuperfluidUpgradabilityTesterInterface

Generated using TypeDoc