{
  "_format": "hh-sol-artifact-1",
  "contractName": "TestLib_BytesUtils",
  "sourceName": "contracts/test-libraries/utils/TestLib_BytesUtils.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_preBytes",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_postBytes",
          "type": "bytes"
        }
      ],
      "name": "concat",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_bytes",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_other",
          "type": "bytes"
        }
      ],
      "name": "equal",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_bytes",
          "type": "bytes"
        }
      ],
      "name": "fromNibbles",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_bytes",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "slice",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_bytes",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "sliceWithTaintedMemory",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_bytes",
          "type": "bytes"
        }
      ],
      "name": "toBytes32",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_bytes",
          "type": "bytes"
        }
      ],
      "name": "toNibbles",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_bytes",
          "type": "bytes"
        }
      ],
      "name": "toUint256",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506111f1806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063c6fa7f7a1161005b578063c6fa7f7a14610109578063cf89ee171461011c578063e00413961461012f578063efa739761461014257600080fd5b8063235266d21461008d57806347f53431146100b55780635f3376f3146100d6578063bd37c8aa146100f6575b600080fd5b6100a061009b3660046107bd565b610155565b60405190151581526020015b60405180910390f35b6100c86100c3366004610821565b610179565b6040519081526020016100ac565b6100e96100e43660046107bd565b61018a565b6040516100ac9190610886565b6100c8610104366004610821565b6101b6565b6100e9610117366004610821565b6101c1565b6100e961012a3660046108b9565b6101cc565b6100e961013d3660046108b9565b61020b565b6100e9610150366004610821565b610218565b600061017283838051602091820120825192909101919091201490565b9392505050565b600061018482610223565b92915050565b6060828260405160200161019f929190610907565b604051602081830303815290604052905092915050565b600061018482610179565b60606101848261024b565b60606040516101da906106f4565b604051809103906000f0801580156101f6573d6000803e3d6000fd5b50506102038484846103ce565b949350505050565b60606102038484846103ce565b6060610184826105a2565b600060208251101561023757506020015190565b818060200190518101906101849190610936565b606060008251600261025d919061097e565b67ffffffffffffffff81111561027557610275610701565b6040519080825280601f01601f19166020018201604052801561029f576020820181803683370190505b50905060005b83518110156103c75760048482815181106102c2576102c26109bb565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826102f783600261097e565b81518110610307576103076109bb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061034a5761034a6109bb565b016020015161035c919060f81c610a19565b60f81b8261036b83600261097e565b610376906001610a3b565b81518110610386576103866109bb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806103bf81610a53565b9150506102a5565b5092915050565b6060816103dc81601f610a3b565b1015610449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064015b60405180910390fd5b826104548382610a3b565b10156104bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610440565b6104c68284610a3b565b84511015610530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610440565b60608215801561054f5760405191506000825260208201604052610599565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610588578051835260209283019201610570565b5050858452601f01601f1916604052505b50949350505050565b60606000600283516105b49190610a8b565b67ffffffffffffffff8111156105cc576105cc610701565b6040519080825280601f01601f1916602001820160405280156105f6576020820181803683370190505b50905060005b81518110156103c7578361061182600261097e565b61061c906001610a3b565b8151811061062c5761062c6109bb565b01602001517fff000000000000000000000000000000000000000000000000000000000000001660048561066184600261097e565b81518110610671576106716109bb565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901b178282815181106106b3576106b36109bb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806106ec81610a53565b9150506105fc565b61071c80610aa083390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261074157600080fd5b813567ffffffffffffffff8082111561075c5761075c610701565b604051601f8301601f19908116603f0116810190828211818310171561078457610784610701565b8160405283815286602085880101111561079d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156107d057600080fd5b823567ffffffffffffffff808211156107e857600080fd5b6107f486838701610730565b9350602085013591508082111561080a57600080fd5b5061081785828601610730565b9150509250929050565b60006020828403121561083357600080fd5b813567ffffffffffffffff81111561084a57600080fd5b61020384828501610730565b60005b83811015610871578181015183820152602001610859565b83811115610880576000848401525b50505050565b60208152600082518060208401526108a5816040850160208701610856565b601f01601f19169190910160400192915050565b6000806000606084860312156108ce57600080fd5b833567ffffffffffffffff8111156108e557600080fd5b6108f186828701610730565b9660208601359650604090950135949350505050565b60008351610919818460208801610856565b83519083019061092d818360208801610856565b01949350505050565b60006020828403121561094857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156109b6576109b661094f565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff831680610a2c57610a2c6109ea565b8060ff84160691505092915050565b60008219821115610a4e57610a4e61094f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a8457610a8461094f565b5060010190565b600082610a9a57610a9a6109ea565b50049056fe608060405234801561001057600080fd5b506106fc806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b41146101b1578063a9059cbb146101ed578063dd62ed3e1461020057600080fd5b806340c10f191461017c57806370a082311461019157600080fd5b806318160ddd116100a757806318160ddd1461013857806323b872dd1461014f578063313ce5671461016257600080fd5b806306fdde03146100c3578063095ea7b314610115575b600080fd5b6100ff6040518060400160405280600481526020017f546573740000000000000000000000000000000000000000000000000000000081525081565b60405161010c9190610511565b60405180910390f35b6101286101233660046105ad565b61022b565b604051901515815260200161010c565b61014160005481565b60405190815260200161010c565b61012861015d3660046105d7565b610241565b61016a601281565b60405160ff909116815260200161010c565b61018f61018a3660046105ad565b61031b565b005b61014161019f366004610613565b60016020526000908152604090205481565b6100ff6040518060400160405280600381526020017f545354000000000000000000000000000000000000000000000000000000000081525081565b6101286101fb3660046105ad565b6103c6565b61014161020e366004610635565b600260209081526000928352604080842090915290825290205481565b60006102383384846103d3565b50600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146103065773ffffffffffffffffffffffffffffffffffffffff841660009081526002602090815260408083203384529091529020546102d4908390610697565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610311848484610442565b5060019392505050565b8060005461032991906106ae565b600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602052604090205461035c9082906106ae565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103ba9085815260200190565b60405180910390a35050565b6000610238338484610442565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054610473908290610697565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602052604080822093909355908416815220546104b09082906106ae565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104359085815260200190565b600060208083528351808285015260005b8181101561053e57858101830151858201604001528201610522565b81811115610550576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105a857600080fd5b919050565b600080604083850312156105c057600080fd5b6105c983610584565b946020939093013593505050565b6000806000606084860312156105ec57600080fd5b6105f584610584565b925061060360208501610584565b9150604084013590509250925092565b60006020828403121561062557600080fd5b61062e82610584565b9392505050565b6000806040838503121561064857600080fd5b61065183610584565b915061065f60208401610584565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156106a9576106a9610668565b500390565b600082198211156106c1576106c1610668565b50019056fea26469706673582212207a1f707b02a468c7d6ee167006bef894f4d7f95db5673fc0ca44671bc63c4c8f64736f6c634300080f0033a2646970667358221220c5a348a7eb8c511975a91014b2ce4b5949cf754466281955260e4dd295f58c8f64736f6c634300080f0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063c6fa7f7a1161005b578063c6fa7f7a14610109578063cf89ee171461011c578063e00413961461012f578063efa739761461014257600080fd5b8063235266d21461008d57806347f53431146100b55780635f3376f3146100d6578063bd37c8aa146100f6575b600080fd5b6100a061009b3660046107bd565b610155565b60405190151581526020015b60405180910390f35b6100c86100c3366004610821565b610179565b6040519081526020016100ac565b6100e96100e43660046107bd565b61018a565b6040516100ac9190610886565b6100c8610104366004610821565b6101b6565b6100e9610117366004610821565b6101c1565b6100e961012a3660046108b9565b6101cc565b6100e961013d3660046108b9565b61020b565b6100e9610150366004610821565b610218565b600061017283838051602091820120825192909101919091201490565b9392505050565b600061018482610223565b92915050565b6060828260405160200161019f929190610907565b604051602081830303815290604052905092915050565b600061018482610179565b60606101848261024b565b60606040516101da906106f4565b604051809103906000f0801580156101f6573d6000803e3d6000fd5b50506102038484846103ce565b949350505050565b60606102038484846103ce565b6060610184826105a2565b600060208251101561023757506020015190565b818060200190518101906101849190610936565b606060008251600261025d919061097e565b67ffffffffffffffff81111561027557610275610701565b6040519080825280601f01601f19166020018201604052801561029f576020820181803683370190505b50905060005b83518110156103c75760048482815181106102c2576102c26109bb565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c826102f783600261097e565b81518110610307576103076109bb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350601084828151811061034a5761034a6109bb565b016020015161035c919060f81c610a19565b60f81b8261036b83600261097e565b610376906001610a3b565b81518110610386576103866109bb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806103bf81610a53565b9150506102a5565b5092915050565b6060816103dc81601f610a3b565b1015610449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064015b60405180910390fd5b826104548382610a3b565b10156104bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610440565b6104c68284610a3b565b84511015610530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610440565b60608215801561054f5760405191506000825260208201604052610599565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015610588578051835260209283019201610570565b5050858452601f01601f1916604052505b50949350505050565b60606000600283516105b49190610a8b565b67ffffffffffffffff8111156105cc576105cc610701565b6040519080825280601f01601f1916602001820160405280156105f6576020820181803683370190505b50905060005b81518110156103c7578361061182600261097e565b61061c906001610a3b565b8151811061062c5761062c6109bb565b01602001517fff000000000000000000000000000000000000000000000000000000000000001660048561066184600261097e565b81518110610671576106716109bb565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901b178282815181106106b3576106b36109bb565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806106ec81610a53565b9150506105fc565b61071c80610aa083390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261074157600080fd5b813567ffffffffffffffff8082111561075c5761075c610701565b604051601f8301601f19908116603f0116810190828211818310171561078457610784610701565b8160405283815286602085880101111561079d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156107d057600080fd5b823567ffffffffffffffff808211156107e857600080fd5b6107f486838701610730565b9350602085013591508082111561080a57600080fd5b5061081785828601610730565b9150509250929050565b60006020828403121561083357600080fd5b813567ffffffffffffffff81111561084a57600080fd5b61020384828501610730565b60005b83811015610871578181015183820152602001610859565b83811115610880576000848401525b50505050565b60208152600082518060208401526108a5816040850160208701610856565b601f01601f19169190910160400192915050565b6000806000606084860312156108ce57600080fd5b833567ffffffffffffffff8111156108e557600080fd5b6108f186828701610730565b9660208601359650604090950135949350505050565b60008351610919818460208801610856565b83519083019061092d818360208801610856565b01949350505050565b60006020828403121561094857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156109b6576109b661094f565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff831680610a2c57610a2c6109ea565b8060ff84160691505092915050565b60008219821115610a4e57610a4e61094f565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a8457610a8461094f565b5060010190565b600082610a9a57610a9a6109ea565b50049056fe608060405234801561001057600080fd5b506106fc806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b41146101b1578063a9059cbb146101ed578063dd62ed3e1461020057600080fd5b806340c10f191461017c57806370a082311461019157600080fd5b806318160ddd116100a757806318160ddd1461013857806323b872dd1461014f578063313ce5671461016257600080fd5b806306fdde03146100c3578063095ea7b314610115575b600080fd5b6100ff6040518060400160405280600481526020017f546573740000000000000000000000000000000000000000000000000000000081525081565b60405161010c9190610511565b60405180910390f35b6101286101233660046105ad565b61022b565b604051901515815260200161010c565b61014160005481565b60405190815260200161010c565b61012861015d3660046105d7565b610241565b61016a601281565b60405160ff909116815260200161010c565b61018f61018a3660046105ad565b61031b565b005b61014161019f366004610613565b60016020526000908152604090205481565b6100ff6040518060400160405280600381526020017f545354000000000000000000000000000000000000000000000000000000000081525081565b6101286101fb3660046105ad565b6103c6565b61014161020e366004610635565b600260209081526000928352604080842090915290825290205481565b60006102383384846103d3565b50600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146103065773ffffffffffffffffffffffffffffffffffffffff841660009081526002602090815260408083203384529091529020546102d4908390610697565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610311848484610442565b5060019392505050565b8060005461032991906106ae565b600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602052604090205461035c9082906106ae565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103ba9085815260200190565b60405180910390a35050565b6000610238338484610442565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054610473908290610697565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526001602052604080822093909355908416815220546104b09082906106ae565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906104359085815260200190565b600060208083528351808285015260005b8181101561053e57858101830151858201604001528201610522565b81811115610550576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146105a857600080fd5b919050565b600080604083850312156105c057600080fd5b6105c983610584565b946020939093013593505050565b6000806000606084860312156105ec57600080fd5b6105f584610584565b925061060360208501610584565b9150604084013590509250925092565b60006020828403121561062557600080fd5b61062e82610584565b9392505050565b6000806040838503121561064857600080fd5b61065183610584565b915061065f60208401610584565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156106a9576106a9610668565b500390565b600082198211156106c1576106c1610668565b50019056fea26469706673582212207a1f707b02a468c7d6ee167006bef894f4d7f95db5673fc0ca44671bc63c4c8f64736f6c634300080f0033a2646970667358221220c5a348a7eb8c511975a91014b2ce4b5949cf754466281955260e4dd295f58c8f64736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
