{
  "_format": "hh-sol-artifact-1",
  "contractName": "Bytes_Test",
  "sourceName": "contracts/test/Bytes.t.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "log_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "log_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "log_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "name": "log_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "val",
          "type": "address"
        }
      ],
      "name": "log_named_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "val",
          "type": "bytes"
        }
      ],
      "name": "log_named_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "val",
          "type": "bytes32"
        }
      ],
      "name": "log_named_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        }
      ],
      "name": "log_named_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "val",
          "type": "string"
        }
      ],
      "name": "log_named_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        }
      ],
      "name": "log_named_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "log_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "logs",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "IS_TEST",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_a",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_b",
          "type": "bytes"
        }
      ],
      "name": "testDiff_equal_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_input",
          "type": "bytes"
        }
      ],
      "name": "testDiff_toNibbles_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_a",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_b",
          "type": "bytes"
        }
      ],
      "name": "testFuzz_equal_notEqual_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_input",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "testFuzz_slice_lengthOverflows_reverts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_input",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "testFuzz_slice_outOfBounds_reverts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_input",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "testFuzz_slice_rangeOverflows_reverts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_slice_acrossMultipleWords_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_slice_acrossWords_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_slice_fromNonZeroIdx_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_slice_fromZeroIdx_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_toNibbles_expectedResult128Bytes_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_toNibbles_expectedResult5Bytes_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_toNibbles_zeroLengthInput_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526000805460ff1916600117905534801561001d57600080fd5b5061219f8061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806386bec17e11610097578063e621eb3511610066578063e621eb35146101aa578063fa7626d4146101b2578063fab357a3146101bf578063fc89e485146101c757600080fd5b806386bec17e14610160578063a331479314610173578063b673e2581461017b578063ba414fa61461018e57600080fd5b8063440f3c40116100d3578063440f3c401461012a57806349034c2a14610132578063539c209e1461013a57806357c028101461014d57600080fd5b806310d46130146100fa5780631bcbcfe01461010f57806323631e8314610117575b600080fd5b61010d610108366004611ace565b6101cf565b005b61010d61038e565b61010d610125366004611ace565b6106d7565b61010d610758565b61010d610a0f565b61010d610148366004611b1c565b610a63565b61010d61015b366004611b59565b610a7d565b61010d61016e366004611ace565b610aa5565b61010d610c26565b61010d610189366004611b59565b610c81565b610196610d33565b604051901515815260200160405180910390f35b61010d610e93565b6000546101969060ff1681565b61010d610ec0565b61010d610f5a565b82516040517f4c63e5620000000000000000000000000000000000000000000000000000000081529082106004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e5629060240160006040518083038186803b15801561023657600080fd5b505afa15801561024a573d6000803e3d6000fd5b50737109709ecfa91a80626ff3989d68f67f5b1dd12d9250634c63e56291506102959050837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611bec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815290851160048201526024015b60006040518083038186803b1580156102e557600080fd5b505afa1580156102f9573d6000803e3d6000fd5b50506040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb3915061034b90600401611c03565b600060405180830381600087803b15801561036557600080fd5b505af1158015610379573d6000803e3d6000fd5b50505050610388838383610fa2565b50505050565b60408051808201909152600a81527f112233445566778899000000000000000000000000000000000000000000000060208201526103e66103d182600080610fa2565b604051806020016040528060008152506110f3565b6104316103f68260006001610fa2565b6040518060400160405280600181526020017f11000000000000000000000000000000000000000000000000000000000000008152506110f3565b61047c6104418260006002610fa2565b6040518060400160405280600281526020017f11220000000000000000000000000000000000000000000000000000000000008152506110f3565b6104c761048c8260006003610fa2565b6040518060400160405280600381526020017f11223300000000000000000000000000000000000000000000000000000000008152506110f3565b6105126104d78260006004610fa2565b6040518060400160405280600481526020017f11223344000000000000000000000000000000000000000000000000000000008152506110f3565b61055d6105228260006005610fa2565b6040518060400160405280600581526020017f11223344550000000000000000000000000000000000000000000000000000008152506110f3565b6105a861056d8260006006610fa2565b6040518060400160405280600681526020017f11223344556600000000000000000000000000000000000000000000000000008152506110f3565b6105f36105b88260006007610fa2565b6040518060400160405280600781526020017f11223344556677000000000000000000000000000000000000000000000000008152506110f3565b61063e6106038260006008610fa2565b6040518060400160405280600881526020017f11223344556677880000000000000000000000000000000000000000000000008152506110f3565b61068961064e8260006009610fa2565b6040518060400160405280600981526020017f11223344556677889900000000000000000000000000000000000000000000008152506110f3565b6106d4610699826000600a610fa2565b6040518060400160405280600a81526020017f11223344556677889900000000000000000000000000000000000000000000008152506110f3565b50565b737109709ecfa91a80626ff3989d68f67f5b1dd12d634c63e56261071c601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611bec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815290841160048201526024016102cd565b60408051808201909152600a81527f112233445566778899000000000000000000000000000000000000000000000060208201526107b861079c8260096001610fa2565b60405180604001604052806001815260200160008152506110f3565b6108036107c88260086002610fa2565b6040518060400160405280600281526020017f99000000000000000000000000000000000000000000000000000000000000008152506110f3565b61084e6108138260076003610fa2565b6040518060400160405280600381526020017f88990000000000000000000000000000000000000000000000000000000000008152506110f3565b61089961085e8260066004610fa2565b6040518060400160405280600481526020017f77889900000000000000000000000000000000000000000000000000000000008152506110f3565b6108e36108a882600580610fa2565b6040518060400160405280600581526020017f66778899000000000000000000000000000000000000000000000000000000008152506110f3565b61092e6108f38260046006610fa2565b6040518060400160405280600681526020017f55667788990000000000000000000000000000000000000000000000000000008152506110f3565b61097961093e8260036007610fa2565b6040518060400160405280600781526020017f44556677889900000000000000000000000000000000000000000000000000008152506110f3565b6109c46109898260026008610fa2565b6040518060400160405280600881526020017f33445566778899000000000000000000000000000000000000000000000000008152506110f3565b6106d46109d48260016009610fa2565b6040518060400160405280600981526020017f22334455667788990000000000000000000000000000000000000000000000008152506110f3565b60006040518060800160405280606081526020016121336060913990506000604051806060016040528060228152602001611f51602291399050610a5f610a5983601f6022610fa2565b826110f3565b5050565b6106d4610a6f826110fd565b610a7883611298565b6110f3565b610a5f610a8a838361132d565b82518451602080860183902090870182902014911416611349565b8251737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e5629084108015610afa5750610af7601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611bec565b83105b6040518263ffffffff1660e01b8152600401610b1a911515815260200190565b60006040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b50508451737109709ecfa91a80626ff3989d68f67f5b1dd12d9250634c63e5629150610b728486611c40565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681529110600482015260240160006040518083038186803b158015610bc057600080fd5b505afa158015610bd4573d6000803e3d6000fd5b50506040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb3915061034b90600401611c58565b6040805160208082018352600080835283519182019093528281529091610c4c836110fd565b9050610c5a83516000611543565b610c6682516000611543565b610c7281516000611543565b610c7c81836110f3565b505050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d634c63e562610cbb848480518251602092830182902092909301839020921491141690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529015600482015260240160006040518083038186803b158015610d0957600080fd5b505afa158015610d1d573d6000803e3d6000fd5b50505050610a5f610d2e838361132d565b61163d565b60008054610100900460ff1615610d535750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610e8e5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610df8917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611cc1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610e3091611d09565b6000604051808303816000865af19150503d8060008114610e6d576040519150601f19603f3d011682016040523d82523d6000602084013e610e72565b606091505b5091505080806020019051810190610e8a9190611d25565b9150505b919050565b6000604051806060016040528060408152602001611f736040913990506106d461044182601f6002610fa2565b604080518082018252600581527f12345678900000000000000000000000000000000000000000000000000000006020808301919091528251808401909352600a83527f010203040506070809000000000000000000000000000000000000000000000090830152906000610f34836110fd565b9050610f4e83516002610f479190611d4e565b8251611543565b610c7282518251611543565b60006040518060a00160405280608081526020016120b360809139905060006040518061012001604052806101008152602001611fb3610100913990506000610f34836110fd565b60608182601f011015610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190611c03565b60405180910390fd5b828284011015611026576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190611c03565b81830184511015611063576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190611c58565b60608215801561108257604051915060008252602082016040526110ea565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156110bb5780518352602092830192016110a3565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b610a5f8282611647565b8051606090600061110f826002611d4e565b67ffffffffffffffff811115611127576111276119f4565b6040519080825280601f01601f191660200182016040528015611151576020820181803683370190505b5090506000805b8381101561128e5785818151811061117257611172611d8b565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff000000000000000000000000000000000000000000000000000000000000016836111ce836002611d4e565b815181106111de576111de611d8b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f0000000000000000000000000000000000000000000000000000000000000082168361123c836002611d4e565b611247906001611c40565b8151811061125757611257611d8b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101611158565b5090949350505050565b6060600060018351901b67ffffffffffffffff8111156112ba576112ba6119f4565b6040519080825280601f01601f1916602001820160405280156112e4576020820181803683370190505b5090508251602084016020830160005b83811015611322578060011b82018184015160001a8060041c8253600f8116600183015350506001016112f4565b509295945050505050565b6000818051906020012083805190602001201490505b92915050565b80151582151514610a5f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516113d99060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b626f6f60408201527f6c5d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381611442576040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250611479565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b6040516114869190611e04565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583826114ef576040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250611526565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b6040516115339190611e53565b60405180910390a1610a5f611748565b808214610a5f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516115cf9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8816040516116069190611e90565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516115339190611edb565b6106d481156118c4565b6116518282611938565b610a5f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516116da9060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18816040516117119190611e04565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18826040516115339190611e53565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118965760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526118179291602001611cc1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261184f91611d09565b6000604051808303816000865af19150503d806000811461188c576040519150601f19603f3d011682016040523d82523d6000602084013e611891565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b806106d4577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516119289060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16106d4611748565b8051825160019190036119eb5760005b83518110156119e55782818151811061196357611963611d8b565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181106119a2576119a2611d8b565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146119d357600091505b806119dd81611f18565b915050611948565b50611343565b50600092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112611a3457600080fd5b813567ffffffffffffffff80821115611a4f57611a4f6119f4565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611a9557611a956119f4565b81604052838152866020858801011115611aae57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215611ae357600080fd5b833567ffffffffffffffff811115611afa57600080fd5b611b0686828701611a23565b9660208601359650604090950135949350505050565b600060208284031215611b2e57600080fd5b813567ffffffffffffffff811115611b4557600080fd5b611b5184828501611a23565b949350505050565b60008060408385031215611b6c57600080fd5b823567ffffffffffffffff80821115611b8457600080fd5b611b9086838701611a23565b93506020850135915080821115611ba657600080fd5b50611bb385828601611a23565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611bfe57611bfe611bbd565b500390565b60208152600061134360208301600e81527f736c6963655f6f766572666c6f77000000000000000000000000000000000000602082015260400190565b60008219821115611c5357611c53611bbd565b500190565b60208152600061134360208301601181527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000602082015260400190565b60005b83811015611cb0578181015183820152602001611c98565b838111156103885750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611cfb816004850160208701611c95565b919091016004019392505050565b60008251611d1b818460208701611c95565b9190910192915050565b600060208284031215611d3757600080fd5b81518015158114611d4757600080fd5b9392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d8657611d86611bbd565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151808452611dd2816020860160208601611c95565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081526000611e4160408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b8281036020840152611b518185611dba565b604081526000611e4160408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b604081526000611ecd60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b604081526000611ecd60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f4957611f49611bbd565b506001019056fe1122ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11000000000000000000000000000000000000000000000000000000000000001122000000000000000000000000000000000000000000000000000000000000000000000100020003000400050006000700080009000a000b000c000d000e000f0100010101020103010401050106010701080109010a010b010c010d010e010f0200020102020203020402050206020702080209020a020b020c020d020e020f0300030103020303030403050306030703080309030a030b030c030d030e030f0400040104020403040404050406040704080409040a040b040c040d040e040f0500050105020503050405050506050705080509050a050b050c050d050e050f0600060106020603060406050606060706080609060a060b060c060d060e060f0700070107020703070407050706070707080709070a070b070c070d070e070f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f000000000000000000000000000000000000000000000000000000000000001122ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1100000000000000000000000000000000000000000000000000000000000000a164736f6c634300080f000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806386bec17e11610097578063e621eb3511610066578063e621eb35146101aa578063fa7626d4146101b2578063fab357a3146101bf578063fc89e485146101c757600080fd5b806386bec17e14610160578063a331479314610173578063b673e2581461017b578063ba414fa61461018e57600080fd5b8063440f3c40116100d3578063440f3c401461012a57806349034c2a14610132578063539c209e1461013a57806357c028101461014d57600080fd5b806310d46130146100fa5780631bcbcfe01461010f57806323631e8314610117575b600080fd5b61010d610108366004611ace565b6101cf565b005b61010d61038e565b61010d610125366004611ace565b6106d7565b61010d610758565b61010d610a0f565b61010d610148366004611b1c565b610a63565b61010d61015b366004611b59565b610a7d565b61010d61016e366004611ace565b610aa5565b61010d610c26565b61010d610189366004611b59565b610c81565b610196610d33565b604051901515815260200160405180910390f35b61010d610e93565b6000546101969060ff1681565b61010d610ec0565b61010d610f5a565b82516040517f4c63e5620000000000000000000000000000000000000000000000000000000081529082106004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e5629060240160006040518083038186803b15801561023657600080fd5b505afa15801561024a573d6000803e3d6000fd5b50737109709ecfa91a80626ff3989d68f67f5b1dd12d9250634c63e56291506102959050837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611bec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815290851160048201526024015b60006040518083038186803b1580156102e557600080fd5b505afa1580156102f9573d6000803e3d6000fd5b50506040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb3915061034b90600401611c03565b600060405180830381600087803b15801561036557600080fd5b505af1158015610379573d6000803e3d6000fd5b50505050610388838383610fa2565b50505050565b60408051808201909152600a81527f112233445566778899000000000000000000000000000000000000000000000060208201526103e66103d182600080610fa2565b604051806020016040528060008152506110f3565b6104316103f68260006001610fa2565b6040518060400160405280600181526020017f11000000000000000000000000000000000000000000000000000000000000008152506110f3565b61047c6104418260006002610fa2565b6040518060400160405280600281526020017f11220000000000000000000000000000000000000000000000000000000000008152506110f3565b6104c761048c8260006003610fa2565b6040518060400160405280600381526020017f11223300000000000000000000000000000000000000000000000000000000008152506110f3565b6105126104d78260006004610fa2565b6040518060400160405280600481526020017f11223344000000000000000000000000000000000000000000000000000000008152506110f3565b61055d6105228260006005610fa2565b6040518060400160405280600581526020017f11223344550000000000000000000000000000000000000000000000000000008152506110f3565b6105a861056d8260006006610fa2565b6040518060400160405280600681526020017f11223344556600000000000000000000000000000000000000000000000000008152506110f3565b6105f36105b88260006007610fa2565b6040518060400160405280600781526020017f11223344556677000000000000000000000000000000000000000000000000008152506110f3565b61063e6106038260006008610fa2565b6040518060400160405280600881526020017f11223344556677880000000000000000000000000000000000000000000000008152506110f3565b61068961064e8260006009610fa2565b6040518060400160405280600981526020017f11223344556677889900000000000000000000000000000000000000000000008152506110f3565b6106d4610699826000600a610fa2565b6040518060400160405280600a81526020017f11223344556677889900000000000000000000000000000000000000000000008152506110f3565b50565b737109709ecfa91a80626ff3989d68f67f5b1dd12d634c63e56261071c601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611bec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815290841160048201526024016102cd565b60408051808201909152600a81527f112233445566778899000000000000000000000000000000000000000000000060208201526107b861079c8260096001610fa2565b60405180604001604052806001815260200160008152506110f3565b6108036107c88260086002610fa2565b6040518060400160405280600281526020017f99000000000000000000000000000000000000000000000000000000000000008152506110f3565b61084e6108138260076003610fa2565b6040518060400160405280600381526020017f88990000000000000000000000000000000000000000000000000000000000008152506110f3565b61089961085e8260066004610fa2565b6040518060400160405280600481526020017f77889900000000000000000000000000000000000000000000000000000000008152506110f3565b6108e36108a882600580610fa2565b6040518060400160405280600581526020017f66778899000000000000000000000000000000000000000000000000000000008152506110f3565b61092e6108f38260046006610fa2565b6040518060400160405280600681526020017f55667788990000000000000000000000000000000000000000000000000000008152506110f3565b61097961093e8260036007610fa2565b6040518060400160405280600781526020017f44556677889900000000000000000000000000000000000000000000000000008152506110f3565b6109c46109898260026008610fa2565b6040518060400160405280600881526020017f33445566778899000000000000000000000000000000000000000000000000008152506110f3565b6106d46109d48260016009610fa2565b6040518060400160405280600981526020017f22334455667788990000000000000000000000000000000000000000000000008152506110f3565b60006040518060800160405280606081526020016121336060913990506000604051806060016040528060228152602001611f51602291399050610a5f610a5983601f6022610fa2565b826110f3565b5050565b6106d4610a6f826110fd565b610a7883611298565b6110f3565b610a5f610a8a838361132d565b82518451602080860183902090870182902014911416611349565b8251737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e5629084108015610afa5750610af7601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611bec565b83105b6040518263ffffffff1660e01b8152600401610b1a911515815260200190565b60006040518083038186803b158015610b3257600080fd5b505afa158015610b46573d6000803e3d6000fd5b50508451737109709ecfa91a80626ff3989d68f67f5b1dd12d9250634c63e5629150610b728486611c40565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681529110600482015260240160006040518083038186803b158015610bc057600080fd5b505afa158015610bd4573d6000803e3d6000fd5b50506040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb3915061034b90600401611c58565b6040805160208082018352600080835283519182019093528281529091610c4c836110fd565b9050610c5a83516000611543565b610c6682516000611543565b610c7281516000611543565b610c7c81836110f3565b505050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d634c63e562610cbb848480518251602092830182902092909301839020921491141690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681529015600482015260240160006040518083038186803b158015610d0957600080fd5b505afa158015610d1d573d6000803e3d6000fd5b50505050610a5f610d2e838361132d565b61163d565b60008054610100900460ff1615610d535750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610e8e5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610df8917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611cc1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610e3091611d09565b6000604051808303816000865af19150503d8060008114610e6d576040519150601f19603f3d011682016040523d82523d6000602084013e610e72565b606091505b5091505080806020019051810190610e8a9190611d25565b9150505b919050565b6000604051806060016040528060408152602001611f736040913990506106d461044182601f6002610fa2565b604080518082018252600581527f12345678900000000000000000000000000000000000000000000000000000006020808301919091528251808401909352600a83527f010203040506070809000000000000000000000000000000000000000000000090830152906000610f34836110fd565b9050610f4e83516002610f479190611d4e565b8251611543565b610c7282518251611543565b60006040518060a00160405280608081526020016120b360809139905060006040518061012001604052806101008152602001611fb3610100913990506000610f34836110fd565b60608182601f011015610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190611c03565b60405180910390fd5b828284011015611026576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190611c03565b81830184511015611063576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe190611c58565b60608215801561108257604051915060008252602082016040526110ea565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156110bb5780518352602092830192016110a3565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b610a5f8282611647565b8051606090600061110f826002611d4e565b67ffffffffffffffff811115611127576111276119f4565b6040519080825280601f01601f191660200182016040528015611151576020820181803683370190505b5090506000805b8381101561128e5785818151811061117257611172611d8b565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff000000000000000000000000000000000000000000000000000000000000016836111ce836002611d4e565b815181106111de576111de611d8b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f0000000000000000000000000000000000000000000000000000000000000082168361123c836002611d4e565b611247906001611c40565b8151811061125757611257611d8b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101611158565b5090949350505050565b6060600060018351901b67ffffffffffffffff8111156112ba576112ba6119f4565b6040519080825280601f01601f1916602001820160405280156112e4576020820181803683370190505b5090508251602084016020830160005b83811015611322578060011b82018184015160001a8060041c8253600f8116600183015350506001016112f4565b509295945050505050565b6000818051906020012083805190602001201490505b92915050565b80151582151514610a5f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516113d99060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b626f6f60408201527f6c5d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381611442576040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250611479565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b6040516114869190611e04565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583826114ef576040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250611526565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b6040516115339190611e53565b60405180910390a1610a5f611748565b808214610a5f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516115cf9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8816040516116069190611e90565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516115339190611edb565b6106d481156118c4565b6116518282611938565b610a5f577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516116da9060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18816040516117119190611e04565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf18826040516115339190611e53565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118965760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526118179291602001611cc1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261184f91611d09565b6000604051808303816000865af19150503d806000811461188c576040519150601f19603f3d011682016040523d82523d6000602084013e611891565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b806106d4577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516119289060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a16106d4611748565b8051825160019190036119eb5760005b83518110156119e55782818151811061196357611963611d8b565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168482815181106119a2576119a2611d8b565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146119d357600091505b806119dd81611f18565b915050611948565b50611343565b50600092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112611a3457600080fd5b813567ffffffffffffffff80821115611a4f57611a4f6119f4565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611a9557611a956119f4565b81604052838152866020858801011115611aae57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215611ae357600080fd5b833567ffffffffffffffff811115611afa57600080fd5b611b0686828701611a23565b9660208601359650604090950135949350505050565b600060208284031215611b2e57600080fd5b813567ffffffffffffffff811115611b4557600080fd5b611b5184828501611a23565b949350505050565b60008060408385031215611b6c57600080fd5b823567ffffffffffffffff80821115611b8457600080fd5b611b9086838701611a23565b93506020850135915080821115611ba657600080fd5b50611bb385828601611a23565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611bfe57611bfe611bbd565b500390565b60208152600061134360208301600e81527f736c6963655f6f766572666c6f77000000000000000000000000000000000000602082015260400190565b60008219821115611c5357611c53611bbd565b500190565b60208152600061134360208301601181527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000602082015260400190565b60005b83811015611cb0578181015183820152602001611c98565b838111156103885750506000910152565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251611cfb816004850160208701611c95565b919091016004019392505050565b60008251611d1b818460208701611c95565b9190910192915050565b600060208284031215611d3757600080fd5b81518015158114611d4757600080fd5b9392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d8657611d86611bbd565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151808452611dd2816020860160208601611c95565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081526000611e4160408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b8281036020840152611b518185611dba565b604081526000611e4160408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b604081526000611ecd60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b604081526000611ecd60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611f4957611f49611bbd565b506001019056fe1122ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11000000000000000000000000000000000000000000000000000000000000001122000000000000000000000000000000000000000000000000000000000000000000000100020003000400050006000700080009000a000b000c000d000e000f0100010101020103010401050106010701080109010a010b010c010d010e010f0200020102020203020402050206020702080209020a020b020c020d020e020f0300030103020303030403050306030703080309030a030b030c030d030e030f0400040104020403040404050406040704080409040a040b040c040d040e040f0500050105020503050405050506050705080509050a050b050c050d050e050f0600060106020603060406050606060706080609060a060b060c060d060e060f0700070107020703070407050706070707080709070a070b070c070d070e070f000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f000000000000000000000000000000000000000000000000000000000000001122ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1100000000000000000000000000000000000000000000000000000000000000a164736f6c634300080f000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
