{
    "_format": "hh-sol-artifact-1",
    "contractName": "DefaultUndelegationPolicy",
    "sourceName": "contracts/OperatorTokenomics/OperatorPolicies/DefaultUndelegationPolicy.sol",
    "abi": [
        {
            "inputs": [],
            "name": "AccessDenied",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedDATATokenOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedNodesOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedOperatorOnly",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "AccessDeniedStreamrSponsorshipOnly",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorTokenBalanceWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "minimumDelegationWei",
                    "type": "uint256"
                }
            ],
            "name": "DelegationBelowMinimum",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "DidNotReceiveReward",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "FirstEmptyQueueThenStake",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "newOperatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "InvalidOperatorsCut",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "module",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "ModuleCallError",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "ModuleGetError",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NoEarnings",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "NotMyStakedSponsorship",
            "type": "error"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "operatorBalanceWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "minimumSelfDelegationWei",
                    "type": "uint256"
                }
            ],
            "name": "SelfDelegationTooLow",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "StakedInSponsorships",
            "type": "error"
        },
        {
            "inputs": [],
            "name": "ZeroUndelegation",
            "type": "error"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Approval",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "balanceWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "totalSupplyWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "dataValueWithoutEarnings",
                    "type": "uint256"
                }
            ],
            "name": "BalanceUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Delegated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "nodeAddress",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "jsonData",
                    "type": "string"
                }
            ],
            "name": "Heartbeat",
            "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": "valueDecreaseWei",
                    "type": "uint256"
                }
            ],
            "name": "Loss",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "operatorAddress",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "operatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "MetadataUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address[]",
                    "name": "nodes",
                    "type": "address[]"
                }
            ],
            "name": "NodesSet",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "slashingAmountDataWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "slashingAmountInOperatorTokensWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "actuallySlashedInOperatorTokensWei",
                    "type": "uint256"
                }
            ],
            "name": "OperatorSlashed",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "totalStakeInSponsorshipsWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "dataTokenBalanceWei",
                    "type": "uint256"
                }
            ],
            "name": "OperatorValueUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "valueIncreaseWei",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "operatorsCutDataWei",
                    "type": "uint256"
                },
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "protocolFeeDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Profit",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "queueIndex",
                    "type": "uint256"
                }
            ],
            "name": "QueueUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "queueIndex",
                    "type": "uint256"
                }
            ],
            "name": "QueuedDataPayout",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "voteStartTimestamp",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "voteEndTimestamp",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "flagMetadata",
                    "type": "string"
                }
            ],
            "name": "ReviewRequest",
            "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": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "stakedWei",
                    "type": "uint256"
                }
            ],
            "name": "StakeUpdate",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "Staked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "value",
                    "type": "uint256"
                }
            ],
            "name": "Transfer",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "Undelegated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "Unstaked",
            "type": "event"
        },
        {
            "stateMutability": "nonpayable",
            "type": "fallback"
        },
        {
            "inputs": [],
            "name": "CONTROLLER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "OWNER_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "owner",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                }
            ],
            "name": "allowance",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "approve",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                }
            ],
            "name": "balanceInData",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "balanceOf",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "decimals",
            "outputs": [
                {
                    "internalType": "uint8",
                    "name": "",
                    "type": "uint8"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "subtractedValue",
                    "type": "uint256"
                }
            ],
            "name": "decreaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "delegate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "delegationPolicy",
            "outputs": [
                {
                    "internalType": "contract IDelegationPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "exchangeRatePolicy",
            "outputs": [
                {
                    "internalType": "contract IExchangeRatePolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "flagMetadata",
                    "type": "string"
                }
            ],
            "name": "flag",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "maxQueuePayoutIterations",
                    "type": "uint256"
                }
            ],
            "name": "forceUnstake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getNodeAddresses",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "",
                    "type": "address[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getSponsorshipsAndEarnings",
            "outputs": [
                {
                    "internalType": "address[]",
                    "name": "addresses",
                    "type": "address[]"
                },
                {
                    "internalType": "uint256[]",
                    "name": "earnings",
                    "type": "uint256[]"
                },
                {
                    "internalType": "uint256",
                    "name": "maxAllowedEarnings",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getStreamMetadata",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "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": "jsonData",
                    "type": "string"
                }
            ],
            "name": "heartbeat",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "spender",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "addedValue",
                    "type": "uint256"
                }
            ],
            "name": "increaseAllowance",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "indexOfSponsorships",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "tokenAddress",
                    "type": "address"
                },
                {
                    "internalType": "contract StreamrConfig",
                    "name": "config",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "ownerAddress",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "operatorTokenName",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "operatorMetadataJson",
                    "type": "string"
                },
                {
                    "internalType": "uint256",
                    "name": "operatorsCut",
                    "type": "uint256"
                },
                {
                    "internalType": "address[3]",
                    "name": "modules",
                    "type": "address[3]"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "latestDelegationTimestamp",
            "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": "name",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "nodeIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "nodeModule",
            "outputs": [
                {
                    "internalType": "contract INodeModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "nodes",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountSlashedDataWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "receivedPayoutWei",
                    "type": "uint256"
                }
            ],
            "name": "onKick",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                }
            ],
            "name": "onReviewRequest",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountSlashed",
                    "type": "uint256"
                }
            ],
            "name": "onSlash",
            "outputs": [],
            "stateMutability": "nonpayable",
            "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": [
                {
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "onUndelegate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "operatorsCutFraction",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "payOutFirstInQueue",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "payoutComplete",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "maxIterations",
                    "type": "uint256"
                }
            ],
            "name": "payOutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueCurrentIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "queueEntryAt",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "delegator",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "timestamp",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueIsEmpty",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueLastIndex",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "queueModule",
            "outputs": [
                {
                    "internalType": "contract IQueueModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "targetStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "reduceStakeTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "targetStakeWei",
                    "type": "uint256"
                }
            ],
            "name": "reduceStakeWithoutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "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 IDelegationPolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setDelegationPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IExchangeRatePolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setExchangeRatePolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "newNodes",
                    "type": "address[]"
                }
            ],
            "name": "setNodeAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "setParam",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract IUndelegationPolicy",
                    "name": "policy",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "param",
                    "type": "uint256"
                }
            ],
            "name": "setUndelegationPolicy",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "slashedIn",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "name": "sponsorships",
            "outputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amountWei",
                    "type": "uint256"
                }
            ],
            "name": "stake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "stakeModule",
            "outputs": [
                {
                    "internalType": "contract IStakeModule",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "",
                    "type": "address"
                }
            ],
            "name": "stakedInto",
            "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": "streamRegistry",
            "outputs": [
                {
                    "internalType": "contract IStreamRegistryV4",
                    "name": "",
                    "type": "address"
                }
            ],
            "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": "symbol",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "token",
            "outputs": [
                {
                    "internalType": "contract IERC677",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSlashedInSponsorshipsWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalStakedIntoSponsorshipsWei",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "totalSupply",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transfer",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "from",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "to",
                    "type": "address"
                },
                {
                    "internalType": "uint256",
                    "name": "amount",
                    "type": "uint256"
                }
            ],
            "name": "transferFrom",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Operator",
                    "name": "other",
                    "type": "address"
                },
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "triggerAnotherOperatorWithdraw",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "amountDataWei",
                    "type": "uint256"
                }
            ],
            "name": "undelegate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "undelegationPolicy",
            "outputs": [
                {
                    "internalType": "contract IUndelegationPolicy",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "undelegationQueue",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "delegator",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "amountWei",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "timestamp",
                            "type": "uint256"
                        }
                    ],
                    "internalType": "struct Operator.UndelegationQueueEntry[]",
                    "name": "queue",
                    "type": "tuple[]"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "unstake",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                }
            ],
            "name": "unstakeWithoutQueue",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "updateMetadata",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address[]",
                    "name": "addNodes",
                    "type": "address[]"
                },
                {
                    "internalType": "address[]",
                    "name": "removeNodes",
                    "type": "address[]"
                }
            ],
            "name": "updateNodeAddresses",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "newOperatorsCutFraction",
                    "type": "uint256"
                }
            ],
            "name": "updateOperatorsCutFraction",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "updateStreamMetadata",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "valueWithoutEarnings",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "version",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship",
                    "name": "sponsorship",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "targetOperator",
                    "type": "address"
                },
                {
                    "internalType": "bytes32",
                    "name": "voteData",
                    "type": "bytes32"
                }
            ],
            "name": "voteOnFlag",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "withdrawEarningsFromSponsorships",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract Sponsorship[]",
                    "name": "sponsorshipAddresses",
                    "type": "address[]"
                }
            ],
            "name": "withdrawEarningsFromSponsorshipsWithoutQueue",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "withdrawnEarningsDataWei",
                    "type": "uint256"
                }
            ],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b50614afa806100206000396000f3fe608060405234801561001057600080fd5b50600436106104ac5760003560e01c8063870ffde21161026d578063b07f3c4711610151578063d82264d4116100ce578063f2888dbb11610092578063f2888dbb14610beb578063f3aea65014610bfe578063f4350c2414610c11578063f4408e4b14610c24578063fc0c546a14610c2c578063ffff59a614610c3f576104ac565b8063d82264d414610b8a578063dd62ed3e14610b9d578063e364215314610bb0578063e58378bb14610bc3578063e8e658b414610bd8576104ac565b8063bed6ff0911610115578063bed6ff0914610b29578063c229918e14610b3c578063d1b6861114610b44578063d547741f14610b57578063d673de4614610b6a576104ac565b8063b07f3c4714610a72578063b72cd7a814610ad0578063ba2bfc0a14610ae3578063bc697ec514610b03578063bc9b30c814610b16576104ac565b8063a457c2d7116101ea578063a9059cbb116101ae578063a9059cbb14610a15578063a93a019f14610a28578063a99fa31a14610a3b578063aa5703ad14610a4e578063aa77fd5514610a56578063adc9772e14610a5f576104ac565b8063a457c2d7146109b6578063a48dca18146109c9578063a4c0ed36146109dc578063a63ed2c8146109ef578063a74194af14610a02576104ac565b80639413462c116102315780639413462c1461097757806395d89b411461098057806398833130146109885780639fa6dd351461099b578063a217fddf146109ae576104ac565b8063870ffde21461092257806387396e3b1461092b5780638da5cb5b1461093e578063918b5be11461095157806391d1485414610964576104ac565b806336568abe1161039457806358fc614a116103115780636c68c0e1116102d55780636c68c0e1146108a157806370a08231146108b4578063799e2590146108c75780637bf713b6146108da5780637d429385146108ed5780637e82fd6f1461090d576104ac565b806358fc614a1461083c5780635dff6e9f1461085c5780635e61bb871461086f57806363d1ecf21461087b57806364f1abb71461088e576104ac565b80634a45d2e6116103585780634a45d2e6146107f55780634b095c031461080657806350d3ba9e1461081957806354fd4d501461082c578063558a156814610833576104ac565b806336568abe14610794578063392f37e9146107a757806339509351146107af578063430457e1146107c25780634a178fe4146107e2576104ac565b80631c53c2801161042d578063248a9ca3116103f1578063248a9ca31461071057806325c33549146107335780632e949824146107465780632ebd89d11461075b5780632f2ff15d14610772578063313ce56714610785576104ac565b80631c53c280146106a457806320fed94f146106c457806321194bd7146106d757806321a76907146106ea57806323b872dd146106fd576104ac565b80630fd6ff49116104745780630fd6ff4914610659578063116060101461066e5780631401f70b1461067657806314797daa1461068957806318160ddd1461069c576104ac565b806301ffc9a7146105cc57806304cbab8b1461060557806306fdde031461061c578063092c5b3b14610631578063095ea7b314610646575b60003660603330146104d157604051634ca8886760e01b815260040160405180910390fd5b81600084826104e1601482613d04565b6104ed92859290613d1b565b6104f691613d45565b60601c9050600085818661050b602087613d04565b9261051893929190613d1b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b038716925061056a91508590613da6565b600060405180830381855af49150503d80600081146105a5576040519150601f19603f3d011682016040523d82523d6000602084013e6105aa565b606091505b5091509150816105bc57805181602001fd5b8051975060200195505050505050f35b6105f06105da366004613dc2565b6001600160e01b031916634933db1960e11b1490565b60405190151581526020015b60405180910390f35b61060e60c95481565b6040519081526020016105fc565b610624610c52565b6040516105fc9190613e18565b61060e600080516020614a4583398151915281565b6105f0610654366004613e40565b610ce4565b61066c610667366004613eb4565b610cfc565b005b6105f0610d72565b61066c610684366004613ef5565b610dbd565b61066c610697366004613f56565b610e58565b60995461060e565b6106b76106b2366004613fc1565b610ec5565b6040516105fc9190613fda565b61066c6106d2366004613fee565b610eef565b61066c6106e5366004613eb4565b610f90565b60d0546106b7906001600160a01b031681565b6105f061070b366004614010565b611030565b61060e61071e366004613fc1565b60009081526065602052604090206001015490565b61066c610741366004614051565b611054565b61074e6110ba565b6040516105fc91906140ca565b61076361111b565b6040516105fc939291906140dd565b61066c61078036600461413d565b61134a565b604051601281526020016105fc565b61066c6107a236600461413d565b61136f565b6106246113ee565b6105f06107bd366004613e40565b61147c565b61060e6107d0366004613ef5565b60d96020526000908152604090205481565b61066c6107f0366004614258565b61149e565b61066c610803366004613fc1565b50565b61066c610814366004613e40565b611532565b61060e610827366004614341565b611594565b600361060e565b61060e60d45481565b61060e61084a366004613ef5565b60d66020526000908152604090205481565b61066c61086a366004613fc1565b6115c9565b60db5460dc54146105f0565b60ce546106b7906001600160a01b031681565b61066c61089c366004613ef5565b611607565b61066c6108af366004613fc1565b6118d3565b61060e6108c2366004613ef5565b611905565b60cb546106b7906001600160a01b031681565b61066c6108e8366004613fc1565b611920565b61060e6108fb366004613ef5565b60d76020526000908152604090205481565b610915611aab565b6040516105fc919061437d565b61060e60ca5481565b61066c610939366004613fc1565b611bca565b60d2546106b7906001600160a01b031681565b61066c61095f366004613eb4565b611bf6565b6105f061097236600461413d565b611c88565b61060e60db5481565b610624611cb3565b60d1546106b7906001600160a01b031681565b61066c6109a9366004613fc1565b611cc2565b61060e600081565b6105f06109c4366004613e40565b611d60565b60cf546106b7906001600160a01b031681565b61066c6109ea3660046143df565b611ddb565b61060e6109fd366004613ef5565b611e62565b6106b7610a10366004613fc1565b611ee6565b6105f0610a23366004613e40565b611ef6565b61066c610a36366004613e40565b611f04565b61066c610a4936600461442e565b612019565b61062461227f565b61060e60dc5481565b61066c610a6d366004613e40565b6122fb565b610aab610a80366004613fc1565b60da602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016105fc565b60cc546106b7906001600160a01b031681565b61060e610af1366004613ef5565b60d86020526000908152604090205481565b61066c610b11366004613e40565b61235d565b60cd546106b7906001600160a01b031681565b61066c610b37366004614010565b6123a6565b61060e612403565b61066c610b52366004613e40565b612491565b61066c610b6536600461413d565b6124da565b61060e610b78366004613ef5565b60de6020526000908152604090205481565b61066c610b98366004613e40565b6124ff565b61060e610bab36600461452e565b612761565b60e0546106b7906001600160a01b031681565b61060e600080516020614a2583398151915281565b61066c610be6366004614341565b61278c565b61066c610bf9366004613ef5565b612a53565b61066c610c0c366004613e40565b612a91565b61066c610c1f36600461455c565b612ada565b610624612b07565b60d3546106b7906001600160a01b031681565b61066c610c4d366004613e40565b612b14565b6060609a8054610c61906145ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d906145ab565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050905090565b600033610cf2818585612b5d565b5060019392505050565b33600090815260de60205260408120549003610d2b57604051634f1cec5f60e11b815260040160405180910390fd5b336001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610d6692919061460e565b60405180910390a25050565b60cf546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610db6916001600160a01b0390911690612c81565b1515919050565b610dd5600080516020614a4583398151915233611c88565b610df257604051631a76708960e21b815260040160405180910390fd5b60d054604051610e54916001600160a01b03169063af9ee81d60e01b90610e1d908590602401613fda565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612c81565b5050565b610e70600080516020614a4583398151915233611c88565b610e8d57604051631a76708960e21b815260040160405180910390fd5b60ce54604051610ebe916001600160a01b031690635e2cb23f60e11b90610e1d908890889088908890602401614660565b5050505050565b60dd8181548110610ed557600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815260d660205260408120549003610f1e5760405163012d886f60e51b815260040160405180910390fd5b8215610f5d578160ca6000828254610f369190614687565b90915550610f45905083612d22565b8160ca6000828254610f579190613d04565b90915550505b60d054604051610f8a916001600160a01b031690631644f38560e31b90610e1d908590879060240161469f565b50505050565b610fa8600080516020614a4583398151915233611c88565b610fc557604051631a76708960e21b815260040160405180910390fd5b60e0546040516342617fe760e01b81526001600160a01b03909116906342617fe790610ffa9060df9086908690600401614757565b600060405180830381600087803b15801561101457600080fd5b505af1158015611028573d6000803e3d6000fd5b505050505050565b60003361103e858285612e34565b611049858585612ea8565b506001949350505050565b61106c600080516020614a4583398151915233611c88565b61108957604051631a76708960e21b815260040160405180910390fd5b60ce546040516110b5916001600160a01b03169062b08f2560e61b90610e1d9086908690602401614787565b505050565b606060dd805480602002602001604051908101604052809291908181526020018280548015610cda57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110f4575050505050905090565b606080600060d5805490506001600160401b0381111561113d5761113d61416d565b604051908082528060200260200182016040528015611166578160200160208202803683370190505b5060d5549093506001600160401b038111156111845761118461416d565b6040519080825280602002602001820160405280156111ad578160200160208202803683370190505b50915060005b60d5548110156112b157600060d582815481106111d2576111d261479b565b9060005260206000200160009054906101000a90046001600160a01b03169050808583815181106112055761120561479b565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c0490611240903090600401613fda565b602060405180830381865afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128191906147b1565b8483815181106112935761129361479b565b602090810291909101015250806112a9816147ca565b9150506111b3565b5060d154604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa158015611303573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132791906147b1565b61132f612403565b61133991906147e3565b6113439190614802565b9050909192565b600082815260656020526040902060010154611365816130c3565b6110b583836130cd565b6001600160a01b03811633146113e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610e548282613153565b60e180546113fb906145ab565b80601f0160208091040260200160405190810160405280929190818152602001828054611427906145ab565b80156114745780601f1061144957610100808354040283529160200191611474565b820191906000526020600020905b81548152906001019060200180831161145757829003601f168201915b505050505081565b600033610cf281858561148f8383612761565b6114999190614687565b612b5d565b33600090815260de602052604081205490036114cd57604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c6906114fb9085908590600401614824565b600060405180830381600087803b15801561151557600080fd5b505af1158015611529573d6000803e3d6000fd5b50505050505050565b61154a600080516020614a4583398151915233611c88565b61156757604051631a76708960e21b815260040160405180910390fd5b60d0546040516110b5916001600160a01b03169063d572a9cd60e01b90610e1d908690869060240161469f565b60d0546040516000916115c3916001600160a01b039091169062d8aad560e51b90610e1d9086906024016140ca565b92915050565b6115e1600080516020614a4583398151915233611c88565b6115fe57604051631a76708960e21b815260040160405180910390fd5b610803816131ba565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190614848565b6001600160a01b0316634703e001336040518263ffffffff1660e01b81526004016116a99190613fda565b602060405180830381865afa1580156116c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ea91906147b1565b60000361170a576040516359e9fbbf60e11b815260040160405180910390fd5b60d154604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d91906147b1565b6117879042614687565b9050600060d160009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180291906147b1565b61180c9083614687565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b81526004016118719190613fda565b600060405180830381865afa15801561188e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118b69190810190614865565b6040516118c5939291906148db565b60405180910390a350505050565b60cf5460405160248101839052336044820152610e54916001600160a01b031690630744132360e21b90606401610e1d565b6001600160a01b031660009081526097602052604090205490565b33600081815260d66020526040812054900361194f5760405163012d886f60e51b815260040160405180910390fd5b61195882612d22565b6001600160a01b038116600090815260d8602052604081208054849290611980908490614687565b925050819055508160ca60008282546119999190614687565b90915550506001600160a01b038116600081815260d8602090815260408083205460d7909252909120547f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78916119ee91613d04565b60405190815260200160405180910390a2600080516020614aa583398151915260ca5460c954611a1e9190613d04565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190611a4e903090600401613fda565b602060405180830381865afa158015611a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8f91906147b1565b6040805192835260208301919091520160405180910390a15050565b6060600060dc5460db54611abf9190613d04565b9050806001600160401b03811115611ad957611ad961416d565b604051908082528060200260200182016040528015611b3757816020015b611b24604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611af75790505b50915060005b81811015611bc55760da60008260dc54611b579190614687565b81526020808201929092526040908101600020815160608101835281546001600160a01b0316815260018201549381019390935260020154908201528351849083908110611ba757611ba761479b565b60200260200101819052508080611bbd906147ca565b915050611b3d565b505090565b60cf5460405160248101839052610e54916001600160a01b03169063211cccd160e21b90604401610e1d565b611c0e600080516020614a4583398151915233611c88565b611c2b57604051631a76708960e21b815260040160405180910390fd5b611c3760e18383613be1565b5060d45460d2546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d090611c7c908690869061460e565b60405180910390a35050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b8054610c61906145ab565b60d3546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af1158015611d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4b91906148fa565b50611d563382613257565b6108036000611bca565b60003381611d6e8286612761565b905083811015611dce5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016113db565b6110498286868403612b5d565b60d3546001600160a01b03163314611e065760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815260d66020526040902054849015611e2c5750610f8a565b846014839003611e415750823560601c611e4e565b6020839003611e4e575082355b611e588186613257565b6110286000611bca565b6000611e6d82611905565b600003611e7c57506000919050565b6115c3630de731f360e31b611e9084611905565b60cc5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526134c6565b60d58181548110610ed557600080fd5b600033610cf2818585612ea8565b60db5460dc541480611faa575060d160009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8891906147b1565b60dc54600090815260da6020526040902060020154611fa79190614687565b42105b15611fe457611fc7600080516020614a4583398151915233611c88565b611fe457604051631a76708960e21b815260040160405180910390fd5b60d05460405161200f916001600160a01b031690633d16f42d60e01b90610e1d908690602401613fda565b50610e5481611bca565b600054610100900460ff16158080156120395750600054600160ff909116105b806120535750303b158015612053575060005460ff166001145b6120b65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016113db565b6000805460ff1916600117905580156120d9576000805461ff0019166101001790555b60d180546001600160a01b0319166001600160a01b0389161790556120fc61355c565b612114600080516020614a2583398151915287613585565b61212c600080516020614a4583398151915287613585565b612152600080516020614a45833981519152600080516020614a2583398151915261358f565b60d380546001600160a01b03199081166001600160a01b038b811691909117909255835160ce80548316918416919091179055602084015160cf80548316918416919091179055604084015160d08054831691841691909117905560d280549091169188169190911790556121c785806135da565b6121d2600033613585565b83516121e59060e1906020870190613c65565b506121ef836131ba565b60ce546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b17905261222e916001600160a01b031690612c81565b508015612275576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60e0546040516331ca7de960e11b81526060916001600160a01b031690636394fbd2906122b19060df9060040161491c565b600060405180830381865afa1580156122ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122f69190810190614865565b905090565b612313600080516020614a4583398151915233611c88565b61233057604051631a76708960e21b815260040160405180910390fd5b60d0546040516110b5916001600160a01b03169063aa0d97b360e01b90610e1d908690869060240161469f565b6000612368816130c3565b60cc80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f8a9190632522e97360e11b90604401610e1d565b33600090815260de602052604081205490036123d557604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce4906114fb908590859060040161469f565b60ca5460c95460d3546040516370a0823160e01b815260009392916001600160a01b0316906370a082319061243c903090600401613fda565b602060405180830381865afa158015612459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247d91906147b1565b6124879190614687565b6122f69190613d04565b6124a9600080516020614a4583398151915233611c88565b6124c657604051631a76708960e21b815260040160405180910390fd5b6124d08282611532565b610e546000611bca565b6000828152606560205260409020600101546124f5816130c3565b6110b58383613153565b60d15460d2546001600160a01b0391821691908116908416036126915760c95460000361252b57505050565b60cc546040516024810184905260009161255c916001600160a01b0390911690632b911c0960e21b90604401610e1d565b60d25490915060009061258290839061257d906001600160a01b0316611905565b61360b565b60d254909150600090829061259f906001600160a01b0316611905565b6125a99190613d04565b90506000826125b760995490565b6125c19190613d04565b90506000856001600160a01b0316637b94dead6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561261f575060408051601f3d908101601f1916820190925261261c918101906147b1565b60015b156126275790505b61263181836147e3565b61264384670de0b6b3a76400006147e3565b10156122755760405162461bcd60e51b815260206004820152601a60248201527f6572726f725f73656c6644656c65676174696f6e546f6f4c6f7700000000000060448201526064016113db565b6000816001600160a01b0316638cc9a8c46040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126ed575060408051601f3d908101601f191682019092526126ea918101906147b1565b60015b156126f55790505b6001600160a01b038416600090815260d96020526040902054612719908290614687565b4211610f8a5760405162461bcd60e51b815260206004820152601760248201527632b93937b92fbab73232b632b3b0ba32aa37b7a9b7b7b760491b60448201526064016113db565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b6000612796612403565b905060006127a383611594565b9050336127be600080516020614a4583398151915282611c88565b1580156127e157506001600160a01b038116600090815260de6020526040902054155b15612a49576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612844573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286891906147b1565b61287290866147e3565b61287c9190614802565b905080831115612a47576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290891906147b1565b61291290866147e3565b61291c9190614802565b905061292781612d22565b60d35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612959908690859060040161469f565b6020604051808303816000875af1158015612978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299c91906148fa565b50600080516020614aa583398151915260ca5460c9546129bc9190613d04565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a08231906129ec903090600401613fda565b602060405180830381865afa158015612a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2d91906147b1565b6040805192835260208301919091520160405180910390a1505b505b610f8a6000611bca565b612a6b600080516020614a4583398151915233611c88565b612a8857604051631a76708960e21b815260040160405180910390fd5b611d5681610dbd565b6000612a9c816130c3565b60cb80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f8a9190632522e97360e11b90604401610e1d565b60cf546040516110b5916001600160a01b031690637a227c9f60e01b90610e1d908690869060240161492f565b60df80546113fb906145ab565b6000612b1f816130c3565b60cd80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f8a9190632522e97360e11b90604401610e1d565b6001600160a01b038316612bbf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016113db565b6001600160a01b038216612c205760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016113db565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000846001600160a01b031684604051612c9e9190613da6565b600060405180830381855af49150503d8060008114612cd9576040519150601f19603f3d011682016040523d82523d6000602084013e612cde565b606091505b509150915081612d16578051600003612d0e57848460405163918623b760e01b81526004016113db929190614824565b805181602001fd5b60200151949350505050565b60d254600090612d3a906001600160a01b0316611905565b905080600003612d48575050565b60cc5460405160248101849052600091612d79916001600160a01b0390911690632b911c0960e21b90604401610e1d565b90506000612d87838361360b565b60d254909150612da0906001600160a01b031682613623565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a160d2546001600160a01b0316600080516020614a65833981519152612e0582611905565b609954612e10612403565b6040805193845260208401929092529082015260600160405180910390a250505050565b6000612e408484612761565b90506000198114610f8a5781811015612e9b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016113db565b610f8a8484848403612b5d565b6000612eb383611905565b159050612ec1848484613745565b60d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015612f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2f91906147b1565b905080612f3b86611905565b108015612f5057506000612f4e86611905565b115b15612f8257612f5e85611905565b6040516324c6940760e01b81526004810191909152602481018290526044016113db565b80612f8c85611905565b1015612f9b57612f5e84611905565b8115612fdf5760cb546001600160a01b031615612fdf5760cb54604051612fdd916001600160a01b03169063217fb33b60e01b90610e1d908890602401613fda565b505b60cd546001600160a01b0316156130265760cd546040516001600160a01b03878116602483015260006044830152613024921690633608993560e21b90606401610e1d565b505b846001600160a01b0316600080516020614a6583398151915261304887611905565b609954613053612403565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b0316600080516020614a6583398151915261309386611905565b60995461309e612403565b6040805193845260208401929092529082015260600160405180910390a25050505050565b61080381336138de565b6130d78282611c88565b610e545760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561310f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61315d8282611c88565b15610e545760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60c954156131db576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a764000081111561320757604051631e6f460160e31b8152600481018290526024016113db565b60d481905560d25460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d09061324c9060e19061491c565b60405180910390a350565b60cc54604051602481018390526044810183905260009161328f916001600160a01b0390911690633a49b55760e21b90606401610e1d565b905061329b8382613937565b60d2546001600160a01b038481169116146133795760d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156132fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331e91906147b1565b90508061332a85611905565b101561333957612f5e84611905565b60cb546001600160a01b0316156133775760cb54604051613375916001600160a01b03169063217fb33b60e01b90610e1d908890602401613fda565b505b505b6001600160a01b038316600081815260d9602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab906133c69085815260200190565b60405180910390a2826001600160a01b0316600080516020614a658339815191526133f085611905565b6099546133fb612403565b6040805193845260208401929092529082015260600160405180910390a2600080516020614aa583398151915260ca5460c9546134389190613d04565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190613468903090600401613fda565b602060405180830381865afa158015613485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a991906147b1565b6040805192835260208301919091520160405180910390a1505050565b6000806000306001600160a01b0316846040516134e39190613da6565b600060405180830381855afa9150503d806000811461351e576040519150601f19603f3d011682016040523d82523d6000602084013e613523565b606091505b509150915081613551578051600003612d0e578360405163029801d760e41b81526004016113db9190613e18565b602001519392505050565b600054610100900460ff166135835760405162461bcd60e51b81526004016113db90614953565b565b610e5482826130cd565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff166136015760405162461bcd60e51b81526004016113db90614953565b610e5482826139e6565b600081831061361a578161361c565b825b9392505050565b6001600160a01b0382166136835760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016113db565b6001600160a01b038216600090815260976020526040902054818110156136f75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016113db565b6001600160a01b0383166000818152609760209081526040808320868603905560998054879003905551858152919291600080516020614a85833981519152910160405180910390a3505050565b6001600160a01b0383166137a95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016113db565b6001600160a01b03821661380b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016113db565b6001600160a01b038316600090815260976020526040902054818110156138835760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016113db565b6001600160a01b038085166000818152609760205260408082208686039055928616808252908390208054860190559151600080516020614a85833981519152906138d19086815260200190565b60405180910390a3610f8a565b6138e88282611c88565b610e54576138f581613a34565b613900836020613a46565b60405160200161391192919061499e565b60408051601f198184030181529082905262461bcd60e51b82526113db91600401613e18565b6001600160a01b03821661398d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016113db565b806099600082825461399f9190614687565b90915550506001600160a01b038216600081815260976020908152604080832080548601905551848152600080516020614a85833981519152910160405180910390a35050565b600054610100900460ff16613a0d5760405162461bcd60e51b81526004016113db90614953565b8151613a2090609a906020850190613c65565b5080516110b590609b906020840190613c65565b60606115c36001600160a01b03831660145b60606000613a558360026147e3565b613a60906002614687565b6001600160401b03811115613a7757613a7761416d565b6040519080825280601f01601f191660200182016040528015613aa1576020820181803683370190505b509050600360fc1b81600081518110613abc57613abc61479b565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613aeb57613aeb61479b565b60200101906001600160f81b031916908160001a9053506000613b0f8460026147e3565b613b1a906001614687565b90505b6001811115613b92576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613b4e57613b4e61479b565b1a60f81b828281518110613b6457613b6461479b565b60200101906001600160f81b031916908160001a90535060049490941c93613b8b81614a0d565b9050613b1d565b50831561361c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016113db565b828054613bed906145ab565b90600052602060002090601f016020900481019282613c0f5760008555613c55565b82601f10613c285782800160ff19823516178555613c55565b82800160010185558215613c55579182015b82811115613c55578235825591602001919060010190613c3a565b50613c61929150613cd9565b5090565b828054613c71906145ab565b90600052602060002090601f016020900481019282613c935760008555613c55565b82601f10613cac57805160ff1916838001178555613c55565b82800160010185558215613c55579182015b82811115613c55578251825591602001919060010190613cbe565b5b80821115613c615760008155600101613cda565b634e487b7160e01b600052601160045260246000fd5b600082821015613d1657613d16613cee565b500390565b60008085851115613d2b57600080fd5b83861115613d3857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015613d725780818660140360031b1b83161692505b505092915050565b60005b83811015613d95578181015183820152602001613d7d565b83811115610f8a5750506000910152565b60008251613db8818460208701613d7a565b9190910192915050565b600060208284031215613dd457600080fd5b81356001600160e01b03198116811461361c57600080fd5b60008151808452613e04816020860160208601613d7a565b601f01601f19169290920160200192915050565b60208152600061361c6020830184613dec565b6001600160a01b038116811461080357600080fd5b60008060408385031215613e5357600080fd5b8235613e5e81613e2b565b946020939093013593505050565b60008083601f840112613e7e57600080fd5b5081356001600160401b03811115613e9557600080fd5b602083019150836020828501011115613ead57600080fd5b9250929050565b60008060208385031215613ec757600080fd5b82356001600160401b03811115613edd57600080fd5b613ee985828601613e6c565b90969095509350505050565b600060208284031215613f0757600080fd5b813561361c81613e2b565b60008083601f840112613f2457600080fd5b5081356001600160401b03811115613f3b57600080fd5b6020830191508360208260051b8501011115613ead57600080fd5b60008060008060408587031215613f6c57600080fd5b84356001600160401b0380821115613f8357600080fd5b613f8f88838901613f12565b90965094506020870135915080821115613fa857600080fd5b50613fb587828801613f12565b95989497509550505050565b600060208284031215613fd357600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6000806040838503121561400157600080fd5b50508035926020909101359150565b60008060006060848603121561402557600080fd5b833561403081613e2b565b9250602084013561404081613e2b565b929592945050506040919091013590565b6000806020838503121561406457600080fd5b82356001600160401b0381111561407a57600080fd5b613ee985828601613f12565b600081518084526020808501945080840160005b838110156140bf5781516001600160a01b03168752958201959082019060010161409a565b509495945050505050565b60208152600061361c6020830184614086565b6060815260006140f06060830186614086565b82810360208481019190915285518083528682019282019060005b818110156141275784518352938301939183019160010161410b565b5050809350505050826040830152949350505050565b6000806040838503121561415057600080fd5b82359150602083013561416281613e2b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156141a5576141a561416d565b60405290565b604051601f8201601f191681016001600160401b03811182821017156141d3576141d361416d565b604052919050565b60006001600160401b038211156141f4576141f461416d565b50601f01601f191660200190565b600082601f83011261421357600080fd5b8135614226614221826141db565b6141ab565b81815284602083860101111561423b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561426d57600080fd5b833561427881613e2b565b9250602084013561428881613e2b565b915060408401356001600160401b038111156142a357600080fd5b6142af86828701614202565b9150509250925092565b600082601f8301126142ca57600080fd5b813560206001600160401b038211156142e5576142e561416d565b8160051b6142f48282016141ab565b928352848101820192828101908785111561430e57600080fd5b83870192505b8483101561433657823561432781613e2b565b82529183019190830190614314565b979650505050505050565b60006020828403121561435357600080fd5b81356001600160401b0381111561436957600080fd5b614375848285016142b9565b949350505050565b602080825282518282018190526000919060409081850190868401855b828110156143d257815180516001600160a01b031685528681015187860152850151858501526060909301929085019060010161439a565b5091979650505050505050565b600080600080606085870312156143f557600080fd5b843561440081613e2b565b93506020850135925060408501356001600160401b0381111561442257600080fd5b613fb587828801613e6c565b600080600080600080600061012080898b03121561444b57600080fd5b883561445681613e2b565b975060208981013561446781613e2b565b975060408a013561447781613e2b565b965060608a01356001600160401b038082111561449357600080fd5b61449f8d838e01614202565b975060808c01359150808211156144b557600080fd5b506144c28c828d01614202565b95505060a08a013593508a60df8b01126144db57600080fd5b6144e3614183565b918a0191808c8411156144f557600080fd5b60c08c015b8481101561451a57803561450d81613e2b565b83529183019183016144fa565b508094505050505092959891949750929550565b6000806040838503121561454157600080fd5b823561454c81613e2b565b9150602083013561416281613e2b565b6000806040838503121561456f57600080fd5b823561457a81613e2b565b915060208301356001600160401b0381111561459557600080fd5b6145a1858286016142b9565b9150509250929050565b600181811c908216806145bf57607f821691505b6020821081036145df57634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006143756020830184866145e5565b8183526000602080850194508260005b858110156140bf57813561464581613e2b565b6001600160a01b031687529582019590820190600101614632565b604081526000614674604083018688614622565b8281036020840152614336818587614622565b6000821982111561469a5761469a613cee565b500190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c90808316806146d257607f831692505b602080841082036146f357634e487b7160e01b600052602260045260246000fd5b8388526020880182801561470e576001811461471f5761474a565b60ff1987168252828201975061474a565b60008981526020902060005b878110156147445781548482015290860190840161472b565b83019850505b5050505050505092915050565b60408152600061476a60408301866146b8565b828103602084015261477d8185876145e5565b9695505050505050565b602081526000614375602083018486614622565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156147c357600080fd5b5051919050565b6000600182016147dc576147dc613cee565b5060010190565b60008160001904831182151516156147fd576147fd613cee565b500290565b60008261481f57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b038316815260406020820181905260009061437590830184613dec565b60006020828403121561485a57600080fd5b815161361c81613e2b565b60006020828403121561487757600080fd5b81516001600160401b0381111561488d57600080fd5b8201601f8101841361489e57600080fd5b80516148ac614221826141db565b8181528560208385010111156148c157600080fd5b6148d2826020830160208601613d7a565b95945050505050565b8381528260208201526060604082015260006148d26060830184613dec565b60006020828403121561490c57600080fd5b8151801515811461361c57600080fd5b60208152600061361c60208301846146b8565b6001600160a01b038316815260406020820181905260009061437590830184614086565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516149d0816017850160208801613d7a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614a01816028840160208801613d7a565b01602801949350505050565b600081614a1c57614a1c613cee565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef51839ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a264697066735822122060e4a5a4001f3f5119dddb42db5106e9c3079eeb0c089377d6a4963dbae6d75864736f6c634300080d0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104ac5760003560e01c8063870ffde21161026d578063b07f3c4711610151578063d82264d4116100ce578063f2888dbb11610092578063f2888dbb14610beb578063f3aea65014610bfe578063f4350c2414610c11578063f4408e4b14610c24578063fc0c546a14610c2c578063ffff59a614610c3f576104ac565b8063d82264d414610b8a578063dd62ed3e14610b9d578063e364215314610bb0578063e58378bb14610bc3578063e8e658b414610bd8576104ac565b8063bed6ff0911610115578063bed6ff0914610b29578063c229918e14610b3c578063d1b6861114610b44578063d547741f14610b57578063d673de4614610b6a576104ac565b8063b07f3c4714610a72578063b72cd7a814610ad0578063ba2bfc0a14610ae3578063bc697ec514610b03578063bc9b30c814610b16576104ac565b8063a457c2d7116101ea578063a9059cbb116101ae578063a9059cbb14610a15578063a93a019f14610a28578063a99fa31a14610a3b578063aa5703ad14610a4e578063aa77fd5514610a56578063adc9772e14610a5f576104ac565b8063a457c2d7146109b6578063a48dca18146109c9578063a4c0ed36146109dc578063a63ed2c8146109ef578063a74194af14610a02576104ac565b80639413462c116102315780639413462c1461097757806395d89b411461098057806398833130146109885780639fa6dd351461099b578063a217fddf146109ae576104ac565b8063870ffde21461092257806387396e3b1461092b5780638da5cb5b1461093e578063918b5be11461095157806391d1485414610964576104ac565b806336568abe1161039457806358fc614a116103115780636c68c0e1116102d55780636c68c0e1146108a157806370a08231146108b4578063799e2590146108c75780637bf713b6146108da5780637d429385146108ed5780637e82fd6f1461090d576104ac565b806358fc614a1461083c5780635dff6e9f1461085c5780635e61bb871461086f57806363d1ecf21461087b57806364f1abb71461088e576104ac565b80634a45d2e6116103585780634a45d2e6146107f55780634b095c031461080657806350d3ba9e1461081957806354fd4d501461082c578063558a156814610833576104ac565b806336568abe14610794578063392f37e9146107a757806339509351146107af578063430457e1146107c25780634a178fe4146107e2576104ac565b80631c53c2801161042d578063248a9ca3116103f1578063248a9ca31461071057806325c33549146107335780632e949824146107465780632ebd89d11461075b5780632f2ff15d14610772578063313ce56714610785576104ac565b80631c53c280146106a457806320fed94f146106c457806321194bd7146106d757806321a76907146106ea57806323b872dd146106fd576104ac565b80630fd6ff49116104745780630fd6ff4914610659578063116060101461066e5780631401f70b1461067657806314797daa1461068957806318160ddd1461069c576104ac565b806301ffc9a7146105cc57806304cbab8b1461060557806306fdde031461061c578063092c5b3b14610631578063095ea7b314610646575b60003660603330146104d157604051634ca8886760e01b815260040160405180910390fd5b81600084826104e1601482613d04565b6104ed92859290613d1b565b6104f691613d45565b60601c9050600085818661050b602087613d04565b9261051893929190613d1b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b038716925061056a91508590613da6565b600060405180830381855af49150503d80600081146105a5576040519150601f19603f3d011682016040523d82523d6000602084013e6105aa565b606091505b5091509150816105bc57805181602001fd5b8051975060200195505050505050f35b6105f06105da366004613dc2565b6001600160e01b031916634933db1960e11b1490565b60405190151581526020015b60405180910390f35b61060e60c95481565b6040519081526020016105fc565b610624610c52565b6040516105fc9190613e18565b61060e600080516020614a4583398151915281565b6105f0610654366004613e40565b610ce4565b61066c610667366004613eb4565b610cfc565b005b6105f0610d72565b61066c610684366004613ef5565b610dbd565b61066c610697366004613f56565b610e58565b60995461060e565b6106b76106b2366004613fc1565b610ec5565b6040516105fc9190613fda565b61066c6106d2366004613fee565b610eef565b61066c6106e5366004613eb4565b610f90565b60d0546106b7906001600160a01b031681565b6105f061070b366004614010565b611030565b61060e61071e366004613fc1565b60009081526065602052604090206001015490565b61066c610741366004614051565b611054565b61074e6110ba565b6040516105fc91906140ca565b61076361111b565b6040516105fc939291906140dd565b61066c61078036600461413d565b61134a565b604051601281526020016105fc565b61066c6107a236600461413d565b61136f565b6106246113ee565b6105f06107bd366004613e40565b61147c565b61060e6107d0366004613ef5565b60d96020526000908152604090205481565b61066c6107f0366004614258565b61149e565b61066c610803366004613fc1565b50565b61066c610814366004613e40565b611532565b61060e610827366004614341565b611594565b600361060e565b61060e60d45481565b61060e61084a366004613ef5565b60d66020526000908152604090205481565b61066c61086a366004613fc1565b6115c9565b60db5460dc54146105f0565b60ce546106b7906001600160a01b031681565b61066c61089c366004613ef5565b611607565b61066c6108af366004613fc1565b6118d3565b61060e6108c2366004613ef5565b611905565b60cb546106b7906001600160a01b031681565b61066c6108e8366004613fc1565b611920565b61060e6108fb366004613ef5565b60d76020526000908152604090205481565b610915611aab565b6040516105fc919061437d565b61060e60ca5481565b61066c610939366004613fc1565b611bca565b60d2546106b7906001600160a01b031681565b61066c61095f366004613eb4565b611bf6565b6105f061097236600461413d565b611c88565b61060e60db5481565b610624611cb3565b60d1546106b7906001600160a01b031681565b61066c6109a9366004613fc1565b611cc2565b61060e600081565b6105f06109c4366004613e40565b611d60565b60cf546106b7906001600160a01b031681565b61066c6109ea3660046143df565b611ddb565b61060e6109fd366004613ef5565b611e62565b6106b7610a10366004613fc1565b611ee6565b6105f0610a23366004613e40565b611ef6565b61066c610a36366004613e40565b611f04565b61066c610a4936600461442e565b612019565b61062461227f565b61060e60dc5481565b61066c610a6d366004613e40565b6122fb565b610aab610a80366004613fc1565b60da602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016105fc565b60cc546106b7906001600160a01b031681565b61060e610af1366004613ef5565b60d86020526000908152604090205481565b61066c610b11366004613e40565b61235d565b60cd546106b7906001600160a01b031681565b61066c610b37366004614010565b6123a6565b61060e612403565b61066c610b52366004613e40565b612491565b61066c610b6536600461413d565b6124da565b61060e610b78366004613ef5565b60de6020526000908152604090205481565b61066c610b98366004613e40565b6124ff565b61060e610bab36600461452e565b612761565b60e0546106b7906001600160a01b031681565b61060e600080516020614a2583398151915281565b61066c610be6366004614341565b61278c565b61066c610bf9366004613ef5565b612a53565b61066c610c0c366004613e40565b612a91565b61066c610c1f36600461455c565b612ada565b610624612b07565b60d3546106b7906001600160a01b031681565b61066c610c4d366004613e40565b612b14565b6060609a8054610c61906145ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d906145ab565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050905090565b600033610cf2818585612b5d565b5060019392505050565b33600090815260de60205260408120549003610d2b57604051634f1cec5f60e11b815260040160405180910390fd5b336001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610d6692919061460e565b60405180910390a25050565b60cf546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610db6916001600160a01b0390911690612c81565b1515919050565b610dd5600080516020614a4583398151915233611c88565b610df257604051631a76708960e21b815260040160405180910390fd5b60d054604051610e54916001600160a01b03169063af9ee81d60e01b90610e1d908590602401613fda565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612c81565b5050565b610e70600080516020614a4583398151915233611c88565b610e8d57604051631a76708960e21b815260040160405180910390fd5b60ce54604051610ebe916001600160a01b031690635e2cb23f60e11b90610e1d908890889088908890602401614660565b5050505050565b60dd8181548110610ed557600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815260d660205260408120549003610f1e5760405163012d886f60e51b815260040160405180910390fd5b8215610f5d578160ca6000828254610f369190614687565b90915550610f45905083612d22565b8160ca6000828254610f579190613d04565b90915550505b60d054604051610f8a916001600160a01b031690631644f38560e31b90610e1d908590879060240161469f565b50505050565b610fa8600080516020614a4583398151915233611c88565b610fc557604051631a76708960e21b815260040160405180910390fd5b60e0546040516342617fe760e01b81526001600160a01b03909116906342617fe790610ffa9060df9086908690600401614757565b600060405180830381600087803b15801561101457600080fd5b505af1158015611028573d6000803e3d6000fd5b505050505050565b60003361103e858285612e34565b611049858585612ea8565b506001949350505050565b61106c600080516020614a4583398151915233611c88565b61108957604051631a76708960e21b815260040160405180910390fd5b60ce546040516110b5916001600160a01b03169062b08f2560e61b90610e1d9086908690602401614787565b505050565b606060dd805480602002602001604051908101604052809291908181526020018280548015610cda57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110f4575050505050905090565b606080600060d5805490506001600160401b0381111561113d5761113d61416d565b604051908082528060200260200182016040528015611166578160200160208202803683370190505b5060d5549093506001600160401b038111156111845761118461416d565b6040519080825280602002602001820160405280156111ad578160200160208202803683370190505b50915060005b60d5548110156112b157600060d582815481106111d2576111d261479b565b9060005260206000200160009054906101000a90046001600160a01b03169050808583815181106112055761120561479b565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c0490611240903090600401613fda565b602060405180830381865afa15801561125d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128191906147b1565b8483815181106112935761129361479b565b602090810291909101015250806112a9816147ca565b9150506111b3565b5060d154604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa158015611303573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132791906147b1565b61132f612403565b61133991906147e3565b6113439190614802565b9050909192565b600082815260656020526040902060010154611365816130c3565b6110b583836130cd565b6001600160a01b03811633146113e45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610e548282613153565b60e180546113fb906145ab565b80601f0160208091040260200160405190810160405280929190818152602001828054611427906145ab565b80156114745780601f1061144957610100808354040283529160200191611474565b820191906000526020600020905b81548152906001019060200180831161145757829003601f168201915b505050505081565b600033610cf281858561148f8383612761565b6114999190614687565b612b5d565b33600090815260de602052604081205490036114cd57604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c6906114fb9085908590600401614824565b600060405180830381600087803b15801561151557600080fd5b505af1158015611529573d6000803e3d6000fd5b50505050505050565b61154a600080516020614a4583398151915233611c88565b61156757604051631a76708960e21b815260040160405180910390fd5b60d0546040516110b5916001600160a01b03169063d572a9cd60e01b90610e1d908690869060240161469f565b60d0546040516000916115c3916001600160a01b039091169062d8aad560e51b90610e1d9086906024016140ca565b92915050565b6115e1600080516020614a4583398151915233611c88565b6115fe57604051631a76708960e21b815260040160405180910390fd5b610803816131ba565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561165a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167e9190614848565b6001600160a01b0316634703e001336040518263ffffffff1660e01b81526004016116a99190613fda565b602060405180830381865afa1580156116c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ea91906147b1565b60000361170a576040516359e9fbbf60e11b815260040160405180910390fd5b60d154604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa158015611759573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177d91906147b1565b6117879042614687565b9050600060d160009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180291906147b1565b61180c9083614687565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b81526004016118719190613fda565b600060405180830381865afa15801561188e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118b69190810190614865565b6040516118c5939291906148db565b60405180910390a350505050565b60cf5460405160248101839052336044820152610e54916001600160a01b031690630744132360e21b90606401610e1d565b6001600160a01b031660009081526097602052604090205490565b33600081815260d66020526040812054900361194f5760405163012d886f60e51b815260040160405180910390fd5b61195882612d22565b6001600160a01b038116600090815260d8602052604081208054849290611980908490614687565b925050819055508160ca60008282546119999190614687565b90915550506001600160a01b038116600081815260d8602090815260408083205460d7909252909120547f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78916119ee91613d04565b60405190815260200160405180910390a2600080516020614aa583398151915260ca5460c954611a1e9190613d04565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190611a4e903090600401613fda565b602060405180830381865afa158015611a6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8f91906147b1565b6040805192835260208301919091520160405180910390a15050565b6060600060dc5460db54611abf9190613d04565b9050806001600160401b03811115611ad957611ad961416d565b604051908082528060200260200182016040528015611b3757816020015b611b24604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611af75790505b50915060005b81811015611bc55760da60008260dc54611b579190614687565b81526020808201929092526040908101600020815160608101835281546001600160a01b0316815260018201549381019390935260020154908201528351849083908110611ba757611ba761479b565b60200260200101819052508080611bbd906147ca565b915050611b3d565b505090565b60cf5460405160248101839052610e54916001600160a01b03169063211cccd160e21b90604401610e1d565b611c0e600080516020614a4583398151915233611c88565b611c2b57604051631a76708960e21b815260040160405180910390fd5b611c3760e18383613be1565b5060d45460d2546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d090611c7c908690869061460e565b60405180910390a35050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b8054610c61906145ab565b60d3546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af1158015611d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4b91906148fa565b50611d563382613257565b6108036000611bca565b60003381611d6e8286612761565b905083811015611dce5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016113db565b6110498286868403612b5d565b60d3546001600160a01b03163314611e065760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815260d66020526040902054849015611e2c5750610f8a565b846014839003611e415750823560601c611e4e565b6020839003611e4e575082355b611e588186613257565b6110286000611bca565b6000611e6d82611905565b600003611e7c57506000919050565b6115c3630de731f360e31b611e9084611905565b60cc5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526134c6565b60d58181548110610ed557600080fd5b600033610cf2818585612ea8565b60db5460dc541480611faa575060d160009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8891906147b1565b60dc54600090815260da6020526040902060020154611fa79190614687565b42105b15611fe457611fc7600080516020614a4583398151915233611c88565b611fe457604051631a76708960e21b815260040160405180910390fd5b60d05460405161200f916001600160a01b031690633d16f42d60e01b90610e1d908690602401613fda565b50610e5481611bca565b600054610100900460ff16158080156120395750600054600160ff909116105b806120535750303b158015612053575060005460ff166001145b6120b65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016113db565b6000805460ff1916600117905580156120d9576000805461ff0019166101001790555b60d180546001600160a01b0319166001600160a01b0389161790556120fc61355c565b612114600080516020614a2583398151915287613585565b61212c600080516020614a4583398151915287613585565b612152600080516020614a45833981519152600080516020614a2583398151915261358f565b60d380546001600160a01b03199081166001600160a01b038b811691909117909255835160ce80548316918416919091179055602084015160cf80548316918416919091179055604084015160d08054831691841691909117905560d280549091169188169190911790556121c785806135da565b6121d2600033613585565b83516121e59060e1906020870190613c65565b506121ef836131ba565b60ce546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b17905261222e916001600160a01b031690612c81565b508015612275576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60e0546040516331ca7de960e11b81526060916001600160a01b031690636394fbd2906122b19060df9060040161491c565b600060405180830381865afa1580156122ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122f69190810190614865565b905090565b612313600080516020614a4583398151915233611c88565b61233057604051631a76708960e21b815260040160405180910390fd5b60d0546040516110b5916001600160a01b03169063aa0d97b360e01b90610e1d908690869060240161469f565b6000612368816130c3565b60cc80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f8a9190632522e97360e11b90604401610e1d565b33600090815260de602052604081205490036123d557604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce4906114fb908590859060040161469f565b60ca5460c95460d3546040516370a0823160e01b815260009392916001600160a01b0316906370a082319061243c903090600401613fda565b602060405180830381865afa158015612459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247d91906147b1565b6124879190614687565b6122f69190613d04565b6124a9600080516020614a4583398151915233611c88565b6124c657604051631a76708960e21b815260040160405180910390fd5b6124d08282611532565b610e546000611bca565b6000828152606560205260409020600101546124f5816130c3565b6110b58383613153565b60d15460d2546001600160a01b0391821691908116908416036126915760c95460000361252b57505050565b60cc546040516024810184905260009161255c916001600160a01b0390911690632b911c0960e21b90604401610e1d565b60d25490915060009061258290839061257d906001600160a01b0316611905565b61360b565b60d254909150600090829061259f906001600160a01b0316611905565b6125a99190613d04565b90506000826125b760995490565b6125c19190613d04565b90506000856001600160a01b0316637b94dead6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561261f575060408051601f3d908101601f1916820190925261261c918101906147b1565b60015b156126275790505b61263181836147e3565b61264384670de0b6b3a76400006147e3565b10156122755760405162461bcd60e51b815260206004820152601a60248201527f6572726f725f73656c6644656c65676174696f6e546f6f4c6f7700000000000060448201526064016113db565b6000816001600160a01b0316638cc9a8c46040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126ed575060408051601f3d908101601f191682019092526126ea918101906147b1565b60015b156126f55790505b6001600160a01b038416600090815260d96020526040902054612719908290614687565b4211610f8a5760405162461bcd60e51b815260206004820152601760248201527632b93937b92fbab73232b632b3b0ba32aa37b7a9b7b7b760491b60448201526064016113db565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b6000612796612403565b905060006127a383611594565b9050336127be600080516020614a4583398151915282611c88565b1580156127e157506001600160a01b038116600090815260de6020526040902054155b15612a49576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612844573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286891906147b1565b61287290866147e3565b61287c9190614802565b905080831115612a47576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290891906147b1565b61291290866147e3565b61291c9190614802565b905061292781612d22565b60d35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612959908690859060040161469f565b6020604051808303816000875af1158015612978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299c91906148fa565b50600080516020614aa583398151915260ca5460c9546129bc9190613d04565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a08231906129ec903090600401613fda565b602060405180830381865afa158015612a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2d91906147b1565b6040805192835260208301919091520160405180910390a1505b505b610f8a6000611bca565b612a6b600080516020614a4583398151915233611c88565b612a8857604051631a76708960e21b815260040160405180910390fd5b611d5681610dbd565b6000612a9c816130c3565b60cb80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f8a9190632522e97360e11b90604401610e1d565b60cf546040516110b5916001600160a01b031690637a227c9f60e01b90610e1d908690869060240161492f565b60df80546113fb906145ab565b6000612b1f816130c3565b60cd80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610f8a9190632522e97360e11b90604401610e1d565b6001600160a01b038316612bbf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016113db565b6001600160a01b038216612c205760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016113db565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000846001600160a01b031684604051612c9e9190613da6565b600060405180830381855af49150503d8060008114612cd9576040519150601f19603f3d011682016040523d82523d6000602084013e612cde565b606091505b509150915081612d16578051600003612d0e57848460405163918623b760e01b81526004016113db929190614824565b805181602001fd5b60200151949350505050565b60d254600090612d3a906001600160a01b0316611905565b905080600003612d48575050565b60cc5460405160248101849052600091612d79916001600160a01b0390911690632b911c0960e21b90604401610e1d565b90506000612d87838361360b565b60d254909150612da0906001600160a01b031682613623565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a160d2546001600160a01b0316600080516020614a65833981519152612e0582611905565b609954612e10612403565b6040805193845260208401929092529082015260600160405180910390a250505050565b6000612e408484612761565b90506000198114610f8a5781811015612e9b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016113db565b610f8a8484848403612b5d565b6000612eb383611905565b159050612ec1848484613745565b60d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa158015612f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2f91906147b1565b905080612f3b86611905565b108015612f5057506000612f4e86611905565b115b15612f8257612f5e85611905565b6040516324c6940760e01b81526004810191909152602481018290526044016113db565b80612f8c85611905565b1015612f9b57612f5e84611905565b8115612fdf5760cb546001600160a01b031615612fdf5760cb54604051612fdd916001600160a01b03169063217fb33b60e01b90610e1d908890602401613fda565b505b60cd546001600160a01b0316156130265760cd546040516001600160a01b03878116602483015260006044830152613024921690633608993560e21b90606401610e1d565b505b846001600160a01b0316600080516020614a6583398151915261304887611905565b609954613053612403565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b0316600080516020614a6583398151915261309386611905565b60995461309e612403565b6040805193845260208401929092529082015260600160405180910390a25050505050565b61080381336138de565b6130d78282611c88565b610e545760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561310f3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61315d8282611c88565b15610e545760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60c954156131db576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a764000081111561320757604051631e6f460160e31b8152600481018290526024016113db565b60d481905560d25460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d09061324c9060e19061491c565b60405180910390a350565b60cc54604051602481018390526044810183905260009161328f916001600160a01b0390911690633a49b55760e21b90606401610e1d565b905061329b8382613937565b60d2546001600160a01b038481169116146133795760d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156132fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331e91906147b1565b90508061332a85611905565b101561333957612f5e84611905565b60cb546001600160a01b0316156133775760cb54604051613375916001600160a01b03169063217fb33b60e01b90610e1d908890602401613fda565b505b505b6001600160a01b038316600081815260d9602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab906133c69085815260200190565b60405180910390a2826001600160a01b0316600080516020614a658339815191526133f085611905565b6099546133fb612403565b6040805193845260208401929092529082015260600160405180910390a2600080516020614aa583398151915260ca5460c9546134389190613d04565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190613468903090600401613fda565b602060405180830381865afa158015613485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a991906147b1565b6040805192835260208301919091520160405180910390a1505050565b6000806000306001600160a01b0316846040516134e39190613da6565b600060405180830381855afa9150503d806000811461351e576040519150601f19603f3d011682016040523d82523d6000602084013e613523565b606091505b509150915081613551578051600003612d0e578360405163029801d760e41b81526004016113db9190613e18565b602001519392505050565b600054610100900460ff166135835760405162461bcd60e51b81526004016113db90614953565b565b610e5482826130cd565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff166136015760405162461bcd60e51b81526004016113db90614953565b610e5482826139e6565b600081831061361a578161361c565b825b9392505050565b6001600160a01b0382166136835760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016113db565b6001600160a01b038216600090815260976020526040902054818110156136f75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016113db565b6001600160a01b0383166000818152609760209081526040808320868603905560998054879003905551858152919291600080516020614a85833981519152910160405180910390a3505050565b6001600160a01b0383166137a95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016113db565b6001600160a01b03821661380b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016113db565b6001600160a01b038316600090815260976020526040902054818110156138835760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016113db565b6001600160a01b038085166000818152609760205260408082208686039055928616808252908390208054860190559151600080516020614a85833981519152906138d19086815260200190565b60405180910390a3610f8a565b6138e88282611c88565b610e54576138f581613a34565b613900836020613a46565b60405160200161391192919061499e565b60408051601f198184030181529082905262461bcd60e51b82526113db91600401613e18565b6001600160a01b03821661398d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016113db565b806099600082825461399f9190614687565b90915550506001600160a01b038216600081815260976020908152604080832080548601905551848152600080516020614a85833981519152910160405180910390a35050565b600054610100900460ff16613a0d5760405162461bcd60e51b81526004016113db90614953565b8151613a2090609a906020850190613c65565b5080516110b590609b906020840190613c65565b60606115c36001600160a01b03831660145b60606000613a558360026147e3565b613a60906002614687565b6001600160401b03811115613a7757613a7761416d565b6040519080825280601f01601f191660200182016040528015613aa1576020820181803683370190505b509050600360fc1b81600081518110613abc57613abc61479b565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613aeb57613aeb61479b565b60200101906001600160f81b031916908160001a9053506000613b0f8460026147e3565b613b1a906001614687565b90505b6001811115613b92576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613b4e57613b4e61479b565b1a60f81b828281518110613b6457613b6461479b565b60200101906001600160f81b031916908160001a90535060049490941c93613b8b81614a0d565b9050613b1d565b50831561361c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016113db565b828054613bed906145ab565b90600052602060002090601f016020900481019282613c0f5760008555613c55565b82601f10613c285782800160ff19823516178555613c55565b82800160010185558215613c55579182015b82811115613c55578235825591602001919060010190613c3a565b50613c61929150613cd9565b5090565b828054613c71906145ab565b90600052602060002090601f016020900481019282613c935760008555613c55565b82601f10613cac57805160ff1916838001178555613c55565b82800160010185558215613c55579182015b82811115613c55578251825591602001919060010190613cbe565b5b80821115613c615760008155600101613cda565b634e487b7160e01b600052601160045260246000fd5b600082821015613d1657613d16613cee565b500390565b60008085851115613d2b57600080fd5b83861115613d3857600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015613d725780818660140360031b1b83161692505b505092915050565b60005b83811015613d95578181015183820152602001613d7d565b83811115610f8a5750506000910152565b60008251613db8818460208701613d7a565b9190910192915050565b600060208284031215613dd457600080fd5b81356001600160e01b03198116811461361c57600080fd5b60008151808452613e04816020860160208601613d7a565b601f01601f19169290920160200192915050565b60208152600061361c6020830184613dec565b6001600160a01b038116811461080357600080fd5b60008060408385031215613e5357600080fd5b8235613e5e81613e2b565b946020939093013593505050565b60008083601f840112613e7e57600080fd5b5081356001600160401b03811115613e9557600080fd5b602083019150836020828501011115613ead57600080fd5b9250929050565b60008060208385031215613ec757600080fd5b82356001600160401b03811115613edd57600080fd5b613ee985828601613e6c565b90969095509350505050565b600060208284031215613f0757600080fd5b813561361c81613e2b565b60008083601f840112613f2457600080fd5b5081356001600160401b03811115613f3b57600080fd5b6020830191508360208260051b8501011115613ead57600080fd5b60008060008060408587031215613f6c57600080fd5b84356001600160401b0380821115613f8357600080fd5b613f8f88838901613f12565b90965094506020870135915080821115613fa857600080fd5b50613fb587828801613f12565b95989497509550505050565b600060208284031215613fd357600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6000806040838503121561400157600080fd5b50508035926020909101359150565b60008060006060848603121561402557600080fd5b833561403081613e2b565b9250602084013561404081613e2b565b929592945050506040919091013590565b6000806020838503121561406457600080fd5b82356001600160401b0381111561407a57600080fd5b613ee985828601613f12565b600081518084526020808501945080840160005b838110156140bf5781516001600160a01b03168752958201959082019060010161409a565b509495945050505050565b60208152600061361c6020830184614086565b6060815260006140f06060830186614086565b82810360208481019190915285518083528682019282019060005b818110156141275784518352938301939183019160010161410b565b5050809350505050826040830152949350505050565b6000806040838503121561415057600080fd5b82359150602083013561416281613e2b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156141a5576141a561416d565b60405290565b604051601f8201601f191681016001600160401b03811182821017156141d3576141d361416d565b604052919050565b60006001600160401b038211156141f4576141f461416d565b50601f01601f191660200190565b600082601f83011261421357600080fd5b8135614226614221826141db565b6141ab565b81815284602083860101111561423b57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561426d57600080fd5b833561427881613e2b565b9250602084013561428881613e2b565b915060408401356001600160401b038111156142a357600080fd5b6142af86828701614202565b9150509250925092565b600082601f8301126142ca57600080fd5b813560206001600160401b038211156142e5576142e561416d565b8160051b6142f48282016141ab565b928352848101820192828101908785111561430e57600080fd5b83870192505b8483101561433657823561432781613e2b565b82529183019190830190614314565b979650505050505050565b60006020828403121561435357600080fd5b81356001600160401b0381111561436957600080fd5b614375848285016142b9565b949350505050565b602080825282518282018190526000919060409081850190868401855b828110156143d257815180516001600160a01b031685528681015187860152850151858501526060909301929085019060010161439a565b5091979650505050505050565b600080600080606085870312156143f557600080fd5b843561440081613e2b565b93506020850135925060408501356001600160401b0381111561442257600080fd5b613fb587828801613e6c565b600080600080600080600061012080898b03121561444b57600080fd5b883561445681613e2b565b975060208981013561446781613e2b565b975060408a013561447781613e2b565b965060608a01356001600160401b038082111561449357600080fd5b61449f8d838e01614202565b975060808c01359150808211156144b557600080fd5b506144c28c828d01614202565b95505060a08a013593508a60df8b01126144db57600080fd5b6144e3614183565b918a0191808c8411156144f557600080fd5b60c08c015b8481101561451a57803561450d81613e2b565b83529183019183016144fa565b508094505050505092959891949750929550565b6000806040838503121561454157600080fd5b823561454c81613e2b565b9150602083013561416281613e2b565b6000806040838503121561456f57600080fd5b823561457a81613e2b565b915060208301356001600160401b0381111561459557600080fd5b6145a1858286016142b9565b9150509250929050565b600181811c908216806145bf57607f821691505b6020821081036145df57634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006143756020830184866145e5565b8183526000602080850194508260005b858110156140bf57813561464581613e2b565b6001600160a01b031687529582019590820190600101614632565b604081526000614674604083018688614622565b8281036020840152614336818587614622565b6000821982111561469a5761469a613cee565b500190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c90808316806146d257607f831692505b602080841082036146f357634e487b7160e01b600052602260045260246000fd5b8388526020880182801561470e576001811461471f5761474a565b60ff1987168252828201975061474a565b60008981526020902060005b878110156147445781548482015290860190840161472b565b83019850505b5050505050505092915050565b60408152600061476a60408301866146b8565b828103602084015261477d8185876145e5565b9695505050505050565b602081526000614375602083018486614622565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156147c357600080fd5b5051919050565b6000600182016147dc576147dc613cee565b5060010190565b60008160001904831182151516156147fd576147fd613cee565b500290565b60008261481f57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b038316815260406020820181905260009061437590830184613dec565b60006020828403121561485a57600080fd5b815161361c81613e2b565b60006020828403121561487757600080fd5b81516001600160401b0381111561488d57600080fd5b8201601f8101841361489e57600080fd5b80516148ac614221826141db565b8181528560208385010111156148c157600080fd5b6148d2826020830160208601613d7a565b95945050505050565b8381528260208201526060604082015260006148d26060830184613dec565b60006020828403121561490c57600080fd5b8151801515811461361c57600080fd5b60208152600061361c60208301846146b8565b6001600160a01b038316815260406020820181905260009061437590830184614086565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516149d0816017850160208801613d7a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614a01816028840160208801613d7a565b01602801949350505050565b600081614a1c57614a1c613cee565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef51839ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a264697066735822122060e4a5a4001f3f5119dddb42db5106e9c3079eeb0c089377d6a4963dbae6d75864736f6c634300080d0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
