{
    "_format": "hh-sol-artifact-1",
    "contractName": "Sponsorship",
    "sourceName": "contracts/OperatorTokenomics/Sponsorship.sol",
    "abi": [
        {
            "inputs": [],
            "stateMutability": "nonpayable",
            "type": "constructor"
        },
        {
            "inputs": [],
            "name": "AccessDenied",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedDATATokenOnly",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "lockedStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "ActiveFlag",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "CannotIncreaseStakeUsingReduceStakeTo",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "FlaggingNotSupported",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "penaltyWei",
                    "type": "uint256"
                }
            ],
            "name": "LeavePenalty",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "MinOperatorCountZero",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "minimumStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "MinimumStake",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "moduleAddress",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "callBytes",
                    "type": "bytes"
                }
            ],
            "name": "ModuleCallError",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "callBytes",
                    "type": "bytes"
                }
            ],
            "name": "ModuleGetError",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "OperatorNotStaked",
            "type": "error"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "enum IKickPolicy.FlagState",
                    "name": "status",
                    "type": "uint8"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "votesForKick",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "votesAgainstKick",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "voter",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "int256",
                    "name": "voterWeight",
                    "type": "int256"
                }
            ],
            "name": "FlagUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "flagger",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "targetStakeAtRiskWei",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "reviewerCount",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "flagMetadata",
                    "type": "string"
                }
            ],
            "name": "Flagged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "endTimeStamp",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "defaultedWeiPerStake",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "defaultedWei",
                    "type": "uint256"
                }
            ],
            "name": "InsolvencyEnded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "startTimeStamp",
                    "type": "uint256"
                }
            ],
            "name": "InsolvencyStarted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "OperatorJoined",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "OperatorKicked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "returnedStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "OperatorLeft",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "OperatorSlashed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "previousAdminRole",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "newAdminRole",
                    "type": "bytes32"
                }
            ],
            "name": "RoleAdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleGranted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleRevoked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sponsor",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "SponsorshipReceived",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "totalStakedWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "remainingWei",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "operatorCount",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "bool",
                    "name": "isRunning",
                    "type": "bool"
                }
            ],
            "name": "SponsorshipUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "lockedStakeWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "minimumStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "StakeLockUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "stakedWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "earningsWei",
                    "type": "uint256"
                }
            ],
            "name": "StakeUpdate",
            "type": "event"
        },
        {
            "stateMutability": "nonpayable",
            "type": "fallback"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IJoinPolicy",
                    "name": "newJoinPolicy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "addJoinPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "allocationPolicy",
            "outputs": [
                {
                    "internalType": "contract IAllocationPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "earningsWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "flag",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "flagMetadataJson",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "forceUnstake",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "payoutWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "forfeitedStakeWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "getEarnings",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "allocation",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                }
            ],
            "name": "getFlag",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "flagData",
                    "type": "uint256"
                },
                {
                    "internalType": "string",
                    "name": "flagMetadata",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "getLeavePenalty",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "leavePenalty",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getMyStake",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "grantRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "hasRole",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId_",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "metadata_",
                    "type": "string"
                },
                {
                    "internalType": "contract StreamrConfig",
                    "name": "globalStreamrConfig",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "tokenAddress",
                    "type": "address"
                },
                {
                    "internalType": "uint256[3]",
                    "name": "initParams",
                    "type": "uint256[3]"
                },
                {
                    "internalType": "contract IAllocationPolicy",
                    "name": "initialAllocationPolicy",
                    "type": "address"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "isFunded",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "isRunning",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "joinPolicies",
            "outputs": [
                {
                    "internalType": "contract IJoinPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "joinTimeOfOperator",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "kickPolicy",
            "outputs": [
                {
                    "internalType": "contract IKickPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "leavePolicy",
            "outputs": [
                {
                    "internalType": "contract ILeavePolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "lockedStakeWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "metadata",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "minHorizonSeconds",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "minOperatorCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                }
            ],
            "name": "minimumStakeOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "individualMinimumStakeWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "onTokenTransfer",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "operatorCount",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "targetStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "reduceStakeTo",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "payoutWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "remainingWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "renounceRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "revokeRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IAllocationPolicy",
                    "name": "newAllocationPolicy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setAllocationPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IKickPolicy",
                    "name": "newKickPolicy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setKickPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract ILeavePolicy",
                    "name": "newLeavePolicy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setLeavePolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "solventUntilTimestamp",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "horizon",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "sponsor",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "operator",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "stake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "stakedWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamId",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "streamrConfig",
            "outputs": [
                {
                    "internalType": "contract StreamrConfig",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "token",
            "outputs": [
                {
                    "internalType": "contract IERC677",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalStakedWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "unstake",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "payoutWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "target",
                    "type": "address"
                },
                {
                    "internalType": "bytes32",
                    "name": "voteData",
                    "type": "bytes32"
                }
            ],
            "name": "voteOnFlag",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "withdraw",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "payoutWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b50612b3e806100206000396000f3fe608060405234801561001057600080fd5b50600436106102a05760003560e01c8063584cb7cf11610167578063a4c0ed36116100ce578063d547741f11610087578063d547741f146106e0578063da5a517b146106f3578063df4bbd2214610706578063f4408e4b1461070e578063fa267ddf14610716578063fc0c546a1461071f576102a0565b8063a4c0ed361461066e578063a5b83ce414610681578063acbeddd714610694578063adc9772e146106a7578063b6cce5e2146106ba578063b9efec95146106cd576102a0565b80637db18807116101205780637db18807146106115780637e11d1c61461062457806391a113031461063757806391d14854146106405780639883313014610653578063a217fddf14610666576102a0565b8063584cb7cf146105c9578063625eb6c8146105dc57806371b906eb146105ef578063759e30d8146105f75780637c654303146106005780637c6f315814610608576102a0565b806334a0f8811161020b5780633ccfd60b116101c45780633ccfd60b1461056a57806340947369146105725780634562980f1461057b57806348611fcd1461058e5780635499dca5146105a157806354a991b4146105b6576102a0565b806334a0f881146104e5578063357e47fe146104ee57806336568abe1461050f57806338106e4d14610522578063392f37e9146105355780633a1c0aa81461054a576102a0565b80632014e5d11161025d5780632014e5d114610467578063248a9ca3146104745780632b308a56146104975780632def6620146104aa5780632f2ff15d146104b2578063303cbe57146104c5576102a0565b806301ffc9a7146103c057806304a10591146103e857806311648a4c146103fd578063131b9c041461041457806314c948eb1461042757806319d164f114610447575b60003660603330146102c557604051634ca8886760e01b815260040160405180910390fd5b81600084826102d5601482612478565b6102e19285929061248f565b6102ea916124b9565b60601c905060008581866102ff602087612478565b9261030c9392919061248f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b038716925061035e9150859061251a565b600060405180830381855af49150503d8060008114610399576040519150601f19603f3d011682016040523d82523d6000602084013e61039e565b606091505b5091509150816103b057805181602001fd5b8051975060200195505050505050f35b6103d36103ce366004612536565b610732565b60405190151581526020015b60405180910390f35b6103fb6103f6366004612575565b610769565b005b61040660a75481565b6040519081526020016103df565b6104066104223660046125a1565b6107eb565b6104066104353660046125a1565b60a06020526000908152604090205481565b6104066104553660046125a1565b60a26020526000908152604090205481565b60a65460a55410156103d3565b6104066104823660046125be565b60009081526065602052604090206001015490565b6103fb6104a5366004612575565b610850565b6104066108c7565b6103fb6104c03660046125d7565b610962565b6104066104d33660046125a1565b60a16020526000908152604090205481565b61040660a45481565b6105016104fc3660046125a1565b61098c565b6040516103df929190612633565b6103fb61051d3660046125d7565b610a94565b6104066105303660046125be565b610b12565b61053d610cb3565b6040516103df9190612654565b609a5461055d906001600160a01b031681565b6040516103df9190612667565b610406610d41565b61040660a65481565b6103fb6105893660046126c4565b610dce565b61040661059c3660046125a1565b610f8a565b33600090815260a06020526040902054610406565b609b5461055d906001600160a01b031681565b609c5461055d906001600160a01b031681565b61055d6105ea3660046125be565b610fd2565b610406610ffc565b61040660a35481565b6103d361102f565b61040660a55481565b61053d61061f3660046125a1565b61104d565b6103fb610632366004612799565b611066565b61040660a85481565b6103d361064e3660046125d7565b6110e4565b60975461055d906001600160a01b031681565b610406600081565b6103fb61067c36600461285d565b61110f565b6103fb61068f366004612575565b611177565b6103fb6106a2366004612575565b6111da565b6103fb6106b5366004612575565b611223565b6103fb6106c83660046125be565b6112a3565b6103fb6106db366004612575565b61132d565b6103fb6106ee3660046125d7565b611376565b6104066107013660046125a1565b61139b565b6104066113e3565b61053d6113f5565b61040660a95481565b60985461055d906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b148061076357506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061077481611402565b609b80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526107e59190632522e97360e11b906044015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261140c565b50505050565b609a5460405160009161076391636e9bb3f760e01b916108199186916001600160a01b0316906024016128b9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526114ad565b600061085b81611402565b609980546001810182556000919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000180546001600160a01b0319166001600160a01b038516179055604051602481018390526107e5908490632522e97360e11b906044016107ae565b600033816108d48261139b565b905080156108fd576040516301e1d66b60e21b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260a2602052604090205415610952576001600160a01b038216600090815260a2602052604090819020549051635df79f0d60e11b815260048101919091526024016108f4565b61095b82611543565b9250505090565b60008281526065602052604090206001015461097d81611402565b610987838361191f565b505050565b609c546000906060906001600160a01b03166109bb5760405163213a65f360e11b815260040160405180910390fd5b609c546040516109e89163c027553560e01b916108199187916001600160a01b03909116906024016128b9565b6001600160a01b0384166000908152609f60205260409020805491935090610a0f906128d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3b906128d3565b8015610a885780601f10610a5d57610100808354040283529160200191610a88565b820191906000526020600020905b815481529060010190602001808311610a6b57829003601f168201915b50505050509050915091565b6001600160a01b0381163314610b045760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108f4565b610b0e82826119a5565b5050565b33600081815260a060205260408120549091908310610b445760405163aa4c075760e01b815260040160405180910390fd5b6000610b4f82610f8a565b905080841015610b75576040516305f48c3560e11b8152600481018290526024016108f4565b6001600160a01b038216600090815260a06020526040902054610ba4908390610b9f908790612478565b611a0c565b60985460405163a9059cbb60e01b81529194506001600160a01b03169063a9059cbb90610bd79085908790600401612907565b6020604051808303816000875af1158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190612920565b506001600160a01b038216600081815260a06020526040902054600080516020612ac983398151915290610c4d856107eb565b6040805192835260208301919091520160405180910390a260a65460a5541015151560a55463ffffffff16600080516020612ae983398151915260a45460a854604051610ca4929190918252602082015260400190565b60405180910390a35050919050565b609e8054610cc0906128d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cec906128d3565b8015610d395780601f10610d0e57610100808354040283529160200191610d39565b820191906000526020600020905b815481529060010190602001808311610d1c57829003601f168201915b505050505081565b33600081815260a160205260408120549091908203610d73576040516314625d5d60e21b815260040160405180910390fd5b610d7c81611afc565b91508115610dca576001600160a01b038116600081815260a06020526040808220549051600080516020612ac983398151915292610dc1928252602082015260400190565b60405180910390a25b5090565b600054610100900460ff1615808015610dee5750600054600160ff909116105b80610e085750303b158015610e08575060005460ff166001145b610e6b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108f4565b6000805460ff191660011790558015610e8e576000805461ff0019166101001790555b63ffffffff8335811660a75560208401351660a6819055604084013590600003610ecb5760405163309f1b0d60e21b815260040160405180910390fd5b609880546001600160a01b0319166001600160a01b038716179055610ef2609d8b8b612359565b50610eff609e8989612359565b50609780546001600160a01b0319166001600160a01b038816179055610f23611bd1565b610f2e600033611c3e565b610f38838261132d565b508015610f7f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b609c546000906001600160a01b0316610fa557506000919050565b609c54604051610763916304f9acdf60e11b916108199186916001600160a01b03909116906024016128b9565b60998181548110610fe257600080fd5b6000918252602090912001546001600160a01b0316905081565b609a5460405160009161102a91631bc8977160e31b91610819916001600160a01b0390911690602401612667565b905090565b600060a7544261103f9190612958565b611047610ffc565b11905090565b609f6020526000908152604090208054610cc0906128d3565b6001600160a01b0382166000908152609f60209081526040909120825161108f928401906123d9565b50609c546001600160a01b03166110b95760405163213a65f360e11b815260040160405180910390fd5b609c54610987906001600160a01b031663344763f160e21b84336040516024016107ae9291906128b9565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6098546001600160a01b0316331461113a5760405163118d9d7160e11b815260040160405180910390fd5b601481900361115857813560601c6111528185611c48565b506107e5565b602081900361116d5781356111528185611c48565b6107e58484611eb1565b609c546001600160a01b03166111a05760405163213a65f360e11b815260040160405180910390fd5b609c546040516001600160a01b0384811660248301526044820184905233606483015261098792169063fbbabed960e01b906084016107ae565b60006111e581611402565b609c80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526107e59190632522e97360e11b906044016107ae565b6098546001600160a01b03166323b872dd3330846040518463ffffffff1660e01b815260040161125593929190612970565b6020604051808303816000875af1158015611274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112989190612920565b50610b0e8282611c48565b8015611320576098546001600160a01b03166323b872dd3330846040518463ffffffff1660e01b81526004016112db93929190612970565b6020604051808303816000875af11580156112fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131e9190612920565b505b61132a3382611eb1565b50565b600061133881611402565b609a80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526107e59190632522e97360e11b906044016107ae565b60008281526065602052604090206001015461139181611402565b61098783836119a5565b609b546000906001600160a01b03166113b657506000919050565b609b54604051610763916318820b1b60e01b916108199186916001600160a01b03909116906024016128b9565b6000336113ef81611543565b91505090565b609d8054610cc0906128d3565b61132a813361206e565b6000806000846001600160a01b031684604051611429919061251a565b600060405180830381855af49150503d8060008114611464576040519150601f19603f3d011682016040523d82523d6000602084013e611469565b606091505b5091509150816114a157805160000361149957848460405163918623b760e01b81526004016108f4929190612994565b805181602001fd5b60200151949350505050565b6000806000306001600160a01b0316846040516114ca919061251a565b600060405180830381855afa9150503d8060008114611505576040519150601f19603f3d011682016040523d82523d6000602084013e61150a565b606091505b509150915081611538578051600003611499578360405163029801d760e41b81526004016108f49190612654565b602001519392505050565b6001600160a01b038116600090815260a16020526040812054810361157b576040516314625d5d60e21b815260040160405180910390fd5b6001600160a01b038216600090815260a260205260409020541561161c576001600160a01b038216600090815260a26020526040812080549190556115c083826120c7565b60a360008282546115d19190612958565b909155505060408051600080825260208201526001600160a01b038516917f7785543bdf6fdde3b8486c62fa277837a6032d5819acf53e664ef0c45332fcb2910160405180910390a2505b60006116278361139b565b90508015611713576098546097546040805163675c06f960e11b815290516001600160a01b039384169363a9059cbb93169163ceb80df29160048083019260209291908290030181865afa158015611683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a791906129b8565b6116b186856120c7565b6040518363ffffffff1660e01b81526004016116ce929190612907565b6020604051808303816000875af11580156116ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117119190612920565b505b600061171e84611afc565b6001600160a01b038516600090815260a0602052604081205460a5805493945090926001929061174f908490612478565b925050819055508060a460008282546117689190612478565b90915550506001600160a01b03808616600090815260a06020908152604080832083905560a190915280822091909155609a5490516117bd929190911690630c8a99c360e11b906107ae908990602401612667565b5060408051600080825260208201526001600160a01b03871691600080516020612ac9833981519152910160405180910390a260a65460a5541015151560a55463ffffffff16600080516020612ae983398151915260a45460a85460405161182f929190918252602082015260400190565b60405180910390a3846001600160a01b03167f14a9c4ce3dc5694e8873bfea05304d57d64ba56ee7ad9ad5fe40b3d8e4e4d3f08260405161187291815260200190565b60405180910390a2609854604051630200057560e51b81526001600160a01b038781166004830152602482018490526060604483015260056064830152647374616b6560d81b608483015290911690634000aea09060a4016020604051808303816000875af1925050508015611905575060408051601f3d908101601f1916820190925261190291810190612920565b60015b1561190c57505b6119168183612958565b95945050505050565b61192982826110e4565b610b0e5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556119613390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6119af82826110e4565b15610b0e5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b038216600090815260a0602090815260408083205460a290925282205410611a3d57506000610763565b6001600160a01b038316600090815260a2602090815260408083205460a090925290912054611a77918491611a729190612478565b612193565b6001600160a01b038416600090815260a06020526040812080549293508392909190611aa4908490612478565b925050819055508060a46000828254611abd9190612478565b9091555050609a54611af5906001600160a01b0316630e178d9360e41b85611ae4856129d5565b6040516024016107ae929190612907565b5092915050565b609a54604051600091611b2c916001600160a01b0390911690633a82b50d60e01b906107ae908690602401612667565b90508015611bcc57609854604051630200057560e51b81526001600160a01b0384811660048301526024820184905260606044830152600a60648301526930b63637b1b0ba34b7b760b11b608483015290911690634000aea09060a4016020604051808303816000875af1925050508015611bc4575060408051601f3d908101601f19168201909252611bc191810190612920565b60015b15611bcc575b505b919050565b600054610100900460ff16611c3c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016108f4565b565b610b0e828261191f565b6001600160a01b038216600090815260a0602052604081208054801592849291611c73908490612958565b925050819055508160a46000828254611c8c9190612958565b9091555060009050611c9d84610f8a565b6001600160a01b038516600090815260a06020526040902054909150811115611cdc576040516305f48c3560e11b8152600481018290526024016108f4565b8115611deb57600160a56000828254611cf59190612958565b90915550506001600160a01b038416600090815260a1602052604081204290555b609954811015611d8557600060998281548110611d3557611d35612942565b6000918252602090912001546040516001600160a01b039091169150611d709082906307b88ea560e01b906107ae908a908a90602401612907565b50508080611d7d906129f1565b915050611d16565b50609a54604051611db1916001600160a01b0316906318932a6760e21b906107ae908890602401612667565b506040516001600160a01b038516907fa2ab3900cad3f350c9333a5814b4c581dee01f3ca964bbf8cd96e061a00da0d290600090a2611e1a565b609a54604051611e18916001600160a01b031690630e178d9360e41b906107ae9088908890602401612907565b505b6001600160a01b038416600081815260a06020526040902054600080516020612ac983398151915290611e4c876107eb565b6040805192835260208301919091520160405180910390a260a65460a5541015151560a55463ffffffff16600080516020612ae983398151915260a45460a854604051611ea3929190918252602082015260400190565b60405180910390a350505050565b60a85460a35460a45460a9546098546040516370a0823160e01b81526001600160a01b03909116906370a0823190611eed903090600401612667565b602060405180830381865afa158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e9190612a0a565b611f389190612478565b611f429190612478565b611f4c9190612478565b60a8819055600090611f5f908390612478565b90506000611f6d8483612478565b609a54604051919250611f9f916001600160a01b0390911690636fff860d60e01b906107ae9089908790602401612907565b50846001600160a01b03167fe3e06f75e3a1529da79c083b1d8dd06fd928c2e268b3e2aaffa6103a14bcbd9985604051611fdb91815260200190565b60405180910390a28015612020576040518181526000907fe3e06f75e3a1529da79c083b1d8dd06fd928c2e268b3e2aaffa6103a14bcbd999060200160405180910390a25b60a65460a5541015151560a55463ffffffff16600080516020612ae983398151915260a45460a85460405161205f929190918252602082015260400190565b60405180910390a35050505050565b61207882826110e4565b610b0e57612085816121ab565b6120908360206121bd565b6040516020016120a1929190612a23565b60408051601f198184030181529082905262461bcd60e51b82526108f491600401612654565b6000816000036120d957506000610763565b6120e38383611a0c565b90506001600160a01b0383163b1561214a57604051633dfb89db60e11b8152600481018290526001600160a01b03841690637bf713b690602401600060405180830381600087803b15801561213757600080fd5b505af1925050508015612148575060015b505b826001600160a01b03167fa005d3b8f5c8149659f2afc06ed99732d5891377a370a723669418ca1ca29ced8260405161218591815260200190565b60405180910390a292915050565b60008183106121a257816121a4565b825b9392505050565b60606107636001600160a01b03831660145b606060006121cc836002612a92565b6121d7906002612958565b67ffffffffffffffff8111156121ef576121ef612783565b6040519080825280601f01601f191660200182016040528015612219576020820181803683370190505b509050600360fc1b8160008151811061223457612234612942565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061226357612263612942565b60200101906001600160f81b031916908160001a9053506000612287846002612a92565b612292906001612958565b90505b600181111561230a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106122c6576122c6612942565b1a60f81b8282815181106122dc576122dc612942565b60200101906001600160f81b031916908160001a90535060049490941c9361230381612ab1565b9050612295565b5083156121a45760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108f4565b828054612365906128d3565b90600052602060002090601f01602090048101928261238757600085556123cd565b82601f106123a05782800160ff198235161785556123cd565b828001600101855582156123cd579182015b828111156123cd5782358255916020019190600101906123b2565b50610dca92915061244d565b8280546123e5906128d3565b90600052602060002090601f01602090048101928261240757600085556123cd565b82601f1061242057805160ff19168380011785556123cd565b828001600101855582156123cd579182015b828111156123cd578251825591602001919060010190612432565b5b80821115610dca576000815560010161244e565b634e487b7160e01b600052601160045260246000fd5b60008282101561248a5761248a612462565b500390565b6000808585111561249f57600080fd5b838611156124ac57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156124e65780818660140360031b1b83161692505b505092915050565b60005b838110156125095781810151838201526020016124f1565b838111156107e55750506000910152565b6000825161252c8184602087016124ee565b9190910192915050565b60006020828403121561254857600080fd5b81356001600160e01b0319811681146121a457600080fd5b6001600160a01b038116811461132a57600080fd5b6000806040838503121561258857600080fd5b823561259381612560565b946020939093013593505050565b6000602082840312156125b357600080fd5b81356121a481612560565b6000602082840312156125d057600080fd5b5035919050565b600080604083850312156125ea57600080fd5b8235915060208301356125fc81612560565b809150509250929050565b6000815180845261261f8160208601602086016124ee565b601f01601f19169290920160200192915050565b82815260406020820152600061264c6040830184612607565b949350505050565b6020815260006121a46020830184612607565b6001600160a01b0391909116815260200190565b60008083601f84011261268d57600080fd5b50813567ffffffffffffffff8111156126a557600080fd5b6020830191508360208285010111156126bd57600080fd5b9250929050565b600080600080600080600080610100898b0312156126e157600080fd5b883567ffffffffffffffff808211156126f957600080fd5b6127058c838d0161267b565b909a50985060208b013591508082111561271e57600080fd5b5061272b8b828c0161267b565b909750955050604089013561273f81612560565b9350606089013561274f81612560565b925060e089018a81111561276257600080fd5b60808a0192503561277281612560565b809150509295985092959890939650565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156127ac57600080fd5b82356127b781612560565b9150602083013567ffffffffffffffff808211156127d457600080fd5b818501915085601f8301126127e857600080fd5b8135818111156127fa576127fa612783565b604051601f8201601f19908116603f0116810190838211818310171561282257612822612783565b8160405282815288602084870101111561283b57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806000806060858703121561287357600080fd5b843561287e81612560565b935060208501359250604085013567ffffffffffffffff8111156128a157600080fd5b6128ad8782880161267b565b95989497509550505050565b6001600160a01b0392831681529116602082015260400190565b600181811c908216806128e757607f821691505b602082108103611bca57634e487b7160e01b600052602260045260246000fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121561293257600080fd5b815180151581146121a457600080fd5b634e487b7160e01b600052603260045260246000fd5b6000821982111561296b5761296b612462565b500190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038316815260406020820181905260009061264c90830184612607565b6000602082840312156129ca57600080fd5b81516121a481612560565b6000600160ff1b82016129ea576129ea612462565b5060000390565b600060018201612a0357612a03612462565b5060010190565b600060208284031215612a1c57600080fd5b5051919050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351612a558160178501602088016124ee565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612a868160288401602088016124ee565b01602801949350505050565b6000816000190483118215151615612aac57612aac612462565b500290565b600081612ac057612ac0612462565b50600019019056fe5d179bbeed3396160151c93c13d38566dc1643f25a316cca998cd25f45a8bd3f38a9ab06ef5f5ea75fd622f984e03b2393343b6039c656e874e3fa9e3ddcd7b2a2646970667358221220a5abff7cb047b30edccd85a102f222abce7fcfbd6baf2c0035415cd6e6c0f72e64736f6c634300080d0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102a05760003560e01c8063584cb7cf11610167578063a4c0ed36116100ce578063d547741f11610087578063d547741f146106e0578063da5a517b146106f3578063df4bbd2214610706578063f4408e4b1461070e578063fa267ddf14610716578063fc0c546a1461071f576102a0565b8063a4c0ed361461066e578063a5b83ce414610681578063acbeddd714610694578063adc9772e146106a7578063b6cce5e2146106ba578063b9efec95146106cd576102a0565b80637db18807116101205780637db18807146106115780637e11d1c61461062457806391a113031461063757806391d14854146106405780639883313014610653578063a217fddf14610666576102a0565b8063584cb7cf146105c9578063625eb6c8146105dc57806371b906eb146105ef578063759e30d8146105f75780637c654303146106005780637c6f315814610608576102a0565b806334a0f8811161020b5780633ccfd60b116101c45780633ccfd60b1461056a57806340947369146105725780634562980f1461057b57806348611fcd1461058e5780635499dca5146105a157806354a991b4146105b6576102a0565b806334a0f881146104e5578063357e47fe146104ee57806336568abe1461050f57806338106e4d14610522578063392f37e9146105355780633a1c0aa81461054a576102a0565b80632014e5d11161025d5780632014e5d114610467578063248a9ca3146104745780632b308a56146104975780632def6620146104aa5780632f2ff15d146104b2578063303cbe57146104c5576102a0565b806301ffc9a7146103c057806304a10591146103e857806311648a4c146103fd578063131b9c041461041457806314c948eb1461042757806319d164f114610447575b60003660603330146102c557604051634ca8886760e01b815260040160405180910390fd5b81600084826102d5601482612478565b6102e19285929061248f565b6102ea916124b9565b60601c905060008581866102ff602087612478565b9261030c9392919061248f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b038716925061035e9150859061251a565b600060405180830381855af49150503d8060008114610399576040519150601f19603f3d011682016040523d82523d6000602084013e61039e565b606091505b5091509150816103b057805181602001fd5b8051975060200195505050505050f35b6103d36103ce366004612536565b610732565b60405190151581526020015b60405180910390f35b6103fb6103f6366004612575565b610769565b005b61040660a75481565b6040519081526020016103df565b6104066104223660046125a1565b6107eb565b6104066104353660046125a1565b60a06020526000908152604090205481565b6104066104553660046125a1565b60a26020526000908152604090205481565b60a65460a55410156103d3565b6104066104823660046125be565b60009081526065602052604090206001015490565b6103fb6104a5366004612575565b610850565b6104066108c7565b6103fb6104c03660046125d7565b610962565b6104066104d33660046125a1565b60a16020526000908152604090205481565b61040660a45481565b6105016104fc3660046125a1565b61098c565b6040516103df929190612633565b6103fb61051d3660046125d7565b610a94565b6104066105303660046125be565b610b12565b61053d610cb3565b6040516103df9190612654565b609a5461055d906001600160a01b031681565b6040516103df9190612667565b610406610d41565b61040660a65481565b6103fb6105893660046126c4565b610dce565b61040661059c3660046125a1565b610f8a565b33600090815260a06020526040902054610406565b609b5461055d906001600160a01b031681565b609c5461055d906001600160a01b031681565b61055d6105ea3660046125be565b610fd2565b610406610ffc565b61040660a35481565b6103d361102f565b61040660a55481565b61053d61061f3660046125a1565b61104d565b6103fb610632366004612799565b611066565b61040660a85481565b6103d361064e3660046125d7565b6110e4565b60975461055d906001600160a01b031681565b610406600081565b6103fb61067c36600461285d565b61110f565b6103fb61068f366004612575565b611177565b6103fb6106a2366004612575565b6111da565b6103fb6106b5366004612575565b611223565b6103fb6106c83660046125be565b6112a3565b6103fb6106db366004612575565b61132d565b6103fb6106ee3660046125d7565b611376565b6104066107013660046125a1565b61139b565b6104066113e3565b61053d6113f5565b61040660a95481565b60985461055d906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b148061076357506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061077481611402565b609b80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526107e59190632522e97360e11b906044015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261140c565b50505050565b609a5460405160009161076391636e9bb3f760e01b916108199186916001600160a01b0316906024016128b9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526114ad565b600061085b81611402565b609980546001810182556000919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000180546001600160a01b0319166001600160a01b038516179055604051602481018390526107e5908490632522e97360e11b906044016107ae565b600033816108d48261139b565b905080156108fd576040516301e1d66b60e21b8152600481018290526024015b60405180910390fd5b6001600160a01b038216600090815260a2602052604090205415610952576001600160a01b038216600090815260a2602052604090819020549051635df79f0d60e11b815260048101919091526024016108f4565b61095b82611543565b9250505090565b60008281526065602052604090206001015461097d81611402565b610987838361191f565b505050565b609c546000906060906001600160a01b03166109bb5760405163213a65f360e11b815260040160405180910390fd5b609c546040516109e89163c027553560e01b916108199187916001600160a01b03909116906024016128b9565b6001600160a01b0384166000908152609f60205260409020805491935090610a0f906128d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3b906128d3565b8015610a885780601f10610a5d57610100808354040283529160200191610a88565b820191906000526020600020905b815481529060010190602001808311610a6b57829003601f168201915b50505050509050915091565b6001600160a01b0381163314610b045760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108f4565b610b0e82826119a5565b5050565b33600081815260a060205260408120549091908310610b445760405163aa4c075760e01b815260040160405180910390fd5b6000610b4f82610f8a565b905080841015610b75576040516305f48c3560e11b8152600481018290526024016108f4565b6001600160a01b038216600090815260a06020526040902054610ba4908390610b9f908790612478565b611a0c565b60985460405163a9059cbb60e01b81529194506001600160a01b03169063a9059cbb90610bd79085908790600401612907565b6020604051808303816000875af1158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190612920565b506001600160a01b038216600081815260a06020526040902054600080516020612ac983398151915290610c4d856107eb565b6040805192835260208301919091520160405180910390a260a65460a5541015151560a55463ffffffff16600080516020612ae983398151915260a45460a854604051610ca4929190918252602082015260400190565b60405180910390a35050919050565b609e8054610cc0906128d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cec906128d3565b8015610d395780601f10610d0e57610100808354040283529160200191610d39565b820191906000526020600020905b815481529060010190602001808311610d1c57829003601f168201915b505050505081565b33600081815260a160205260408120549091908203610d73576040516314625d5d60e21b815260040160405180910390fd5b610d7c81611afc565b91508115610dca576001600160a01b038116600081815260a06020526040808220549051600080516020612ac983398151915292610dc1928252602082015260400190565b60405180910390a25b5090565b600054610100900460ff1615808015610dee5750600054600160ff909116105b80610e085750303b158015610e08575060005460ff166001145b610e6b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108f4565b6000805460ff191660011790558015610e8e576000805461ff0019166101001790555b63ffffffff8335811660a75560208401351660a6819055604084013590600003610ecb5760405163309f1b0d60e21b815260040160405180910390fd5b609880546001600160a01b0319166001600160a01b038716179055610ef2609d8b8b612359565b50610eff609e8989612359565b50609780546001600160a01b0319166001600160a01b038816179055610f23611bd1565b610f2e600033611c3e565b610f38838261132d565b508015610f7f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b609c546000906001600160a01b0316610fa557506000919050565b609c54604051610763916304f9acdf60e11b916108199186916001600160a01b03909116906024016128b9565b60998181548110610fe257600080fd5b6000918252602090912001546001600160a01b0316905081565b609a5460405160009161102a91631bc8977160e31b91610819916001600160a01b0390911690602401612667565b905090565b600060a7544261103f9190612958565b611047610ffc565b11905090565b609f6020526000908152604090208054610cc0906128d3565b6001600160a01b0382166000908152609f60209081526040909120825161108f928401906123d9565b50609c546001600160a01b03166110b95760405163213a65f360e11b815260040160405180910390fd5b609c54610987906001600160a01b031663344763f160e21b84336040516024016107ae9291906128b9565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6098546001600160a01b0316331461113a5760405163118d9d7160e11b815260040160405180910390fd5b601481900361115857813560601c6111528185611c48565b506107e5565b602081900361116d5781356111528185611c48565b6107e58484611eb1565b609c546001600160a01b03166111a05760405163213a65f360e11b815260040160405180910390fd5b609c546040516001600160a01b0384811660248301526044820184905233606483015261098792169063fbbabed960e01b906084016107ae565b60006111e581611402565b609c80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526107e59190632522e97360e11b906044016107ae565b6098546001600160a01b03166323b872dd3330846040518463ffffffff1660e01b815260040161125593929190612970565b6020604051808303816000875af1158015611274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112989190612920565b50610b0e8282611c48565b8015611320576098546001600160a01b03166323b872dd3330846040518463ffffffff1660e01b81526004016112db93929190612970565b6020604051808303816000875af11580156112fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131e9190612920565b505b61132a3382611eb1565b50565b600061133881611402565b609a80546001600160a01b0319166001600160a01b038516908117909155604051602481018490526107e59190632522e97360e11b906044016107ae565b60008281526065602052604090206001015461139181611402565b61098783836119a5565b609b546000906001600160a01b03166113b657506000919050565b609b54604051610763916318820b1b60e01b916108199186916001600160a01b03909116906024016128b9565b6000336113ef81611543565b91505090565b609d8054610cc0906128d3565b61132a813361206e565b6000806000846001600160a01b031684604051611429919061251a565b600060405180830381855af49150503d8060008114611464576040519150601f19603f3d011682016040523d82523d6000602084013e611469565b606091505b5091509150816114a157805160000361149957848460405163918623b760e01b81526004016108f4929190612994565b805181602001fd5b60200151949350505050565b6000806000306001600160a01b0316846040516114ca919061251a565b600060405180830381855afa9150503d8060008114611505576040519150601f19603f3d011682016040523d82523d6000602084013e61150a565b606091505b509150915081611538578051600003611499578360405163029801d760e41b81526004016108f49190612654565b602001519392505050565b6001600160a01b038116600090815260a16020526040812054810361157b576040516314625d5d60e21b815260040160405180910390fd5b6001600160a01b038216600090815260a260205260409020541561161c576001600160a01b038216600090815260a26020526040812080549190556115c083826120c7565b60a360008282546115d19190612958565b909155505060408051600080825260208201526001600160a01b038516917f7785543bdf6fdde3b8486c62fa277837a6032d5819acf53e664ef0c45332fcb2910160405180910390a2505b60006116278361139b565b90508015611713576098546097546040805163675c06f960e11b815290516001600160a01b039384169363a9059cbb93169163ceb80df29160048083019260209291908290030181865afa158015611683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a791906129b8565b6116b186856120c7565b6040518363ffffffff1660e01b81526004016116ce929190612907565b6020604051808303816000875af11580156116ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117119190612920565b505b600061171e84611afc565b6001600160a01b038516600090815260a0602052604081205460a5805493945090926001929061174f908490612478565b925050819055508060a460008282546117689190612478565b90915550506001600160a01b03808616600090815260a06020908152604080832083905560a190915280822091909155609a5490516117bd929190911690630c8a99c360e11b906107ae908990602401612667565b5060408051600080825260208201526001600160a01b03871691600080516020612ac9833981519152910160405180910390a260a65460a5541015151560a55463ffffffff16600080516020612ae983398151915260a45460a85460405161182f929190918252602082015260400190565b60405180910390a3846001600160a01b03167f14a9c4ce3dc5694e8873bfea05304d57d64ba56ee7ad9ad5fe40b3d8e4e4d3f08260405161187291815260200190565b60405180910390a2609854604051630200057560e51b81526001600160a01b038781166004830152602482018490526060604483015260056064830152647374616b6560d81b608483015290911690634000aea09060a4016020604051808303816000875af1925050508015611905575060408051601f3d908101601f1916820190925261190291810190612920565b60015b1561190c57505b6119168183612958565b95945050505050565b61192982826110e4565b610b0e5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556119613390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6119af82826110e4565b15610b0e5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b038216600090815260a0602090815260408083205460a290925282205410611a3d57506000610763565b6001600160a01b038316600090815260a2602090815260408083205460a090925290912054611a77918491611a729190612478565b612193565b6001600160a01b038416600090815260a06020526040812080549293508392909190611aa4908490612478565b925050819055508060a46000828254611abd9190612478565b9091555050609a54611af5906001600160a01b0316630e178d9360e41b85611ae4856129d5565b6040516024016107ae929190612907565b5092915050565b609a54604051600091611b2c916001600160a01b0390911690633a82b50d60e01b906107ae908690602401612667565b90508015611bcc57609854604051630200057560e51b81526001600160a01b0384811660048301526024820184905260606044830152600a60648301526930b63637b1b0ba34b7b760b11b608483015290911690634000aea09060a4016020604051808303816000875af1925050508015611bc4575060408051601f3d908101601f19168201909252611bc191810190612920565b60015b15611bcc575b505b919050565b600054610100900460ff16611c3c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016108f4565b565b610b0e828261191f565b6001600160a01b038216600090815260a0602052604081208054801592849291611c73908490612958565b925050819055508160a46000828254611c8c9190612958565b9091555060009050611c9d84610f8a565b6001600160a01b038516600090815260a06020526040902054909150811115611cdc576040516305f48c3560e11b8152600481018290526024016108f4565b8115611deb57600160a56000828254611cf59190612958565b90915550506001600160a01b038416600090815260a1602052604081204290555b609954811015611d8557600060998281548110611d3557611d35612942565b6000918252602090912001546040516001600160a01b039091169150611d709082906307b88ea560e01b906107ae908a908a90602401612907565b50508080611d7d906129f1565b915050611d16565b50609a54604051611db1916001600160a01b0316906318932a6760e21b906107ae908890602401612667565b506040516001600160a01b038516907fa2ab3900cad3f350c9333a5814b4c581dee01f3ca964bbf8cd96e061a00da0d290600090a2611e1a565b609a54604051611e18916001600160a01b031690630e178d9360e41b906107ae9088908890602401612907565b505b6001600160a01b038416600081815260a06020526040902054600080516020612ac983398151915290611e4c876107eb565b6040805192835260208301919091520160405180910390a260a65460a5541015151560a55463ffffffff16600080516020612ae983398151915260a45460a854604051611ea3929190918252602082015260400190565b60405180910390a350505050565b60a85460a35460a45460a9546098546040516370a0823160e01b81526001600160a01b03909116906370a0823190611eed903090600401612667565b602060405180830381865afa158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e9190612a0a565b611f389190612478565b611f429190612478565b611f4c9190612478565b60a8819055600090611f5f908390612478565b90506000611f6d8483612478565b609a54604051919250611f9f916001600160a01b0390911690636fff860d60e01b906107ae9089908790602401612907565b50846001600160a01b03167fe3e06f75e3a1529da79c083b1d8dd06fd928c2e268b3e2aaffa6103a14bcbd9985604051611fdb91815260200190565b60405180910390a28015612020576040518181526000907fe3e06f75e3a1529da79c083b1d8dd06fd928c2e268b3e2aaffa6103a14bcbd999060200160405180910390a25b60a65460a5541015151560a55463ffffffff16600080516020612ae983398151915260a45460a85460405161205f929190918252602082015260400190565b60405180910390a35050505050565b61207882826110e4565b610b0e57612085816121ab565b6120908360206121bd565b6040516020016120a1929190612a23565b60408051601f198184030181529082905262461bcd60e51b82526108f491600401612654565b6000816000036120d957506000610763565b6120e38383611a0c565b90506001600160a01b0383163b1561214a57604051633dfb89db60e11b8152600481018290526001600160a01b03841690637bf713b690602401600060405180830381600087803b15801561213757600080fd5b505af1925050508015612148575060015b505b826001600160a01b03167fa005d3b8f5c8149659f2afc06ed99732d5891377a370a723669418ca1ca29ced8260405161218591815260200190565b60405180910390a292915050565b60008183106121a257816121a4565b825b9392505050565b60606107636001600160a01b03831660145b606060006121cc836002612a92565b6121d7906002612958565b67ffffffffffffffff8111156121ef576121ef612783565b6040519080825280601f01601f191660200182016040528015612219576020820181803683370190505b509050600360fc1b8160008151811061223457612234612942565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061226357612263612942565b60200101906001600160f81b031916908160001a9053506000612287846002612a92565b612292906001612958565b90505b600181111561230a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106122c6576122c6612942565b1a60f81b8282815181106122dc576122dc612942565b60200101906001600160f81b031916908160001a90535060049490941c9361230381612ab1565b9050612295565b5083156121a45760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108f4565b828054612365906128d3565b90600052602060002090601f01602090048101928261238757600085556123cd565b82601f106123a05782800160ff198235161785556123cd565b828001600101855582156123cd579182015b828111156123cd5782358255916020019190600101906123b2565b50610dca92915061244d565b8280546123e5906128d3565b90600052602060002090601f01602090048101928261240757600085556123cd565b82601f1061242057805160ff19168380011785556123cd565b828001600101855582156123cd579182015b828111156123cd578251825591602001919060010190612432565b5b80821115610dca576000815560010161244e565b634e487b7160e01b600052601160045260246000fd5b60008282101561248a5761248a612462565b500390565b6000808585111561249f57600080fd5b838611156124ac57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156124e65780818660140360031b1b83161692505b505092915050565b60005b838110156125095781810151838201526020016124f1565b838111156107e55750506000910152565b6000825161252c8184602087016124ee565b9190910192915050565b60006020828403121561254857600080fd5b81356001600160e01b0319811681146121a457600080fd5b6001600160a01b038116811461132a57600080fd5b6000806040838503121561258857600080fd5b823561259381612560565b946020939093013593505050565b6000602082840312156125b357600080fd5b81356121a481612560565b6000602082840312156125d057600080fd5b5035919050565b600080604083850312156125ea57600080fd5b8235915060208301356125fc81612560565b809150509250929050565b6000815180845261261f8160208601602086016124ee565b601f01601f19169290920160200192915050565b82815260406020820152600061264c6040830184612607565b949350505050565b6020815260006121a46020830184612607565b6001600160a01b0391909116815260200190565b60008083601f84011261268d57600080fd5b50813567ffffffffffffffff8111156126a557600080fd5b6020830191508360208285010111156126bd57600080fd5b9250929050565b600080600080600080600080610100898b0312156126e157600080fd5b883567ffffffffffffffff808211156126f957600080fd5b6127058c838d0161267b565b909a50985060208b013591508082111561271e57600080fd5b5061272b8b828c0161267b565b909750955050604089013561273f81612560565b9350606089013561274f81612560565b925060e089018a81111561276257600080fd5b60808a0192503561277281612560565b809150509295985092959890939650565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156127ac57600080fd5b82356127b781612560565b9150602083013567ffffffffffffffff808211156127d457600080fd5b818501915085601f8301126127e857600080fd5b8135818111156127fa576127fa612783565b604051601f8201601f19908116603f0116810190838211818310171561282257612822612783565b8160405282815288602084870101111561283b57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806000806060858703121561287357600080fd5b843561287e81612560565b935060208501359250604085013567ffffffffffffffff8111156128a157600080fd5b6128ad8782880161267b565b95989497509550505050565b6001600160a01b0392831681529116602082015260400190565b600181811c908216806128e757607f821691505b602082108103611bca57634e487b7160e01b600052602260045260246000fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121561293257600080fd5b815180151581146121a457600080fd5b634e487b7160e01b600052603260045260246000fd5b6000821982111561296b5761296b612462565b500190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038316815260406020820181905260009061264c90830184612607565b6000602082840312156129ca57600080fd5b81516121a481612560565b6000600160ff1b82016129ea576129ea612462565b5060000390565b600060018201612a0357612a03612462565b5060010190565b600060208284031215612a1c57600080fd5b5051919050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351612a558160178501602088016124ee565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612a868160288401602088016124ee565b01602801949350505050565b6000816000190483118215151615612aac57612aac612462565b500290565b600081612ac057612ac0612462565b50600019019056fe5d179bbeed3396160151c93c13d38566dc1643f25a316cca998cd25f45a8bd3f38a9ab06ef5f5ea75fd622f984e03b2393343b6039c656e874e3fa9e3ddcd7b2a2646970667358221220a5abff7cb047b30edccd85a102f222abce7fcfbd6baf2c0035415cd6e6c0f72e64736f6c634300080d0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
