{
  "_format": "hh-sol-artifact-1",
  "contractName": "Supply",
  "sourceName": "contracts/inflation/implementation/Supply.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_addressUpdater",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_burnAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_initialGenesisAmountWei",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalFoundationSupplyWei",
          "type": "uint256"
        },
        {
          "internalType": "contract IITokenPool[]",
          "name": "_tokenPools",
          "type": "address[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "actual",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "expected",
          "type": "uint256"
        }
      ],
      "name": "AuthorizedInflationUpdateError",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "proposedGovernance",
          "type": "address"
        }
      ],
      "name": "GovernanceProposed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldGovernance",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newGoveranance",
          "type": "address"
        }
      ],
      "name": "GovernanceUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract IITokenPool",
          "name": "_tokenPool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_decreaseFoundationSupplyByAmountWei",
          "type": "uint256"
        }
      ],
      "name": "addTokenPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "burnAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amountWei",
          "type": "uint256"
        }
      ],
      "name": "decreaseFoundationSupply",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "distributedFoundationSupplyWei",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAddressUpdater",
      "outputs": [
        {
          "internalType": "address",
          "name": "_addressUpdater",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getCirculatingSupplyAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_circulatingSupplyWei",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getCirculatingSupplyAtCached",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_circulatingSupplyWei",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getInflatableBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_inflatableBalanceWei",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "inflation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialGenesisAmountWei",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "initialise",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "proposeGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposedGovernance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "tokenPools",
      "outputs": [
        {
          "internalType": "contract IITokenPool",
          "name": "tokenPool",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "foundationAllocatedFundsWei",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalInflationAuthorizedWei",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalClaimedWei",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalFoundationSupplyWei",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalInflationAuthorizedWei",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "transferGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_inflationAuthorizedWei",
          "type": "uint256"
        }
      ],
      "name": "updateAuthorizedInflationAndCirculatingSupply",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "_contractNameHashes",
          "type": "bytes32[]"
        },
        {
          "internalType": "address[]",
          "name": "_contractAddresses",
          "type": "address[]"
        }
      ],
      "name": "updateContractAddresses",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b506040516200219a3803806200219a833981810160405260c08110156200003757600080fd5b815160208301516040808501516060860151608087015160a0880180519451969895979396929591949293820192846401000000008211156200007957600080fd5b9083019060208201858111156200008f57600080fd5b8251866020820283011164010000000082111715620000ad57600080fd5b82525081516020918201928201910280838360005b83811015620000dc578181015183820152602001620000c2565b5050505090500160405250505084868060006001600160a01b0316816001600160a01b03161462000112576200011281620002c2565b506001600160a01b03811662000162576040805162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b604482015290519081900360640190fd5b506200016e81620003a6565b5060408051808201909152601b81527f696e697469616c2067656e6573697320616d6f756e74207a65726f0000000000602082015283620002305760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620001f4578181015183820152602001620001da565b50505050905090810190601f168015620002225780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50606084901b6001600160601b03191660a052608083905260068290556200026f620002698484620003ca602090811b62000acc17901c565b62000428565b60005b8151811015620002aa57620002a18282815181106200028d57fe5b60200260200101516200047560201b60201c565b60010162000272565b50620002b6846200058a565b50505050505062000aee565b600154600160a01b900460ff161562000322576040805162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c7365000000000000000000000000604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055600054604080516001600160a01b039283168152918316602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a1600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b60008282111562000422576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b620004726200045c826200044860026200072660201b62000b2e1760201c565b6200077860201b62000b771790919060201c565b6002620007da60201b62000bd81790919060201c565b50565b60085460005b818110156200053a57600881815481106200049257fe5b60009182526020909120600490910201546001600160a01b03848116911614156200053157604080518082018252601881527f746f6b656e20706f6f6c20616c726561647920616464656400000000000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315620001f4578181015183820152602001620001da565b6001016200047b565b50600880546001018082556000829052839190839081106200055857fe5b6000918252602090912060049091020180546001600160a01b0319166001600160a01b03929092169190911790555050565b60085460005b818110156200071657600060088281548110620005a957fe5b600091825260208220600491820201805460408051632dafdbbf60e01b81529051929550849384936001600160a01b0390931692632dafdbbf928083019260609291829003018186803b1580156200060057600080fd5b505afa15801562000615573d6000803e3d6000fd5b505050506040513d60608110156200062c57600080fd5b508051602080830151604090930151919550919350915081906200065d908590859062000b7762000778821b17901c565b10156200066657fe5b600062000686856002015484620003ca60201b62000acc1790919060201c565b9050620006a4816005546200077860201b62000b771790919060201c565b600581905550620006d2620006cc866001015486620003ca60201b62000acc1790919060201c565b620009db565b620006f462000269866003015484620003ca60201b62000acc1790919060201c565b5060018085019390935560028401919091556003909201919091550162000590565b50620007228262000a0f565b5050565b60018101546000906801000000000000000090046001600160401b0316806200075457600091505062000773565b600019016000908152602083905260409020546001600160c01b031690505b919050565b600082820183811015620007d3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60018201546801000000000000000090046001600160401b031680620008b1576040518060400160405280620008168462000a4460201b60201c565b6001600160c01b031681526020016200083a4362000aa360201b62000d9f1760201c565b6001600160401b03908116909152600080805260208681526040909120835181549490920151909216600160c01b026001600160c01b039182166001600160c01b03199094169390931716919091179055600183018054600160401b600160801b03191668010000000000000000179055620009d6565b600019810160009081526020849052604090208054600160c01b90046001600160401b0316438114156200090b57620008ea8462000a44565b82546001600160c01b0319166001600160c01b0391909116178255620009d3565b8043116200091557fe5b6040518060400160405280620009318662000a4460201b60201c565b6001600160c01b03168152602001620009554362000aa360201b62000d9f1760201c565b6001600160401b039081169091526000858152602088815260409091208351815494909201518316600160c01b026001600160c01b039283166001600160c01b03199095169490941790911692909217909155600180870180549186019092166801000000000000000002600160401b600160801b03199091161790555b50505b505050565b620004726200045c82620009fb60026200072660201b62000b2e1760201c565b620003ca60201b62000acc1790919060201c565b6000816001600160a01b031631905062000a3e620006cc600a5483620003ca60201b62000acc1790919060201c565b600a5550565b6000600160c01b821062000a9f576040805162461bcd60e51b815260206004820152601d60248201527f76616c756520646f65736e27742066697420696e203139322062697473000000604482015290519081900360640190fd5b5090565b600068010000000000000000821062000a9f5760405162461bcd60e51b8152600401808060200182810382526026815260200180620021746026913960400191505060405180910390fd5b60805160a05160601c61164b62000b2960003980610640528061080152806109395280610aa85250806105015280610971525061164b6000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c8063a2420e20116100b8578063c373a08e1161007c578063c373a08e146103a4578063cd58d6cb146103ca578063d0c1c393146103d2578063d38bfff4146103da578063d9330e6314610400578063efcf7eb21461041d57610136565b8063a2420e2014610233578063b00c0b7614610250578063b6aa5b5114610377578063be0522e014610394578063bfebbd261461039c57610136565b80635aa6e675116100ff5780635aa6e675146101eb5780635d36b190146101f357806360f7ac97146101fd57806370d5ae05146102055780639d6a890f1461020d57610136565b8062c0f9161461013b578063037b0890146101885780631b73b4cb146101b757806344044ba2146101bf5780635267a15d146101c7575b600080fd5b6101586004803603602081101561015157600080fd5b5035610449565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190f35b6101a56004803603602081101561019e57600080fd5b503561048d565b60408051918252519081900360200190f35b6101a56104f7565b6101a5610533565b6101cf610539565b604080516001600160a01b039092168252519081900360200190f35b6101cf61055e565b6101fb61056d565b005b6101cf61062f565b6101cf61063e565b6101fb6004803603602081101561022357600080fd5b50356001600160a01b0316610662565b6101fb6004803603602081101561024957600080fd5b503561073c565b6101fb6004803603604081101561026657600080fd5b81019060208101813564010000000081111561028157600080fd5b82018360208201111561029357600080fd5b803590602001918460208302840111640100000000831117156102b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561030557600080fd5b82018360208201111561031757600080fd5b8035906020019184602083028401116401000000008311171561033957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061087c945050505050565b6101fb6004803603602081101561038d57600080fd5b5035610923565b6101cf610960565b6101a561096f565b6101fb600480360360208110156103ba57600080fd5b50356001600160a01b0316610993565b6101a56109ef565b6101a56109f5565b6101fb600480360360208110156103f057600080fd5b50356001600160a01b03166109fb565b6101a56004803603602081101561041657600080fd5b5035610a74565b6101fb6004803603604081101561043357600080fd5b506001600160a01b038135169060200135610a89565b6008818154811061045957600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b60004382106104e3576040805162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206265207573656420666f72207061737420626c6f636b73604482015290519081900360640190fd5b6104f06004600284610de7565b5092915050565b600061052e6005547f0000000000000000000000000000000000000000000000000000000000000000610b7790919063ffffffff16565b905090565b60075481565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b6000546001600160a01b031681565b6001546001600160a01b031633146105bc576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd0818db185a5b585a5b9d609a1b604482015290519081900360640190fd5b600054600154604080516001600160a01b03938416815292909116602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600154600160a01b900460ff16156106b8576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055600054604080516001600160a01b039283168152918316602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a1600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b60095460408051808201909152600e81526d696e666c6174696f6e206f6e6c7960901b6020820152906001600160a01b031633146107f85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107bd5781810151838201526020016107a5565b50505050905090810190601f1680156107ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506005546108257f0000000000000000000000000000000000000000000000000000000000000000610e45565b61082f8183610b77565b6005541461087857600554604080519183900382526020820184905280517feeb8970a03ae6e5930263b6b2553da66b8e20080d79a3f33c139e5855574eb739281900390910190a15b5050565b610884610539565b6001600160a01b0316336001600160a01b0316146108e0576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b61091961091483836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250610f9a565b6110c7565b61087882826110eb565b61092b61113b565b6109348161118e565b61095d7f0000000000000000000000000000000000000000000000000000000000000000610e45565b50565b6009546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61099b61113b565b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f1f95fb40be3a947982072902a887b521248d1d8931a39eb38f84f4d6fd758b699181900360200190a150565b60065481565b60055481565b610a0361113b565b600054604080516001600160a01b039283168152918316602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a1600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6000610a816002836111ca565b90505b919050565b610a9161113b565b610a9a8161118e565b610aa382611311565b6108787f0000000000000000000000000000000000000000000000000000000000000000610e45565b600082821115610b23576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6001810154600090600160401b900467ffffffffffffffff1680610b56576000915050610a84565b6000190160009081526020929092525060409020546001600160c01b031690565b600082820183811015610bd1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001820154600160401b900467ffffffffffffffff1680610c91576040518060400160405280610c078461141f565b6001600160c01b03168152602001610c1e43610d9f565b67ffffffffffffffff908116909152600080805260208681526040909120835181549490920151909216600160c01b026001600160c01b039182166001600160c01b0319909416939093171691909117905560018301805467ffffffffffffffff60401b1916600160401b179055610d9a565b600019810160009081526020849052604090208054600160c01b900467ffffffffffffffff1643811415610ce857610cc88461141f565b82546001600160c01b0319166001600160c01b0391909116178255610d97565b804311610cf157fe5b6040518060400160405280610d058661141f565b6001600160c01b03168152602001610d1c43610d9f565b67ffffffffffffffff9081169091526000858152602088815260409091208351815494909201518316600160c01b026001600160c01b039283166001600160c01b0319909516949094179091169290921790915560018087018054918601909216600160401b0267ffffffffffffffff60401b199091161790555b50505b505050565b6000600160401b8210610de35760405162461bcd60e51b81526004018080602001828103825260268152602001806115c06026913960400191505060405180910390fd5b5090565b60008181526020849052604081205481908015610e0d5760001901915060009050610e3d565b6000610e1986866111ca565b9050610e26816001610b77565b600086815260208990526040902055925060019150505b935093915050565b60085460005b81811015610f9057600060088281548110610e6257fe5b600091825260208220600491820201805460408051632dafdbbf60e01b81529051929550849384936001600160a01b0390931692632dafdbbf928083019260609291829003018186803b158015610eb857600080fd5b505afa158015610ecc573d6000803e3d6000fd5b505050506040513d6060811015610ee257600080fd5b5080516020820151604090920151909450909250905080610f038484610b77565b1015610f0b57fe5b6000610f24856002015484610acc90919063ffffffff16565b600554909150610f349082610b77565b6005556001850154610f5090610f4b908690610acc565b611479565b610f6f610f6a866003015484610acc90919063ffffffff16565b611498565b50600180850193909355600284019190915560039092019190915501610e4b565b50610878826114af565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015610fde578181015183820152602001610fc6565b50505050905090810190601f16801561100b5780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b86518110156110735786818151811061104157fe5b602002602001015183141561106b5785818151811061105c57fe5b60200260200101519150611073565b60010161102c565b506001600160a01b0381166110be576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b95945050505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b61111782826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250610f9a565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b0316331461118c576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b565b806111a6600754600654610acc90919063ffffffff16565b10156111ae57fe5b6111b781611498565b6007546111c49082610b77565b60075550565b6001820154600090600160401b900467ffffffffffffffff16806111f2576000915050610b28565b438310158061122557506000198101600090815260208590526040902054600160c01b900467ffffffffffffffff168310155b1561124d57600019016000908152602084905260409020546001600160c01b03169050610b28565b600184015467ffffffffffffffff9081166000818152602087905260409020549091600160c01b909104168410156112c75780156112bc5760405162461bcd60e51b81526004018080602001828103825260308152602001806115e66030913960400191505060405180910390fd5b600092505050610b28565b60018501546000906112ee9087908490600160401b900467ffffffffffffffff16886114d3565b6000908152602087905260409020546001600160c01b0316935050505092915050565b60085460005b818110156113d0576008818154811061132c57fe5b60009182526020909120600490910201546001600160a01b03848116911614156113c857604080518082018252601881527f746f6b656e20706f6f6c20616c726561647920616464656400000000000000006020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156107bd5781810151838201526020016107a5565b600101611317565b50600880546001018082556000829052839190839081106113ed57fe5b6000918252602090912060049091020180546001600160a01b0319166001600160a01b03929092169190911790555050565b6000600160c01b8210610de3576040805162461bcd60e51b815260206004820152601d60248201527f76616c756520646f65736e27742066697420696e203139322062697473000000604482015290519081900360640190fd5b61095d6114908261148a6002610b2e565b90610acc565b600290610bd8565b61095d611490826114a96002610b2e565b90610b77565b600a546001600160a01b03821631906114cd90610f4b908390610acc565b600a5550565b600083816114e2856001610acc565b90505b8181111561154e576000611509600261150360016114a98688610b77565b90611558565b600081815260208a90526040902054909150600160c01b900467ffffffffffffffff16851061153a57809250611548565b611545816001610acc565b91505b506114e5565b5095945050505050565b60008082116115ae576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816115b757fe5b04939250505056fe53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473436865636b506f696e74486973746f72793a2072656164696e672066726f6d20636c65616e65642d757020626c6f636ba26469706673582212206e8dc4f2d073bf8f52ddabd3a77d1f991354c08491b4e085d4ecf2857e111e2464736f6c6343000706003353616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063a2420e20116100b8578063c373a08e1161007c578063c373a08e146103a4578063cd58d6cb146103ca578063d0c1c393146103d2578063d38bfff4146103da578063d9330e6314610400578063efcf7eb21461041d57610136565b8063a2420e2014610233578063b00c0b7614610250578063b6aa5b5114610377578063be0522e014610394578063bfebbd261461039c57610136565b80635aa6e675116100ff5780635aa6e675146101eb5780635d36b190146101f357806360f7ac97146101fd57806370d5ae05146102055780639d6a890f1461020d57610136565b8062c0f9161461013b578063037b0890146101885780631b73b4cb146101b757806344044ba2146101bf5780635267a15d146101c7575b600080fd5b6101586004803603602081101561015157600080fd5b5035610449565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190f35b6101a56004803603602081101561019e57600080fd5b503561048d565b60408051918252519081900360200190f35b6101a56104f7565b6101a5610533565b6101cf610539565b604080516001600160a01b039092168252519081900360200190f35b6101cf61055e565b6101fb61056d565b005b6101cf61062f565b6101cf61063e565b6101fb6004803603602081101561022357600080fd5b50356001600160a01b0316610662565b6101fb6004803603602081101561024957600080fd5b503561073c565b6101fb6004803603604081101561026657600080fd5b81019060208101813564010000000081111561028157600080fd5b82018360208201111561029357600080fd5b803590602001918460208302840111640100000000831117156102b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561030557600080fd5b82018360208201111561031757600080fd5b8035906020019184602083028401116401000000008311171561033957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061087c945050505050565b6101fb6004803603602081101561038d57600080fd5b5035610923565b6101cf610960565b6101a561096f565b6101fb600480360360208110156103ba57600080fd5b50356001600160a01b0316610993565b6101a56109ef565b6101a56109f5565b6101fb600480360360208110156103f057600080fd5b50356001600160a01b03166109fb565b6101a56004803603602081101561041657600080fd5b5035610a74565b6101fb6004803603604081101561043357600080fd5b506001600160a01b038135169060200135610a89565b6008818154811061045957600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b60004382106104e3576040805162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206265207573656420666f72207061737420626c6f636b73604482015290519081900360640190fd5b6104f06004600284610de7565b5092915050565b600061052e6005547f0000000000000000000000000000000000000000000000000000000000000000610b7790919063ffffffff16565b905090565b60075481565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b6000546001600160a01b031681565b6001546001600160a01b031633146105bc576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd0818db185a5b585a5b9d609a1b604482015290519081900360640190fd5b600054600154604080516001600160a01b03938416815292909116602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600154600160a01b900460ff16156106b8576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055600054604080516001600160a01b039283168152918316602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a1600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b60095460408051808201909152600e81526d696e666c6174696f6e206f6e6c7960901b6020820152906001600160a01b031633146107f85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156107bd5781810151838201526020016107a5565b50505050905090810190601f1680156107ea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506005546108257f0000000000000000000000000000000000000000000000000000000000000000610e45565b61082f8183610b77565b6005541461087857600554604080519183900382526020820184905280517feeb8970a03ae6e5930263b6b2553da66b8e20080d79a3f33c139e5855574eb739281900390910190a15b5050565b610884610539565b6001600160a01b0316336001600160a01b0316146108e0576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b61091961091483836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250610f9a565b6110c7565b61087882826110eb565b61092b61113b565b6109348161118e565b61095d7f0000000000000000000000000000000000000000000000000000000000000000610e45565b50565b6009546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61099b61113b565b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f1f95fb40be3a947982072902a887b521248d1d8931a39eb38f84f4d6fd758b699181900360200190a150565b60065481565b60055481565b610a0361113b565b600054604080516001600160a01b039283168152918316602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a1600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6000610a816002836111ca565b90505b919050565b610a9161113b565b610a9a8161118e565b610aa382611311565b6108787f0000000000000000000000000000000000000000000000000000000000000000610e45565b600082821115610b23576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6001810154600090600160401b900467ffffffffffffffff1680610b56576000915050610a84565b6000190160009081526020929092525060409020546001600160c01b031690565b600082820183811015610bd1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001820154600160401b900467ffffffffffffffff1680610c91576040518060400160405280610c078461141f565b6001600160c01b03168152602001610c1e43610d9f565b67ffffffffffffffff908116909152600080805260208681526040909120835181549490920151909216600160c01b026001600160c01b039182166001600160c01b0319909416939093171691909117905560018301805467ffffffffffffffff60401b1916600160401b179055610d9a565b600019810160009081526020849052604090208054600160c01b900467ffffffffffffffff1643811415610ce857610cc88461141f565b82546001600160c01b0319166001600160c01b0391909116178255610d97565b804311610cf157fe5b6040518060400160405280610d058661141f565b6001600160c01b03168152602001610d1c43610d9f565b67ffffffffffffffff9081169091526000858152602088815260409091208351815494909201518316600160c01b026001600160c01b039283166001600160c01b0319909516949094179091169290921790915560018087018054918601909216600160401b0267ffffffffffffffff60401b199091161790555b50505b505050565b6000600160401b8210610de35760405162461bcd60e51b81526004018080602001828103825260268152602001806115c06026913960400191505060405180910390fd5b5090565b60008181526020849052604081205481908015610e0d5760001901915060009050610e3d565b6000610e1986866111ca565b9050610e26816001610b77565b600086815260208990526040902055925060019150505b935093915050565b60085460005b81811015610f9057600060088281548110610e6257fe5b600091825260208220600491820201805460408051632dafdbbf60e01b81529051929550849384936001600160a01b0390931692632dafdbbf928083019260609291829003018186803b158015610eb857600080fd5b505afa158015610ecc573d6000803e3d6000fd5b505050506040513d6060811015610ee257600080fd5b5080516020820151604090920151909450909250905080610f038484610b77565b1015610f0b57fe5b6000610f24856002015484610acc90919063ffffffff16565b600554909150610f349082610b77565b6005556001850154610f5090610f4b908690610acc565b611479565b610f6f610f6a866003015484610acc90919063ffffffff16565b611498565b50600180850193909355600284019190915560039092019190915501610e4b565b50610878826114af565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015610fde578181015183820152602001610fc6565b50505050905090810190601f16801561100b5780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b86518110156110735786818151811061104157fe5b602002602001015183141561106b5785818151811061105c57fe5b60200260200101519150611073565b60010161102c565b506001600160a01b0381166110be576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b95945050505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b61111782826040518060400160405280600981526020016824b7333630ba34b7b760b91b815250610f9a565b600980546001600160a01b0319166001600160a01b03929092169190911790555050565b6000546001600160a01b0316331461118c576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b565b806111a6600754600654610acc90919063ffffffff16565b10156111ae57fe5b6111b781611498565b6007546111c49082610b77565b60075550565b6001820154600090600160401b900467ffffffffffffffff16806111f2576000915050610b28565b438310158061122557506000198101600090815260208590526040902054600160c01b900467ffffffffffffffff168310155b1561124d57600019016000908152602084905260409020546001600160c01b03169050610b28565b600184015467ffffffffffffffff9081166000818152602087905260409020549091600160c01b909104168410156112c75780156112bc5760405162461bcd60e51b81526004018080602001828103825260308152602001806115e66030913960400191505060405180910390fd5b600092505050610b28565b60018501546000906112ee9087908490600160401b900467ffffffffffffffff16886114d3565b6000908152602087905260409020546001600160c01b0316935050505092915050565b60085460005b818110156113d0576008818154811061132c57fe5b60009182526020909120600490910201546001600160a01b03848116911614156113c857604080518082018252601881527f746f6b656e20706f6f6c20616c726561647920616464656400000000000000006020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156107bd5781810151838201526020016107a5565b600101611317565b50600880546001018082556000829052839190839081106113ed57fe5b6000918252602090912060049091020180546001600160a01b0319166001600160a01b03929092169190911790555050565b6000600160c01b8210610de3576040805162461bcd60e51b815260206004820152601d60248201527f76616c756520646f65736e27742066697420696e203139322062697473000000604482015290519081900360640190fd5b61095d6114908261148a6002610b2e565b90610acc565b600290610bd8565b61095d611490826114a96002610b2e565b90610b77565b600a546001600160a01b03821631906114cd90610f4b908390610acc565b600a5550565b600083816114e2856001610acc565b90505b8181111561154e576000611509600261150360016114a98688610b77565b90611558565b600081815260208a90526040902054909150600160c01b900467ffffffffffffffff16851061153a57809250611548565b611545816001610acc565b91505b506114e5565b5095945050505050565b60008082116115ae576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816115b757fe5b04939250505056fe53616665436173743a2076616c756520646f65736e27742066697420696e2036342062697473436865636b506f696e74486973746f72793a2072656164696e672066726f6d20636c65616e65642d757020626c6f636ba26469706673582212206e8dc4f2d073bf8f52ddabd3a77d1f991354c08491b4e085d4ecf2857e111e2464736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
