{
  "_format": "hh-sol-artifact-1",
  "contractName": "DelegatableVault",
  "sourceName": "contracts/DelegatableVault.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "base",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quote",
              "type": "uint256"
            },
            {
              "internalType": "int24",
              "name": "lowerTick",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "upperTick",
              "type": "int24"
            },
            {
              "internalType": "uint256",
              "name": "minBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minQuote",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "useTakerBalance",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            }
          ],
          "internalType": "struct IClearingHouse.AddLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "addLiquidity",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "base",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quote",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "liquidity",
              "type": "uint256"
            }
          ],
          "internalType": "struct IClearingHouse.AddLiquidityResponse",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "calls",
          "type": "bytes[]"
        }
      ],
      "name": "aggregate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        },
        {
          "internalType": "bytes[]",
          "name": "returnData",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "candidate",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            },
            {
              "internalType": "uint256",
              "name": "oppositeAmountBound",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bytes32",
              "name": "referralCode",
              "type": "bytes32"
            }
          ],
          "internalType": "struct IClearingHouse.ClosePositionParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "closePosition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "deltaAvailableBase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deltaAvailableQuote",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountX10_D",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "clearingHouseArg",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "fundOwnerArg",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "fundManagerArg",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "bool",
              "name": "isBaseToQuote",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "isExactInput",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "oppositeAmountBound",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "uint160",
              "name": "sqrtPriceLimitX96",
              "type": "uint160"
            },
            {
              "internalType": "bytes32",
              "name": "referralCode",
              "type": "bytes32"
            }
          ],
          "internalType": "struct IClearingHouse.OpenPositionParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "openPosition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "deltaBase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deltaQuote",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "int24",
              "name": "lowerTick",
              "type": "int24"
            },
            {
              "internalType": "int24",
              "name": "upperTick",
              "type": "int24"
            },
            {
              "internalType": "uint128",
              "name": "liquidity",
              "type": "uint128"
            },
            {
              "internalType": "uint256",
              "name": "minBase",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minQuote",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            }
          ],
          "internalType": "struct IClearingHouse.RemoveLiquidityParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "removeLiquidity",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "base",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quote",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            }
          ],
          "internalType": "struct IClearingHouse.RemoveLiquidityResponse",
          "name": "response",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "fundManagerArg",
          "type": "address"
        }
      ],
      "name": "setFundManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "functionSelector",
          "type": "bytes4"
        },
        {
          "internalType": "bool",
          "name": "enable",
          "type": "bool"
        }
      ],
      "name": "setWhiteFunction",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "name": "whiteFunctionMap",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountX10_D",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "withdrawToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50612226806100206000396000f3fe608060405234801561001057600080fd5b506004361061010a5760003560e01c806389476069116100a2578063c0c53b8b11610071578063c0c53b8b14610208578063c35eb28c1461021b578063cde109b61461023b578063f3fef3a31461025b578063f90f37311461026e5761010a565b806389476069146101d25780638da5cb5b146101e5578063b6b1b6c3146101ed578063bc5920ba146102005761010a565b806347e7ef24116100de57806347e7ef24146101825780634abaeee7146101955780636c8381f8146101b5578063715018a6146101ca5761010a565b8062aa9a891461010f57806301b069c81461013957806313af40351461015a578063232a30601461016f575b600080fd5b61012261011d366004611b94565b610281565b6040516101309291906120cd565b60405180910390f35b61014c610147366004611a62565b610356565b604051610130929190612065565b61016d6101683660046119b5565b610567565b005b61016d61017d3660046119b5565b6106c2565b61016d610190366004611a37565b610741565b6101a86101a3366004611ad1565b610866565b6040516101309190611d8d565b6101bd61087b565b6040516101309190611d60565b61016d61088a565b61016d6101e03660046119b5565b61093d565b6101bd6109db565b6101226101fb366004611ba5565b6109ea565b61016d610a5e565b61016d6102163660046119ed565b610b5c565b61022e610229366004611b1d565b610d30565b6040516101309190611ecf565b61024e610249366004611c4a565b610e01565b6040516101309190612044565b61016d610269366004611a37565b610eca565b61016d61027c366004611aeb565b610fe4565b609a5460009081906001600160a01b03163314806102a95750609b546001600160a01b031633145b6102ce5760405162461bcd60e51b81526004016102c590611dab565b60405180910390fd5b60995460405162aa9a8960e01b81526001600160a01b039091169062aa9a89906102fc908690600401611efa565b6040805180830381600087803b15801561031557600080fd5b505af1158015610329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034d9190611cc8565b91509150915091565b609a546000906060906001600160a01b031633148061037f5750609b546001600160a01b031633145b61039b5760405162461bcd60e51b81526004016102c590611dab565b4391508267ffffffffffffffff811180156103b557600080fd5b506040519080825280602002602001820160405280156103e957816020015b60608152602001906001900390816103d45790505b50905060005b8381101561055f57609c600061045687878581811061040a57fe5b905060200281019061041c91906120db565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061106d92505050565b6001600160e01b031916815260208101919091526040016000205460ff166104905760405162461bcd60e51b81526004016102c590611e0e565b60995460009081906001600160a01b03168787858181106104ad57fe5b90506020028101906104bf91906120db565b6040516104cd929190611d50565b6000604051808303816000865af19150503d806000811461050a576040519150601f19603f3d011682016040523d82523d6000602084013e61050f565b606091505b50915091508161051e82611107565b9061053c5760405162461bcd60e51b81526004016102c59190611d98565b508084848151811061054a57fe5b602090810291909101015250506001016103ef565b509250929050565b61056f611222565b6001600160a01b03166105806109db565b6001600160a01b0316146105c4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610608576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610654576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b03828116911614156106a0576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6106ca611222565b6001600160a01b03166106db6109db565b6001600160a01b03161461071f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b609b80546001600160a01b0319166001600160a01b0392909216919091179055565b609a546001600160a01b0316331461076b5760405162461bcd60e51b81526004016102c590611dee565b609954604080516311b2515f60e31b815290516000926001600160a01b031691638d928af8916004808301926020929190829003018186803b1580156107b057600080fd5b505afa1580156107c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e891906119d1565b90506107f683333085611226565b610801838284611280565b6040516311f9fbc960e21b81526001600160a01b038216906347e7ef249061082f9086908690600401611d74565b600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50505050505050565b609c6020526000908152604090205460ff1681565b6034546001600160a01b031690565b610892611222565b6001600160a01b03166108a36109db565b6001600160a01b0316146108e7576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319908116909155603480549091169055565b6040516370a0823160e01b81526000906001600160a01b038316906370a082319061096c903090600401611d60565b60206040518083038186803b15801561098457600080fd5b505afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc9190611cb0565b609a549091506109d79083906001600160a01b031683611393565b5050565b6033546001600160a01b031690565b609a5460009081906001600160a01b0316331480610a125750609b546001600160a01b031633145b610a2e5760405162461bcd60e51b81526004016102c590611dab565b60995460405163b6b1b6c360e01b81526001600160a01b039091169063b6b1b6c3906102fc908690600401611f53565b6034546001600160a01b0316610aa3576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610aab611222565b6034546001600160a01b03908116911614610af6576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff1680610b755750610b756113e5565b80610b83575060005460ff16155b610bbe5760405162461bcd60e51b815260040180806020018281038252602e815260200180612163602e913960400191505060405180910390fd5b600054610100900460ff16158015610be9576000805460ff1961ff0019909116610100171660011790555b610bfb846001600160a01b03166113f6565b610c175760405162461bcd60e51b81526004016102c590611dcd565b610c1f6113fc565b609980546001600160a01b038087166001600160a01b031992831617909255609a8054868416908316179055609b805492851692909116919091179055609c6020527fdea4142ccf15346b2d870191a900ac09b8c3f9698b60c5026e0e6290f01e6f40805460ff1990811660019081179092557f3a955d60ee03f0cfc2464ece597f3800bfc0647f33d956f340d74b212237ee4480548216831790557f8f0e6ba70131789c83f2362ff2e12670c933cbc9130839332446eed94cbcfeef805482168317905562aa9a8960e01b6000527ecff2367b8de312107d05d5fe24281d29c6638c647aa3c84eddf3100b03a8b4805490911690911790558015610d2a576000805461ff00191690555b50505050565b610d38611910565b609a546001600160a01b0316331480610d5b5750609b546001600160a01b031633145b610d775760405162461bcd60e51b81526004016102c590611dab565b6099546040516330d7aca360e21b81526001600160a01b039091169063c35eb28c90610da7908590600401611e2f565b608060405180830381600087803b158015610dc157600080fd5b505af1158015610dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df99190611b35565b90505b919050565b610e09611938565b609a546001600160a01b0316331480610e2c5750609b546001600160a01b031633145b610e485760405162461bcd60e51b81526004016102c590611dab565b6099546040516366f084db60e11b81526001600160a01b039091169063cde109b690610e78908590600401611fbc565b606060405180830381600087803b158015610e9257600080fd5b505af1158015610ea6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df99190611c5b565b609a546001600160a01b03163314610ef45760405162461bcd60e51b81526004016102c590611dee565b609954604080516311b2515f60e31b815290516000926001600160a01b031691638d928af8916004808301926020929190829003018186803b158015610f3957600080fd5b505afa158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7191906119d1565b60405163f3fef3a360e01b81529091506001600160a01b0382169063f3fef3a390610fa29086908690600401611d74565b600060405180830381600087803b158015610fbc57600080fd5b505af1158015610fd0573d6000803e3d6000fd5b50505050610fdf833384611393565b505050565b610fec611222565b6001600160a01b0316610ffd6109db565b6001600160a01b031614611041576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160e01b0319919091166000908152609c60205260409020805460ff1916911515919091179055565b600060188260038151811061107e57fe5b016020015183516001600160f81b031990911690911c90601090849060029081106110a557fe5b016020015184516001600160f81b031990911690911c90600890859060019081106110cc57fe5b016020015185516001600160f81b031990911690911c9085906000906110ee57fe5b01602001516001600160f81b0319161717179050919050565b8051606090604481101561114357505060408051808201909152601081526f2ab732bc3832b1ba32b21032b93937b960811b6020820152610dfc565b600483018051600319830180835291949091602490910190602081101561116957600080fd5b810190808051604051939291908464010000000082111561118957600080fd5b90830190602082018581111561119e57600080fd5b82516401000000008111828201881017156111b857600080fd5b82525081516020918201929091019080838360005b838110156111e55781810151838201526020016111cd565b50505050905090810190601f1680156112125780820380516001836020036101000a031916815260200191505b5060405250505093525090919050565b3390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610d2a9085906114fe565b801580611306575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156112d857600080fd5b505afa1580156112ec573d6000803e3d6000fd5b505050506040513d602081101561130257600080fd5b5051155b6113415760405162461bcd60e51b81526004018080602001828103825260368152602001806121bb6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610fdf9084906114fe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610fdf9084906114fe565b60006113f0306113f6565b15905090565b3b151590565b600054610100900460ff168061141557506114156113e5565b80611423575060005460ff16155b61145e5760405162461bcd60e51b815260040180806020018281038252602e815260200180612163602e913960400191505060405180910390fd5b600054610100900460ff16158015611489576000805460ff1961ff0019909116610100171660011790555b6114916115af565b600061149b611222565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156114fb576000805461ff00191690555b50565b6000611553826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116589092919063ffffffff16565b805190915015610fdf5780806020019051602081101561157257600080fd5b5051610fdf5760405162461bcd60e51b815260040180806020018281038252602a815260200180612191602a913960400191505060405180910390fd5b600054610100900460ff16806115c857506115c86113e5565b806115d6575060005460ff16155b6116115760405162461bcd60e51b815260040180806020018281038252602e815260200180612163602e913960400191505060405180910390fd5b600054610100900460ff1615801561163c576000805460ff1961ff0019909116610100171660011790555b611644611671565b80156114fb576000805461ff001916905550565b60606116678484600085611711565b90505b9392505050565b600054610100900460ff168061168a575061168a6113e5565b80611698575060005460ff16155b6116d35760405162461bcd60e51b815260040180806020018281038252602e815260200180612163602e913960400191505060405180910390fd5b600054610100900460ff16158015611644576000805460ff1961ff00199091166101001716600117905580156114fb576000805461ff001916905550565b6060824710156117525760405162461bcd60e51b815260040180806020018281038252602681526020018061213d6026913960400191505060405180910390fd5b61175b856113f6565b6117ac576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106117ea5780518252601f1990920191602091820191016117cb565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461184c576040519150601f19603f3d011682016040523d82523d6000602084013e611851565b606091505b509150915061186182828661186c565b979650505050505050565b6060831561187b57508161166a565b82511561188b5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118d55781810151838201526020016118bd565b50505050905090810190601f1680156119025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b8035610dfc81612127565b80358015158114610dfc57600080fd5b80356001600160e01b031981168114610dfc57600080fd5b8035600281900b8114610dfc57600080fd5b80356001600160801b0381168114610dfc57600080fd5b6000602082840312156119c6578081fd5b813561166a81612127565b6000602082840312156119e2578081fd5b815161166a81612127565b600080600060608486031215611a01578182fd5b8335611a0c81612127565b92506020840135611a1c81612127565b91506040840135611a2c81612127565b809150509250925092565b60008060408385031215611a49578182fd5b8235611a5481612127565b946020939093013593505050565b60008060208385031215611a74578182fd5b823567ffffffffffffffff80821115611a8b578384fd5b818501915085601f830112611a9e578384fd5b813581811115611aac578485fd5b8660208083028501011115611abf578485fd5b60209290920196919550909350505050565b600060208284031215611ae2578081fd5b61166a82611974565b60008060408385031215611afd578182fd5b611b0683611974565b9150611b1460208401611964565b90509250929050565b60006101208284031215611b2f578081fd5b50919050565b600060808284031215611b46578081fd5b6040516080810181811067ffffffffffffffff82111715611b6357fe5b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600060a08284031215611b2f578081fd5b6000610100808385031215611bb8578182fd5b6040519081019067ffffffffffffffff82118183101715611bd557fe5b81604052611be284611959565b8152611bf060208501611964565b6020820152611c0160408501611964565b6040820152606084013560608201526080840135608082015260a084013560a0820152611c3060c08501611959565b60c082015260e084013560e0820152809250505092915050565b600060e08284031215611b2f578081fd5b600060608284031215611c6c578081fd5b6040516060810181811067ffffffffffffffff82111715611c8957fe5b80604052508251815260208301516020820152604083015160408201528091505092915050565b600060208284031215611cc1578081fd5b5051919050565b60008060408385031215611cda578182fd5b505080516020909101519092909150565b15159052565b60008151808452815b81811015611d1657602081850181015186830182015201611cfa565b81811115611d275782602083870101525b50601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60006020825261166a6020830184611cf1565b60208082526008908201526744565f4f464f464d60c01b604082015260600190565b60208082526007908201526644565f43484e4360c81b604082015260600190565b60208082526006908201526544565f4f464f60d01b604082015260600190565b60208082526007908201526644565f464e495760c81b604082015260600190565b61012081018235611e3f81612127565b6001600160a01b031682526020838101359083015260408084013590830152611e6a6060840161198c565b611e776060840182611d3c565b50611e846080840161198c565b611e916080840182611d3c565b5060a083013560a083015260c083013560c0830152611eb260e08401611964565b611ebf60e0840182611ceb565b5061010092830135919092015290565b8151815260208083015190820152604080830151908201526060918201519181019190915260800190565b60a081018235611f0981612127565b6001600160a01b039081168352602084013590611f2582612127565b8082166020850152505060408301356040830152606083013560608301526080830135608083015292915050565b60006101008201905060018060a01b03808451168352602084015115156020840152604084015115156040840152606084015160608401526080840151608084015260a084015160a08401528060c08501511660c08401525060e083015160e083015292915050565b60e081018235611fcb81612127565b6001600160a01b031682526020830135600281900b808214611fec57600080fd5b602084015250611ffe6040840161198c565b60020b60408301526120126060840161199e565b61201f6060840182611d43565b506080830135608083015260a083013560a083015260c083013560c083015292915050565b81518152602080830151908201526040918201519181019190915260600190565b600060408201848352602060408185015281855180845260608601915060608382028701019350828701855b828110156120bf57605f198887030184526120ad868351611cf1565b95509284019290840190600101612091565b509398975050505050505050565b918252602082015260400190565b6000808335601e198436030181126120f1578283fd5b83018035915067ffffffffffffffff82111561210b578283fd5b60200191503681900382131561212057600080fd5b9250929050565b6001600160a01b03811681146114fb57600080fdfe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a26469706673582212204bfa0ed7b6c5d7ffa1f40f2d52a8c6473004427122b8c8a3fe86f35ce53c0d6b64736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010a5760003560e01c806389476069116100a2578063c0c53b8b11610071578063c0c53b8b14610208578063c35eb28c1461021b578063cde109b61461023b578063f3fef3a31461025b578063f90f37311461026e5761010a565b806389476069146101d25780638da5cb5b146101e5578063b6b1b6c3146101ed578063bc5920ba146102005761010a565b806347e7ef24116100de57806347e7ef24146101825780634abaeee7146101955780636c8381f8146101b5578063715018a6146101ca5761010a565b8062aa9a891461010f57806301b069c81461013957806313af40351461015a578063232a30601461016f575b600080fd5b61012261011d366004611b94565b610281565b6040516101309291906120cd565b60405180910390f35b61014c610147366004611a62565b610356565b604051610130929190612065565b61016d6101683660046119b5565b610567565b005b61016d61017d3660046119b5565b6106c2565b61016d610190366004611a37565b610741565b6101a86101a3366004611ad1565b610866565b6040516101309190611d8d565b6101bd61087b565b6040516101309190611d60565b61016d61088a565b61016d6101e03660046119b5565b61093d565b6101bd6109db565b6101226101fb366004611ba5565b6109ea565b61016d610a5e565b61016d6102163660046119ed565b610b5c565b61022e610229366004611b1d565b610d30565b6040516101309190611ecf565b61024e610249366004611c4a565b610e01565b6040516101309190612044565b61016d610269366004611a37565b610eca565b61016d61027c366004611aeb565b610fe4565b609a5460009081906001600160a01b03163314806102a95750609b546001600160a01b031633145b6102ce5760405162461bcd60e51b81526004016102c590611dab565b60405180910390fd5b60995460405162aa9a8960e01b81526001600160a01b039091169062aa9a89906102fc908690600401611efa565b6040805180830381600087803b15801561031557600080fd5b505af1158015610329573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061034d9190611cc8565b91509150915091565b609a546000906060906001600160a01b031633148061037f5750609b546001600160a01b031633145b61039b5760405162461bcd60e51b81526004016102c590611dab565b4391508267ffffffffffffffff811180156103b557600080fd5b506040519080825280602002602001820160405280156103e957816020015b60608152602001906001900390816103d45790505b50905060005b8381101561055f57609c600061045687878581811061040a57fe5b905060200281019061041c91906120db565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061106d92505050565b6001600160e01b031916815260208101919091526040016000205460ff166104905760405162461bcd60e51b81526004016102c590611e0e565b60995460009081906001600160a01b03168787858181106104ad57fe5b90506020028101906104bf91906120db565b6040516104cd929190611d50565b6000604051808303816000865af19150503d806000811461050a576040519150601f19603f3d011682016040523d82523d6000602084013e61050f565b606091505b50915091508161051e82611107565b9061053c5760405162461bcd60e51b81526004016102c59190611d98565b508084848151811061054a57fe5b602090810291909101015250506001016103ef565b509250929050565b61056f611222565b6001600160a01b03166105806109db565b6001600160a01b0316146105c4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610608576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610654576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b03828116911614156106a0576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6106ca611222565b6001600160a01b03166106db6109db565b6001600160a01b03161461071f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b609b80546001600160a01b0319166001600160a01b0392909216919091179055565b609a546001600160a01b0316331461076b5760405162461bcd60e51b81526004016102c590611dee565b609954604080516311b2515f60e31b815290516000926001600160a01b031691638d928af8916004808301926020929190829003018186803b1580156107b057600080fd5b505afa1580156107c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e891906119d1565b90506107f683333085611226565b610801838284611280565b6040516311f9fbc960e21b81526001600160a01b038216906347e7ef249061082f9086908690600401611d74565b600060405180830381600087803b15801561084957600080fd5b505af115801561085d573d6000803e3d6000fd5b50505050505050565b609c6020526000908152604090205460ff1681565b6034546001600160a01b031690565b610892611222565b6001600160a01b03166108a36109db565b6001600160a01b0316146108e7576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319908116909155603480549091169055565b6040516370a0823160e01b81526000906001600160a01b038316906370a082319061096c903090600401611d60565b60206040518083038186803b15801561098457600080fd5b505afa158015610998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bc9190611cb0565b609a549091506109d79083906001600160a01b031683611393565b5050565b6033546001600160a01b031690565b609a5460009081906001600160a01b0316331480610a125750609b546001600160a01b031633145b610a2e5760405162461bcd60e51b81526004016102c590611dab565b60995460405163b6b1b6c360e01b81526001600160a01b039091169063b6b1b6c3906102fc908690600401611f53565b6034546001600160a01b0316610aa3576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610aab611222565b6034546001600160a01b03908116911614610af6576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b0392831692909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff1680610b755750610b756113e5565b80610b83575060005460ff16155b610bbe5760405162461bcd60e51b815260040180806020018281038252602e815260200180612163602e913960400191505060405180910390fd5b600054610100900460ff16158015610be9576000805460ff1961ff0019909116610100171660011790555b610bfb846001600160a01b03166113f6565b610c175760405162461bcd60e51b81526004016102c590611dcd565b610c1f6113fc565b609980546001600160a01b038087166001600160a01b031992831617909255609a8054868416908316179055609b805492851692909116919091179055609c6020527fdea4142ccf15346b2d870191a900ac09b8c3f9698b60c5026e0e6290f01e6f40805460ff1990811660019081179092557f3a955d60ee03f0cfc2464ece597f3800bfc0647f33d956f340d74b212237ee4480548216831790557f8f0e6ba70131789c83f2362ff2e12670c933cbc9130839332446eed94cbcfeef805482168317905562aa9a8960e01b6000527ecff2367b8de312107d05d5fe24281d29c6638c647aa3c84eddf3100b03a8b4805490911690911790558015610d2a576000805461ff00191690555b50505050565b610d38611910565b609a546001600160a01b0316331480610d5b5750609b546001600160a01b031633145b610d775760405162461bcd60e51b81526004016102c590611dab565b6099546040516330d7aca360e21b81526001600160a01b039091169063c35eb28c90610da7908590600401611e2f565b608060405180830381600087803b158015610dc157600080fd5b505af1158015610dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df99190611b35565b90505b919050565b610e09611938565b609a546001600160a01b0316331480610e2c5750609b546001600160a01b031633145b610e485760405162461bcd60e51b81526004016102c590611dab565b6099546040516366f084db60e11b81526001600160a01b039091169063cde109b690610e78908590600401611fbc565b606060405180830381600087803b158015610e9257600080fd5b505af1158015610ea6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df99190611c5b565b609a546001600160a01b03163314610ef45760405162461bcd60e51b81526004016102c590611dee565b609954604080516311b2515f60e31b815290516000926001600160a01b031691638d928af8916004808301926020929190829003018186803b158015610f3957600080fd5b505afa158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7191906119d1565b60405163f3fef3a360e01b81529091506001600160a01b0382169063f3fef3a390610fa29086908690600401611d74565b600060405180830381600087803b158015610fbc57600080fd5b505af1158015610fd0573d6000803e3d6000fd5b50505050610fdf833384611393565b505050565b610fec611222565b6001600160a01b0316610ffd6109db565b6001600160a01b031614611041576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160e01b0319919091166000908152609c60205260409020805460ff1916911515919091179055565b600060188260038151811061107e57fe5b016020015183516001600160f81b031990911690911c90601090849060029081106110a557fe5b016020015184516001600160f81b031990911690911c90600890859060019081106110cc57fe5b016020015185516001600160f81b031990911690911c9085906000906110ee57fe5b01602001516001600160f81b0319161717179050919050565b8051606090604481101561114357505060408051808201909152601081526f2ab732bc3832b1ba32b21032b93937b960811b6020820152610dfc565b600483018051600319830180835291949091602490910190602081101561116957600080fd5b810190808051604051939291908464010000000082111561118957600080fd5b90830190602082018581111561119e57600080fd5b82516401000000008111828201881017156111b857600080fd5b82525081516020918201929091019080838360005b838110156111e55781810151838201526020016111cd565b50505050905090810190601f1680156112125780820380516001836020036101000a031916815260200191505b5060405250505093525090919050565b3390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610d2a9085906114fe565b801580611306575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b1580156112d857600080fd5b505afa1580156112ec573d6000803e3d6000fd5b505050506040513d602081101561130257600080fd5b5051155b6113415760405162461bcd60e51b81526004018080602001828103825260368152602001806121bb6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610fdf9084906114fe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610fdf9084906114fe565b60006113f0306113f6565b15905090565b3b151590565b600054610100900460ff168061141557506114156113e5565b80611423575060005460ff16155b61145e5760405162461bcd60e51b815260040180806020018281038252602e815260200180612163602e913960400191505060405180910390fd5b600054610100900460ff16158015611489576000805460ff1961ff0019909116610100171660011790555b6114916115af565b600061149b611222565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156114fb576000805461ff00191690555b50565b6000611553826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166116589092919063ffffffff16565b805190915015610fdf5780806020019051602081101561157257600080fd5b5051610fdf5760405162461bcd60e51b815260040180806020018281038252602a815260200180612191602a913960400191505060405180910390fd5b600054610100900460ff16806115c857506115c86113e5565b806115d6575060005460ff16155b6116115760405162461bcd60e51b815260040180806020018281038252602e815260200180612163602e913960400191505060405180910390fd5b600054610100900460ff1615801561163c576000805460ff1961ff0019909116610100171660011790555b611644611671565b80156114fb576000805461ff001916905550565b60606116678484600085611711565b90505b9392505050565b600054610100900460ff168061168a575061168a6113e5565b80611698575060005460ff16155b6116d35760405162461bcd60e51b815260040180806020018281038252602e815260200180612163602e913960400191505060405180910390fd5b600054610100900460ff16158015611644576000805460ff1961ff00199091166101001716600117905580156114fb576000805461ff001916905550565b6060824710156117525760405162461bcd60e51b815260040180806020018281038252602681526020018061213d6026913960400191505060405180910390fd5b61175b856113f6565b6117ac576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106117ea5780518252601f1990920191602091820191016117cb565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461184c576040519150601f19603f3d011682016040523d82523d6000602084013e611851565b606091505b509150915061186182828661186c565b979650505050505050565b6060831561187b57508161166a565b82511561188b5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156118d55781810151838201526020016118bd565b50505050905090810190601f1680156119025780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180606001604052806000815260200160008152602001600081525090565b8035610dfc81612127565b80358015158114610dfc57600080fd5b80356001600160e01b031981168114610dfc57600080fd5b8035600281900b8114610dfc57600080fd5b80356001600160801b0381168114610dfc57600080fd5b6000602082840312156119c6578081fd5b813561166a81612127565b6000602082840312156119e2578081fd5b815161166a81612127565b600080600060608486031215611a01578182fd5b8335611a0c81612127565b92506020840135611a1c81612127565b91506040840135611a2c81612127565b809150509250925092565b60008060408385031215611a49578182fd5b8235611a5481612127565b946020939093013593505050565b60008060208385031215611a74578182fd5b823567ffffffffffffffff80821115611a8b578384fd5b818501915085601f830112611a9e578384fd5b813581811115611aac578485fd5b8660208083028501011115611abf578485fd5b60209290920196919550909350505050565b600060208284031215611ae2578081fd5b61166a82611974565b60008060408385031215611afd578182fd5b611b0683611974565b9150611b1460208401611964565b90509250929050565b60006101208284031215611b2f578081fd5b50919050565b600060808284031215611b46578081fd5b6040516080810181811067ffffffffffffffff82111715611b6357fe5b8060405250825181526020830151602082015260408301516040820152606083015160608201528091505092915050565b600060a08284031215611b2f578081fd5b6000610100808385031215611bb8578182fd5b6040519081019067ffffffffffffffff82118183101715611bd557fe5b81604052611be284611959565b8152611bf060208501611964565b6020820152611c0160408501611964565b6040820152606084013560608201526080840135608082015260a084013560a0820152611c3060c08501611959565b60c082015260e084013560e0820152809250505092915050565b600060e08284031215611b2f578081fd5b600060608284031215611c6c578081fd5b6040516060810181811067ffffffffffffffff82111715611c8957fe5b80604052508251815260208301516020820152604083015160408201528091505092915050565b600060208284031215611cc1578081fd5b5051919050565b60008060408385031215611cda578182fd5b505080516020909101519092909150565b15159052565b60008151808452815b81811015611d1657602081850181015186830182015201611cfa565b81811115611d275782602083870101525b50601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b60006020825261166a6020830184611cf1565b60208082526008908201526744565f4f464f464d60c01b604082015260600190565b60208082526007908201526644565f43484e4360c81b604082015260600190565b60208082526006908201526544565f4f464f60d01b604082015260600190565b60208082526007908201526644565f464e495760c81b604082015260600190565b61012081018235611e3f81612127565b6001600160a01b031682526020838101359083015260408084013590830152611e6a6060840161198c565b611e776060840182611d3c565b50611e846080840161198c565b611e916080840182611d3c565b5060a083013560a083015260c083013560c0830152611eb260e08401611964565b611ebf60e0840182611ceb565b5061010092830135919092015290565b8151815260208083015190820152604080830151908201526060918201519181019190915260800190565b60a081018235611f0981612127565b6001600160a01b039081168352602084013590611f2582612127565b8082166020850152505060408301356040830152606083013560608301526080830135608083015292915050565b60006101008201905060018060a01b03808451168352602084015115156020840152604084015115156040840152606084015160608401526080840151608084015260a084015160a08401528060c08501511660c08401525060e083015160e083015292915050565b60e081018235611fcb81612127565b6001600160a01b031682526020830135600281900b808214611fec57600080fd5b602084015250611ffe6040840161198c565b60020b60408301526120126060840161199e565b61201f6060840182611d43565b506080830135608083015260a083013560a083015260c083013560c083015292915050565b81518152602080830151908201526040918201519181019190915260600190565b600060408201848352602060408185015281855180845260608601915060608382028701019350828701855b828110156120bf57605f198887030184526120ad868351611cf1565b95509284019290840190600101612091565b509398975050505050505050565b918252602082015260400190565b6000808335601e198436030181126120f1578283fd5b83018035915067ffffffffffffffff82111561210b578283fd5b60200191503681900382131561212057600080fd5b9250929050565b6001600160a01b03811681146114fb57600080fdfe416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a26469706673582212204bfa0ed7b6c5d7ffa1f40f2d52a8c6473004427122b8c8a3fe86f35ce53c0d6b64736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
