{
  "_format": "hh-sol-artifact-1",
  "contractName": "TokenQuote",
  "sourceName": "contracts/accounting/token-quote/TokenQuote.sol",
  "abi": [
    {
      "inputs": [],
      "name": "CallerIsNotMetahub",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidContractEntityInterface",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidTokenQuoteSigner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenQuoteExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenQuoteListingIdMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenQuoteRenterMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TokenQuoteWarperMismatch",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractKey",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getChainId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "renter",
          "type": "address"
        }
      ],
      "name": "getTokenQuoteNonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "contract IACL",
              "name": "acl",
              "type": "address"
            },
            {
              "internalType": "contract IMetahub",
              "name": "metahub",
              "type": "address"
            }
          ],
          "internalType": "struct TokenQuote.TokenQuoteInitParams",
          "name": "params",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "listingId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "warper",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "renter",
              "type": "address"
            },
            {
              "internalType": "uint32",
              "name": "rentalPeriod",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "paymentToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "listingTermsId",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct IListingTermsRegistry.ListingTerms",
              "name": "selectedConfiguratorListingTerms",
              "type": "tuple"
            }
          ],
          "internalType": "struct Rentings.Params",
          "name": "rentingParams",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "total",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "protocolFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "listerBaseFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "listerPremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "universeBaseFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "universePremium",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct IListingTermsRegistry.ListingTerms",
              "name": "listingTerms",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct ITaxTermsRegistry.TaxTerms",
              "name": "universeTaxTerms",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct ITaxTermsRegistry.TaxTerms",
              "name": "protocolTaxTerms",
              "type": "tuple"
            }
          ],
          "internalType": "struct Rentings.RentalFees",
          "name": "baseTokenFees",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "tokenQuote",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "tokenQuoteSignature",
          "type": "bytes"
        }
      ],
      "name": "useTokenQuote",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "total",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "protocolFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "listerBaseFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "listerPremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "universeBaseFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "universePremium",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct IListingTermsRegistry.ListingTerms",
              "name": "listingTerms",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct ITaxTermsRegistry.TaxTerms",
              "name": "universeTaxTerms",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes4",
                  "name": "strategyId",
                  "type": "bytes4"
                },
                {
                  "internalType": "bytes",
                  "name": "strategyData",
                  "type": "bytes"
                }
              ],
              "internalType": "struct ITaxTermsRegistry.TaxTerms",
              "name": "protocolTaxTerms",
              "type": "tuple"
            }
          ],
          "internalType": "struct Rentings.RentalFees",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "paymentToken",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "paymentTokenQuote",
              "type": "uint256"
            }
          ],
          "internalType": "struct ITokenQuote.PaymentTokenData",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b50608051611d5d61004c6000396000818161023d01528181610286015281816103250152818161036501526103f80152611d5d6000f3fe6080604052600436106100915760003560e01c80634f1ef286116100595780634f1ef2861461014357806352d1902d14610156578063b6a597dd1461016b578063ce9adde31461018b578063ec21896d146101b957600080fd5b806301ffc9a7146100965780632cc06eec146100cb5780633408e470146100f95780633644e5151461010c5780633659cfe614610121575b600080fd5b3480156100a257600080fd5b506100b66100b136600461150d565b6101db565b60405190151581526020015b60405180910390f35b3480156100d757600080fd5b506100eb6100e636600461153d565b610206565b6040519081526020016100c2565b34801561010557600080fd5b50466100eb565b34801561011857600080fd5b506100eb610224565b34801561012d57600080fd5b5061014161013c36600461153d565b610233565b005b6101416101513660046115fd565b61031b565b34801561016257600080fd5b506100eb6103eb565b34801561017757600080fd5b5061014161018636600461164d565b61049e565b34801561019757600080fd5b506101ab6101a63660046116bb565b610657565b6040516100c2929190611804565b3480156101c557600080fd5b50604051635e694b9160e01b81526020016100c2565b60006001600160e01b0319821663700b593560e11b148061020057506102008261086b565b92915050565b6001600160a01b038116600090815260cd6020526040812054610200565b600061022e6108a0565b905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102845760405162461bcd60e51b815260040161027b906118c6565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102cd600080516020611ce1833981519152546001600160a01b031690565b6001600160a01b0316146102f35760405162461bcd60e51b815260040161027b90611912565b6102fc816108d7565b6040805160008082526020820190925261031891839190610954565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036103635760405162461bcd60e51b815260040161027b906118c6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166103ac600080516020611ce1833981519152546001600160a01b031690565b6001600160a01b0316146103d25760405162461bcd60e51b815260040161027b90611912565b6103db826108d7565b6103e782826001610954565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048b5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161027b565b50600080516020611ce183398151915290565b600054610100900460ff16158080156104be5750600054600160ff909116105b806104d85750303b1580156104d8575060005460ff166001145b61053b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161027b565b6000805460ff19166001179055801561055e576000805461ff0019166101001790555b610566610ac4565b610576604083016020840161153d565b606580546001600160a01b0319166001600160a01b03929092169190911790556105a3602083018361153d565b60cc60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061060e6040518060400160405280600a8152602001691254541c9bdd1bd8dbdb60b21b815250604051806040016040528060018152602001603160f81b815250610aed565b80156103e7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b61065f611436565b60408051808201909152600080825260208201526065546001600160a01b0316336001600160a01b0316146106a75760405163323b4eed60e11b815260040160405180910390fd5b60006106b38787610b1e565b90508060c0015163ffffffff164263ffffffff1611156106e657604051632f33e6d160e01b815260040160405180910390fd5b80518935146107085760405163b140d6ad60e01b815260040160405180910390fd5b61071860608a0160408b0161153d565b6001600160a01b031681602001516001600160a01b03161461074d576040516309788a6160e31b815260040160405180910390fd5b61075d60408a0160208b0161153d565b6001600160a01b031681604001516001600160a01b0316146107925760405163d112daf160e01b815260040160405180910390fd5b60007f2d6d4eff9115b8b5fa0e59631e2ac98e6d9b5081480bfd6e0b2ad999a0333b67826000015183602001518460400151856060015186608001516107db8860200151610b9e565b60c0808a015160408051602081019a909a528901979097526001600160a01b03958616606089015293851660808801529390911660a08601529084015260e083015263ffffffff1661010082015261012001604051602081830303815290604052805190602001209050610850818787610bc6565b61085a8983610cb5565b935093505050965096945050505050565b60006001600160e01b0319821663ec21896d60e01b148061020057506301ffc9a760e01b6001600160e01b0319831614610200565b600061022e7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6108cf60665490565b606754610e5e565b60cc546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561093957600080fd5b505afa15801561094d573d6000803e3d6000fd5b5050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561098c5761098783610ea8565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156109e6575060408051601f3d908101601f191682019092526109e39181019061195e565b60015b610a495760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161027b565b600080516020611ce18339815191528114610ab85760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161027b565b50610987838383610f44565b600054610100900460ff16610aeb5760405162461bcd60e51b815260040161027b90611977565b565b600054610100900460ff16610b145760405162461bcd60e51b815260040161027b90611977565b6103e78282610f6f565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152610b63828401846119c2565b63ffffffff1660c088015260a087015260808601526001600160a01b0390811660608601529081166040850152166020830152815292915050565b6001600160a01b038116600090815260cd602052604090208054600181018255905b50919050565b6000610bd184610fb0565b905060008080610be385870187611a55565b9250925092506000610bf785858585610ffe565b60cc54604051632474521560e21b81527fd32997eb8da47061ae1f290beaa522fdc9482e2badbbdbff9df6853304225d3060048201526001600160a01b0380841660248301529293509116906391d1485490604401602060405180830381865afa158015610c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d9190611a8a565b15610cab5760405163e969baa960e01b815260040160405180910390fd5b5050505050505050565b610cbd611436565b604080518082019091526000808252602082015260655460408051631055439160e31b815290516000926001600160a01b0316916382aa1c889160048083019260209291908290030181865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190611aac565b610d4a90600a611bc3565b60808501519091508190610d5f908735611bd2565b610d699190611bf1565b835260808401518190610d80906020880135611bd2565b610d8a9190611bf1565b602084015260808401518190610da4906040880135611bd2565b610dae9190611bf1565b604084015260808401518190610dc8906060880135611bd2565b610dd29190611bf1565b60608401526080808501518291610dec9190880135611bd2565b610df69190611bf1565b6080808501919091528401518190610e129060a0880135611bd2565b610e1c9190611bf1565b60a0840152610e2e60c0860186611c13565b610e3790611c33565b60c08401525060608301516001600160a01b03168152608090920151602083015292909150565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090505b9392505050565b6001600160a01b0381163b610f155760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161027b565b600080516020611ce183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b610f4d83611026565b600082511180610f5a5750805b1561098757610f698383611066565b50505050565b600054610100900460ff16610f965760405162461bcd60e51b815260040161027b90611977565b815160209283012081519190920120606691909155606755565b6000610200610fbd6108a0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061100f8787878761115a565b9150915061101c81611247565b5095945050505050565b61102f81610ea8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6110ce5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161027b565b600080846001600160a01b0316846040516110e99190611ca5565b600060405180830381855af49150503d8060008114611124576040519150601f19603f3d011682016040523d82523d6000602084013e611129565b606091505b50915091506111518282604051806060016040528060278152602001611d01602791396113fd565b95945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611191575060009050600361123e565b8460ff16601b141580156111a957508460ff16601c14155b156111ba575060009050600461123e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561120e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166112375760006001925092505061123e565b9150600090505b94509492505050565b600081600481111561125b5761125b611cb7565b036112635750565b600181600481111561127757611277611cb7565b036112c45760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161027b565b60028160048111156112d8576112d8611cb7565b036113255760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161027b565b600381600481111561133957611339611cb7565b036113915760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161027b565b60048160048111156113a5576113a5611cb7565b036103185760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161027b565b6060831561140c575081610ea1565b82511561141c5782518084602001fd5b8160405162461bcd60e51b815260040161027b9190611ccd565b604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001611493604051806040016040528060006001600160e01b0319168152602001606081525090565b81526020016114bf604051806040016040528060006001600160e01b0319168152602001606081525090565b81526020016114eb604051806040016040528060006001600160e01b0319168152602001606081525090565b905290565b80356001600160e01b03198116811461150857600080fd5b919050565b60006020828403121561151f57600080fd5b610ea1826114f0565b6001600160a01b038116811461031857600080fd5b60006020828403121561154f57600080fd5b8135610ea181611528565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261158157600080fd5b813567ffffffffffffffff8082111561159c5761159c61155a565b604051601f8301601f19908116603f011681019082821181831017156115c4576115c461155a565b816040528381528660208588010111156115dd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561161057600080fd5b823561161b81611528565b9150602083013567ffffffffffffffff81111561163757600080fd5b61164385828601611570565b9150509250929050565b600060408284031215610bc057600080fd5b60006101208284031215610bc057600080fd5b60008083601f84011261168457600080fd5b50813567ffffffffffffffff81111561169c57600080fd5b6020830191508360208285010111156116b457600080fd5b9250929050565b600080600080600080608087890312156116d457600080fd5b863567ffffffffffffffff808211156116ec57600080fd5b9088019060e0828b03121561170057600080fd5b9096506020880135908082111561171657600080fd5b6117228a838b0161165f565b9650604089013591508082111561173857600080fd5b6117448a838b01611672565b9096509450606089013591508082111561175d57600080fd5b5061176a89828a01611672565b979a9699509497509295939492505050565b60005b8381101561179757818101518382015260200161177f565b83811115610f695750506000910152565b600081518084526117c081602086016020860161177c565b601f01601f19169290920160200192915050565b63ffffffff60e01b815116825260006020820151604060208501526117fc60408501826117a8565b949350505050565b606081528251606082015260208301516080820152604083015160a0820152606083015160c0820152608083015160e0820152600060a0840151610100818185015260c086015191506101208081860152506118646101808501836117d4565b915060e0860151605f19808685030161014087015261188384836117d4565b9350828801519250808685030161016087015250506118a282826117d4565b92505050610ea1602083018480516001600160a01b03168252602090810151910152565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561197057600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600080600080600080600060e0888a0312156119dd57600080fd5b8735965060208801356119ef81611528565b955060408801356119ff81611528565b94506060880135611a0f81611528565b93506080880135925060a0880135915060c088013563ffffffff81168114611a3657600080fd5b8091505092959891949750929550565b60ff8116811461031857600080fd5b600080600060608486031215611a6a57600080fd5b8335611a7581611a46565b95602085013595506040909401359392505050565b600060208284031215611a9c57600080fd5b81518015158114610ea157600080fd5b600060208284031215611abe57600080fd5b8151610ea181611a46565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611b1a578160001904821115611b0057611b00611ac9565b80851615611b0d57918102915b93841c9390800290611ae4565b509250929050565b600082611b3157506001610200565b81611b3e57506000610200565b8160018114611b545760028114611b5e57611b7a565b6001915050610200565b60ff841115611b6f57611b6f611ac9565b50506001821b610200565b5060208310610133831016604e8410600b8410161715611b9d575081810a610200565b611ba78383611adf565b8060001904821115611bbb57611bbb611ac9565b029392505050565b6000610ea160ff841683611b22565b6000816000190483118215151615611bec57611bec611ac9565b500290565b600082611c0e57634e487b7160e01b600052601260045260246000fd5b500490565b60008235603e19833603018112611c2957600080fd5b9190910192915050565b600060408236031215611c4557600080fd5b6040516040810167ffffffffffffffff8282108183111715611c6957611c6961155a565b81604052611c76856114f0565b83526020850135915080821115611c8c57600080fd5b50611c9936828601611570565b60208301525092915050565b60008251611c2981846020870161177c565b634e487b7160e01b600052602160045260246000fd5b602081526000610ea160208301846117a856fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122002341ccdc4bd6b59429ca465d34c12894bf8e49619461d187d47cac5a57beb6164736f6c634300080d0033",
  "deployedBytecode": "0x6080604052600436106100915760003560e01c80634f1ef286116100595780634f1ef2861461014357806352d1902d14610156578063b6a597dd1461016b578063ce9adde31461018b578063ec21896d146101b957600080fd5b806301ffc9a7146100965780632cc06eec146100cb5780633408e470146100f95780633644e5151461010c5780633659cfe614610121575b600080fd5b3480156100a257600080fd5b506100b66100b136600461150d565b6101db565b60405190151581526020015b60405180910390f35b3480156100d757600080fd5b506100eb6100e636600461153d565b610206565b6040519081526020016100c2565b34801561010557600080fd5b50466100eb565b34801561011857600080fd5b506100eb610224565b34801561012d57600080fd5b5061014161013c36600461153d565b610233565b005b6101416101513660046115fd565b61031b565b34801561016257600080fd5b506100eb6103eb565b34801561017757600080fd5b5061014161018636600461164d565b61049e565b34801561019757600080fd5b506101ab6101a63660046116bb565b610657565b6040516100c2929190611804565b3480156101c557600080fd5b50604051635e694b9160e01b81526020016100c2565b60006001600160e01b0319821663700b593560e11b148061020057506102008261086b565b92915050565b6001600160a01b038116600090815260cd6020526040812054610200565b600061022e6108a0565b905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036102845760405162461bcd60e51b815260040161027b906118c6565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166102cd600080516020611ce1833981519152546001600160a01b031690565b6001600160a01b0316146102f35760405162461bcd60e51b815260040161027b90611912565b6102fc816108d7565b6040805160008082526020820190925261031891839190610954565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036103635760405162461bcd60e51b815260040161027b906118c6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166103ac600080516020611ce1833981519152546001600160a01b031690565b6001600160a01b0316146103d25760405162461bcd60e51b815260040161027b90611912565b6103db826108d7565b6103e782826001610954565b5050565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461048b5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161027b565b50600080516020611ce183398151915290565b600054610100900460ff16158080156104be5750600054600160ff909116105b806104d85750303b1580156104d8575060005460ff166001145b61053b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161027b565b6000805460ff19166001179055801561055e576000805461ff0019166101001790555b610566610ac4565b610576604083016020840161153d565b606580546001600160a01b0319166001600160a01b03929092169190911790556105a3602083018361153d565b60cc60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061060e6040518060400160405280600a8152602001691254541c9bdd1bd8dbdb60b21b815250604051806040016040528060018152602001603160f81b815250610aed565b80156103e7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b61065f611436565b60408051808201909152600080825260208201526065546001600160a01b0316336001600160a01b0316146106a75760405163323b4eed60e11b815260040160405180910390fd5b60006106b38787610b1e565b90508060c0015163ffffffff164263ffffffff1611156106e657604051632f33e6d160e01b815260040160405180910390fd5b80518935146107085760405163b140d6ad60e01b815260040160405180910390fd5b61071860608a0160408b0161153d565b6001600160a01b031681602001516001600160a01b03161461074d576040516309788a6160e31b815260040160405180910390fd5b61075d60408a0160208b0161153d565b6001600160a01b031681604001516001600160a01b0316146107925760405163d112daf160e01b815260040160405180910390fd5b60007f2d6d4eff9115b8b5fa0e59631e2ac98e6d9b5081480bfd6e0b2ad999a0333b67826000015183602001518460400151856060015186608001516107db8860200151610b9e565b60c0808a015160408051602081019a909a528901979097526001600160a01b03958616606089015293851660808801529390911660a08601529084015260e083015263ffffffff1661010082015261012001604051602081830303815290604052805190602001209050610850818787610bc6565b61085a8983610cb5565b935093505050965096945050505050565b60006001600160e01b0319821663ec21896d60e01b148061020057506301ffc9a760e01b6001600160e01b0319831614610200565b600061022e7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6108cf60665490565b606754610e5e565b60cc546001600160a01b03166001600160a01b03166312d9a6ad6000336040516001600160e01b031960e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561093957600080fd5b505afa15801561094d573d6000803e3d6000fd5b5050505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561098c5761098783610ea8565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156109e6575060408051601f3d908101601f191682019092526109e39181019061195e565b60015b610a495760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161027b565b600080516020611ce18339815191528114610ab85760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161027b565b50610987838383610f44565b600054610100900460ff16610aeb5760405162461bcd60e51b815260040161027b90611977565b565b600054610100900460ff16610b145760405162461bcd60e51b815260040161027b90611977565b6103e78282610f6f565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152610b63828401846119c2565b63ffffffff1660c088015260a087015260808601526001600160a01b0390811660608601529081166040850152166020830152815292915050565b6001600160a01b038116600090815260cd602052604090208054600181018255905b50919050565b6000610bd184610fb0565b905060008080610be385870187611a55565b9250925092506000610bf785858585610ffe565b60cc54604051632474521560e21b81527fd32997eb8da47061ae1f290beaa522fdc9482e2badbbdbff9df6853304225d3060048201526001600160a01b0380841660248301529293509116906391d1485490604401602060405180830381865afa158015610c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d9190611a8a565b15610cab5760405163e969baa960e01b815260040160405180910390fd5b5050505050505050565b610cbd611436565b604080518082019091526000808252602082015260655460408051631055439160e31b815290516000926001600160a01b0316916382aa1c889160048083019260209291908290030181865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190611aac565b610d4a90600a611bc3565b60808501519091508190610d5f908735611bd2565b610d699190611bf1565b835260808401518190610d80906020880135611bd2565b610d8a9190611bf1565b602084015260808401518190610da4906040880135611bd2565b610dae9190611bf1565b604084015260808401518190610dc8906060880135611bd2565b610dd29190611bf1565b60608401526080808501518291610dec9190880135611bd2565b610df69190611bf1565b6080808501919091528401518190610e129060a0880135611bd2565b610e1c9190611bf1565b60a0840152610e2e60c0860186611c13565b610e3790611c33565b60c08401525060608301516001600160a01b03168152608090920151602083015292909150565b6040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090505b9392505050565b6001600160a01b0381163b610f155760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161027b565b600080516020611ce183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b610f4d83611026565b600082511180610f5a5750805b1561098757610f698383611066565b50505050565b600054610100900460ff16610f965760405162461bcd60e51b815260040161027b90611977565b815160209283012081519190920120606691909155606755565b6000610200610fbd6108a0565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b600080600061100f8787878761115a565b9150915061101c81611247565b5095945050505050565b61102f81610ea8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6110ce5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161027b565b600080846001600160a01b0316846040516110e99190611ca5565b600060405180830381855af49150503d8060008114611124576040519150601f19603f3d011682016040523d82523d6000602084013e611129565b606091505b50915091506111518282604051806060016040528060278152602001611d01602791396113fd565b95945050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611191575060009050600361123e565b8460ff16601b141580156111a957508460ff16601c14155b156111ba575060009050600461123e565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561120e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166112375760006001925092505061123e565b9150600090505b94509492505050565b600081600481111561125b5761125b611cb7565b036112635750565b600181600481111561127757611277611cb7565b036112c45760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161027b565b60028160048111156112d8576112d8611cb7565b036113255760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161027b565b600381600481111561133957611339611cb7565b036113915760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161027b565b60048160048111156113a5576113a5611cb7565b036103185760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b606482015260840161027b565b6060831561140c575081610ea1565b82511561141c5782518084602001fd5b8160405162461bcd60e51b815260040161027b9190611ccd565b604051806101200160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001611493604051806040016040528060006001600160e01b0319168152602001606081525090565b81526020016114bf604051806040016040528060006001600160e01b0319168152602001606081525090565b81526020016114eb604051806040016040528060006001600160e01b0319168152602001606081525090565b905290565b80356001600160e01b03198116811461150857600080fd5b919050565b60006020828403121561151f57600080fd5b610ea1826114f0565b6001600160a01b038116811461031857600080fd5b60006020828403121561154f57600080fd5b8135610ea181611528565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261158157600080fd5b813567ffffffffffffffff8082111561159c5761159c61155a565b604051601f8301601f19908116603f011681019082821181831017156115c4576115c461155a565b816040528381528660208588010111156115dd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561161057600080fd5b823561161b81611528565b9150602083013567ffffffffffffffff81111561163757600080fd5b61164385828601611570565b9150509250929050565b600060408284031215610bc057600080fd5b60006101208284031215610bc057600080fd5b60008083601f84011261168457600080fd5b50813567ffffffffffffffff81111561169c57600080fd5b6020830191508360208285010111156116b457600080fd5b9250929050565b600080600080600080608087890312156116d457600080fd5b863567ffffffffffffffff808211156116ec57600080fd5b9088019060e0828b03121561170057600080fd5b9096506020880135908082111561171657600080fd5b6117228a838b0161165f565b9650604089013591508082111561173857600080fd5b6117448a838b01611672565b9096509450606089013591508082111561175d57600080fd5b5061176a89828a01611672565b979a9699509497509295939492505050565b60005b8381101561179757818101518382015260200161177f565b83811115610f695750506000910152565b600081518084526117c081602086016020860161177c565b601f01601f19169290920160200192915050565b63ffffffff60e01b815116825260006020820151604060208501526117fc60408501826117a8565b949350505050565b606081528251606082015260208301516080820152604083015160a0820152606083015160c0820152608083015160e0820152600060a0840151610100818185015260c086015191506101208081860152506118646101808501836117d4565b915060e0860151605f19808685030161014087015261188384836117d4565b9350828801519250808685030161016087015250506118a282826117d4565b92505050610ea1602083018480516001600160a01b03168252602090810151910152565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60006020828403121561197057600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600080600080600080600060e0888a0312156119dd57600080fd5b8735965060208801356119ef81611528565b955060408801356119ff81611528565b94506060880135611a0f81611528565b93506080880135925060a0880135915060c088013563ffffffff81168114611a3657600080fd5b8091505092959891949750929550565b60ff8116811461031857600080fd5b600080600060608486031215611a6a57600080fd5b8335611a7581611a46565b95602085013595506040909401359392505050565b600060208284031215611a9c57600080fd5b81518015158114610ea157600080fd5b600060208284031215611abe57600080fd5b8151610ea181611a46565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115611b1a578160001904821115611b0057611b00611ac9565b80851615611b0d57918102915b93841c9390800290611ae4565b509250929050565b600082611b3157506001610200565b81611b3e57506000610200565b8160018114611b545760028114611b5e57611b7a565b6001915050610200565b60ff841115611b6f57611b6f611ac9565b50506001821b610200565b5060208310610133831016604e8410600b8410161715611b9d575081810a610200565b611ba78383611adf565b8060001904821115611bbb57611bbb611ac9565b029392505050565b6000610ea160ff841683611b22565b6000816000190483118215151615611bec57611bec611ac9565b500290565b600082611c0e57634e487b7160e01b600052601260045260246000fd5b500490565b60008235603e19833603018112611c2957600080fd5b9190910192915050565b600060408236031215611c4557600080fd5b6040516040810167ffffffffffffffff8282108183111715611c6957611c6961155a565b81604052611c76856114f0565b83526020850135915080821115611c8c57600080fd5b50611c9936828601611570565b60208301525092915050565b60008251611c2981846020870161177c565b634e487b7160e01b600052602160045260246000fd5b602081526000610ea160208301846117a856fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122002341ccdc4bd6b59429ca465d34c12894bf8e49619461d187d47cac5a57beb6164736f6c634300080d0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
