{
  "_format": "hh-sol-artifact-1",
  "contractName": "DecimalChecks",
  "sourceName": "contracts/DecimalChecks.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "AddressInsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyExists",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ExpiredDueBlock",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedInnerCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedToSend",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidCheckHash",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidDueBlock",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidNonce",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSignature",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSigner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "enum IDecimalChecks.Status",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "InvalidStatus",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldContract",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newContract",
          "type": "address"
        }
      ],
      "name": "ContractUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "checkHash",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "checkDetails",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "signer",
              "type": "address"
            },
            {
              "internalType": "enum IDecimalChecks.Status",
              "name": "status",
              "type": "uint8"
            }
          ],
          "indexed": false,
          "internalType": "struct IDecimalChecks.Check",
          "name": "check",
          "type": "tuple"
        }
      ],
      "name": "CreatedCheck",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "checkDetailsHash",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum IDecimalChecks.TypesChecks",
              "name": "typeChecks",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "dueBlock",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creator",
              "type": "address"
            }
          ],
          "indexed": false,
          "internalType": "struct IDecimalChecks.CheckDetails",
          "name": "checkDetails",
          "type": "tuple"
        }
      ],
      "name": "CreatedCheckDetails",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "checkHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "enum IDecimalChecks.Status",
          "name": "status",
          "type": "uint8"
        }
      ],
      "name": "RedeemCheck",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "signers",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "dueBlock",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        }
      ],
      "name": "createChecksDEL",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "checks",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "signers",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "dueBlock",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "createChecksToken",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "checks",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "signers",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "dueBlock",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "createChecksTokenByPermit",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "checks",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getImpl",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "signatures",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "checkHashes",
          "type": "bytes32[]"
        }
      ],
      "name": "redeemChecks",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImpl",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgrade",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50611872806100206000396000f3fe6080604052600436106100915760003560e01c806393757526116100595780639375752614610167578063c987336c1461019f578063dfb80831146101bf578063f2fde38b146101d4578063f6286795146101f457600080fd5b8063715018a61461009657806372f32259146100ad5780638d30fb79146100d65780638da5cb5b146100f6578063928ece4d14610147575b600080fd5b3480156100a257600080fd5b506100ab610214565b005b6100c06100bb366004611289565b610228565b6040516100cd91906112e3565b60405180910390f35b3480156100e257600080fd5b506100c06100f1366004611343565b61026d565b34801561010257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016100cd565b34801561015357600080fd5b506100c06101623660046113ec565b61032c565b34801561017357600080fd5b5033600090815260008051602061181d83398151915260205260409020546040519081526020016100cd565b3480156101ab57600080fd5b506100ab6101ba366004611471565b61036a565b3480156101cb57600080fd5b5061012f6103f6565b3480156101e057600080fd5b506100ab6101ef366004611533565b61042e565b34801561020057600080fd5b506100ab61020f36600461154e565b610471565b61021c61051b565b6102266000610576565b565b60603461023586866115d0565b146102535760405163162908e360e11b815260040160405180910390fd5b61026386868686866000806105e7565b9695505050505050565b60606001600160a01b03861663d505accf333061028a8e8e6115d0565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064810188905260ff8716608482015260a4810186905260c4810185905260e401600060405180830381600087803b1580156102f757600080fd5b505af115801561030b573d6000803e3d6000fd5b5050505061031d8b8b8b8b8b8b61032c565b9b9a5050505050505050505050565b606061034f333061033d89896115d0565b6001600160a01b03861692919061086b565b61035f87878787876001886105e7565b979650505050505050565b61037261051b565b60006103a57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b90506103b183836108d8565b826001600160a01b0316816001600160a01b03167f2e4cc16c100f0b55e2df82ab0b1a7e294aa9cbd01b48fbaf622683fbc0507a4960405160405180910390a3505050565b60006104297f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b61043661051b565b6001600160a01b03811661046557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61046e81610576565b50565b82811461047d57600080fd5b60005b818110156105145761050283838381811061049d5761049d6115e7565b905060200201358686848181106104b6576104b66115e7565b90506020028101906104c891906115fd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061093792505050565b61050d600182611644565b9050610480565b5050505050565b3361054d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146102265760405163118cdaa760e01b815233600482015260240161045c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b33600090815260008051602061181d833981519152602081905260409091205460609190851461062a57604051633ab3447f60e11b815260040160405180910390fd5b85431061064a57604051637170381760e01b815260040160405180910390fd5b8767ffffffffffffffff8111156106635761066361145b565b60405190808252806020026020018201604052801561068c578160200160208202803683370190505b50915060006040518060a001604052808660018111156106ae576106ae611657565b815260208082018b905260408083018b90526001600160a01b03881660608401523360809093018390526000838152868352818120549151949550936106fd938a938e938e938c93920161166d565b60408051601f1981840301815291815281516020928301206000818152600287019093529120835181549293508492829060ff19166001838181111561074557610745611657565b0217905550602082015160018201556040820151600282015560608201516003820180546001600160a01b03199081166001600160a01b039384161790915560809093015160049092018054909316911617905560005b8a811015610803576107d4828d8d848181106107ba576107ba6115e7565b90506020020160208101906107cf9190611533565b610c64565b8582815181106107e6576107e66115e7565b60209081029190910101526107fc600182611644565b905061079c565b5033600090815260208490526040812080549161081f836116c6565b91905055507f6d945f21ec4387fbc0576ee720ec13abadbefe648d2eaa5d387b64ffe1e3200d81836040516108559291906116df565b60405180910390a1505050979650505050505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526108d29186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610e00565b50505050565b6108e182610e63565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561092b576109268282610eda565b505050565b610933610f50565b5050565b60008281527f6135605bbaca49c9a4eeea9432a78c88af8cb013228ed2e2e5c5c2143292b2016020908152604080832081516060810183528154815260018201546001600160a01b0381169482019490945260008051602061181d83398151915294939092830190600160a01b900460ff1660028111156109ba576109ba611657565b60028111156109cb576109cb611657565b90525080516000908152600284016020526040808220815160a0810190925280549394509192909190829060ff166001811115610a0a57610a0a611657565b6001811115610a1b57610a1b611657565b815260018201546020808301919091526002830154604083015260038301546001600160a01b039081166060840152600490930154909216608090910152830151909150610a6a908686610f6f565b610a8757604051638baa579f60e01b815260040160405180910390fd5b600082604001516002811115610a9f57610a9f611657565b14610ac3578160400151604051633ba7bf8960e11b815260040161045c9190611751565b438160400151108015610ae3575060808101516001600160a01b03163314155b15610b0157604051630c251e1760e01b815260040160405180910390fd5b4381604001511015610b365760008581526001848101602052604090912001805460ff60a01b1916600160a11b179055610b5b565b60008581526001848101602052604090912001805460ff60a01b1916600160a01b1790555b60008581526001848101602052604091829020015490517f9b1aeb8ad11c0f8d96a5e926e0b459a25ff0a1a3c07a34951675ab9f1ed9bf5891610baa918891600160a01b900460ff169061175f565b60405180910390a1600081516001811115610bc757610bc7611657565b03610c3e57602081015160405160009133918381818185875af1925050503d8060008114610c11576040519150601f19603f3d011682016040523d82523d6000602084013e610c16565b606091505b5050905080610c385760405163467d86d160e01b815260040160405180910390fd5b50610514565b61051433826020015183606001516001600160a01b031661105b9092919063ffffffff16565b60006001600160a01b038216610c8d57604051632057875960e21b815260040160405180910390fd5b600060008051602061181d833981519152905060008484604051602001610cd092919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60408051601f1981840301815291815281516020928301206000818152600180870190945291909120909101549091506001600160a01b031615610d275760405163119b4fd360e11b815260040160405180910390fd5b604080516060810182528681526001600160a01b0386811660208084019182526000848601818152878252600189810190935295902084518155915190820180546001600160a01b03198116929094169182178155945193949193926001600160a81b03191617600160a01b836002811115610da557610da5611657565b0217905550505060008181526001830160205260409081902090517fa20e6b5b0d7c03217b361c78bc224a3548e4334fb51031d69a294a480efbc9c091610dee91849190611773565b60405180910390a19150505b92915050565b6000610e156001600160a01b0384168361108c565b90508051600014158015610e3a575080806020019051810190610e3891906117b2565b155b1561092657604051635274afe760e01b81526001600160a01b038416600482015260240161045c565b806001600160a01b03163b600003610e9957604051634c9c8ce360e01b81526001600160a01b038216600482015260240161045c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610ef791906117d4565b600060405180830381855af49150503d8060008114610f32576040519150601f19603f3d011682016040523d82523d6000602084013e610f37565b606091505b5091509150610f4785838361109a565b95945050505050565b34156102265760405163b398979f60e01b815260040160405180910390fd5b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018390526000908190605c016040516020818303038152906040528051906020012090506000806000610fcd866110f6565b925092509250600060018585858560405160008152602001604052604051611011949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015611033573d6000803e3d6000fd5b5050604051601f1901516001600160a01b038b811691161496505050505050505b9392505050565b6040516001600160a01b0383811660248301526044820183905261092691859182169063a9059cbb906064016108a0565b606061105483836000611181565b6060826110af576110aa82611214565b611054565b81511580156110c657506001600160a01b0384163b155b156110ef57604051639996b31560e01b81526001600160a01b038516600482015260240161045c565b5080611054565b6000806000835160411461114c5760405162461bcd60e51b815260206004820152601e60248201527f73706c69745369676e61747572653a20696e76616c6964206c656e6774680000604482015260640161045c565b50505060208101516040820151606083015160001a9190601b83101561117a57611177601b84611803565b92505b9193909250565b6060814710156111a65760405163cd78605960e01b815230600482015260240161045c565b600080856001600160a01b031684866040516111c291906117d4565b60006040518083038185875af1925050503d80600081146111ff576040519150601f19603f3d011682016040523d82523d6000602084013e611204565b606091505b509150915061026386838361109a565b8051156112245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008083601f84011261124f57600080fd5b50813567ffffffffffffffff81111561126757600080fd5b6020830191508360208260051b850101111561128257600080fd5b9250929050565b6000806000806000608086880312156112a157600080fd5b853567ffffffffffffffff8111156112b857600080fd5b6112c48882890161123d565b9099909850602088013597604081013597506060013595509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561131b578351835292840192918401916001016112ff565b50909695505050505050565b80356001600160a01b038116811461133e57600080fd5b919050565b6000806000806000806000806000806101208b8d03121561136357600080fd5b8a3567ffffffffffffffff81111561137a57600080fd5b6113868d828e0161123d565b909b5099505060208b0135975060408b0135965060608b013595506113ad60808c01611327565b945060a08b0135935060c08b013560ff811681146113ca57600080fd5b8093505060e08b013591506101008b013590509295989b9194979a5092959850565b60008060008060008060a0878903121561140557600080fd5b863567ffffffffffffffff81111561141c57600080fd5b61142889828a0161123d565b90975095505060208701359350604087013592506060870135915061144f60808801611327565b90509295509295509295565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561148457600080fd5b61148d83611327565b9150602083013567ffffffffffffffff808211156114aa57600080fd5b818501915085601f8301126114be57600080fd5b8135818111156114d0576114d061145b565b604051601f8201601f19908116603f011681019083821181831017156114f8576114f861145b565b8160405282815288602084870101111561151157600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561154557600080fd5b61105482611327565b6000806000806040858703121561156457600080fd5b843567ffffffffffffffff8082111561157c57600080fd5b6115888883890161123d565b909650945060208701359150808211156115a157600080fd5b506115ae8782880161123d565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610dfa57610dfa6115ba565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261161457600080fd5b83018035915067ffffffffffffffff82111561162f57600080fd5b60200191503681900382131561128257600080fd5b80820180821115610dfa57610dfa6115ba565b634e487b7160e01b600052602160045260246000fd5b60006002881061167f5761167f611657565b5060f89690961b8652600186019490945260218501929092526bffffffffffffffffffffffff19606091821b8116604186015291901b166055830152606982015260890190565b6000600182016116d8576116d86115ba565b5060010190565b828152815160c0820190600281106116f9576116f9611657565b806020840152506020830151604083015260408301516060830152606083015160018060a01b0380821660808501528060808601511660a085015250509392505050565b6003811061174d5761174d611657565b9052565b60208101610dfa828461173d565b82815260408101611054602083018461173d565b8281528154602082015260018201546001600160a01b038116604083015260808201906117aa6060840160a083901c60ff1661173d565b509392505050565b6000602082840312156117c457600080fd5b8151801515811461105457600080fd5b6000825160005b818110156117f557602081860181015185830152016117db565b506000920191825250919050565b60ff8181168382160190811115610dfa57610dfa6115ba56fe6135605bbaca49c9a4eeea9432a78c88af8cb013228ed2e2e5c5c2143292b200a264697066735822122040d8a9b154b8ab88d60b351655eafe874e706dc65e45c5a996f8a0d24a0def6864736f6c63430008140033",
  "deployedBytecode": "0x6080604052600436106100915760003560e01c806393757526116100595780639375752614610167578063c987336c1461019f578063dfb80831146101bf578063f2fde38b146101d4578063f6286795146101f457600080fd5b8063715018a61461009657806372f32259146100ad5780638d30fb79146100d65780638da5cb5b146100f6578063928ece4d14610147575b600080fd5b3480156100a257600080fd5b506100ab610214565b005b6100c06100bb366004611289565b610228565b6040516100cd91906112e3565b60405180910390f35b3480156100e257600080fd5b506100c06100f1366004611343565b61026d565b34801561010257600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b0390911681526020016100cd565b34801561015357600080fd5b506100c06101623660046113ec565b61032c565b34801561017357600080fd5b5033600090815260008051602061181d83398151915260205260409020546040519081526020016100cd565b3480156101ab57600080fd5b506100ab6101ba366004611471565b61036a565b3480156101cb57600080fd5b5061012f6103f6565b3480156101e057600080fd5b506100ab6101ef366004611533565b61042e565b34801561020057600080fd5b506100ab61020f36600461154e565b610471565b61021c61051b565b6102266000610576565b565b60603461023586866115d0565b146102535760405163162908e360e11b815260040160405180910390fd5b61026386868686866000806105e7565b9695505050505050565b60606001600160a01b03861663d505accf333061028a8e8e6115d0565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064810188905260ff8716608482015260a4810186905260c4810185905260e401600060405180830381600087803b1580156102f757600080fd5b505af115801561030b573d6000803e3d6000fd5b5050505061031d8b8b8b8b8b8b61032c565b9b9a5050505050505050505050565b606061034f333061033d89896115d0565b6001600160a01b03861692919061086b565b61035f87878787876001886105e7565b979650505050505050565b61037261051b565b60006103a57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b90506103b183836108d8565b826001600160a01b0316816001600160a01b03167f2e4cc16c100f0b55e2df82ab0b1a7e294aa9cbd01b48fbaf622683fbc0507a4960405160405180910390a3505050565b60006104297f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b61043661051b565b6001600160a01b03811661046557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61046e81610576565b50565b82811461047d57600080fd5b60005b818110156105145761050283838381811061049d5761049d6115e7565b905060200201358686848181106104b6576104b66115e7565b90506020028101906104c891906115fd565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061093792505050565b61050d600182611644565b9050610480565b5050505050565b3361054d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146102265760405163118cdaa760e01b815233600482015260240161045c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b33600090815260008051602061181d833981519152602081905260409091205460609190851461062a57604051633ab3447f60e11b815260040160405180910390fd5b85431061064a57604051637170381760e01b815260040160405180910390fd5b8767ffffffffffffffff8111156106635761066361145b565b60405190808252806020026020018201604052801561068c578160200160208202803683370190505b50915060006040518060a001604052808660018111156106ae576106ae611657565b815260208082018b905260408083018b90526001600160a01b03881660608401523360809093018390526000838152868352818120549151949550936106fd938a938e938e938c93920161166d565b60408051601f1981840301815291815281516020928301206000818152600287019093529120835181549293508492829060ff19166001838181111561074557610745611657565b0217905550602082015160018201556040820151600282015560608201516003820180546001600160a01b03199081166001600160a01b039384161790915560809093015160049092018054909316911617905560005b8a811015610803576107d4828d8d848181106107ba576107ba6115e7565b90506020020160208101906107cf9190611533565b610c64565b8582815181106107e6576107e66115e7565b60209081029190910101526107fc600182611644565b905061079c565b5033600090815260208490526040812080549161081f836116c6565b91905055507f6d945f21ec4387fbc0576ee720ec13abadbefe648d2eaa5d387b64ffe1e3200d81836040516108559291906116df565b60405180910390a1505050979650505050505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526108d29186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610e00565b50505050565b6108e182610e63565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561092b576109268282610eda565b505050565b610933610f50565b5050565b60008281527f6135605bbaca49c9a4eeea9432a78c88af8cb013228ed2e2e5c5c2143292b2016020908152604080832081516060810183528154815260018201546001600160a01b0381169482019490945260008051602061181d83398151915294939092830190600160a01b900460ff1660028111156109ba576109ba611657565b60028111156109cb576109cb611657565b90525080516000908152600284016020526040808220815160a0810190925280549394509192909190829060ff166001811115610a0a57610a0a611657565b6001811115610a1b57610a1b611657565b815260018201546020808301919091526002830154604083015260038301546001600160a01b039081166060840152600490930154909216608090910152830151909150610a6a908686610f6f565b610a8757604051638baa579f60e01b815260040160405180910390fd5b600082604001516002811115610a9f57610a9f611657565b14610ac3578160400151604051633ba7bf8960e11b815260040161045c9190611751565b438160400151108015610ae3575060808101516001600160a01b03163314155b15610b0157604051630c251e1760e01b815260040160405180910390fd5b4381604001511015610b365760008581526001848101602052604090912001805460ff60a01b1916600160a11b179055610b5b565b60008581526001848101602052604090912001805460ff60a01b1916600160a01b1790555b60008581526001848101602052604091829020015490517f9b1aeb8ad11c0f8d96a5e926e0b459a25ff0a1a3c07a34951675ab9f1ed9bf5891610baa918891600160a01b900460ff169061175f565b60405180910390a1600081516001811115610bc757610bc7611657565b03610c3e57602081015160405160009133918381818185875af1925050503d8060008114610c11576040519150601f19603f3d011682016040523d82523d6000602084013e610c16565b606091505b5050905080610c385760405163467d86d160e01b815260040160405180910390fd5b50610514565b61051433826020015183606001516001600160a01b031661105b9092919063ffffffff16565b60006001600160a01b038216610c8d57604051632057875960e21b815260040160405180910390fd5b600060008051602061181d833981519152905060008484604051602001610cd092919091825260601b6bffffffffffffffffffffffff1916602082015260340190565b60408051601f1981840301815291815281516020928301206000818152600180870190945291909120909101549091506001600160a01b031615610d275760405163119b4fd360e11b815260040160405180910390fd5b604080516060810182528681526001600160a01b0386811660208084019182526000848601818152878252600189810190935295902084518155915190820180546001600160a01b03198116929094169182178155945193949193926001600160a81b03191617600160a01b836002811115610da557610da5611657565b0217905550505060008181526001830160205260409081902090517fa20e6b5b0d7c03217b361c78bc224a3548e4334fb51031d69a294a480efbc9c091610dee91849190611773565b60405180910390a19150505b92915050565b6000610e156001600160a01b0384168361108c565b90508051600014158015610e3a575080806020019051810190610e3891906117b2565b155b1561092657604051635274afe760e01b81526001600160a01b038416600482015260240161045c565b806001600160a01b03163b600003610e9957604051634c9c8ce360e01b81526001600160a01b038216600482015260240161045c565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610ef791906117d4565b600060405180830381855af49150503d8060008114610f32576040519150601f19603f3d011682016040523d82523d6000602084013e610f37565b606091505b5091509150610f4785838361109a565b95945050505050565b34156102265760405163b398979f60e01b815260040160405180910390fd5b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018390526000908190605c016040516020818303038152906040528051906020012090506000806000610fcd866110f6565b925092509250600060018585858560405160008152602001604052604051611011949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015611033573d6000803e3d6000fd5b5050604051601f1901516001600160a01b038b811691161496505050505050505b9392505050565b6040516001600160a01b0383811660248301526044820183905261092691859182169063a9059cbb906064016108a0565b606061105483836000611181565b6060826110af576110aa82611214565b611054565b81511580156110c657506001600160a01b0384163b155b156110ef57604051639996b31560e01b81526001600160a01b038516600482015260240161045c565b5080611054565b6000806000835160411461114c5760405162461bcd60e51b815260206004820152601e60248201527f73706c69745369676e61747572653a20696e76616c6964206c656e6774680000604482015260640161045c565b50505060208101516040820151606083015160001a9190601b83101561117a57611177601b84611803565b92505b9193909250565b6060814710156111a65760405163cd78605960e01b815230600482015260240161045c565b600080856001600160a01b031684866040516111c291906117d4565b60006040518083038185875af1925050503d80600081146111ff576040519150601f19603f3d011682016040523d82523d6000602084013e611204565b606091505b509150915061026386838361109a565b8051156112245780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008083601f84011261124f57600080fd5b50813567ffffffffffffffff81111561126757600080fd5b6020830191508360208260051b850101111561128257600080fd5b9250929050565b6000806000806000608086880312156112a157600080fd5b853567ffffffffffffffff8111156112b857600080fd5b6112c48882890161123d565b9099909850602088013597604081013597506060013595509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561131b578351835292840192918401916001016112ff565b50909695505050505050565b80356001600160a01b038116811461133e57600080fd5b919050565b6000806000806000806000806000806101208b8d03121561136357600080fd5b8a3567ffffffffffffffff81111561137a57600080fd5b6113868d828e0161123d565b909b5099505060208b0135975060408b0135965060608b013595506113ad60808c01611327565b945060a08b0135935060c08b013560ff811681146113ca57600080fd5b8093505060e08b013591506101008b013590509295989b9194979a5092959850565b60008060008060008060a0878903121561140557600080fd5b863567ffffffffffffffff81111561141c57600080fd5b61142889828a0161123d565b90975095505060208701359350604087013592506060870135915061144f60808801611327565b90509295509295509295565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561148457600080fd5b61148d83611327565b9150602083013567ffffffffffffffff808211156114aa57600080fd5b818501915085601f8301126114be57600080fd5b8135818111156114d0576114d061145b565b604051601f8201601f19908116603f011681019083821181831017156114f8576114f861145b565b8160405282815288602084870101111561151157600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561154557600080fd5b61105482611327565b6000806000806040858703121561156457600080fd5b843567ffffffffffffffff8082111561157c57600080fd5b6115888883890161123d565b909650945060208701359150808211156115a157600080fd5b506115ae8782880161123d565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610dfa57610dfa6115ba565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261161457600080fd5b83018035915067ffffffffffffffff82111561162f57600080fd5b60200191503681900382131561128257600080fd5b80820180821115610dfa57610dfa6115ba565b634e487b7160e01b600052602160045260246000fd5b60006002881061167f5761167f611657565b5060f89690961b8652600186019490945260218501929092526bffffffffffffffffffffffff19606091821b8116604186015291901b166055830152606982015260890190565b6000600182016116d8576116d86115ba565b5060010190565b828152815160c0820190600281106116f9576116f9611657565b806020840152506020830151604083015260408301516060830152606083015160018060a01b0380821660808501528060808601511660a085015250509392505050565b6003811061174d5761174d611657565b9052565b60208101610dfa828461173d565b82815260408101611054602083018461173d565b8281528154602082015260018201546001600160a01b038116604083015260808201906117aa6060840160a083901c60ff1661173d565b509392505050565b6000602082840312156117c457600080fd5b8151801515811461105457600080fd5b6000825160005b818110156117f557602081860181015185830152016117db565b506000920191825250919050565b60ff8181168382160190811115610dfa57610dfa6115ba56fe6135605bbaca49c9a4eeea9432a78c88af8cb013228ed2e2e5c5c2143292b200a264697066735822122040d8a9b154b8ab88d60b351655eafe874e706dc65e45c5a996f8a0d24a0def6864736f6c63430008140033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
