{
  "_format": "hh-sol-artifact-1",
  "contractName": "L2CrossDomainMessenger",
  "sourceName": "contracts/L2/L2CrossDomainMessenger.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_l1CrossDomainMessenger",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "msgHash",
          "type": "bytes32"
        }
      ],
      "name": "FailedRelayedMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "msgHash",
          "type": "bytes32"
        }
      ],
      "name": "RelayedMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "messageNonce",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "gasLimit",
          "type": "uint256"
        }
      ],
      "name": "SentMessage",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "mntValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "ethValue",
          "type": "uint256"
        }
      ],
      "name": "SentMessageExtension1",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MESSAGE_VERSION",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIN_GAS_CALLDATA_OVERHEAD",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OTHER_MESSENGER",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RELAY_CALL_OVERHEAD",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RELAY_CONSTANT_OVERHEAD",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RELAY_GAS_CHECK_BUFFER",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RELAY_RESERVED_GAS",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "uint32",
          "name": "_minGasLimit",
          "type": "uint32"
        }
      ],
      "name": "baseGas",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "failedMessages",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l1CrossDomainMessenger",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "messageNonce",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_nonce",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_mntValue",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_ethValue",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_minGasLimit",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        }
      ],
      "name": "relayMessage",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_ethAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_target",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "uint32",
          "name": "_minGasLimit",
          "type": "uint32"
        }
      ],
      "name": "sendMessage",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "successfulMessages",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "xDomainMessageSender",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6101006040523480156200001257600080fd5b506040516200260938038062002609833981016040819052620000359162000243565b6001600160a01b038116608052600160a052600460c052600060e0526200005b62000062565b5062000275565b600054600160a81b900460ff16158080156200008b57506000546001600160a01b90910460ff16105b80620000c25750620000a830620001af60201b620014411760201c565b158015620000c25750600054600160a01b900460ff166001145b6200012b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b179055801562000159576000805460ff60a81b1916600160a81b1790555b62000163620001be565b8015620001ac576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054600160a81b900460ff166200022d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000122565b60cc80546001600160a01b03191661dead179055565b6000602082840312156200025657600080fd5b81516001600160a01b03811681146200026e57600080fd5b9392505050565b60805160a05160c05160e051612345620002c4600039600061045f015260006104360152600061040d015260008181610296015281816103070152818161082e0152610cd701526123456000f3fe6080604052600436106101445760003560e01c806383a74074116100c0578063b1b1b20911610074578063b575e30011610059578063b575e3001461037b578063ecc704281461038e578063ff8daf15146103f357600080fd5b8063b1b1b2091461032b578063b28ade251461035b57600080fd5b80639fce812c116100a55780639fce812c14610284578063a4e7f8bd146102b8578063a7119869146102f857600080fd5b806383a740741461026d5780638cbeeef2146101ce57600080fd5b80634c1d6a69116101175780635644cfdf116100fc5780635644cfdf146102065780636e296e451461021c5780638129fc1c1461025657600080fd5b80634c1d6a69146101ce57806354fd4d50146101e457600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633f827a5a146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b3480156101b257600080fd5b506101bb600181565b60405161ffff9091168152602001610173565b3480156101da57600080fd5b5061015e619c4081565b3480156101f057600080fd5b506101f9610406565b6040516101739190611c93565b34801561021257600080fd5b5061015e61138881565b34801561022857600080fd5b506102316104a9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b34801561026257600080fd5b5061026b610595565b005b34801561027957600080fd5b5061015e62030d4081565b34801561029057600080fd5b506102317f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c457600080fd5b506102e86102d3366004611ca6565b60ce6020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561030457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610231565b34801561033757600080fd5b506102e8610346366004611ca6565b60cb6020526000908152604090205460ff1681565b34801561036757600080fd5b5061015e610376366004611d21565b610792565b61026b610389366004611d99565b610802565b34801561039a57600080fd5b506103e560cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610173565b61026b610401366004611e08565b610a95565b60606104317f000000000000000000000000000000000000000000000000000000000000000061145d565b61045a7f000000000000000000000000000000000000000000000000000000000000000061145d565b6104837f000000000000000000000000000000000000000000000000000000000000000061145d565b60405160200161049593929190611e93565b604051602081830303815290604052905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000547501000000000000000000000000000000000000000000900460ff16158080156105e0575060005460017401000000000000000000000000000000000000000090910460ff16105b806106125750303b158015610612575060005474010000000000000000000000000000000000000000900460ff166001145b61069e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161056f565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561072457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b61072c61159a565b801561078f57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f6107ae604063ffffffff8816611f38565b6107b89190611f97565b6107c3601088611f38565b6107d09062030d40611fbe565b6107da9190611fbe565b6107e49190611fbe565b6107ee9190611fbe565b6107f89190611fbe565b90505b9392505050565b84156108285761082873deaddeaddeaddeaddeaddeaddeaddeaddead1111333088611673565b610963857f0000000000000000000000000000000000000000000000000000000000000000610858868686610792565b7fff8daf15000000000000000000000000000000000000000000000000000000006108c360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a348d8a8d8d6040516024016108e1989796959493929190612033565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261170e565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856109e860cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516109fa959493929190612099565b60405180910390a2604080513481526020810187905233917fcf00802ba1f8c659140235227979ca08afaba336a9f9fdc4a5107ed9e8013d08910160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b60f088901c60028110610b50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161056f565b8061ffff16600003610c52576000610bae888a86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d61179e565b600081815260cb602052604090205490915060ff1615610c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161056f565b505b6000610c998a8a8a8a8a8a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117bd92505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f000000000000000000000000000000000000000000000000000000000000000090911603610d3157863414610d0d57610d0d6120e7565b600081815260ce602052604090205460ff1615610d2c57610d2c6120e7565b610e83565b3415610de5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161056f565b600081815260ce602052604090205460ff16610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161056f565b610e8c886117e2565b15610f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161056f565b600081815260cb602052604090205460ff1615610fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161056f565b610fff85610ff0611388619c40611fbe565b67ffffffffffffffff16611837565b1580611025575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561113e57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161056f565b5050611437565b600186156111f4576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1660048201526024810188905273deaddeaddeaddeaddeaddeaddeaddeaddead11119063095ea7b3906044016020604051808303816000875af11580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190612116565b90505b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c1617905560006112858a619c405a6112489190612138565b8b89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061185592505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905590508080156112bd5750815b1561132557600083815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611432565b600083815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161056f565b505050505b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060816000036114a057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156114ca57806114b48161214f565b91506114c39050600a83612187565b91506114a4565b60008167ffffffffffffffff8111156114e5576114e561219b565b6040519080825280601f01601f19166020018201604052801561150f576020820181803683370190505b5090505b841561159257611524600183612138565b9150611531600a866121ca565b61153c9060306121de565b60f81b818381518110611551576115516121f6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061158b600a86612187565b9450611513565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff16611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161056f565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261170890859061186f565b50505050565b6040517f39fd0090000000000000000000000000000000000000000000000000000000008152734200000000000000000000000000000000000016906339fd0090903490611766908890889088908890600401612225565b6000604051808303818588803b15801561177f57600080fd5b505af1158015611793573d6000803e3d6000fd5b505050505050505050565b60006117ac85858585611980565b805190602001209050949350505050565b60006117ce88888888888888611a19565b805190602001209050979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611831575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60006118d1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b80519091501561197b57808060200190518101906118ef9190612116565b61197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161056f565b505050565b6060848484846040516024016119999493929190612274565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606087878787878787604051602401611a3897969594939291906122be565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fff8daf15000000000000000000000000000000000000000000000000000000001790529050979650505050505050565b60606107f884846000858573ffffffffffffffffffffffffffffffffffffffff85163b611b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056f565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611b6d919061231c565b60006040518083038185875af1925050503d8060008114611baa576040519150601f19603f3d011682016040523d82523d6000602084013e611baf565b606091505b5091509150611bbf828286611bca565b979650505050505050565b60608315611bd95750816107fb565b825115611be95782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f9190611c93565b60005b83811015611c38578181015183820152602001611c20565b838111156117085750506000910152565b60008151808452611c61816020860160208601611c1d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006107fb6020830184611c49565b600060208284031215611cb857600080fd5b5035919050565b60008083601f840112611cd157600080fd5b50813567ffffffffffffffff811115611ce957600080fd5b602083019150836020828501011115611d0157600080fd5b9250929050565b803563ffffffff81168114611d1c57600080fd5b919050565b600080600060408486031215611d3657600080fd5b833567ffffffffffffffff811115611d4d57600080fd5b611d5986828701611cbf565b9094509250611d6c905060208501611d08565b90509250925092565b803573ffffffffffffffffffffffffffffffffffffffff81168114611d1c57600080fd5b600080600080600060808688031215611db157600080fd5b85359450611dc160208701611d75565b9350604086013567ffffffffffffffff811115611ddd57600080fd5b611de988828901611cbf565b9094509250611dfc905060608701611d08565b90509295509295909350565b60008060008060008060008060e0898b031215611e2457600080fd5b88359750611e3460208a01611d75565b9650611e4260408a01611d75565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff811115611e7357600080fd5b611e7f8b828c01611cbf565b999c989b5096995094979396929594505050565b60008451611ea5818460208901611c1d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611ee1816001850160208a01611c1d565b60019201918201528351611efc816002840160208801611c1d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f5f57611f5f611f09565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680611fb257611fb2611f68565b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611fe157611fe1611f09565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b888152600073ffffffffffffffffffffffffffffffffffffffff808a16602084015280891660408401525086606083015285608083015263ffffffff851660a083015260e060c083015261208b60e083018486611fea565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c9608083018688611fea565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121561212857600080fd5b815180151581146107fb57600080fd5b60008282101561214a5761214a611f09565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361218057612180611f09565b5060010190565b60008261219657612196611f68565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000826121d9576121d9611f68565b500690565b600082198211156121f1576121f1611f09565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015267ffffffffffffffff8316604082015260806060820152600061226a6080830184611c49565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526122ad6080830185611c49565b905082606083015295945050505050565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c083015261230f60e0830184611c49565b9998505050505050505050565b6000825161232e818460208701611c1d565b919091019291505056fea164736f6c634300080f000a",
  "deployedBytecode": "0x6080604052600436106101445760003560e01c806383a74074116100c0578063b1b1b20911610074578063b575e30011610059578063b575e3001461037b578063ecc704281461038e578063ff8daf15146103f357600080fd5b8063b1b1b2091461032b578063b28ade251461035b57600080fd5b80639fce812c116100a55780639fce812c14610284578063a4e7f8bd146102b8578063a7119869146102f857600080fd5b806383a740741461026d5780638cbeeef2146101ce57600080fd5b80634c1d6a69116101175780635644cfdf116100fc5780635644cfdf146102065780636e296e451461021c5780638129fc1c1461025657600080fd5b80634c1d6a69146101ce57806354fd4d50146101e457600080fd5b8063028f85f7146101495780630c5684981461017c5780632828d7e8146101915780633f827a5a146101a6575b600080fd5b34801561015557600080fd5b5061015e601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561018857600080fd5b5061015e603f81565b34801561019d57600080fd5b5061015e604081565b3480156101b257600080fd5b506101bb600181565b60405161ffff9091168152602001610173565b3480156101da57600080fd5b5061015e619c4081565b3480156101f057600080fd5b506101f9610406565b6040516101739190611c93565b34801561021257600080fd5b5061015e61138881565b34801561022857600080fd5b506102316104a9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b34801561026257600080fd5b5061026b610595565b005b34801561027957600080fd5b5061015e62030d4081565b34801561029057600080fd5b506102317f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c457600080fd5b506102e86102d3366004611ca6565b60ce6020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561030457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610231565b34801561033757600080fd5b506102e8610346366004611ca6565b60cb6020526000908152604090205460ff1681565b34801561036757600080fd5b5061015e610376366004611d21565b610792565b61026b610389366004611d99565b610802565b34801561039a57600080fd5b506103e560cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610173565b61026b610401366004611e08565b610a95565b60606104317f000000000000000000000000000000000000000000000000000000000000000061145d565b61045a7f000000000000000000000000000000000000000000000000000000000000000061145d565b6104837f000000000000000000000000000000000000000000000000000000000000000061145d565b60405160200161049593929190611e93565b604051602081830303815290604052905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000547501000000000000000000000000000000000000000000900460ff16158080156105e0575060005460017401000000000000000000000000000000000000000090910460ff16105b806106125750303b158015610612575060005474010000000000000000000000000000000000000000900460ff166001145b61069e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161056f565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561072457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b61072c61159a565b801561078f57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000611388619c4080603f6107ae604063ffffffff8816611f38565b6107b89190611f97565b6107c3601088611f38565b6107d09062030d40611fbe565b6107da9190611fbe565b6107e49190611fbe565b6107ee9190611fbe565b6107f89190611fbe565b90505b9392505050565b84156108285761082873deaddeaddeaddeaddeaddeaddeaddeaddead1111333088611673565b610963857f0000000000000000000000000000000000000000000000000000000000000000610858868686610792565b7fff8daf15000000000000000000000000000000000000000000000000000000006108c360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a348d8a8d8d6040516024016108e1989796959493929190612033565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261170e565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856109e860cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516109fa959493929190612099565b60405180910390a2604080513481526020810187905233917fcf00802ba1f8c659140235227979ca08afaba336a9f9fdc4a5107ed9e8013d08910160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff000000000000000000000000000000000000000000000000000000000000909116179055505050565b60f088901c60028110610b50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161056f565b8061ffff16600003610c52576000610bae888a86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d61179e565b600081815260cb602052604090205490915060ff1615610c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161056f565b505b6000610c998a8a8a8a8a8a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506117bd92505050565b905073ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef330181167f000000000000000000000000000000000000000000000000000000000000000090911603610d3157863414610d0d57610d0d6120e7565b600081815260ce602052604090205460ff1615610d2c57610d2c6120e7565b610e83565b3415610de5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161056f565b600081815260ce602052604090205460ff16610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161056f565b610e8c886117e2565b15610f3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161056f565b600081815260cb602052604090205460ff1615610fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161056f565b610fff85610ff0611388619c40611fbe565b67ffffffffffffffff16611837565b1580611025575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561113e57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161056f565b5050611437565b600186156111f4576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1660048201526024810188905273deaddeaddeaddeaddeaddeaddeaddeaddead11119063095ea7b3906044016020604051808303816000875af11580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190612116565b90505b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c1617905560006112858a619c405a6112489190612138565b8b89898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061185592505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905590508080156112bd5750815b1561132557600083815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611432565b600083815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555184917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161056f565b505050505b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6060816000036114a057505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156114ca57806114b48161214f565b91506114c39050600a83612187565b91506114a4565b60008167ffffffffffffffff8111156114e5576114e561219b565b6040519080825280601f01601f19166020018201604052801561150f576020820181803683370190505b5090505b841561159257611524600183612138565b9150611531600a866121ca565b61153c9060306121de565b60f81b818381518110611551576115516121f6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061158b600a86612187565b9450611513565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff16611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161056f565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261170890859061186f565b50505050565b6040517f39fd0090000000000000000000000000000000000000000000000000000000008152734200000000000000000000000000000000000016906339fd0090903490611766908890889088908890600401612225565b6000604051808303818588803b15801561177f57600080fd5b505af1158015611793573d6000803e3d6000fd5b505050505050505050565b60006117ac85858585611980565b805190602001209050949350505050565b60006117ce88888888888888611a19565b805190602001209050979650505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611831575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60006118d1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611abb9092919063ffffffff16565b80519091501561197b57808060200190518101906118ef9190612116565b61197b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161056f565b505050565b6060848484846040516024016119999493929190612274565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606087878787878787604051602401611a3897969594939291906122be565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fff8daf15000000000000000000000000000000000000000000000000000000001790529050979650505050505050565b60606107f884846000858573ffffffffffffffffffffffffffffffffffffffff85163b611b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161056f565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611b6d919061231c565b60006040518083038185875af1925050503d8060008114611baa576040519150601f19603f3d011682016040523d82523d6000602084013e611baf565b606091505b5091509150611bbf828286611bca565b979650505050505050565b60608315611bd95750816107fb565b825115611be95782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f9190611c93565b60005b83811015611c38578181015183820152602001611c20565b838111156117085750506000910152565b60008151808452611c61816020860160208601611c1d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006107fb6020830184611c49565b600060208284031215611cb857600080fd5b5035919050565b60008083601f840112611cd157600080fd5b50813567ffffffffffffffff811115611ce957600080fd5b602083019150836020828501011115611d0157600080fd5b9250929050565b803563ffffffff81168114611d1c57600080fd5b919050565b600080600060408486031215611d3657600080fd5b833567ffffffffffffffff811115611d4d57600080fd5b611d5986828701611cbf565b9094509250611d6c905060208501611d08565b90509250925092565b803573ffffffffffffffffffffffffffffffffffffffff81168114611d1c57600080fd5b600080600080600060808688031215611db157600080fd5b85359450611dc160208701611d75565b9350604086013567ffffffffffffffff811115611ddd57600080fd5b611de988828901611cbf565b9094509250611dfc905060608701611d08565b90509295509295909350565b60008060008060008060008060e0898b031215611e2457600080fd5b88359750611e3460208a01611d75565b9650611e4260408a01611d75565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff811115611e7357600080fd5b611e7f8b828c01611cbf565b999c989b5096995094979396929594505050565b60008451611ea5818460208901611c1d565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611ee1816001850160208a01611c1d565b60019201918201528351611efc816002840160208801611c1d565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f5f57611f5f611f09565b02949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680611fb257611fb2611f68565b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611fe157611fe1611f09565b01949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b888152600073ffffffffffffffffffffffffffffffffffffffff808a16602084015280891660408401525086606083015285608083015263ffffffff851660a083015260e060c083015261208b60e083018486611fea565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c9608083018688611fea565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60006020828403121561212857600080fd5b815180151581146107fb57600080fd5b60008282101561214a5761214a611f09565b500390565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361218057612180611f09565b5060010190565b60008261219657612196611f68565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000826121d9576121d9611f68565b500690565b600082198211156121f1576121f1611f09565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015267ffffffffffffffff8316604082015260806060820152600061226a6080830184611c49565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526122ad6080830185611c49565b905082606083015295945050505050565b878152600073ffffffffffffffffffffffffffffffffffffffff80891660208401528088166040840152508560608301528460808301528360a083015260e060c083015261230f60e0830184611c49565b9998505050505050505050565b6000825161232e818460208701611c1d565b919091019291505056fea164736f6c634300080f000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
