{
  "_format": "hh-sol-artifact-1",
  "contractName": "MPTValidatorV4",
  "sourceName": "contracts/MPTValidatorV4.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_stargateBridgeAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stgTokenAddress",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_localChainId",
          "type": "uint16"
        },
        {
          "internalType": "address",
          "name": "_ulnAddress",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "PACKET_SIGNATURE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "srcChainId",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "dstChainId",
              "type": "uint16"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            },
            {
              "internalType": "address",
              "name": "dstAddress",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "srcAddress",
              "type": "bytes"
            },
            {
              "internalType": "bytes32",
              "name": "ulnAddress",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "payload",
              "type": "bytes"
            }
          ],
          "internalType": "struct LayerZeroPacket.Packet",
          "name": "packet",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "blockHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "receiptsRoot",
          "type": "bytes32"
        }
      ],
      "name": "assertMessagePath",
      "outputs": [],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "uint16",
          "name": "srcChain",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "sizeOfSrcAddress",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "ulnAddress",
          "type": "bytes32"
        }
      ],
      "name": "getPacket",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "srcChainId",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "dstChainId",
              "type": "uint16"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            },
            {
              "internalType": "address",
              "name": "dstAddress",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "srcAddress",
              "type": "bytes"
            },
            {
              "internalType": "bytes32",
              "name": "ulnAddress",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "payload",
              "type": "bytes"
            }
          ],
          "internalType": "struct LayerZeroPacket.Packet",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getUtilsVersion",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hashRoot",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "receiptSlotIndex",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "logIndex",
          "type": "uint256"
        },
        {
          "internalType": "bytes[]",
          "name": "proof",
          "type": "bytes[]"
        }
      ],
      "name": "getVerifyLog",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "contractAddress",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "topicZeroSig",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IValidationLibraryHelper.ULNLog",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localChainId",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "secureStgPayload",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "secureStgTokenPayload",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stargateBridgeAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stgTokenAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "uln",
      "outputs": [
        {
          "internalType": "contract IUltraLightNode",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "utilsVersion",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_receiptsRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_transactionProof",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_remoteAddressSize",
          "type": "uint256"
        }
      ],
      "name": "validateProof",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint16",
              "name": "srcChainId",
              "type": "uint16"
            },
            {
              "internalType": "uint16",
              "name": "dstChainId",
              "type": "uint16"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            },
            {
              "internalType": "address",
              "name": "dstAddress",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "srcAddress",
              "type": "bytes"
            },
            {
              "internalType": "bytes32",
              "name": "ulnAddress",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "payload",
              "type": "bytes"
            }
          ],
          "internalType": "struct LayerZeroPacket.Packet",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6101006040526000805460ff191660031790553480156200001f57600080fd5b506040516200278e3803806200278e83398101604081905262000042916200009b565b606093841b6001600160601b031990811660805292841b831660a05260f09190911b6001600160f01b03191660c05290911b1660e052620000fe565b80516001600160a01b03811681146200009657600080fd5b919050565b60008060008060808587031215620000b1578384fd5b620000bc856200007e565b9350620000cc602086016200007e565b9250604085015161ffff81168114620000e3578283fd5b9150620000f3606086016200007e565b905092959194509250565b60805160601c60a05160601c60c05160f01c60e05160601c612635620001596000398061029b5280610874528061094352508061025352806107ca525080610213528061043452508061027752806103c952506126356000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80636c473aff1161008c578063be9d395e11610066578063be9d395e146101b1578063d633ad61146101c6578063e0cabadd146101ce578063ea455df9146101e1576100df565b80636c473aff1461017457806378d823f71461017c578063b71e0f7114610191576100df565b80635711c2a8116100bd5780635711c2a8146101375780635b056da5146101575780636348d2691461016c576100df565b80630f222e65146100e45780633fc18d4c1461010d57806347713b3914610122575b600080fd5b6100f76100f2366004611b32565b6101f4565b6040516101049190612393565b60405180910390f35b610115610211565b6040516101049190612059565b61012a610235565b60405161010491906123fb565b61014a610145366004611c23565b61023e565b60405161010491906120b5565b61015f610251565b60405161010491906123c2565b610115610275565b610115610299565b61018f61018a366004611d96565b6102bd565b005b6101a461019f366004611ba6565b6102cd565b60405161010491906122ee565b6101b96104ac565b60405161010491906120ac565b61012a6104d0565b6101a46101dc366004611c56565b6104d9565b61014a6101ef366004611c23565b6104ed565b6101fc61182c565b610208858585856104f8565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1681565b6060610249826106a7565b90505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6102c88383836107c8565b505050565b6102d561184b565b60008211610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f906122b7565b60405180910390fd5b60008080808061032a888a018a611e83565b9450945094509450945060006103428b8484876104f8565b60208101519091507fe8d23d927749ec8e512eb885679c2977d57068839d8cca1a85685dbbea0648f6146103a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f9061218f565b805160408201516000916103ba919089908c90610a59565b90506103c781878e6107c8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff1614156104325761042c8160c001516106a7565b60c08201525b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff16141561049d576104978160c00151610b4f565b60c08201525b9b9a5050505050505050505050565b7fe8d23d927749ec8e512eb885679c2977d57068839d8cca1a85685dbbea0648f681565b60005460ff1690565b6104e161184b565b61020885858585610a59565b606061024982610b4f565b61050061182c565b815184511461053b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f906120ea565b6000825111610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f90612223565b61057e611889565b606060005b845181101561062a5784818151811061059857fe5b60200260200101519150818051906020012088146105e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f90612158565b6106088782815181106105f157fe5b602002602001015161060284610bf9565b90610c6d565b925060018551038110156106225761061f83610e29565b97505b600101610583565b50600061063b600361060285610f46565b9050600061065161064c8389610c6d565b610fd2565b905061065b61182c565b61066c6106678361107e565b610e29565b815261067f61066760006106028561107e565b60208201526106956106908361107e565b61112e565b60408201529998505050505050505050565b6020810151606090600160ff821614156107c1576000806000806000806000898060200190518101906106da9190611f08565b9750975097509750975097509750506000815111156107b957815160009015610704575060148201515b803b806107b65760008260405160200161071e9190612029565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815260208381018352600080855292519194509192610774928f928f928f928f928f928f928b9201612409565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529c5061024c9b505050505050505050505050565b50505b505050505050505b5090919050565b7f000000000000000000000000000000000000000000000000000000000000000061ffff16836020015161ffff161461082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f906121c6565b825160608401516040517fa466222200000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263a4662222926108a99291906004016123d1565b60c06040518083038186803b1580156108c157600080fd5b505afa1580156108d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f99190611cf8565b60a081015185516040517febfa08e900000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263ebfa08e99261097892899060040161207a565b604080518083038186803b15801561098f57600080fd5b505afa1580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c79190611a4b565b905082816020015114610a06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f90612121565b816020015167ffffffffffffffff1681600001511015610a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f9061225a565b5050505050565b610a6161184b565b602085015160608601516068870151858801607c01519190610a816118a3565b610a8b818961125b565b50610a9b8160008c60888c611295565b506000610ab389610aad86601c61136f565b9061136f565b9050610abd6118a3565b610ac7818361125b565b50610ae360008d610ad98d609c6113e6565b8492919086611295565b506040805160e08101825261ffff808e16825298909816602089015267ffffffffffffffff909416938701939093525073ffffffffffffffffffffffffffffffffffffffff9093166060850152915160808401525060a082018490525160c08201529050949350505050565b606060008083806020019051810190610b689190611cb3565b9150915060008083511115610b7e575060148201515b73ffffffffffffffffffffffffffffffffffffffff8116610bf05760405161dead90600090610bb1908390602001612029565b60405160208183030381529060405290508084604051602001610bd59291906120c8565b6040516020818303038152906040529550505050505061024c565b50929392505050565b610c01611889565b602082018051835160009190911a908015801590610c22575060c060ff8316105b15610c5157600192909201917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b6040805180820190915290815260208101929092525092915050565b610c75611889565b610c7e83611461565b610cd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125be6021913960400191505060405180910390fd5b610cdc8361149b565b8210610d4957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f524c50206974656d206f7574206f6620626f756e647300000000000000000000604482015290519081900360640190fd5b8251602084015190810190600090610d60906114f3565b60208601510190506000805b85811015610d8b57610d7d83611592565b928301929150600101610d6c565b50610d9582611592565b9050828183011115610e0857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f524c50206974656d206f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b60405180604001604052808281526020018381525093505050505b92915050565b805160009015801590610e3e57508151602110155b610ea957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f524c504465636f64657220746f55696e7420696e76616c6964206c656e677468604482015290519081900360640190fd5b6000610eb883602001516114f3565b90508083600001511015610f17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806125966028913960400191505060405180910390fd5b825160208085015183018051928490039291831015610f3d57826020036101000a820491505b50949350505050565b610f4e611889565b6000610f5d83602001516114f3565b60208401518451908201805192935060009290921a91908015801590610f86575060c060ff8416105b15610fb557600191909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b604080518082019091529081526020810191909152949350505050565b610fda6118bd565b610fe382611461565b61104e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f524c504465636f646572206974657261746f72206973206e6f74206c69737400604482015290519081900360640190fd5b600061105d83602001516114f3565b60208085015160408051808201909152868152920190820152915050919050565b611086611889565b61108f82611667565b6110fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f524c504465636f646572206974657261746f7220686173206e6f206e65787400604482015290519081900360640190fd5b6020820151600061110a82611592565b80830160209586015260408051808201909152908152938401919091525090919050565b8051606090611188576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125df6021913960400191505060405180910390fd5b600061119783602001516114f3565b905080836000015110156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806125966028913960400191505060405180910390fd5b825181900360008167ffffffffffffffff8111801561121457600080fd5b506040519080825280601f01601f19166020018201604052801561123f576020820181803683370190505b5090506000816020019050610f3d84876020015101828561167c565b6112636118a3565b60208206156112785760208206602003820191505b506020828101829052604080518085526000815290920101905290565b61129d6118a3565b856020015182860111156112c7576112c7866112bf8860200151888601611703565b60020261171a565b6000808751805188602083010193508089870111156112e65788860182525b5050508484015b6020841061132a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090930192602091820191016112ed565b5181517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208690036101000a01908116901991909116179052508495945050505050565b6000828211156113e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008282018381101561145a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b80516000906114725750600061024c565b6020820151805160001a9060c08210156114915760009250505061024c565b5060019392505050565b80516000906114ac5750600061024c565b6000806114bc84602001516114f3565b602085015185519181019250015b808210156114ea576114db82611592565b600190930192909101906114ca565b50909392505050565b8051600090811a608081101561150d57600091505061024c565b60b8811080611528575060c08110801590611528575060f881105b1561153757600191505061024c565b60c0811015611569577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a01905061024c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a01905061024c565b80516000908190811a60808110156115ad5760019150611660565b60b88110156115e0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181019150611660565b60c081101561160d5760b78103600185019450806020036101000a85510460018201810193505050611660565b60f8811015611640577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181019150611660565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b80518051602091820151919092015191011190565b80611686576102c8565b5b602081106116c45782518252602092830192909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611687565b915181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052565b600081831115611714575081610e23565b50919050565b8151611726838361125b565b506117318382611737565b50505050565b61173f6118a3565b61145a838460000151518485516117546118a3565b825182111561176257600080fd5b8460200151828501111561178457611784856112bf8760200151878601611703565b6000808651805187602083010193508088870111156117a35787860182525b505050602084015b602084106117e857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090930192602091820191016117ab565b5181517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208690036101000a019081169019919091161790525083949350505050565b6040805160608082018352600080835260208301529181019190915290565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820181905260a082019290925260c081019190915290565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001600081525090565b60405180604001604052806118d0611889565b8152602001600081525090565b803561024c8161254a565b805161024c8161254a565b600082601f830112611903578081fd5b81356020611918611913836124c0565b61249c565b82815281810190858301855b8581101561194d5761193b898684358b01016119b4565b84529284019290840190600101611924565b5090979650505050505050565b600082601f83011261196a578081fd5b8135602061197a611913836124c0565b8281528181019085830183850287018401881015611996578586fd5b855b8581101561194d57813584529284019290840190600101611998565b600082601f8301126119c4578081fd5b81356119d2611913826124de565b8181528460208386010111156119e6578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112611a10578081fd5b8151611a1e611913826124de565b818152846020838601011115611a32578283fd5b611a4382602083016020870161251e565b949350505050565b600060408284031215611a5c578081fd5b6040516040810181811067ffffffffffffffff82111715611a7957fe5b604052825181526020928301519281019290925250919050565b600060c08284031215611aa4578081fd5b60405160c0810181811067ffffffffffffffff82111715611ac157fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b803561024c8161256f565b805161024c8161256f565b803561024c8161257f565b805161024c8161257f565b60008060008060808587031215611b47578384fd5b84359350602085013567ffffffffffffffff80821115611b65578485fd5b611b718883890161195a565b9450604087013593506060870135915080821115611b8d578283fd5b50611b9a878288016118f3565b91505092959194509250565b60008060008060608587031215611bbb578182fd5b84359350602085013567ffffffffffffffff80821115611bd9578384fd5b818701915087601f830112611bec578384fd5b813581811115611bfa578485fd5b886020828501011115611c0b578485fd5b95986020929092019750949560400135945092505050565b600060208284031215611c34578081fd5b813567ffffffffffffffff811115611c4a578182fd5b611a43848285016119b4565b60008060008060808587031215611c6b578182fd5b843567ffffffffffffffff811115611c81578283fd5b611c8d878288016119b4565b9450506020850135611c9e8161256f565b93969395505050506040820135916060013590565b60008060408385031215611cc5578182fd5b825167ffffffffffffffff811115611cdb578283fd5b611ce785828601611a00565b925050602083015190509250929050565b600060c08284031215611d09578081fd5b60405160c0810181811067ffffffffffffffff82111715611d2657fe5b6040528251611d348161256f565b81526020830151611d448161257f565b60208201526040830151611d578161254a565b6040820152611d6860608401611b11565b6060820152611d7960808401611b27565b6080820152611d8a60a084016118e8565b60a08201529392505050565b600080600060608486031215611daa578081fd5b833567ffffffffffffffff80821115611dc1578283fd5b9085019060e08288031215611dd4578283fd5b611dde60e061249c565b611de783611b06565b8152611df560208401611b06565b6020820152611e0660408401611b1c565b6040820152611e17606084016118dd565b6060820152608083013582811115611e2d578485fd5b611e39898286016119b4565b60808301525060a083013560a082015260c083013582811115611e5a578485fd5b611e66898286016119b4565b60c083015250976020870135975060409096013595945050505050565b600080600080600060a08688031215611e9a578283fd5b8535611ea58161256f565b945060208601359350604086013567ffffffffffffffff80821115611ec8578485fd5b611ed489838a016118f3565b94506060880135915080821115611ee9578283fd5b50611ef68882890161195a565b95989497509295608001359392505050565b6000806000806000806000806101c0898b031215611f24578586fd5b885160ff81168114611f34578687fd5b80985050602089015196506040890151955060608901519450611f5a8a60808b01611a4b565b9350611f698a60c08b01611a93565b925061018089015167ffffffffffffffff80821115611f86578384fd5b611f928c838d01611a00565b93506101a08b0151915080821115611fa8578283fd5b50611fb58b828c01611a00565b9150509295985092959890939650565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452611ff781602086016020860161251e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff93909316835261ffff919091166020830152604082015260600190565b90815260200190565b60006020825261145a6020830184611fdf565b6000604082526120db6040830185611fdf565b90508260208301529392505050565b6020808252601c908201527f50726f6f664c69623a20696e76616c69642070726f6f662073697a6500000000604082015260600190565b6020808252601e908201527f50726f6f664c69623a20696e76616c6964207265636569707420726f6f740000604082015260600190565b6020808252601a908201527f50726f6f664c69623a20696e76616c696420686173686c696e6b000000000000604082015260600190565b6020808252601f908201527f50726f6f664c69623a207061636b6574206e6f74207265636f676e697a656400604082015260600190565b60208082526026908201527f50726f6f664c69623a20696e76616c69642064657374696e6174696f6e20636860408201527f61696e2049440000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f50726f6f664c69623a2070726f6f662073697a65206d757374203e2030000000604082015260600190565b60208082526028908201527f50726f6f664c69623a206e6f7420656e6f75676820626c6f636b20636f6e666960408201527f726d6174696f6e73000000000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f50726f6f664c69623a20696e76616c696420616464726573732073697a650000604082015260600190565b60006020825261ffff8084511660208401528060208501511660408401525067ffffffffffffffff604084015116606083015260608301516123336080840182611fc5565b50608083015160e060a084015261234e610100840182611fdf565b905060a084015160c084015260c08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160e08501526102088282611fdf565b60006020825282516020830152602083015160408301526040830151606080840152611a436080840182611fdf565b61ffff91909116815260200190565b61ffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60ff91909116815260200190565b60006101c060ff8b16835289602084015288604084015287606084015286516080840152602087015160a0840152855160c0840152602086015160e084015260408601516101008401526060860151610120840152608086015161014084015260a08601516101608401528061018084015261248781840186611fdf565b90508281036101a084015261049d8185611fdf565b60405181810167ffffffffffffffff811182821017156124b857fe5b604052919050565b600067ffffffffffffffff8211156124d457fe5b5060209081020190565b600067ffffffffffffffff8211156124f257fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612539578181015183820152602001612521565b838111156117315750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461256c57600080fd5b50565b61ffff8116811461256c57600080fd5b67ffffffffffffffff8116811461256c57600080fdfe524c504465636f6465723a20696e76616c696420524c50206974656d206f66667365742073697a65524c504465636f646572206974657261746f72206973206e6f742061206c697374524c504465636f64657220746f427974657320696e76616c6964206c656e677468a2646970667358221220de367aaacca8ca6e5e6f0304b952713d201f340decdfa89305cdebe80e97d21664736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100df5760003560e01c80636c473aff1161008c578063be9d395e11610066578063be9d395e146101b1578063d633ad61146101c6578063e0cabadd146101ce578063ea455df9146101e1576100df565b80636c473aff1461017457806378d823f71461017c578063b71e0f7114610191576100df565b80635711c2a8116100bd5780635711c2a8146101375780635b056da5146101575780636348d2691461016c576100df565b80630f222e65146100e45780633fc18d4c1461010d57806347713b3914610122575b600080fd5b6100f76100f2366004611b32565b6101f4565b6040516101049190612393565b60405180910390f35b610115610211565b6040516101049190612059565b61012a610235565b60405161010491906123fb565b61014a610145366004611c23565b61023e565b60405161010491906120b5565b61015f610251565b60405161010491906123c2565b610115610275565b610115610299565b61018f61018a366004611d96565b6102bd565b005b6101a461019f366004611ba6565b6102cd565b60405161010491906122ee565b6101b96104ac565b60405161010491906120ac565b61012a6104d0565b6101a46101dc366004611c56565b6104d9565b61014a6101ef366004611c23565b6104ed565b6101fc61182c565b610208858585856104f8565b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60005460ff1681565b6060610249826106a7565b90505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6102c88383836107c8565b505050565b6102d561184b565b60008211610318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f906122b7565b60405180910390fd5b60008080808061032a888a018a611e83565b9450945094509450945060006103428b8484876104f8565b60208101519091507fe8d23d927749ec8e512eb885679c2977d57068839d8cca1a85685dbbea0648f6146103a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f9061218f565b805160408201516000916103ba919089908c90610a59565b90506103c781878e6107c8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff1614156104325761042c8160c001516106a7565b60c08201525b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16816060015173ffffffffffffffffffffffffffffffffffffffff16141561049d576104978160c00151610b4f565b60c08201525b9b9a5050505050505050505050565b7fe8d23d927749ec8e512eb885679c2977d57068839d8cca1a85685dbbea0648f681565b60005460ff1690565b6104e161184b565b61020885858585610a59565b606061024982610b4f565b61050061182c565b815184511461053b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f906120ea565b6000825111610576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f90612223565b61057e611889565b606060005b845181101561062a5784818151811061059857fe5b60200260200101519150818051906020012088146105e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f90612158565b6106088782815181106105f157fe5b602002602001015161060284610bf9565b90610c6d565b925060018551038110156106225761061f83610e29565b97505b600101610583565b50600061063b600361060285610f46565b9050600061065161064c8389610c6d565b610fd2565b905061065b61182c565b61066c6106678361107e565b610e29565b815261067f61066760006106028561107e565b60208201526106956106908361107e565b61112e565b60408201529998505050505050505050565b6020810151606090600160ff821614156107c1576000806000806000806000898060200190518101906106da9190611f08565b9750975097509750975097509750506000815111156107b957815160009015610704575060148201515b803b806107b65760008260405160200161071e9190612029565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815260208381018352600080855292519194509192610774928f928f928f928f928f928f928b9201612409565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529c5061024c9b505050505050505050505050565b50505b505050505050505b5090919050565b7f000000000000000000000000000000000000000000000000000000000000000061ffff16836020015161ffff161461082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f906121c6565b825160608401516040517fa466222200000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263a4662222926108a99291906004016123d1565b60c06040518083038186803b1580156108c157600080fd5b505afa1580156108d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f99190611cf8565b60a081015185516040517febfa08e900000000000000000000000000000000000000000000000000000000815292935060009273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169263ebfa08e99261097892899060040161207a565b604080518083038186803b15801561098f57600080fd5b505afa1580156109a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c79190611a4b565b905082816020015114610a06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f90612121565b816020015167ffffffffffffffff1681600001511015610a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030f9061225a565b5050505050565b610a6161184b565b602085015160608601516068870151858801607c01519190610a816118a3565b610a8b818961125b565b50610a9b8160008c60888c611295565b506000610ab389610aad86601c61136f565b9061136f565b9050610abd6118a3565b610ac7818361125b565b50610ae360008d610ad98d609c6113e6565b8492919086611295565b506040805160e08101825261ffff808e16825298909816602089015267ffffffffffffffff909416938701939093525073ffffffffffffffffffffffffffffffffffffffff9093166060850152915160808401525060a082018490525160c08201529050949350505050565b606060008083806020019051810190610b689190611cb3565b9150915060008083511115610b7e575060148201515b73ffffffffffffffffffffffffffffffffffffffff8116610bf05760405161dead90600090610bb1908390602001612029565b60405160208183030381529060405290508084604051602001610bd59291906120c8565b6040516020818303038152906040529550505050505061024c565b50929392505050565b610c01611889565b602082018051835160009190911a908015801590610c22575060c060ff8316105b15610c5157600192909201917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b6040805180820190915290815260208101929092525092915050565b610c75611889565b610c7e83611461565b610cd3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125be6021913960400191505060405180910390fd5b610cdc8361149b565b8210610d4957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f524c50206974656d206f7574206f6620626f756e647300000000000000000000604482015290519081900360640190fd5b8251602084015190810190600090610d60906114f3565b60208601510190506000805b85811015610d8b57610d7d83611592565b928301929150600101610d6c565b50610d9582611592565b9050828183011115610e0857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f524c50206974656d206f766572666c6f77000000000000000000000000000000604482015290519081900360640190fd5b60405180604001604052808281526020018381525093505050505b92915050565b805160009015801590610e3e57508151602110155b610ea957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f524c504465636f64657220746f55696e7420696e76616c6964206c656e677468604482015290519081900360640190fd5b6000610eb883602001516114f3565b90508083600001511015610f17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806125966028913960400191505060405180910390fd5b825160208085015183018051928490039291831015610f3d57826020036101000a820491505b50949350505050565b610f4e611889565b6000610f5d83602001516114f3565b60208401518451908201805192935060009290921a91908015801590610f86575060c060ff8416105b15610fb557600191909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b604080518082019091529081526020810191909152949350505050565b610fda6118bd565b610fe382611461565b61104e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f524c504465636f646572206974657261746f72206973206e6f74206c69737400604482015290519081900360640190fd5b600061105d83602001516114f3565b60208085015160408051808201909152868152920190820152915050919050565b611086611889565b61108f82611667565b6110fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f524c504465636f646572206974657261746f7220686173206e6f206e65787400604482015290519081900360640190fd5b6020820151600061110a82611592565b80830160209586015260408051808201909152908152938401919091525090919050565b8051606090611188576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125df6021913960400191505060405180910390fd5b600061119783602001516114f3565b905080836000015110156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806125966028913960400191505060405180910390fd5b825181900360008167ffffffffffffffff8111801561121457600080fd5b506040519080825280601f01601f19166020018201604052801561123f576020820181803683370190505b5090506000816020019050610f3d84876020015101828561167c565b6112636118a3565b60208206156112785760208206602003820191505b506020828101829052604080518085526000815290920101905290565b61129d6118a3565b856020015182860111156112c7576112c7866112bf8860200151888601611703565b60020261171a565b6000808751805188602083010193508089870111156112e65788860182525b5050508484015b6020841061132a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090930192602091820191016112ed565b5181517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208690036101000a01908116901991909116179052508495945050505050565b6000828211156113e057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008282018381101561145a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b80516000906114725750600061024c565b6020820151805160001a9060c08210156114915760009250505061024c565b5060019392505050565b80516000906114ac5750600061024c565b6000806114bc84602001516114f3565b602085015185519181019250015b808210156114ea576114db82611592565b600190930192909101906114ca565b50909392505050565b8051600090811a608081101561150d57600091505061024c565b60b8811080611528575060c08110801590611528575060f881105b1561153757600191505061024c565b60c0811015611569577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a01905061024c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a01905061024c565b80516000908190811a60808110156115ad5760019150611660565b60b88110156115e0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181019150611660565b60c081101561160d5760b78103600185019450806020036101000a85510460018201810193505050611660565b60f8811015611640577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4181019150611660565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b80518051602091820151919092015191011190565b80611686576102c8565b5b602081106116c45782518252602092830192909101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001611687565b915181516020939093036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0180199091169216919091179052565b600081831115611714575081610e23565b50919050565b8151611726838361125b565b506117318382611737565b50505050565b61173f6118a3565b61145a838460000151518485516117546118a3565b825182111561176257600080fd5b8460200151828501111561178457611784856112bf8760200151878601611703565b6000808651805187602083010193508088870111156117a35787860182525b505050602084015b602084106117e857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090930192602091820191016117ab565b5181517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60208690036101000a019081169019919091161790525083949350505050565b6040805160608082018352600080835260208301529181019190915290565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820181905260a082019290925260c081019190915290565b604051806040016040528060008152602001600081525090565b604051806040016040528060608152602001600081525090565b60405180604001604052806118d0611889565b8152602001600081525090565b803561024c8161254a565b805161024c8161254a565b600082601f830112611903578081fd5b81356020611918611913836124c0565b61249c565b82815281810190858301855b8581101561194d5761193b898684358b01016119b4565b84529284019290840190600101611924565b5090979650505050505050565b600082601f83011261196a578081fd5b8135602061197a611913836124c0565b8281528181019085830183850287018401881015611996578586fd5b855b8581101561194d57813584529284019290840190600101611998565b600082601f8301126119c4578081fd5b81356119d2611913826124de565b8181528460208386010111156119e6578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112611a10578081fd5b8151611a1e611913826124de565b818152846020838601011115611a32578283fd5b611a4382602083016020870161251e565b949350505050565b600060408284031215611a5c578081fd5b6040516040810181811067ffffffffffffffff82111715611a7957fe5b604052825181526020928301519281019290925250919050565b600060c08284031215611aa4578081fd5b60405160c0810181811067ffffffffffffffff82111715611ac157fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b803561024c8161256f565b805161024c8161256f565b803561024c8161257f565b805161024c8161257f565b60008060008060808587031215611b47578384fd5b84359350602085013567ffffffffffffffff80821115611b65578485fd5b611b718883890161195a565b9450604087013593506060870135915080821115611b8d578283fd5b50611b9a878288016118f3565b91505092959194509250565b60008060008060608587031215611bbb578182fd5b84359350602085013567ffffffffffffffff80821115611bd9578384fd5b818701915087601f830112611bec578384fd5b813581811115611bfa578485fd5b886020828501011115611c0b578485fd5b95986020929092019750949560400135945092505050565b600060208284031215611c34578081fd5b813567ffffffffffffffff811115611c4a578182fd5b611a43848285016119b4565b60008060008060808587031215611c6b578182fd5b843567ffffffffffffffff811115611c81578283fd5b611c8d878288016119b4565b9450506020850135611c9e8161256f565b93969395505050506040820135916060013590565b60008060408385031215611cc5578182fd5b825167ffffffffffffffff811115611cdb578283fd5b611ce785828601611a00565b925050602083015190509250929050565b600060c08284031215611d09578081fd5b60405160c0810181811067ffffffffffffffff82111715611d2657fe5b6040528251611d348161256f565b81526020830151611d448161257f565b60208201526040830151611d578161254a565b6040820152611d6860608401611b11565b6060820152611d7960808401611b27565b6080820152611d8a60a084016118e8565b60a08201529392505050565b600080600060608486031215611daa578081fd5b833567ffffffffffffffff80821115611dc1578283fd5b9085019060e08288031215611dd4578283fd5b611dde60e061249c565b611de783611b06565b8152611df560208401611b06565b6020820152611e0660408401611b1c565b6040820152611e17606084016118dd565b6060820152608083013582811115611e2d578485fd5b611e39898286016119b4565b60808301525060a083013560a082015260c083013582811115611e5a578485fd5b611e66898286016119b4565b60c083015250976020870135975060409096013595945050505050565b600080600080600060a08688031215611e9a578283fd5b8535611ea58161256f565b945060208601359350604086013567ffffffffffffffff80821115611ec8578485fd5b611ed489838a016118f3565b94506060880135915080821115611ee9578283fd5b50611ef68882890161195a565b95989497509295608001359392505050565b6000806000806000806000806101c0898b031215611f24578586fd5b885160ff81168114611f34578687fd5b80985050602089015196506040890151955060608901519450611f5a8a60808b01611a4b565b9350611f698a60c08b01611a93565b925061018089015167ffffffffffffffff80821115611f86578384fd5b611f928c838d01611a00565b93506101a08b0151915080821115611fa8578283fd5b50611fb58b828c01611a00565b9150509295985092959890939650565b73ffffffffffffffffffffffffffffffffffffffff169052565b60008151808452611ff781602086016020860161251e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff93909316835261ffff919091166020830152604082015260600190565b90815260200190565b60006020825261145a6020830184611fdf565b6000604082526120db6040830185611fdf565b90508260208301529392505050565b6020808252601c908201527f50726f6f664c69623a20696e76616c69642070726f6f662073697a6500000000604082015260600190565b6020808252601e908201527f50726f6f664c69623a20696e76616c6964207265636569707420726f6f740000604082015260600190565b6020808252601a908201527f50726f6f664c69623a20696e76616c696420686173686c696e6b000000000000604082015260600190565b6020808252601f908201527f50726f6f664c69623a207061636b6574206e6f74207265636f676e697a656400604082015260600190565b60208082526026908201527f50726f6f664c69623a20696e76616c69642064657374696e6174696f6e20636860408201527f61696e2049440000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f50726f6f664c69623a2070726f6f662073697a65206d757374203e2030000000604082015260600190565b60208082526028908201527f50726f6f664c69623a206e6f7420656e6f75676820626c6f636b20636f6e666960408201527f726d6174696f6e73000000000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f50726f6f664c69623a20696e76616c696420616464726573732073697a650000604082015260600190565b60006020825261ffff8084511660208401528060208501511660408401525067ffffffffffffffff604084015116606083015260608301516123336080840182611fc5565b50608083015160e060a084015261234e610100840182611fdf565b905060a084015160c084015260c08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160e08501526102088282611fdf565b60006020825282516020830152602083015160408301526040830151606080840152611a436080840182611fdf565b61ffff91909116815260200190565b61ffff92909216825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60ff91909116815260200190565b60006101c060ff8b16835289602084015288604084015287606084015286516080840152602087015160a0840152855160c0840152602086015160e084015260408601516101008401526060860151610120840152608086015161014084015260a08601516101608401528061018084015261248781840186611fdf565b90508281036101a084015261049d8185611fdf565b60405181810167ffffffffffffffff811182821017156124b857fe5b604052919050565b600067ffffffffffffffff8211156124d457fe5b5060209081020190565b600067ffffffffffffffff8211156124f257fe5b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60005b83811015612539578181015183820152602001612521565b838111156117315750506000910152565b73ffffffffffffffffffffffffffffffffffffffff8116811461256c57600080fd5b50565b61ffff8116811461256c57600080fd5b67ffffffffffffffff8116811461256c57600080fdfe524c504465636f6465723a20696e76616c696420524c50206974656d206f66667365742073697a65524c504465636f646572206974657261746f72206973206e6f742061206c697374524c504465636f64657220746f427974657320696e76616c6964206c656e677468a2646970667358221220de367aaacca8ca6e5e6f0304b952713d201f340decdfa89305cdebe80e97d21664736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
