{
  "_format": "hh-sol-artifact-1",
  "contractName": "Keep3rHelperForTest",
  "sourceName": "solidity/for-test/Keep3rHelperForTest.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keep3rV2",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidKp3rPool",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LiquidityPairInvalid",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoGovernanceZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyGovernance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlyPendingGovernance",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_pendingGovernance",
          "type": "address"
        }
      ],
      "name": "GovernanceProposal",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "GovernanceSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_keep3rV2",
          "type": "address"
        }
      ],
      "name": "Keep3rV2Change",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_address",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_isKP3RToken0",
          "type": "bool"
        }
      ],
      "name": "Kp3rWethPoolChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_maxBoost",
          "type": "uint256"
        }
      ],
      "name": "MaxBoostChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_minBoost",
          "type": "uint256"
        }
      ],
      "name": "MinBoostChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_quoteTwapTime",
          "type": "uint32"
        }
      ],
      "name": "QuoteTwapTimeChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_targetBond",
          "type": "uint256"
        }
      ],
      "name": "TargetBondChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_workExtraGas",
          "type": "uint256"
        }
      ],
      "name": "WorkExtraGasChange",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BOOST_BASE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "KP3R",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "basefee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        }
      ],
      "name": "bonds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_amountBonded",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_liquidityAmount",
          "type": "uint256"
        },
        {
          "internalType": "int56",
          "name": "_tickDifference",
          "type": "int56"
        },
        {
          "internalType": "uint256",
          "name": "_timeInterval",
          "type": "uint256"
        }
      ],
      "name": "getKP3RsAtTick",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_kp3rAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_bonds",
          "type": "uint256"
        }
      ],
      "name": "getPaymentParams",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_boost",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_oneEthQuote",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_extra",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        }
      ],
      "name": "getPoolTokens",
      "outputs": [
        {
          "internalType": "address",
          "name": "_token0",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token1",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint128",
          "name": "_baseAmount",
          "type": "uint128"
        },
        {
          "internalType": "int56",
          "name": "_tickDifference",
          "type": "int56"
        },
        {
          "internalType": "uint256",
          "name": "_timeInterval",
          "type": "uint256"
        }
      ],
      "name": "getQuoteAtTick",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_quoteAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_gasUsed",
          "type": "uint256"
        }
      ],
      "name": "getRewardAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keeper",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_gasUsed",
          "type": "uint256"
        }
      ],
      "name": "getRewardAmountFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_kp3r",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_bonds",
          "type": "uint256"
        }
      ],
      "name": "getRewardBoostFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_rewardBoost",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        }
      ],
      "name": "isKP3RToken0",
      "outputs": [
        {
          "internalType": "bool",
          "name": "_isKP3RToken0",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "keep3rV2",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "kp3rWethPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "poolAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "isKP3RToken0",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxBoost",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minBoost",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "uint32[]",
          "name": "_secondsAgo",
          "type": "uint32[]"
        }
      ],
      "name": "observe",
      "outputs": [
        {
          "internalType": "int56",
          "name": "_tickCumulative1",
          "type": "int56"
        },
        {
          "internalType": "int56",
          "name": "_tickCumulative2",
          "type": "int56"
        },
        {
          "internalType": "bool",
          "name": "_success",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingGovernance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_eth",
          "type": "uint256"
        }
      ],
      "name": "quote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "quoteTwapTime",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_baseFee",
          "type": "uint256"
        }
      ],
      "name": "setBaseFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "setGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_keep3rV2",
          "type": "address"
        }
      ],
      "name": "setKeep3rV2",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_poolAddress",
          "type": "address"
        }
      ],
      "name": "setKp3rWethPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxBoost",
          "type": "uint256"
        }
      ],
      "name": "setMaxBoost",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minBoost",
          "type": "uint256"
        }
      ],
      "name": "setMinBoost",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_quoteTwapTime",
          "type": "uint32"
        }
      ],
      "name": "setQuoteTwapTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_targetBond",
          "type": "uint256"
        }
      ],
      "name": "setTargetBond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_workExtraGas",
          "type": "uint256"
        }
      ],
      "name": "setWorkExtraGas",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetBond",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "workExtraGas",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052612af8600255612ee0600355680ad78ebc5ac620000060045561c3506005556006805463ffffffff19166102581790553480156200004157600080fd5b5060405162001ead38038062001ead8339810160408190526200006491620002f1565b81818181806001600160a01b038116620000905760405162b293ed60e81b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0392831617905560068054600160201b600160c01b03191664010000000092851692909202919091179055620000ef7311b7a6bc0259ed6cf9db8f499988f9ecc7167bf5620000fb565b50505050505062000329565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200015557600080fd5b505afa1580156200016a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001909190620002cc565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620001f657600080fd5b505afa1580156200020b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002319190620002cc565b6001600160a01b0316149050811580156200024a575080155b156200026957604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b80516001600160a01b0381168114620002c757600080fd5b919050565b600060208284031215620002df57600080fd5b620002ea82620002af565b9392505050565b600080604083850312156200030557600080fd5b6200031083620002af565b91506200032060208401620002af565b90509250929050565b611b7480620003396000396000f3fe608060405234801561001057600080fd5b506004361061019b5760003560e01c80635cf24969116100ea5780635cf24969146102ed578063696a437b146102f65780637b40c913146103195780638561579c146103465780639aaad6791461034f578063a0d2710714610374578063ab033ea914610387578063ab5dce001461039a578063ab8cedc5146103ad578063b2e0df96146103c0578063b93f5af0146103d3578063c84993af146103e6578063ca4f2803146103f9578063dc686d911461041a578063ed1bd76c14610452578063f39c38a014610465578063fe10d7741461047857600080fd5b806305e0b9a0146101a05780630c525835146101d1578063117cfc1b146101e6578063160e1e31146102005780632248e82d14610213578063238efcbc1461023457806325f09e611461023c5780632742b9e714610245578063289adb441461024e57806337090c2f146102615780633cc7ab301461026a5780633facf2421461027d578063435b21c11461028657806346860698146102b4578063516c3323146102c75780635aa6e675146102da575b600080fd5b6101bb731ceb5cb57c4d4e2b2433641b95dd330a33185a4481565b6040516101c8919061188b565b60405180910390f35b6101e46101df366004611817565b61048b565b005b6006546101bb90600160201b90046001600160a01b031681565b6101e461020e3660046115e6565b6104f2565b6102266102213660046116d3565b61056d565b6040519081526020016101c8565b6101e46105a0565b61022661271081565b61022660045481565b6101e461025c366004611817565b61062c565b61022660035481565b6101e46102783660046115e6565b61068c565b61022660055481565b610299610294366004611817565b610717565b604080519384526020840192909252908201526060016101c8565b6101e46102c2366004611817565b600855565b6102266102d5366004611817565b610745565b6000546101bb906001600160a01b031681565b61022660085481565b6103096103043660046115e6565b6107b3565b60405190151581526020016101c8565b600754610338906001600160a01b03811690600160a01b900460ff1682565b6040516101c89291906118b9565b61022660025481565b60065461035f9063ffffffff1681565b60405163ffffffff90911681526020016101c8565b610226610382366004611849565b610839565b6101e46103953660046115e6565b610875565b6101e46103a8366004611817565b6108eb565b6102266103bb3660046117ca565b61094b565b6101e46103ce366004611817565b6109ef565b6101e46103e1366004611870565b610a4f565b6102266103f4366004611817565b610ac2565b61040c6104073660046115e6565b610ad4565b6040516101c892919061189f565b61042d610428366004611620565b610bc2565b60408051600694850b81529290930b60208301521515918101919091526060016101c8565b610226610460366004611817565b610ccd565b6001546101bb906001600160a01b031681565b6102266104863660046115e6565b610e28565b6000546001600160a01b031633146104b6576040516354348f0360e01b815260040160405180910390fd5b60028190556040518181527f0919fdaaac0f59c6bc7eeef4f975d6163475220f1e4820d0bce99c84c51cac1d906020015b60405180910390a150565b6000546001600160a01b0316331461051d576040516354348f0360e01b815260040160405180910390fd5b61052681610ec6565b6007546040517f554c636366d5fc882a9ab4b7b9d5181781d1a7076abe50ed410365620dcf4108916104e7916001600160a01b03821691600160a01b900460ff16906118b9565b60008061057c6102d585610e28565b905061059861271061058e83866119cb565b61046091906119b7565b949350505050565b6001546001600160a01b031633146105cb57604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916106229161188b565b60405180910390a1565b6000546001600160a01b03163314610657576040516354348f0360e01b815260040160405180910390fd5b60058190556040518181527fed847bdbab1a30becee18585f23c759bd06156561390d2e7fbffd18e74b56c9b906020016104e7565b6000546001600160a01b031633146106b7576040516354348f0360e01b815260040160405180910390fd5b60068054600160201b600160c01b031916600160201b6001600160a01b03848116820292909217928390556040517fcf744e4fc39d49b6d8103035078629b8a3be95adc007b0d663e96bdff777b10a936104e7939290049091169061188b565b600080600061072d670de0b6b3a7640000610ccd565b915061073884610745565b6005549095929450925050565b600061075382600454611070565b91506000610797600254600454856002546003546107719190611a3a565b61077b91906119cb565b61078591906119b7565b6002546107929190611971565b611086565b90506107a260085490565b6107ac90826119cb565b9392505050565b60008060006107c184610ad4565b90925090506001600160a01b038216731ceb5cb57c4d4e2b2433641b95dd330a33185a4414156107f5575060019392505050565b6001600160a01b038116731ceb5cb57c4d4e2b2433641b95dd330a33185a441461083257604051637d7c8f2760e11b815260040160405180910390fd5b5050919050565b60008061085261084d84600687900b611989565b611096565b905061086c600160601b86836001600160a01b03166114a4565b95945050505050565b6000546001600160a01b031633146108a0576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906104e790839061188b565b6000546001600160a01b03163314610916576040516354348f0360e01b815260040160405180910390fd5b60048190556040518181527feac367d684b6ac6c6ae7e3e852c06f17e6354e0f1e7122832c3e6d17e0a2b71e906020016104e7565b60008061095f61084d84600687900b611989565b90506001600160801b036001600160a01b038216116109af57600061098d6001600160a01b038316806119cb565b90506109a7600160c01b876001600160801b0316836114a4565b9250506109e7565b60006109c96001600160a01b03831680600160401b6114a4565b90506109e3600160801b876001600160801b0316836114a4565b9250505b509392505050565b6000546001600160a01b03163314610a1a576040516354348f0360e01b815260040160405180910390fd5b60038190556040518181527fa1292b4e7a0d916ccfd2bc83858b05f328e344d1f0f507d97ac66723ac7c2aaa906020016104e7565b6000546001600160a01b03163314610a7a576040516354348f0360e01b815260040160405180910390fd5b6006805463ffffffff191663ffffffff83169081179091556040519081527fc806e26fb64e3a95f4b70abf4d87280555696244d01068b5f45b0e515aceb1de906020016104e7565b6000610ace328361056d565b92915050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1057600080fd5b505afa158015610b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b489190611603565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611603565b91509150915091565b6000806000846001600160a01b031663883bdbfd856040518263ffffffff1660e01b8152600401610bf391906118d4565b60006040518083038186803b158015610c0b57600080fd5b505afa925050508015610c4057506040513d6000823e601f3d908101601f19168201604052610c3d91908101906116ff565b60015b610c7a573d808015610c6e576040519150601f19603f3d011682016040523d82523d6000602084013e610c73565b606091505b5050610cc6565b81600081518110610c8d57610c8d611aeb565b60200260200101519450600182511115610cbf5781600181518110610cb457610cb4611aeb565b602002602001015193505b6001925050505b9250925092565b604080516002808252606082018352600092839291906020830190803683375050600654825192935063ffffffff16918391506001908110610d1157610d11611aeb565b63ffffffff9092166020928302919091019091015260075460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd90610d579085906004016118d4565b60006040518083038186803b158015610d6f57600080fd5b505afa158015610d83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dab91908101906116ff565b509050600081600181518110610dc357610dc3611aeb565b602002602001015182600081518110610dde57610dde611aeb565b6020026020010151610df091906119ea565b60075490915061086c908690600160a01b900460ff16610e1857610e1383611aa5565b610e1a565b825b60065463ffffffff1661094b565b60065460405163a39744b560e01b8152600091600160201b90046001600160a01b03169063a39744b590610e76908590731ceb5cb57c4d4e2b2433641b95dd330a33185a449060040161189f565b60206040518083038186803b158015610e8e57600080fd5b505afa158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace9190611830565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1f57600080fd5b505afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190611603565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbc57600080fd5b505afa158015610fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff49190611603565b6001600160a01b03161490508115801561100c575080155b1561102a57604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b600081831061107f57816107ac565b5090919050565b60008183101561107f57816107ac565b60008060008360020b126110ad578260020b6110ba565b8260020b6110ba90611a88565b90506110c9620d89e719611a65565b60020b8111156111035760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b60006001821661111757600160801b611129565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561115e576080611159826ffff97272373d413259a46990580e213a6119cb565b901c90505b6004821615611188576080611183826ffff2e50f5f656932ef12357cf3c7fdcc6119cb565b901c90505b60088216156111b25760806111ad826fffe5caca7e10e4e61c3624eaa0941cd06119cb565b901c90505b60108216156111dc5760806111d7826fffcb9843d60f6159c9db58835c9266446119cb565b901c90505b6020821615611206576080611201826fff973b41fa98c081472e6896dfb254c06119cb565b901c90505b604082161561123057608061122b826fff2ea16466c96a3843ec78b326b528616119cb565b901c90505b608082161561125a576080611255826ffe5dee046a99a2a811c461f1969c30536119cb565b901c90505b610100821615611285576080611280826ffcbe86c7900a88aedcffc83b479aa3a46119cb565b901c90505b6102008216156112b05760806112ab826ff987a7253ac413176f2b074cf7815e546119cb565b901c90505b6104008216156112db5760806112d6826ff3392b0822b70005940c7a398e4b70f36119cb565b901c90505b610800821615611306576080611301826fe7159475a2c29b7443b29c7fa6e889d96119cb565b901c90505b61100082161561133157608061132c826fd097f3bdfd2022b8845ad8f792aa58256119cb565b901c90505b61200082161561135c576080611357826fa9f746462d870fdf8a65dc1f90e061e56119cb565b901c90505b614000821615611387576080611382826f70d869a156d2a1b890bb3df62baf32f76119cb565b901c90505b6180008216156113b25760806113ad826f31be135f97d08fd981231505542fcfa66119cb565b901c90505b620100008216156113de5760806113d9826f09aa508b5b7a84e1c677de54f3e99bc96119cb565b901c90505b62020000821615611409576080611404826e5d6af8dedb81196699c329225ee6046119cb565b901c90505b6204000082161561143357608061142e826d2216e584f5fa1ea926041bedfe986119cb565b901c90505b6208000082161561145b576080611456826b048a170391f7dc42444e8fa26119cb565b901c90505b60008460020b131561147657611473816000196119b7565b90505b611484600160201b82611a51565b15611490576001611493565b60005b6105989060ff16602083901c611971565b6000808060001985870985870292508281108382030391505080600014156114de57600084116114d357600080fd5b5082900490506107ac565b8084116114ea57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082601f83011261156357600080fd5b815160206115786115738361194e565b61191e565b80838252828201915082860187848660051b890101111561159857600080fd5b60005b858110156115c05781516115ae81611b17565b8452928401929084019060010161159b565b5090979650505050505050565b803563ffffffff811681146115e157600080fd5b919050565b6000602082840312156115f857600080fd5b81356107ac81611b17565b60006020828403121561161557600080fd5b81516107ac81611b17565b6000806040838503121561163357600080fd5b823561163e81611b17565b91506020838101356001600160401b0381111561165a57600080fd5b8401601f8101861361166b57600080fd5b80356116796115738261194e565b80828252848201915084840189868560051b870101111561169957600080fd5b600094505b838510156116c3576116af816115cd565b83526001949094019391850191850161169e565b5080955050505050509250929050565b600080604083850312156116e657600080fd5b82356116f181611b17565b946020939093013593505050565b6000806040838503121561171257600080fd5b82516001600160401b038082111561172957600080fd5b818501915085601f83011261173d57600080fd5b8151602061174d6115738361194e565b8083825282820191508286018a848660051b890101111561176d57600080fd5b600096505b8487101561179957805161178581611b2f565b835260019690960195918301918301611772565b50918801519196509093505050808211156117b357600080fd5b506117c085828601611552565b9150509250929050565b6000806000606084860312156117df57600080fd5b83356001600160801b03811681146117f657600080fd5b9250602084013561180681611b2f565b929592945050506040919091013590565b60006020828403121561182957600080fd5b5035919050565b60006020828403121561184257600080fd5b5051919050565b60008060006060848603121561185e57600080fd5b83359250602084013561180681611b2f565b60006020828403121561188257600080fd5b6107ac826115cd565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561191257835163ffffffff16835292840192918401916001016118f0565b50909695505050505050565b604051601f8201601f191681016001600160401b038111828210171561194657611946611b01565b604052919050565b60006001600160401b0382111561196757611967611b01565b5060051b60200190565b6000821982111561198457611984611abf565b500190565b60008261199857611998611ad5565b600160ff1b8214600019841416156119b2576119b2611abf565b500590565b6000826119c6576119c6611ad5565b500490565b60008160001904831182151516156119e5576119e5611abf565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615611a1557611a15611abf565b81667fffffffffffff018313811615611a3057611a30611abf565b5090039392505050565b600082821015611a4c57611a4c611abf565b500390565b600082611a6057611a60611ad5565b500690565b60008160020b627fffff19811415611a7f57611a7f611abf565b60000392915050565b6000600160ff1b821415611a9e57611a9e611abf565b5060000390565b60008160060b667fffffffffffff19811415611a7f57611a7f5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b2c57600080fd5b50565b8060060b8114611b2c57600080fdfea264697066735822122004c0a010ceffd8e7db3c26c049c2c7972b37fcac1edac6ccf38a411c856f238464736f6c63430008070033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061019b5760003560e01c80635cf24969116100ea5780635cf24969146102ed578063696a437b146102f65780637b40c913146103195780638561579c146103465780639aaad6791461034f578063a0d2710714610374578063ab033ea914610387578063ab5dce001461039a578063ab8cedc5146103ad578063b2e0df96146103c0578063b93f5af0146103d3578063c84993af146103e6578063ca4f2803146103f9578063dc686d911461041a578063ed1bd76c14610452578063f39c38a014610465578063fe10d7741461047857600080fd5b806305e0b9a0146101a05780630c525835146101d1578063117cfc1b146101e6578063160e1e31146102005780632248e82d14610213578063238efcbc1461023457806325f09e611461023c5780632742b9e714610245578063289adb441461024e57806337090c2f146102615780633cc7ab301461026a5780633facf2421461027d578063435b21c11461028657806346860698146102b4578063516c3323146102c75780635aa6e675146102da575b600080fd5b6101bb731ceb5cb57c4d4e2b2433641b95dd330a33185a4481565b6040516101c8919061188b565b60405180910390f35b6101e46101df366004611817565b61048b565b005b6006546101bb90600160201b90046001600160a01b031681565b6101e461020e3660046115e6565b6104f2565b6102266102213660046116d3565b61056d565b6040519081526020016101c8565b6101e46105a0565b61022661271081565b61022660045481565b6101e461025c366004611817565b61062c565b61022660035481565b6101e46102783660046115e6565b61068c565b61022660055481565b610299610294366004611817565b610717565b604080519384526020840192909252908201526060016101c8565b6101e46102c2366004611817565b600855565b6102266102d5366004611817565b610745565b6000546101bb906001600160a01b031681565b61022660085481565b6103096103043660046115e6565b6107b3565b60405190151581526020016101c8565b600754610338906001600160a01b03811690600160a01b900460ff1682565b6040516101c89291906118b9565b61022660025481565b60065461035f9063ffffffff1681565b60405163ffffffff90911681526020016101c8565b610226610382366004611849565b610839565b6101e46103953660046115e6565b610875565b6101e46103a8366004611817565b6108eb565b6102266103bb3660046117ca565b61094b565b6101e46103ce366004611817565b6109ef565b6101e46103e1366004611870565b610a4f565b6102266103f4366004611817565b610ac2565b61040c6104073660046115e6565b610ad4565b6040516101c892919061189f565b61042d610428366004611620565b610bc2565b60408051600694850b81529290930b60208301521515918101919091526060016101c8565b610226610460366004611817565b610ccd565b6001546101bb906001600160a01b031681565b6102266104863660046115e6565b610e28565b6000546001600160a01b031633146104b6576040516354348f0360e01b815260040160405180910390fd5b60028190556040518181527f0919fdaaac0f59c6bc7eeef4f975d6163475220f1e4820d0bce99c84c51cac1d906020015b60405180910390a150565b6000546001600160a01b0316331461051d576040516354348f0360e01b815260040160405180910390fd5b61052681610ec6565b6007546040517f554c636366d5fc882a9ab4b7b9d5181781d1a7076abe50ed410365620dcf4108916104e7916001600160a01b03821691600160a01b900460ff16906118b9565b60008061057c6102d585610e28565b905061059861271061058e83866119cb565b61046091906119b7565b949350505050565b6001546001600160a01b031633146105cb57604051637ef5703160e11b815260040160405180910390fd5b60018054600080546001600160a01b0383166001600160a01b031991821681179092559091169091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b6916106229161188b565b60405180910390a1565b6000546001600160a01b03163314610657576040516354348f0360e01b815260040160405180910390fd5b60058190556040518181527fed847bdbab1a30becee18585f23c759bd06156561390d2e7fbffd18e74b56c9b906020016104e7565b6000546001600160a01b031633146106b7576040516354348f0360e01b815260040160405180910390fd5b60068054600160201b600160c01b031916600160201b6001600160a01b03848116820292909217928390556040517fcf744e4fc39d49b6d8103035078629b8a3be95adc007b0d663e96bdff777b10a936104e7939290049091169061188b565b600080600061072d670de0b6b3a7640000610ccd565b915061073884610745565b6005549095929450925050565b600061075382600454611070565b91506000610797600254600454856002546003546107719190611a3a565b61077b91906119cb565b61078591906119b7565b6002546107929190611971565b611086565b90506107a260085490565b6107ac90826119cb565b9392505050565b60008060006107c184610ad4565b90925090506001600160a01b038216731ceb5cb57c4d4e2b2433641b95dd330a33185a4414156107f5575060019392505050565b6001600160a01b038116731ceb5cb57c4d4e2b2433641b95dd330a33185a441461083257604051637d7c8f2760e11b815260040160405180910390fd5b5050919050565b60008061085261084d84600687900b611989565b611096565b905061086c600160601b86836001600160a01b03166114a4565b95945050505050565b6000546001600160a01b031633146108a0576040516354348f0360e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383161790556040517fe987aaedf9d279143bdf1eee16cf1d0feb47742867d81083df8d6cd0a5ac857f906104e790839061188b565b6000546001600160a01b03163314610916576040516354348f0360e01b815260040160405180910390fd5b60048190556040518181527feac367d684b6ac6c6ae7e3e852c06f17e6354e0f1e7122832c3e6d17e0a2b71e906020016104e7565b60008061095f61084d84600687900b611989565b90506001600160801b036001600160a01b038216116109af57600061098d6001600160a01b038316806119cb565b90506109a7600160c01b876001600160801b0316836114a4565b9250506109e7565b60006109c96001600160a01b03831680600160401b6114a4565b90506109e3600160801b876001600160801b0316836114a4565b9250505b509392505050565b6000546001600160a01b03163314610a1a576040516354348f0360e01b815260040160405180910390fd5b60038190556040518181527fa1292b4e7a0d916ccfd2bc83858b05f328e344d1f0f507d97ac66723ac7c2aaa906020016104e7565b6000546001600160a01b03163314610a7a576040516354348f0360e01b815260040160405180910390fd5b6006805463ffffffff191663ffffffff83169081179091556040519081527fc806e26fb64e3a95f4b70abf4d87280555696244d01068b5f45b0e515aceb1de906020016104e7565b6000610ace328361056d565b92915050565b600080826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610b1057600080fd5b505afa158015610b24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b489190611603565b836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610b8157600080fd5b505afa158015610b95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb99190611603565b91509150915091565b6000806000846001600160a01b031663883bdbfd856040518263ffffffff1660e01b8152600401610bf391906118d4565b60006040518083038186803b158015610c0b57600080fd5b505afa925050508015610c4057506040513d6000823e601f3d908101601f19168201604052610c3d91908101906116ff565b60015b610c7a573d808015610c6e576040519150601f19603f3d011682016040523d82523d6000602084013e610c73565b606091505b5050610cc6565b81600081518110610c8d57610c8d611aeb565b60200260200101519450600182511115610cbf5781600181518110610cb457610cb4611aeb565b602002602001015193505b6001925050505b9250925092565b604080516002808252606082018352600092839291906020830190803683375050600654825192935063ffffffff16918391506001908110610d1157610d11611aeb565b63ffffffff9092166020928302919091019091015260075460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd90610d579085906004016118d4565b60006040518083038186803b158015610d6f57600080fd5b505afa158015610d83573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dab91908101906116ff565b509050600081600181518110610dc357610dc3611aeb565b602002602001015182600081518110610dde57610dde611aeb565b6020026020010151610df091906119ea565b60075490915061086c908690600160a01b900460ff16610e1857610e1383611aa5565b610e1a565b825b60065463ffffffff1661094b565b60065460405163a39744b560e01b8152600091600160201b90046001600160a01b03169063a39744b590610e76908590731ceb5cb57c4d4e2b2433641b95dd330a33185a449060040161189f565b60206040518083038186803b158015610e8e57600080fd5b505afa158015610ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace9190611830565b6000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1f57600080fd5b505afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190611603565b6001600160a01b03161490506000731ceb5cb57c4d4e2b2433641b95dd330a33185a446001600160a01b0316836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610fbc57600080fd5b505afa158015610fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff49190611603565b6001600160a01b03161490508115801561100c575080155b1561102a57604051637c395fed60e01b815260040160405180910390fd5b50604080518082019091526001600160a01b03929092168083529015156020909201829052600780546001600160a81b031916909117600160a01b909202919091179055565b600081831061107f57816107ac565b5090919050565b60008183101561107f57816107ac565b60008060008360020b126110ad578260020b6110ba565b8260020b6110ba90611a88565b90506110c9620d89e719611a65565b60020b8111156111035760405162461bcd60e51b81526020600482015260016024820152601560fa1b604482015260640160405180910390fd5b60006001821661111757600160801b611129565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561115e576080611159826ffff97272373d413259a46990580e213a6119cb565b901c90505b6004821615611188576080611183826ffff2e50f5f656932ef12357cf3c7fdcc6119cb565b901c90505b60088216156111b25760806111ad826fffe5caca7e10e4e61c3624eaa0941cd06119cb565b901c90505b60108216156111dc5760806111d7826fffcb9843d60f6159c9db58835c9266446119cb565b901c90505b6020821615611206576080611201826fff973b41fa98c081472e6896dfb254c06119cb565b901c90505b604082161561123057608061122b826fff2ea16466c96a3843ec78b326b528616119cb565b901c90505b608082161561125a576080611255826ffe5dee046a99a2a811c461f1969c30536119cb565b901c90505b610100821615611285576080611280826ffcbe86c7900a88aedcffc83b479aa3a46119cb565b901c90505b6102008216156112b05760806112ab826ff987a7253ac413176f2b074cf7815e546119cb565b901c90505b6104008216156112db5760806112d6826ff3392b0822b70005940c7a398e4b70f36119cb565b901c90505b610800821615611306576080611301826fe7159475a2c29b7443b29c7fa6e889d96119cb565b901c90505b61100082161561133157608061132c826fd097f3bdfd2022b8845ad8f792aa58256119cb565b901c90505b61200082161561135c576080611357826fa9f746462d870fdf8a65dc1f90e061e56119cb565b901c90505b614000821615611387576080611382826f70d869a156d2a1b890bb3df62baf32f76119cb565b901c90505b6180008216156113b25760806113ad826f31be135f97d08fd981231505542fcfa66119cb565b901c90505b620100008216156113de5760806113d9826f09aa508b5b7a84e1c677de54f3e99bc96119cb565b901c90505b62020000821615611409576080611404826e5d6af8dedb81196699c329225ee6046119cb565b901c90505b6204000082161561143357608061142e826d2216e584f5fa1ea926041bedfe986119cb565b901c90505b6208000082161561145b576080611456826b048a170391f7dc42444e8fa26119cb565b901c90505b60008460020b131561147657611473816000196119b7565b90505b611484600160201b82611a51565b15611490576001611493565b60005b6105989060ff16602083901c611971565b6000808060001985870985870292508281108382030391505080600014156114de57600084116114d357600080fd5b5082900490506107ac565b8084116114ea57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600082601f83011261156357600080fd5b815160206115786115738361194e565b61191e565b80838252828201915082860187848660051b890101111561159857600080fd5b60005b858110156115c05781516115ae81611b17565b8452928401929084019060010161159b565b5090979650505050505050565b803563ffffffff811681146115e157600080fd5b919050565b6000602082840312156115f857600080fd5b81356107ac81611b17565b60006020828403121561161557600080fd5b81516107ac81611b17565b6000806040838503121561163357600080fd5b823561163e81611b17565b91506020838101356001600160401b0381111561165a57600080fd5b8401601f8101861361166b57600080fd5b80356116796115738261194e565b80828252848201915084840189868560051b870101111561169957600080fd5b600094505b838510156116c3576116af816115cd565b83526001949094019391850191850161169e565b5080955050505050509250929050565b600080604083850312156116e657600080fd5b82356116f181611b17565b946020939093013593505050565b6000806040838503121561171257600080fd5b82516001600160401b038082111561172957600080fd5b818501915085601f83011261173d57600080fd5b8151602061174d6115738361194e565b8083825282820191508286018a848660051b890101111561176d57600080fd5b600096505b8487101561179957805161178581611b2f565b835260019690960195918301918301611772565b50918801519196509093505050808211156117b357600080fd5b506117c085828601611552565b9150509250929050565b6000806000606084860312156117df57600080fd5b83356001600160801b03811681146117f657600080fd5b9250602084013561180681611b2f565b929592945050506040919091013590565b60006020828403121561182957600080fd5b5035919050565b60006020828403121561184257600080fd5b5051919050565b60008060006060848603121561185e57600080fd5b83359250602084013561180681611b2f565b60006020828403121561188257600080fd5b6107ac826115cd565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561191257835163ffffffff16835292840192918401916001016118f0565b50909695505050505050565b604051601f8201601f191681016001600160401b038111828210171561194657611946611b01565b604052919050565b60006001600160401b0382111561196757611967611b01565b5060051b60200190565b6000821982111561198457611984611abf565b500190565b60008261199857611998611ad5565b600160ff1b8214600019841416156119b2576119b2611abf565b500590565b6000826119c6576119c6611ad5565b500490565b60008160001904831182151516156119e5576119e5611abf565b500290565b60008160060b8360060b6000811281667fffffffffffff1901831281151615611a1557611a15611abf565b81667fffffffffffff018313811615611a3057611a30611abf565b5090039392505050565b600082821015611a4c57611a4c611abf565b500390565b600082611a6057611a60611ad5565b500690565b60008160020b627fffff19811415611a7f57611a7f611abf565b60000392915050565b6000600160ff1b821415611a9e57611a9e611abf565b5060000390565b60008160060b667fffffffffffff19811415611a7f57611a7f5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611b2c57600080fd5b50565b8060060b8114611b2c57600080fdfea264697066735822122004c0a010ceffd8e7db3c26c049c2c7972b37fcac1edac6ccf38a411c856f238464736f6c63430008070033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
