{
    "_format": "hh-sol-artifact-1",
    "contractName": "NodeModule",
    "sourceName": "contracts/OperatorTokenomics/OperatorPolicies/NodeModule.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": "newNodes",
                    "type": "address[]"
                }
            ],
            "name": "_setNodeAddresses",
            "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": "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": "createCoordinationStream",
            "outputs": [],
            "stateMutability": "nonpayable",
            "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": [],
            "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": "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": "0x608060405234801561001057600080fd5b506150e4806100206000396000f3fe608060405234801561001057600080fd5b50600436106104b75760003560e01c80637e82fd6f11610278578063adc9772e1161015c578063d673de46116100ce578063f2888dbb11610092578063f2888dbb14610bef578063f3aea65014610c02578063f4350c2414610c15578063f4408e4b14610c28578063fc0c546a14610c30578063ffff59a614610c43576104b7565b8063d673de4614610b81578063dd62ed3e14610ba1578063e364215314610bb4578063e58378bb14610bc7578063e8e658b414610bdc576104b7565b8063bc697ec511610120578063bc697ec514610b1a578063bc9b30c814610b2d578063bed6ff0914610b40578063c229918e14610b53578063d1b6861114610b5b578063d547741f14610b6e576104b7565b8063adc9772e14610a63578063b07f3c4714610a76578063b72cd7a814610ad4578063ba2bfc0a14610ae7578063bc59647e14610b07576104b7565b8063a217fddf116101f5578063a74194af116101b9578063a74194af14610a06578063a9059cbb14610a19578063a93a019f14610a2c578063a99fa31a14610a3f578063aa5703ad14610a52578063aa77fd5514610a5a576104b7565b8063a217fddf146109b2578063a457c2d7146109ba578063a48dca18146109cd578063a4c0ed36146109e0578063a63ed2c8146109f3576104b7565b806391d148541161023c57806391d14854146109685780639413462c1461097b57806395d89b4114610984578063988331301461098c5780639fa6dd351461099f576104b7565b80637e82fd6f14610911578063870ffde21461092657806387396e3b1461092f5780638da5cb5b14610942578063918b5be114610955576104b7565b8063313ce5671161039f578063558a15681161031c57806364f1abb7116102e057806364f1abb7146108925780636c68c0e1146108a557806370a08231146108b8578063799e2590146108cb5780637bf713b6146108de5780637d429385146108f1576104b7565b8063558a15681461083757806358fc614a146108405780635dff6e9f146108605780635e61bb871461087357806363d1ecf21461087f576104b7565b8063430457e111610363578063430457e1146107d75780634a178fe4146107f75780634b095c031461080a57806350d3ba9e1461081d57806354fd4d5014610830576104b7565b8063313ce5671461079257806336568abe146107a1578063377f1ecb146107b4578063392f37e9146107bc57806339509351146107c4576104b7565b80631c53c28011610438578063248a9ca3116103fc578063248a9ca31461070a57806325c335491461072d5780632c23c940146107405780632e949824146107535780632ebd89d1146107685780632f2ff15d1461077f576104b7565b80631c53c2801461069e57806320fed94f146106be57806321194bd7146106d157806321a76907146106e457806323b872dd146106f7576104b7565b80630fd6ff491161047f5780630fd6ff491461065357806311606010146106685780631401f70b1461067057806314797daa1461068357806318160ddd14610696576104b7565b806301ffc9a7146105d757806304cbab8b146105ff57806306fdde0314610616578063092c5b3b1461062b578063095ea7b314610640575b60003660603330146104dc57604051634ca8886760e01b815260040160405180910390fd5b81600084826104ec6014826141d9565b6104f8928592906141f0565b6105019161421a565b60601c905060008581866105166020876141d9565b92610523939291906141f0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b03871692506105759150859061427b565b600060405180830381855af49150503d80600081146105b0576040519150601f19603f3d011682016040523d82523d6000602084013e6105b5565b606091505b5091509150816105c757805181602001fd5b8051975060200195505050505050f35b6105ea6105e5366004614297565b610c56565b60405190151581526020015b60405180910390f35b61060860c95481565b6040519081526020016105f6565b61061e610c8d565b6040516105f691906142ed565b61060860008051602061502f83398151915281565b6105ea61064e366004614315565b610d1f565b610666610661366004614389565b610d37565b005b6105ea610dad565b61066661067e3660046143ca565b610df8565b61066661069136600461442b565b610e93565b609954610608565b6106b16106ac366004614496565b610f00565b6040516105f691906144af565b6106666106cc3660046144c3565b610f2a565b6106666106df366004614389565b610fcb565b60d0546106b1906001600160a01b031681565b6105ea6107053660046144e5565b61106b565b610608610718366004614496565b60009081526065602052604090206001015490565b61066661073b366004614526565b611091565b61066661074e366004614526565b6110f7565b61075b6112a1565b6040516105f6919061459f565b610770611302565b6040516105f6939291906145b2565b61066661078d366004614612565b611531565b604051601281526020016105f6565b6106666107af366004614612565b611556565b6106666115d5565b61061e611815565b6105ea6107d2366004614315565b6118a3565b6106086107e53660046143ca565b60d96020526000908152604090205481565b61066661080536600461472d565b6118c5565b610666610818366004614315565b611959565b61060861082b366004614816565b6119bb565b6003610608565b61060860d45481565b61060861084e3660046143ca565b60d66020526000908152604090205481565b61066661086e366004614496565b6119ea565b60db5460dc54146105ea565b60ce546106b1906001600160a01b031681565b6106666108a03660046143ca565b611a2b565b6106666108b3366004614496565b611cf7565b6106086108c63660046143ca565b611d29565b60cb546106b1906001600160a01b031681565b6106666108ec366004614496565b611d44565b6106086108ff3660046143ca565b60d76020526000908152604090205481565b610919611ec8565b6040516105f69190614852565b61060860ca5481565b61066661093d366004614496565b611fe7565b60d2546106b1906001600160a01b031681565b610666610963366004614389565b612013565b6105ea610976366004614612565b6120a5565b61060860db5481565b61061e6120d0565b60d1546106b1906001600160a01b031681565b6106666109ad366004614496565b6120df565b610608600081565b6105ea6109c8366004614315565b61217d565b60cf546106b1906001600160a01b031681565b6106666109ee3660046148b4565b612203565b610608610a013660046143ca565b61228a565b6106b1610a14366004614496565b61230e565b6105ea610a27366004614315565b61231e565b610666610a3a366004614315565b61232c565b610666610a4d366004614903565b612441565b61061e6126a7565b61060860dc5481565b610666610a71366004614315565b612723565b610aaf610a84366004614496565b60da602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016105f6565b60cc546106b1906001600160a01b031681565b610608610af53660046143ca565b60d86020526000908152604090205481565b610666610b1536600461442b565b612785565b610666610b28366004614315565b6128a7565b60cd546106b1906001600160a01b031681565b610666610b4e3660046144e5565b6128f0565b61060861294d565b610666610b69366004614315565b6129db565b610666610b7c366004614612565b612a24565b610608610b8f3660046143ca565b60de6020526000908152604090205481565b610608610baf366004614a03565b612a49565b60e0546106b1906001600160a01b031681565b61060860008051602061500f83398151915281565b610666610bea366004614816565b612a74565b610666610bfd3660046143ca565b612d3b565b610666610c10366004614315565b612d79565b610666610c23366004614a31565b612dc2565b61061e612def565b60d3546106b1906001600160a01b031681565b610666610c51366004614315565b612dfc565b60006001600160e01b03198216637965db0b60e01b1480610c8757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060609a8054610c9c90614a80565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc890614a80565b8015610d155780601f10610cea57610100808354040283529160200191610d15565b820191906000526020600020905b815481529060010190602001808311610cf857829003601f168201915b5050505050905090565b600033610d2d818585612e45565b5060019392505050565b33600090815260de60205260408120549003610d6657604051634f1cec5f60e11b815260040160405180910390fd5b336001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610da1929190614ae3565b60405180910390a25050565b60cf546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610df1916001600160a01b0390911690612f69565b1515919050565b610e1060008051602061502f833981519152336120a5565b610e2d57604051631a76708960e21b815260040160405180910390fd5b60d054604051610e8f916001600160a01b03169063af9ee81d60e01b90610e589085906024016144af565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f69565b5050565b610eab60008051602061502f833981519152336120a5565b610ec857604051631a76708960e21b815260040160405180910390fd5b60ce54604051610ef9916001600160a01b031690635e2cb23f60e11b90610e58908890889088908890602401614b35565b5050505050565b60dd8181548110610f1057600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815260d660205260408120549003610f595760405163012d886f60e51b815260040160405180910390fd5b8215610f98578160ca6000828254610f719190614b5c565b90915550610f8090508361300a565b8160ca6000828254610f9291906141d9565b90915550505b60d054604051610fc5916001600160a01b031690631644f38560e31b90610e589085908790602401614b74565b50505050565b610fe360008051602061502f833981519152336120a5565b61100057604051631a76708960e21b815260040160405180910390fd5b60e0546040516342617fe760e01b81526001600160a01b03909116906342617fe7906110359060df9086908690600401614c2c565b600060405180830381600087803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b505050505050565b60003361107985828561311c565b611084858585613190565b60019150505b9392505050565b6110a960008051602061502f833981519152336120a5565b6110c657604051631a76708960e21b815260040160405180910390fd5b60ce546040516110f2916001600160a01b03169062b08f2560e61b90610e589086908690602401614c5c565b505050565b60005b8181101561118957600083838381811061111657611116614c70565b905060200201602081019061112b91906143ca565b6001600160a01b038116600090815260de60205260408120549192500361115557611155816133ab565b6001600160a01b0316600090815260e260205260409020805460ff191660011790558061118181614c86565b9150506110fa565b5060005b60dd548110156111fd57600060dd82815481106111ac576111ac614c70565b60009182526020808320909101546001600160a01b031680835260e290915260409091205490915060ff166111e9576111e481613461565b6111f7565b816111f381614c86565b9250505b5061118d565b5060005b8181101561126457600083838381811061121d5761121d614c70565b905060200201602081019061123291906143ca565b6001600160a01b0316600090815260e260205260409020805460ff19169055508061125c81614c86565b915050611201565b507ffa7fb8364e713f89c581b4b8a998a62e7be034cb4fffa97c6a4a62072ebddba660dd6040516112959190614c9f565b60405180910390a15050565b606060dd805480602002602001604051908101604052809291908181526020018280548015610d1557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112db575050505050905090565b606080600060d5805490506001600160401b0381111561132457611324614642565b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b5060d5549093506001600160401b0381111561136b5761136b614642565b604051908082528060200260200182016040528015611394578160200160208202803683370190505b50915060005b60d55481101561149857600060d582815481106113b9576113b9614c70565b9060005260206000200160009054906101000a90046001600160a01b03169050808583815181106113ec576113ec614c70565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c04906114279030906004016144af565b602060405180830381865afa158015611444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114689190614cef565b84838151811061147a5761147a614c70565b6020908102919091010152508061149081614c86565b91505061139a565b5060d154604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e9190614cef565b61151661294d565b6115209190614d08565b61152a9190614d27565b9050909192565b60008281526065602052604090206001015461154c8161359a565b6110f283836135a4565b6001600160a01b03811633146115cb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610e8f828261362a565b60d160009054906101000a90046001600160a01b03166001600160a01b0316637b0c28426040518163ffffffff1660e01b8152600401602060405180830381865afa158015611628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164c9190614d49565b60e080546001600160a01b0319166001600160a01b03929092169182179055604051635e57966d60e01b8152635e57966d9061168c9030906004016144af565b600060405180830381865afa1580156116a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116d19190810190614d66565b6040516020016116e19190614ddc565b60405160208183030381529060405260df90805190602001906117059291906140b6565b5060e05460408051630ef8cdc760e01b81526004810191909152601660448201527517b7b832b930ba37b917b1b7b7b93234b730ba34b7b760511b606482015260806024820152601060848201526f7b22706172746974696f6e73223a317d60801b60a48201526001600160a01b0390911690630ef8cdc79060c401600060405180830381600087803b15801561179b57600080fd5b505af11580156117af573d6000803e3d6000fd5b505060e054604051632337c3c760e11b81526001600160a01b03909116925063466f878e91506117e79060df90600390600401614e38565b600060405180830381600087803b15801561180157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b60e1805461182290614a80565b80601f016020809104026020016040519081016040528092919081815260200182805461184e90614a80565b801561189b5780601f106118705761010080835404028352916020019161189b565b820191906000526020600020905b81548152906001019060200180831161187e57829003601f168201915b505050505081565b600033610d2d8185856118b68383612a49565b6118c09190614b5c565b612e45565b33600090815260de602052604081205490036118f457604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c6906119229085908590600401614e5a565b600060405180830381600087803b15801561193c57600080fd5b505af1158015611950573d6000803e3d6000fd5b50505050505050565b61197160008051602061502f833981519152336120a5565b61198e57604051631a76708960e21b815260040160405180910390fd5b60d0546040516110f2916001600160a01b03169063d572a9cd60e01b90610e589086908690602401614b74565b60d054604051600091610c87916001600160a01b039091169062d8aad560e51b90610e5890869060240161459f565b611a0260008051602061502f833981519152336120a5565b611a1f57604051631a76708960e21b815260040160405180910390fd5b611a2881613691565b50565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa29190614d49565b6001600160a01b0316634703e001336040518263ffffffff1660e01b8152600401611acd91906144af565b602060405180830381865afa158015611aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0e9190614cef565b600003611b2e576040516359e9fbbf60e11b815260040160405180910390fd5b60d154604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa158015611b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba19190614cef565b611bab9042614b5c565b9050600060d160009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c269190614cef565b611c309083614b5c565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b8152600401611c9591906144af565b600060405180830381865afa158015611cb2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cda9190810190614d66565b604051611ce993929190614e7e565b60405180910390a350505050565b60cf5460405160248101839052336044820152610e8f916001600160a01b031690630744132360e21b90606401610e58565b6001600160a01b031660009081526097602052604090205490565b33600081815260d660205260408120549003611d735760405163012d886f60e51b815260040160405180910390fd5b611d7c8261300a565b6001600160a01b038116600090815260d8602052604081208054849290611da4908490614b5c565b925050819055508160ca6000828254611dbd9190614b5c565b90915550506001600160a01b038116600081815260d8602090815260408083205460d7909252909120547f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd7891611e12916141d9565b60405190815260200160405180910390a260008051602061508f83398151915260ca5460c954611e4291906141d9565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190611e729030906004016144af565b602060405180830381865afa158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb39190614cef565b60408051928352602083019190915201611295565b6060600060dc5460db54611edc91906141d9565b9050806001600160401b03811115611ef657611ef6614642565b604051908082528060200260200182016040528015611f5457816020015b611f41604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611f145790505b50915060005b81811015611fe25760da60008260dc54611f749190614b5c565b81526020808201929092526040908101600020815160608101835281546001600160a01b0316815260018201549381019390935260020154908201528351849083908110611fc457611fc4614c70565b60200260200101819052508080611fda90614c86565b915050611f5a565b505090565b60cf5460405160248101839052610e8f916001600160a01b03169063211cccd160e21b90604401610e58565b61202b60008051602061502f833981519152336120a5565b61204857604051631a76708960e21b815260040160405180910390fd5b61205460e1838361413a565b5060d45460d2546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d0906120999086908690614ae3565b60405180910390a35050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b8054610c9c90614a80565b60d3546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af1158015612144573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121689190614e9d565b50612173338261372e565b611a286000611fe7565b6000338161218b8286612a49565b9050838110156121eb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016115c2565b6121f88286868403612e45565b506001949350505050565b60d3546001600160a01b0316331461222e5760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815260d660205260409020548490156122545750610fc5565b8460148390036122695750823560601c612276565b6020839003612276575082355b612280818661372e565b6110636000611fe7565b600061229582611d29565b6000036122a457506000919050565b610c87630de731f360e31b6122b884611d29565b60cc5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261399d565b60d58181548110610f1057600080fd5b600033610d2d818585613190565b60db5460dc5414806123d2575060d160009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b09190614cef565b60dc54600090815260da60205260409020600201546123cf9190614b5c565b42105b1561240c576123ef60008051602061502f833981519152336120a5565b61240c57604051631a76708960e21b815260040160405180910390fd5b60d054604051612437916001600160a01b031690633d16f42d60e01b90610e589086906024016144af565b50610e8f81611fe7565b600054610100900460ff16158080156124615750600054600160ff909116105b8061247b5750303b15801561247b575060005460ff166001145b6124de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016115c2565b6000805460ff191660011790558015612501576000805461ff0019166101001790555b60d180546001600160a01b0319166001600160a01b038916179055612524613a33565b61253c60008051602061500f83398151915287613a5c565b61255460008051602061502f83398151915287613a5c565b61257a60008051602061502f83398151915260008051602061500f833981519152613a66565b60d380546001600160a01b03199081166001600160a01b038b811691909117909255835160ce80548316918416919091179055602084015160cf80548316918416919091179055604084015160d08054831691841691909117905560d280549091169188169190911790556125ef8580613ab1565b6125fa600033613a5c565b835161260d9060e19060208701906140b6565b5061261783613691565b60ce546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b179052612656916001600160a01b031690612f69565b50801561269d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60e0546040516331ca7de960e11b81526060916001600160a01b031690636394fbd2906126d99060df90600401614ebf565b600060405180830381865afa1580156126f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261271e9190810190614d66565b905090565b61273b60008051602061502f833981519152336120a5565b61275857604051631a76708960e21b815260040160405180910390fd5b60d0546040516110f2916001600160a01b03169063aa0d97b360e01b90610e589086908690602401614b74565b60005b838110156127f65760008585838181106127a4576127a4614c70565b90506020020160208101906127b991906143ca565b6001600160a01b038116600090815260de6020526040812054919250036127e3576127e3816133ab565b50806127ee81614c86565b915050612788565b5060005b8181101561286857600083838381811061281657612816614c70565b905060200201602081019061282b91906143ca565b6001600160a01b038116600090815260de6020526040902054909150156128555761285581613461565b508061286081614c86565b9150506127fa565b507ffa7fb8364e713f89c581b4b8a998a62e7be034cb4fffa97c6a4a62072ebddba660dd6040516128999190614c9f565b60405180910390a150505050565b60006128b28161359a565b60cc80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc59190632522e97360e11b90604401610e58565b33600090815260de6020526040812054900361291f57604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce4906119229085908590600401614b74565b60ca5460c95460d3546040516370a0823160e01b815260009392916001600160a01b0316906370a08231906129869030906004016144af565b602060405180830381865afa1580156129a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c79190614cef565b6129d19190614b5c565b61271e91906141d9565b6129f360008051602061502f833981519152336120a5565b612a1057604051631a76708960e21b815260040160405180910390fd5b612a1a8282611959565b610e8f6000611fe7565b600082815260656020526040902060010154612a3f8161359a565b6110f2838361362a565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b6000612a7e61294d565b90506000612a8b836119bb565b905033612aa660008051602061502f833981519152826120a5565b158015612ac957506001600160a01b038116600090815260de6020526040902054155b15612d31576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b509190614cef565b612b5a9086614d08565b612b649190614d27565b905080831115612d2f576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf09190614cef565b612bfa9086614d08565b612c049190614d27565b9050612c0f8161300a565b60d35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612c419086908590600401614b74565b6020604051808303816000875af1158015612c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c849190614e9d565b5060008051602061508f83398151915260ca5460c954612ca491906141d9565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190612cd49030906004016144af565b602060405180830381865afa158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d159190614cef565b6040805192835260208301919091520160405180910390a1505b505b610fc56000611fe7565b612d5360008051602061502f833981519152336120a5565b612d7057604051631a76708960e21b815260040160405180910390fd5b61217381610df8565b6000612d848161359a565b60cb80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc59190632522e97360e11b90604401610e58565b60cf546040516110f2916001600160a01b031690637a227c9f60e01b90610e589086908690602401614ed2565b60df805461182290614a80565b6000612e078161359a565b60cd80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc59190632522e97360e11b90604401610e58565b6001600160a01b038316612ea75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016115c2565b6001600160a01b038216612f085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016115c2565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000846001600160a01b031684604051612f86919061427b565b600060405180830381855af49150503d8060008114612fc1576040519150601f19603f3d011682016040523d82523d6000602084013e612fc6565b606091505b509150915081612ffe578051600003612ff657848460405163918623b760e01b81526004016115c2929190614e5a565b805181602001fd5b60200151949350505050565b60d254600090613022906001600160a01b0316611d29565b905080600003613030575050565b60cc5460405160248101849052600091613061916001600160a01b0390911690632b911c0960e21b90604401610e58565b9050600061306f8383613ae2565b60d254909150613088906001600160a01b031682613af8565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a160d2546001600160a01b031660008051602061504f8339815191526130ed82611d29565b6099546130f861294d565b6040805193845260208401929092529082015260600160405180910390a250505050565b60006131288484612a49565b90506000198114610fc557818110156131835760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016115c2565b610fc58484848403612e45565b600061319b83611d29565b1590506131a9848484613c1a565b60d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156131f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132179190614cef565b90508061322386611d29565b1080156132385750600061323686611d29565b115b1561326a5761324685611d29565b6040516324c6940760e01b81526004810191909152602481018290526044016115c2565b8061327485611d29565b10156132835761324684611d29565b81156132c75760cb546001600160a01b0316156132c75760cb546040516132c5916001600160a01b03169063217fb33b60e01b90610e589088906024016144af565b505b60cd546001600160a01b03161561330e5760cd546040516001600160a01b0387811660248301526000604483015261330c921690633608993560e21b90606401610e58565b505b846001600160a01b031660008051602061504f83398151915261333087611d29565b60995461333b61294d565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b031660008051602061504f83398151915261337b86611d29565b60995461338661294d565b6040805193845260208401929092529082015260600160405180910390a25050505050565b60dd80546001810182557fac507b9f8bf86ad8bb770f71cd2b1992902ae0314d93fc0f2bb011d70e7962260180546001600160a01b0319166001600160a01b038481169182179092559154600092835260de6020526040928390205560e0549151634cbf455560e11b815291169063997e8aaa906134339060df908590600290600401614ef6565b600060405180830381600087803b15801561344d57600080fd5b505af1158015610ef9573d6000803e3d6000fd5b6001600160a01b038116600090815260de6020526040812054613486906001906141d9565b60dd805491925060009161349c906001906141d9565b815481106134ac576134ac614c70565b60009182526020909120015460dd80546001600160a01b0390921692508291849081106134db576134db614c70565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060dd80548061351a5761351a614f27565b600082815260209020810160001990810180546001600160a01b0319169055019055613547826001614b5c565b6001600160a01b03808316600090815260de60205260408082209390935585821681528281205560e0549151631f1cbd7560e11b8152911690633e397aea906119229060df908790600290600401614ef6565b611a288133613db3565b6135ae82826120a5565b610e8f5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556135e63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61363482826120a5565b15610e8f5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60c954156136b2576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a76400008111156136de57604051631e6f460160e31b8152600481018290526024016115c2565b60d481905560d25460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d0906137239060e190614ebf565b60405180910390a350565b60cc546040516024810183905260448101839052600091613766916001600160a01b0390911690633a49b55760e21b90606401610e58565b90506137728382613e0c565b60d2546001600160a01b038481169116146138505760d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156137d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f59190614cef565b90508061380185611d29565b10156138105761324684611d29565b60cb546001600160a01b03161561384e5760cb5460405161384c916001600160a01b03169063217fb33b60e01b90610e589088906024016144af565b505b505b6001600160a01b038316600081815260d9602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab9061389d9085815260200190565b60405180910390a2826001600160a01b031660008051602061504f8339815191526138c785611d29565b6099546138d261294d565b6040805193845260208401929092529082015260600160405180910390a260008051602061508f83398151915260ca5460c95461390f91906141d9565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a082319061393f9030906004016144af565b602060405180830381865afa15801561395c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139809190614cef565b6040805192835260208301919091520160405180910390a1505050565b6000806000306001600160a01b0316846040516139ba919061427b565b600060405180830381855afa9150503d80600081146139f5576040519150601f19603f3d011682016040523d82523d6000602084013e6139fa565b606091505b509150915081613a28578051600003612ff6578360405163029801d760e41b81526004016115c291906142ed565b602001519392505050565b600054610100900460ff16613a5a5760405162461bcd60e51b81526004016115c290614f3d565b565b610e8f82826135a4565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff16613ad85760405162461bcd60e51b81526004016115c290614f3d565b610e8f8282613ebb565b6000818310613af1578161108a565b5090919050565b6001600160a01b038216613b585760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016115c2565b6001600160a01b03821660009081526097602052604090205481811015613bcc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016115c2565b6001600160a01b038316600081815260976020908152604080832086860390556099805487900390555185815291929160008051602061506f833981519152910160405180910390a3505050565b6001600160a01b038316613c7e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016115c2565b6001600160a01b038216613ce05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016115c2565b6001600160a01b03831660009081526097602052604090205481811015613d585760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016115c2565b6001600160a01b03808516600081815260976020526040808220868603905592861680825290839020805486019055915160008051602061506f83398151915290613da69086815260200190565b60405180910390a3610fc5565b613dbd82826120a5565b610e8f57613dca81613f09565b613dd5836020613f1b565b604051602001613de6929190614f88565b60408051601f198184030181529082905262461bcd60e51b82526115c2916004016142ed565b6001600160a01b038216613e625760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016115c2565b8060996000828254613e749190614b5c565b90915550506001600160a01b03821660008181526097602090815260408083208054860190555184815260008051602061506f833981519152910160405180910390a35050565b600054610100900460ff16613ee25760405162461bcd60e51b81526004016115c290614f3d565b8151613ef590609a9060208501906140b6565b5080516110f290609b9060208401906140b6565b6060610c876001600160a01b03831660145b60606000613f2a836002614d08565b613f35906002614b5c565b6001600160401b03811115613f4c57613f4c614642565b6040519080825280601f01601f191660200182016040528015613f76576020820181803683370190505b509050600360fc1b81600081518110613f9157613f91614c70565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613fc057613fc0614c70565b60200101906001600160f81b031916908160001a9053506000613fe4846002614d08565b613fef906001614b5c565b90505b6001811115614067576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061402357614023614c70565b1a60f81b82828151811061403957614039614c70565b60200101906001600160f81b031916908160001a90535060049490941c9361406081614ff7565b9050613ff2565b50831561108a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016115c2565b8280546140c290614a80565b90600052602060002090601f0160209004810192826140e4576000855561412a565b82601f106140fd57805160ff191683800117855561412a565b8280016001018555821561412a579182015b8281111561412a57825182559160200191906001019061410f565b506141369291506141ae565b5090565b82805461414690614a80565b90600052602060002090601f016020900481019282614168576000855561412a565b82601f106141815782800160ff1982351617855561412a565b8280016001018555821561412a579182015b8281111561412a578235825591602001919060010190614193565b5b8082111561413657600081556001016141af565b634e487b7160e01b600052601160045260246000fd5b6000828210156141eb576141eb6141c3565b500390565b6000808585111561420057600080fd5b8386111561420d57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156142475780818660140360031b1b83161692505b505092915050565b60005b8381101561426a578181015183820152602001614252565b83811115610fc55750506000910152565b6000825161428d81846020870161424f565b9190910192915050565b6000602082840312156142a957600080fd5b81356001600160e01b03198116811461108a57600080fd5b600081518084526142d981602086016020860161424f565b601f01601f19169290920160200192915050565b60208152600061108a60208301846142c1565b6001600160a01b0381168114611a2857600080fd5b6000806040838503121561432857600080fd5b823561433381614300565b946020939093013593505050565b60008083601f84011261435357600080fd5b5081356001600160401b0381111561436a57600080fd5b60208301915083602082850101111561438257600080fd5b9250929050565b6000806020838503121561439c57600080fd5b82356001600160401b038111156143b257600080fd5b6143be85828601614341565b90969095509350505050565b6000602082840312156143dc57600080fd5b813561108a81614300565b60008083601f8401126143f957600080fd5b5081356001600160401b0381111561441057600080fd5b6020830191508360208260051b850101111561438257600080fd5b6000806000806040858703121561444157600080fd5b84356001600160401b038082111561445857600080fd5b614464888389016143e7565b9096509450602087013591508082111561447d57600080fd5b5061448a878288016143e7565b95989497509550505050565b6000602082840312156144a857600080fd5b5035919050565b6001600160a01b0391909116815260200190565b600080604083850312156144d657600080fd5b50508035926020909101359150565b6000806000606084860312156144fa57600080fd5b833561450581614300565b9250602084013561451581614300565b929592945050506040919091013590565b6000806020838503121561453957600080fd5b82356001600160401b0381111561454f57600080fd5b6143be858286016143e7565b600081518084526020808501945080840160005b838110156145945781516001600160a01b03168752958201959082019060010161456f565b509495945050505050565b60208152600061108a602083018461455b565b6060815260006145c5606083018661455b565b82810360208481019190915285518083528682019282019060005b818110156145fc578451835293830193918301916001016145e0565b5050809350505050826040830152949350505050565b6000806040838503121561462557600080fd5b82359150602083013561463781614300565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561467a5761467a614642565b60405290565b604051601f8201601f191681016001600160401b03811182821017156146a8576146a8614642565b604052919050565b60006001600160401b038211156146c9576146c9614642565b50601f01601f191660200190565b600082601f8301126146e857600080fd5b81356146fb6146f6826146b0565b614680565b81815284602083860101111561471057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561474257600080fd5b833561474d81614300565b9250602084013561475d81614300565b915060408401356001600160401b0381111561477857600080fd5b614784868287016146d7565b9150509250925092565b600082601f83011261479f57600080fd5b813560206001600160401b038211156147ba576147ba614642565b8160051b6147c9828201614680565b92835284810182019282810190878511156147e357600080fd5b83870192505b8483101561480b5782356147fc81614300565b825291830191908301906147e9565b979650505050505050565b60006020828403121561482857600080fd5b81356001600160401b0381111561483e57600080fd5b61484a8482850161478e565b949350505050565b602080825282518282018190526000919060409081850190868401855b828110156148a757815180516001600160a01b031685528681015187860152850151858501526060909301929085019060010161486f565b5091979650505050505050565b600080600080606085870312156148ca57600080fd5b84356148d581614300565b93506020850135925060408501356001600160401b038111156148f757600080fd5b61448a87828801614341565b600080600080600080600061012080898b03121561492057600080fd5b883561492b81614300565b975060208981013561493c81614300565b975060408a013561494c81614300565b965060608a01356001600160401b038082111561496857600080fd5b6149748d838e016146d7565b975060808c013591508082111561498a57600080fd5b506149978c828d016146d7565b95505060a08a013593508a60df8b01126149b057600080fd5b6149b8614658565b918a0191808c8411156149ca57600080fd5b60c08c015b848110156149ef5780356149e281614300565b83529183019183016149cf565b508094505050505092959891949750929550565b60008060408385031215614a1657600080fd5b8235614a2181614300565b9150602083013561463781614300565b60008060408385031215614a4457600080fd5b8235614a4f81614300565b915060208301356001600160401b03811115614a6a57600080fd5b614a768582860161478e565b9150509250929050565b600181811c90821680614a9457607f821691505b602082108103614ab457634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600061484a602083018486614aba565b8183526000602080850194508260005b85811015614594578135614b1a81614300565b6001600160a01b031687529582019590820190600101614b07565b604081526000614b49604083018688614af7565b828103602084015261480b818587614af7565b60008219821115614b6f57614b6f6141c3565b500190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c9080831680614ba757607f831692505b60208084108203614bc857634e487b7160e01b600052602260045260246000fd5b83885260208801828015614be35760018114614bf457614c1f565b60ff19871682528282019750614c1f565b60008981526020902060005b87811015614c1957815484820152908601908401614c00565b83019850505b5050505050505092915050565b604081526000614c3f6040830186614b8d565b8281036020840152614c52818587614aba565b9695505050505050565b60208152600061484a602083018486614af7565b634e487b7160e01b600052603260045260246000fd5b600060018201614c9857614c986141c3565b5060010190565b6020808252825482820181905260008481528281209092916040850190845b81811015614ce35783546001600160a01b031683526001938401939285019201614cbe565b50909695505050505050565b600060208284031215614d0157600080fd5b5051919050565b6000816000190483118215151615614d2257614d226141c3565b500290565b600082614d4457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215614d5b57600080fd5b815161108a81614300565b600060208284031215614d7857600080fd5b81516001600160401b03811115614d8e57600080fd5b8201601f81018413614d9f57600080fd5b8051614dad6146f6826146b0565b818152856020838501011115614dc257600080fd5b614dd382602083016020860161424f565b95945050505050565b60008251614dee81846020870161424f565b7517b7b832b930ba37b917b1b7b7b93234b730ba34b7b760511b920191825250601601919050565b60058110614e3457634e487b7160e01b600052602160045260246000fd5b9052565b604081526000614e4b6040830185614b8d565b905061108a6020830184614e16565b6001600160a01b038316815260406020820181905260009061484a908301846142c1565b838152826020820152606060408201526000614dd360608301846142c1565b600060208284031215614eaf57600080fd5b8151801515811461108a57600080fd5b60208152600061108a6020830184614b8d565b6001600160a01b038316815260406020820181905260009061484a9083018461455b565b606081526000614f096060830186614b8d565b6001600160a01b0385166020840152905061484a6040830184614e16565b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614fba81601785016020880161424f565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614feb81602884016020880161424f565b01602801949350505050565b600081615006576150066141c3565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef51839ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a264697066735822122001ba51353eed01220e971d1a92928b705060b2e474e21eb711be78da5e1d6ee764736f6c634300080d0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104b75760003560e01c80637e82fd6f11610278578063adc9772e1161015c578063d673de46116100ce578063f2888dbb11610092578063f2888dbb14610bef578063f3aea65014610c02578063f4350c2414610c15578063f4408e4b14610c28578063fc0c546a14610c30578063ffff59a614610c43576104b7565b8063d673de4614610b81578063dd62ed3e14610ba1578063e364215314610bb4578063e58378bb14610bc7578063e8e658b414610bdc576104b7565b8063bc697ec511610120578063bc697ec514610b1a578063bc9b30c814610b2d578063bed6ff0914610b40578063c229918e14610b53578063d1b6861114610b5b578063d547741f14610b6e576104b7565b8063adc9772e14610a63578063b07f3c4714610a76578063b72cd7a814610ad4578063ba2bfc0a14610ae7578063bc59647e14610b07576104b7565b8063a217fddf116101f5578063a74194af116101b9578063a74194af14610a06578063a9059cbb14610a19578063a93a019f14610a2c578063a99fa31a14610a3f578063aa5703ad14610a52578063aa77fd5514610a5a576104b7565b8063a217fddf146109b2578063a457c2d7146109ba578063a48dca18146109cd578063a4c0ed36146109e0578063a63ed2c8146109f3576104b7565b806391d148541161023c57806391d14854146109685780639413462c1461097b57806395d89b4114610984578063988331301461098c5780639fa6dd351461099f576104b7565b80637e82fd6f14610911578063870ffde21461092657806387396e3b1461092f5780638da5cb5b14610942578063918b5be114610955576104b7565b8063313ce5671161039f578063558a15681161031c57806364f1abb7116102e057806364f1abb7146108925780636c68c0e1146108a557806370a08231146108b8578063799e2590146108cb5780637bf713b6146108de5780637d429385146108f1576104b7565b8063558a15681461083757806358fc614a146108405780635dff6e9f146108605780635e61bb871461087357806363d1ecf21461087f576104b7565b8063430457e111610363578063430457e1146107d75780634a178fe4146107f75780634b095c031461080a57806350d3ba9e1461081d57806354fd4d5014610830576104b7565b8063313ce5671461079257806336568abe146107a1578063377f1ecb146107b4578063392f37e9146107bc57806339509351146107c4576104b7565b80631c53c28011610438578063248a9ca3116103fc578063248a9ca31461070a57806325c335491461072d5780632c23c940146107405780632e949824146107535780632ebd89d1146107685780632f2ff15d1461077f576104b7565b80631c53c2801461069e57806320fed94f146106be57806321194bd7146106d157806321a76907146106e457806323b872dd146106f7576104b7565b80630fd6ff491161047f5780630fd6ff491461065357806311606010146106685780631401f70b1461067057806314797daa1461068357806318160ddd14610696576104b7565b806301ffc9a7146105d757806304cbab8b146105ff57806306fdde0314610616578063092c5b3b1461062b578063095ea7b314610640575b60003660603330146104dc57604051634ca8886760e01b815260040160405180910390fd5b81600084826104ec6014826141d9565b6104f8928592906141f0565b6105019161421a565b60601c905060008581866105166020876141d9565b92610523939291906141f0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051949550938493506001600160a01b03871692506105759150859061427b565b600060405180830381855af49150503d80600081146105b0576040519150601f19603f3d011682016040523d82523d6000602084013e6105b5565b606091505b5091509150816105c757805181602001fd5b8051975060200195505050505050f35b6105ea6105e5366004614297565b610c56565b60405190151581526020015b60405180910390f35b61060860c95481565b6040519081526020016105f6565b61061e610c8d565b6040516105f691906142ed565b61060860008051602061502f83398151915281565b6105ea61064e366004614315565b610d1f565b610666610661366004614389565b610d37565b005b6105ea610dad565b61066661067e3660046143ca565b610df8565b61066661069136600461442b565b610e93565b609954610608565b6106b16106ac366004614496565b610f00565b6040516105f691906144af565b6106666106cc3660046144c3565b610f2a565b6106666106df366004614389565b610fcb565b60d0546106b1906001600160a01b031681565b6105ea6107053660046144e5565b61106b565b610608610718366004614496565b60009081526065602052604090206001015490565b61066661073b366004614526565b611091565b61066661074e366004614526565b6110f7565b61075b6112a1565b6040516105f6919061459f565b610770611302565b6040516105f6939291906145b2565b61066661078d366004614612565b611531565b604051601281526020016105f6565b6106666107af366004614612565b611556565b6106666115d5565b61061e611815565b6105ea6107d2366004614315565b6118a3565b6106086107e53660046143ca565b60d96020526000908152604090205481565b61066661080536600461472d565b6118c5565b610666610818366004614315565b611959565b61060861082b366004614816565b6119bb565b6003610608565b61060860d45481565b61060861084e3660046143ca565b60d66020526000908152604090205481565b61066661086e366004614496565b6119ea565b60db5460dc54146105ea565b60ce546106b1906001600160a01b031681565b6106666108a03660046143ca565b611a2b565b6106666108b3366004614496565b611cf7565b6106086108c63660046143ca565b611d29565b60cb546106b1906001600160a01b031681565b6106666108ec366004614496565b611d44565b6106086108ff3660046143ca565b60d76020526000908152604090205481565b610919611ec8565b6040516105f69190614852565b61060860ca5481565b61066661093d366004614496565b611fe7565b60d2546106b1906001600160a01b031681565b610666610963366004614389565b612013565b6105ea610976366004614612565b6120a5565b61060860db5481565b61061e6120d0565b60d1546106b1906001600160a01b031681565b6106666109ad366004614496565b6120df565b610608600081565b6105ea6109c8366004614315565b61217d565b60cf546106b1906001600160a01b031681565b6106666109ee3660046148b4565b612203565b610608610a013660046143ca565b61228a565b6106b1610a14366004614496565b61230e565b6105ea610a27366004614315565b61231e565b610666610a3a366004614315565b61232c565b610666610a4d366004614903565b612441565b61061e6126a7565b61060860dc5481565b610666610a71366004614315565b612723565b610aaf610a84366004614496565b60da602052600090815260409020805460018201546002909201546001600160a01b03909116919083565b604080516001600160a01b0390941684526020840192909252908201526060016105f6565b60cc546106b1906001600160a01b031681565b610608610af53660046143ca565b60d86020526000908152604090205481565b610666610b1536600461442b565b612785565b610666610b28366004614315565b6128a7565b60cd546106b1906001600160a01b031681565b610666610b4e3660046144e5565b6128f0565b61060861294d565b610666610b69366004614315565b6129db565b610666610b7c366004614612565b612a24565b610608610b8f3660046143ca565b60de6020526000908152604090205481565b610608610baf366004614a03565b612a49565b60e0546106b1906001600160a01b031681565b61060860008051602061500f83398151915281565b610666610bea366004614816565b612a74565b610666610bfd3660046143ca565b612d3b565b610666610c10366004614315565b612d79565b610666610c23366004614a31565b612dc2565b61061e612def565b60d3546106b1906001600160a01b031681565b610666610c51366004614315565b612dfc565b60006001600160e01b03198216637965db0b60e01b1480610c8757506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060609a8054610c9c90614a80565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc890614a80565b8015610d155780601f10610cea57610100808354040283529160200191610d15565b820191906000526020600020905b815481529060010190602001808311610cf857829003601f168201915b5050505050905090565b600033610d2d818585612e45565b5060019392505050565b33600090815260de60205260408120549003610d6657604051634f1cec5f60e11b815260040160405180910390fd5b336001600160a01b03167f7432bbcdcf6009b3131a7b65f7af1fdbf79c27db5c115c1cdbcf9210298bc5f48383604051610da1929190614ae3565b60405180910390a25050565b60cf546040805160048152602481019091526020810180516001600160e01b031663726884c360e11b179052600091610df1916001600160a01b0390911690612f69565b1515919050565b610e1060008051602061502f833981519152336120a5565b610e2d57604051631a76708960e21b815260040160405180910390fd5b60d054604051610e8f916001600160a01b03169063af9ee81d60e01b90610e589085906024016144af565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612f69565b5050565b610eab60008051602061502f833981519152336120a5565b610ec857604051631a76708960e21b815260040160405180910390fd5b60ce54604051610ef9916001600160a01b031690635e2cb23f60e11b90610e58908890889088908890602401614b35565b5050505050565b60dd8181548110610f1057600080fd5b6000918252602090912001546001600160a01b0316905081565b33600081815260d660205260408120549003610f595760405163012d886f60e51b815260040160405180910390fd5b8215610f98578160ca6000828254610f719190614b5c565b90915550610f8090508361300a565b8160ca6000828254610f9291906141d9565b90915550505b60d054604051610fc5916001600160a01b031690631644f38560e31b90610e589085908790602401614b74565b50505050565b610fe360008051602061502f833981519152336120a5565b61100057604051631a76708960e21b815260040160405180910390fd5b60e0546040516342617fe760e01b81526001600160a01b03909116906342617fe7906110359060df9086908690600401614c2c565b600060405180830381600087803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b505050505050565b60003361107985828561311c565b611084858585613190565b60019150505b9392505050565b6110a960008051602061502f833981519152336120a5565b6110c657604051631a76708960e21b815260040160405180910390fd5b60ce546040516110f2916001600160a01b03169062b08f2560e61b90610e589086908690602401614c5c565b505050565b60005b8181101561118957600083838381811061111657611116614c70565b905060200201602081019061112b91906143ca565b6001600160a01b038116600090815260de60205260408120549192500361115557611155816133ab565b6001600160a01b0316600090815260e260205260409020805460ff191660011790558061118181614c86565b9150506110fa565b5060005b60dd548110156111fd57600060dd82815481106111ac576111ac614c70565b60009182526020808320909101546001600160a01b031680835260e290915260409091205490915060ff166111e9576111e481613461565b6111f7565b816111f381614c86565b9250505b5061118d565b5060005b8181101561126457600083838381811061121d5761121d614c70565b905060200201602081019061123291906143ca565b6001600160a01b0316600090815260e260205260409020805460ff19169055508061125c81614c86565b915050611201565b507ffa7fb8364e713f89c581b4b8a998a62e7be034cb4fffa97c6a4a62072ebddba660dd6040516112959190614c9f565b60405180910390a15050565b606060dd805480602002602001604051908101604052809291908181526020018280548015610d1557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116112db575050505050905090565b606080600060d5805490506001600160401b0381111561132457611324614642565b60405190808252806020026020018201604052801561134d578160200160208202803683370190505b5060d5549093506001600160401b0381111561136b5761136b614642565b604051908082528060200260200182016040528015611394578160200160208202803683370190505b50915060005b60d55481101561149857600060d582815481106113b9576113b9614c70565b9060005260206000200160009054906101000a90046001600160a01b03169050808583815181106113ec576113ec614c70565b6001600160a01b0392831660209182029290920101526040516304c6e70160e21b81529082169063131b9c04906114279030906004016144af565b602060405180830381865afa158015611444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114689190614cef565b84838151811061147a5761147a614c70565b6020908102919091010152508061149081614c86565b91505061139a565b5060d154604080516315d94f8f60e31b81529051670de0b6b3a7640000926001600160a01b03169163aeca7c789160048083019260209291908290030181865afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e9190614cef565b61151661294d565b6115209190614d08565b61152a9190614d27565b9050909192565b60008281526065602052604090206001015461154c8161359a565b6110f283836135a4565b6001600160a01b03811633146115cb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610e8f828261362a565b60d160009054906101000a90046001600160a01b03166001600160a01b0316637b0c28426040518163ffffffff1660e01b8152600401602060405180830381865afa158015611628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061164c9190614d49565b60e080546001600160a01b0319166001600160a01b03929092169182179055604051635e57966d60e01b8152635e57966d9061168c9030906004016144af565b600060405180830381865afa1580156116a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116d19190810190614d66565b6040516020016116e19190614ddc565b60405160208183030381529060405260df90805190602001906117059291906140b6565b5060e05460408051630ef8cdc760e01b81526004810191909152601660448201527517b7b832b930ba37b917b1b7b7b93234b730ba34b7b760511b606482015260806024820152601060848201526f7b22706172746974696f6e73223a317d60801b60a48201526001600160a01b0390911690630ef8cdc79060c401600060405180830381600087803b15801561179b57600080fd5b505af11580156117af573d6000803e3d6000fd5b505060e054604051632337c3c760e11b81526001600160a01b03909116925063466f878e91506117e79060df90600390600401614e38565b600060405180830381600087803b15801561180157600080fd5b505af1158015610fc5573d6000803e3d6000fd5b60e1805461182290614a80565b80601f016020809104026020016040519081016040528092919081815260200182805461184e90614a80565b801561189b5780601f106118705761010080835404028352916020019161189b565b820191906000526020600020905b81548152906001019060200180831161187e57829003601f168201915b505050505081565b600033610d2d8185856118b68383612a49565b6118c09190614b5c565b612e45565b33600090815260de602052604081205490036118f457604051634f1cec5f60e11b815260040160405180910390fd5b604051633f08e8e360e11b81526001600160a01b03841690637e11d1c6906119229085908590600401614e5a565b600060405180830381600087803b15801561193c57600080fd5b505af1158015611950573d6000803e3d6000fd5b50505050505050565b61197160008051602061502f833981519152336120a5565b61198e57604051631a76708960e21b815260040160405180910390fd5b60d0546040516110f2916001600160a01b03169063d572a9cd60e01b90610e589086908690602401614b74565b60d054604051600091610c87916001600160a01b039091169062d8aad560e51b90610e5890869060240161459f565b611a0260008051602061502f833981519152336120a5565b611a1f57604051631a76708960e21b815260040160405180910390fd5b611a2881613691565b50565b60d160009054906101000a90046001600160a01b03166001600160a01b0316635efca0a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa29190614d49565b6001600160a01b0316634703e001336040518263ffffffff1660e01b8152600401611acd91906144af565b602060405180830381865afa158015611aea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0e9190614cef565b600003611b2e576040516359e9fbbf60e11b815260040160405180910390fd5b60d154604080516358c6e66160e11b8152905133926000926001600160a01b039091169163b18dccc2916004808201926020929091908290030181865afa158015611b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba19190614cef565b611bab9042614b5c565b9050600060d160009054906101000a90046001600160a01b03166001600160a01b031663cb85fe356040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c269190614cef565b611c309083614b5c565b9050836001600160a01b0316836001600160a01b03167fe89a7bfa490a911e4a2981566a4710a51b0057109370b86784fe0764904d036f8484876001600160a01b0316637db188078a6040518263ffffffff1660e01b8152600401611c9591906144af565b600060405180830381865afa158015611cb2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611cda9190810190614d66565b604051611ce993929190614e7e565b60405180910390a350505050565b60cf5460405160248101839052336044820152610e8f916001600160a01b031690630744132360e21b90606401610e58565b6001600160a01b031660009081526097602052604090205490565b33600081815260d660205260408120549003611d735760405163012d886f60e51b815260040160405180910390fd5b611d7c8261300a565b6001600160a01b038116600090815260d8602052604081208054849290611da4908490614b5c565b925050819055508160ca6000828254611dbd9190614b5c565b90915550506001600160a01b038116600081815260d8602090815260408083205460d7909252909120547f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd7891611e12916141d9565b60405190815260200160405180910390a260008051602061508f83398151915260ca5460c954611e4291906141d9565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190611e729030906004016144af565b602060405180830381865afa158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb39190614cef565b60408051928352602083019190915201611295565b6060600060dc5460db54611edc91906141d9565b9050806001600160401b03811115611ef657611ef6614642565b604051908082528060200260200182016040528015611f5457816020015b611f41604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611f145790505b50915060005b81811015611fe25760da60008260dc54611f749190614b5c565b81526020808201929092526040908101600020815160608101835281546001600160a01b0316815260018201549381019390935260020154908201528351849083908110611fc457611fc4614c70565b60200260200101819052508080611fda90614c86565b915050611f5a565b505090565b60cf5460405160248101839052610e8f916001600160a01b03169063211cccd160e21b90604401610e58565b61202b60008051602061502f833981519152336120a5565b61204857604051631a76708960e21b815260040160405180910390fd5b61205460e1838361413a565b5060d45460d2546040516001600160a01b03909116907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d0906120999086908690614ae3565b60405180910390a35050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060609b8054610c9c90614a80565b60d3546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018490526064016020604051808303816000875af1158015612144573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121689190614e9d565b50612173338261372e565b611a286000611fe7565b6000338161218b8286612a49565b9050838110156121eb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016115c2565b6121f88286868403612e45565b506001949350505050565b60d3546001600160a01b0316331461222e5760405163118d9d7160e11b815260040160405180910390fd5b6001600160a01b038416600090815260d660205260409020548490156122545750610fc5565b8460148390036122695750823560601c612276565b6020839003612276575082355b612280818661372e565b6110636000611fe7565b600061229582611d29565b6000036122a457506000919050565b610c87630de731f360e31b6122b884611d29565b60cc5460405160248101929092526001600160a01b0316604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261399d565b60d58181548110610f1057600080fd5b600033610d2d818585613190565b60db5460dc5414806123d2575060d160009054906101000a90046001600160a01b03166001600160a01b031663e2e8bcd86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b09190614cef565b60dc54600090815260da60205260409020600201546123cf9190614b5c565b42105b1561240c576123ef60008051602061502f833981519152336120a5565b61240c57604051631a76708960e21b815260040160405180910390fd5b60d054604051612437916001600160a01b031690633d16f42d60e01b90610e589086906024016144af565b50610e8f81611fe7565b600054610100900460ff16158080156124615750600054600160ff909116105b8061247b5750303b15801561247b575060005460ff166001145b6124de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016115c2565b6000805460ff191660011790558015612501576000805461ff0019166101001790555b60d180546001600160a01b0319166001600160a01b038916179055612524613a33565b61253c60008051602061500f83398151915287613a5c565b61255460008051602061502f83398151915287613a5c565b61257a60008051602061502f83398151915260008051602061500f833981519152613a66565b60d380546001600160a01b03199081166001600160a01b038b811691909117909255835160ce80548316918416919091179055602084015160cf80548316918416919091179055604084015160d08054831691841691909117905560d280549091169188169190911790556125ef8580613ab1565b6125fa600033613a5c565b835161260d9060e19060208701906140b6565b5061261783613691565b60ce546040805160048152602481019091526020810180516001600160e01b031663377f1ecb60e01b179052612656916001600160a01b031690612f69565b50801561269d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60e0546040516331ca7de960e11b81526060916001600160a01b031690636394fbd2906126d99060df90600401614ebf565b600060405180830381865afa1580156126f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261271e9190810190614d66565b905090565b61273b60008051602061502f833981519152336120a5565b61275857604051631a76708960e21b815260040160405180910390fd5b60d0546040516110f2916001600160a01b03169063aa0d97b360e01b90610e589086908690602401614b74565b60005b838110156127f65760008585838181106127a4576127a4614c70565b90506020020160208101906127b991906143ca565b6001600160a01b038116600090815260de6020526040812054919250036127e3576127e3816133ab565b50806127ee81614c86565b915050612788565b5060005b8181101561286857600083838381811061281657612816614c70565b905060200201602081019061282b91906143ca565b6001600160a01b038116600090815260de6020526040902054909150156128555761285581613461565b508061286081614c86565b9150506127fa565b507ffa7fb8364e713f89c581b4b8a998a62e7be034cb4fffa97c6a4a62072ebddba660dd6040516128999190614c9f565b60405180910390a150505050565b60006128b28161359a565b60cc80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc59190632522e97360e11b90604401610e58565b33600090815260de6020526040812054900361291f57604051634f1cec5f60e11b815260040160405180910390fd5b60405163296e0f3960e21b81526001600160a01b0384169063a5b83ce4906119229085908590600401614b74565b60ca5460c95460d3546040516370a0823160e01b815260009392916001600160a01b0316906370a08231906129869030906004016144af565b602060405180830381865afa1580156129a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c79190614cef565b6129d19190614b5c565b61271e91906141d9565b6129f360008051602061502f833981519152336120a5565b612a1057604051631a76708960e21b815260040160405180910390fd5b612a1a8282611959565b610e8f6000611fe7565b600082815260656020526040902060010154612a3f8161359a565b6110f2838361362a565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b6000612a7e61294d565b90506000612a8b836119bb565b905033612aa660008051602061502f833981519152826120a5565b158015612ac957506001600160a01b038116600090815260de6020526040902054155b15612d31576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b031663aeca7c786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b509190614cef565b612b5a9086614d08565b612b649190614d27565b905080831115612d2f576000670de0b6b3a764000060d160009054906101000a90046001600160a01b03166001600160a01b0316636c29b3b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bf09190614cef565b612bfa9086614d08565b612c049190614d27565b9050612c0f8161300a565b60d35460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90612c419086908590600401614b74565b6020604051808303816000875af1158015612c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c849190614e9d565b5060008051602061508f83398151915260ca5460c954612ca491906141d9565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a0823190612cd49030906004016144af565b602060405180830381865afa158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d159190614cef565b6040805192835260208301919091520160405180910390a1505b505b610fc56000611fe7565b612d5360008051602061502f833981519152336120a5565b612d7057604051631a76708960e21b815260040160405180910390fd5b61217381610df8565b6000612d848161359a565b60cb80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc59190632522e97360e11b90604401610e58565b60cf546040516110f2916001600160a01b031690637a227c9f60e01b90610e589086908690602401614ed2565b60df805461182290614a80565b6000612e078161359a565b60cd80546001600160a01b0319166001600160a01b03851690811790915560405160248101849052610fc59190632522e97360e11b90604401610e58565b6001600160a01b038316612ea75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016115c2565b6001600160a01b038216612f085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016115c2565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806000846001600160a01b031684604051612f86919061427b565b600060405180830381855af49150503d8060008114612fc1576040519150601f19603f3d011682016040523d82523d6000602084013e612fc6565b606091505b509150915081612ffe578051600003612ff657848460405163918623b760e01b81526004016115c2929190614e5a565b805181602001fd5b60200151949350505050565b60d254600090613022906001600160a01b0316611d29565b905080600003613030575050565b60cc5460405160248101849052600091613061916001600160a01b0390911690632b911c0960e21b90604401610e58565b9050600061306f8383613ae2565b60d254909150613088906001600160a01b031682613af8565b60408051858152602081018490529081018290527ff22a8c26ad08bc6548cdae55fec4c309e15e9d2290ad7e1f9186fc20189e7a159060600160405180910390a160d2546001600160a01b031660008051602061504f8339815191526130ed82611d29565b6099546130f861294d565b6040805193845260208401929092529082015260600160405180910390a250505050565b60006131288484612a49565b90506000198114610fc557818110156131835760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016115c2565b610fc58484848403612e45565b600061319b83611d29565b1590506131a9848484613c1a565b60d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156131f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132179190614cef565b90508061322386611d29565b1080156132385750600061323686611d29565b115b1561326a5761324685611d29565b6040516324c6940760e01b81526004810191909152602481018290526044016115c2565b8061327485611d29565b10156132835761324684611d29565b81156132c75760cb546001600160a01b0316156132c75760cb546040516132c5916001600160a01b03169063217fb33b60e01b90610e589088906024016144af565b505b60cd546001600160a01b03161561330e5760cd546040516001600160a01b0387811660248301526000604483015261330c921690633608993560e21b90606401610e58565b505b846001600160a01b031660008051602061504f83398151915261333087611d29565b60995461333b61294d565b6040805193845260208401929092529082015260600160405180910390a2836001600160a01b031660008051602061504f83398151915261337b86611d29565b60995461338661294d565b6040805193845260208401929092529082015260600160405180910390a25050505050565b60dd80546001810182557fac507b9f8bf86ad8bb770f71cd2b1992902ae0314d93fc0f2bb011d70e7962260180546001600160a01b0319166001600160a01b038481169182179092559154600092835260de6020526040928390205560e0549151634cbf455560e11b815291169063997e8aaa906134339060df908590600290600401614ef6565b600060405180830381600087803b15801561344d57600080fd5b505af1158015610ef9573d6000803e3d6000fd5b6001600160a01b038116600090815260de6020526040812054613486906001906141d9565b60dd805491925060009161349c906001906141d9565b815481106134ac576134ac614c70565b60009182526020909120015460dd80546001600160a01b0390921692508291849081106134db576134db614c70565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060dd80548061351a5761351a614f27565b600082815260209020810160001990810180546001600160a01b0319169055019055613547826001614b5c565b6001600160a01b03808316600090815260de60205260408082209390935585821681528281205560e0549151631f1cbd7560e11b8152911690633e397aea906119229060df908790600290600401614ef6565b611a288133613db3565b6135ae82826120a5565b610e8f5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556135e63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61363482826120a5565b15610e8f5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60c954156136b2576040516301039eff60e71b815260040160405180910390fd5b670de0b6b3a76400008111156136de57604051631e6f460160e31b8152600481018290526024016115c2565b60d481905560d25460405182916001600160a01b0316907f4e51a007a3ec0f4dbfd0901ad752077940f47293197538644ffc302b534527d0906137239060e190614ebf565b60405180910390a350565b60cc546040516024810183905260448101839052600091613766916001600160a01b0390911690633a49b55760e21b90606401610e58565b90506137728382613e0c565b60d2546001600160a01b038481169116146138505760d15460408051632bef5b1b60e21b815290516000926001600160a01b03169163afbd6c6c9160048083019260209291908290030181865afa1580156137d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f59190614cef565b90508061380185611d29565b10156138105761324684611d29565b60cb546001600160a01b03161561384e5760cb5460405161384c916001600160a01b03169063217fb33b60e01b90610e589088906024016144af565b505b505b6001600160a01b038316600081815260d9602052604090819020429055517f83b3f5ce88736f0128f880f5cac19836da52ea5c5ca7704c7b38f3b06fffd7ab9061389d9085815260200190565b60405180910390a2826001600160a01b031660008051602061504f8339815191526138c785611d29565b6099546138d261294d565b6040805193845260208401929092529082015260600160405180910390a260008051602061508f83398151915260ca5460c95461390f91906141d9565b60d3546040516370a0823160e01b81526001600160a01b03909116906370a082319061393f9030906004016144af565b602060405180830381865afa15801561395c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139809190614cef565b6040805192835260208301919091520160405180910390a1505050565b6000806000306001600160a01b0316846040516139ba919061427b565b600060405180830381855afa9150503d80600081146139f5576040519150601f19603f3d011682016040523d82523d6000602084013e6139fa565b606091505b509150915081613a28578051600003612ff6578360405163029801d760e41b81526004016115c291906142ed565b602001519392505050565b600054610100900460ff16613a5a5760405162461bcd60e51b81526004016115c290614f3d565b565b610e8f82826135a4565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600054610100900460ff16613ad85760405162461bcd60e51b81526004016115c290614f3d565b610e8f8282613ebb565b6000818310613af1578161108a565b5090919050565b6001600160a01b038216613b585760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016115c2565b6001600160a01b03821660009081526097602052604090205481811015613bcc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016115c2565b6001600160a01b038316600081815260976020908152604080832086860390556099805487900390555185815291929160008051602061506f833981519152910160405180910390a3505050565b6001600160a01b038316613c7e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016115c2565b6001600160a01b038216613ce05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016115c2565b6001600160a01b03831660009081526097602052604090205481811015613d585760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016115c2565b6001600160a01b03808516600081815260976020526040808220868603905592861680825290839020805486019055915160008051602061506f83398151915290613da69086815260200190565b60405180910390a3610fc5565b613dbd82826120a5565b610e8f57613dca81613f09565b613dd5836020613f1b565b604051602001613de6929190614f88565b60408051601f198184030181529082905262461bcd60e51b82526115c2916004016142ed565b6001600160a01b038216613e625760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016115c2565b8060996000828254613e749190614b5c565b90915550506001600160a01b03821660008181526097602090815260408083208054860190555184815260008051602061506f833981519152910160405180910390a35050565b600054610100900460ff16613ee25760405162461bcd60e51b81526004016115c290614f3d565b8151613ef590609a9060208501906140b6565b5080516110f290609b9060208401906140b6565b6060610c876001600160a01b03831660145b60606000613f2a836002614d08565b613f35906002614b5c565b6001600160401b03811115613f4c57613f4c614642565b6040519080825280601f01601f191660200182016040528015613f76576020820181803683370190505b509050600360fc1b81600081518110613f9157613f91614c70565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613fc057613fc0614c70565b60200101906001600160f81b031916908160001a9053506000613fe4846002614d08565b613fef906001614b5c565b90505b6001811115614067576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061402357614023614c70565b1a60f81b82828151811061403957614039614c70565b60200101906001600160f81b031916908160001a90535060049490941c9361406081614ff7565b9050613ff2565b50831561108a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016115c2565b8280546140c290614a80565b90600052602060002090601f0160209004810192826140e4576000855561412a565b82601f106140fd57805160ff191683800117855561412a565b8280016001018555821561412a579182015b8281111561412a57825182559160200191906001019061410f565b506141369291506141ae565b5090565b82805461414690614a80565b90600052602060002090601f016020900481019282614168576000855561412a565b82601f106141815782800160ff1982351617855561412a565b8280016001018555821561412a579182015b8281111561412a578235825591602001919060010190614193565b5b8082111561413657600081556001016141af565b634e487b7160e01b600052601160045260246000fd5b6000828210156141eb576141eb6141c3565b500390565b6000808585111561420057600080fd5b8386111561420d57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156142475780818660140360031b1b83161692505b505092915050565b60005b8381101561426a578181015183820152602001614252565b83811115610fc55750506000910152565b6000825161428d81846020870161424f565b9190910192915050565b6000602082840312156142a957600080fd5b81356001600160e01b03198116811461108a57600080fd5b600081518084526142d981602086016020860161424f565b601f01601f19169290920160200192915050565b60208152600061108a60208301846142c1565b6001600160a01b0381168114611a2857600080fd5b6000806040838503121561432857600080fd5b823561433381614300565b946020939093013593505050565b60008083601f84011261435357600080fd5b5081356001600160401b0381111561436a57600080fd5b60208301915083602082850101111561438257600080fd5b9250929050565b6000806020838503121561439c57600080fd5b82356001600160401b038111156143b257600080fd5b6143be85828601614341565b90969095509350505050565b6000602082840312156143dc57600080fd5b813561108a81614300565b60008083601f8401126143f957600080fd5b5081356001600160401b0381111561441057600080fd5b6020830191508360208260051b850101111561438257600080fd5b6000806000806040858703121561444157600080fd5b84356001600160401b038082111561445857600080fd5b614464888389016143e7565b9096509450602087013591508082111561447d57600080fd5b5061448a878288016143e7565b95989497509550505050565b6000602082840312156144a857600080fd5b5035919050565b6001600160a01b0391909116815260200190565b600080604083850312156144d657600080fd5b50508035926020909101359150565b6000806000606084860312156144fa57600080fd5b833561450581614300565b9250602084013561451581614300565b929592945050506040919091013590565b6000806020838503121561453957600080fd5b82356001600160401b0381111561454f57600080fd5b6143be858286016143e7565b600081518084526020808501945080840160005b838110156145945781516001600160a01b03168752958201959082019060010161456f565b509495945050505050565b60208152600061108a602083018461455b565b6060815260006145c5606083018661455b565b82810360208481019190915285518083528682019282019060005b818110156145fc578451835293830193918301916001016145e0565b5050809350505050826040830152949350505050565b6000806040838503121561462557600080fd5b82359150602083013561463781614300565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561467a5761467a614642565b60405290565b604051601f8201601f191681016001600160401b03811182821017156146a8576146a8614642565b604052919050565b60006001600160401b038211156146c9576146c9614642565b50601f01601f191660200190565b600082601f8301126146e857600080fd5b81356146fb6146f6826146b0565b614680565b81815284602083860101111561471057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561474257600080fd5b833561474d81614300565b9250602084013561475d81614300565b915060408401356001600160401b0381111561477857600080fd5b614784868287016146d7565b9150509250925092565b600082601f83011261479f57600080fd5b813560206001600160401b038211156147ba576147ba614642565b8160051b6147c9828201614680565b92835284810182019282810190878511156147e357600080fd5b83870192505b8483101561480b5782356147fc81614300565b825291830191908301906147e9565b979650505050505050565b60006020828403121561482857600080fd5b81356001600160401b0381111561483e57600080fd5b61484a8482850161478e565b949350505050565b602080825282518282018190526000919060409081850190868401855b828110156148a757815180516001600160a01b031685528681015187860152850151858501526060909301929085019060010161486f565b5091979650505050505050565b600080600080606085870312156148ca57600080fd5b84356148d581614300565b93506020850135925060408501356001600160401b038111156148f757600080fd5b61448a87828801614341565b600080600080600080600061012080898b03121561492057600080fd5b883561492b81614300565b975060208981013561493c81614300565b975060408a013561494c81614300565b965060608a01356001600160401b038082111561496857600080fd5b6149748d838e016146d7565b975060808c013591508082111561498a57600080fd5b506149978c828d016146d7565b95505060a08a013593508a60df8b01126149b057600080fd5b6149b8614658565b918a0191808c8411156149ca57600080fd5b60c08c015b848110156149ef5780356149e281614300565b83529183019183016149cf565b508094505050505092959891949750929550565b60008060408385031215614a1657600080fd5b8235614a2181614300565b9150602083013561463781614300565b60008060408385031215614a4457600080fd5b8235614a4f81614300565b915060208301356001600160401b03811115614a6a57600080fd5b614a768582860161478e565b9150509250929050565b600181811c90821680614a9457607f821691505b602082108103614ab457634e487b7160e01b600052602260045260246000fd5b50919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600061484a602083018486614aba565b8183526000602080850194508260005b85811015614594578135614b1a81614300565b6001600160a01b031687529582019590820190600101614b07565b604081526000614b49604083018688614af7565b828103602084015261480b818587614af7565b60008219821115614b6f57614b6f6141c3565b500190565b6001600160a01b03929092168252602082015260400190565b8054600090600181811c9080831680614ba757607f831692505b60208084108203614bc857634e487b7160e01b600052602260045260246000fd5b83885260208801828015614be35760018114614bf457614c1f565b60ff19871682528282019750614c1f565b60008981526020902060005b87811015614c1957815484820152908601908401614c00565b83019850505b5050505050505092915050565b604081526000614c3f6040830186614b8d565b8281036020840152614c52818587614aba565b9695505050505050565b60208152600061484a602083018486614af7565b634e487b7160e01b600052603260045260246000fd5b600060018201614c9857614c986141c3565b5060010190565b6020808252825482820181905260008481528281209092916040850190845b81811015614ce35783546001600160a01b031683526001938401939285019201614cbe565b50909695505050505050565b600060208284031215614d0157600080fd5b5051919050565b6000816000190483118215151615614d2257614d226141c3565b500290565b600082614d4457634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215614d5b57600080fd5b815161108a81614300565b600060208284031215614d7857600080fd5b81516001600160401b03811115614d8e57600080fd5b8201601f81018413614d9f57600080fd5b8051614dad6146f6826146b0565b818152856020838501011115614dc257600080fd5b614dd382602083016020860161424f565b95945050505050565b60008251614dee81846020870161424f565b7517b7b832b930ba37b917b1b7b7b93234b730ba34b7b760511b920191825250601601919050565b60058110614e3457634e487b7160e01b600052602160045260246000fd5b9052565b604081526000614e4b6040830185614b8d565b905061108a6020830184614e16565b6001600160a01b038316815260406020820181905260009061484a908301846142c1565b838152826020820152606060408201526000614dd360608301846142c1565b600060208284031215614eaf57600080fd5b8151801515811461108a57600080fd5b60208152600061108a6020830184614b8d565b6001600160a01b038316815260406020820181905260009061484a9083018461455b565b606081526000614f096060830186614b8d565b6001600160a01b0385166020840152905061484a6040830184614e16565b634e487b7160e01b600052603160045260246000fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614fba81601785016020880161424f565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614feb81602884016020880161424f565b01602801949350505050565b600081615006576150066141c3565b50600019019056feb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357861514f61b5b3fcfb87564eec25aa9bdfcf29e63af898e1fd66ba0f88ef51839ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef41c23f1b303a0c4396ea09a7fb42b216cd382ec1ea27c71c3e89e314be197a03a264697066735822122001ba51353eed01220e971d1a92928b705060b2e474e21eb711be78da5e1d6ee764736f6c634300080d0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
