{
    "tests": {
        "readBool": {
            "true": {
                "in": [
                    "0x01"
                ],
                "out": [
                    true
                ]
            },
            "false": {
                "in": [
                    "0x00"
                ],
                "out": [
                    false
                ]
            },
            "something other than 0 or 1 (should revert)": {
                "in": [
                    "0x02"
                ],
                "revert": true
            },
            "input value > 1 length (should revert)": {
                "in": [
                    "0x0101"
                ],
                "revert": "Invalid RLP boolean value."
            }
        },
        "readAddress": {
            "valid address": {
                "in": [
                    "0x941212121212121212121212121212121212121212"
                ],
                "out": [
                    "0x1212121212121212121212121212121212121212"
                ]
            },
            "address length = 1": {
                "in": [
                    "0x12"
                ],
                "out": [
                    "0x0000000000000000000000000000000000000000"
                ]
            },
            "invalid address length > 21 (should revert)": {
                "in": [
                    "0x94121212121212121212121212121212121212121212121212"
                ],
                "revert": "Invalid RLP address length."
            },
            "invalid address length < 21 (should revert)": {
                "in": [
                    "0x94121212121212121212121212"
                ],
                "revert": "Invalid RLP address length."
            }
        },
        "readBytes": {
            "bytestring00": {
                "in": [
                    "0x00"
                ],
                "out": [
                    "0x00"
                ]
            },
            "bytestring01": {
                "in": [
                    "0x01"
                ],
                "out": [
                    "0x01"
                ]
            },
            "bytestring7F": {
                "in": [
                    "0x7f"
                ],
                "out": [
                    "0x7f"
                ]
            },
            "should revert if input is a list item": {
                "in": [
                    "0xc7c0c1c0c3c0c1c0"
                ],
                "revert": "Invalid RLP bytes value."
            },
            "invalid bytes value, 0xb7 < prefix < 0xbf (should revert)": {
                "in": [
                    "0xb9"
                ],
                "revert": "Invalid RLP long string length."
            },
            "invalid bytes value, prefix > 0xf7 (should revert)": {
                "in": [
                    "0xff"
                ],
                "revert": "Invalid RLP long list length."
            }
        },
        "readBytes32": {
            "should revert if input is a list item": {
                "in": [
                    "0xc7c0c1c0c3c0c1c0"
                ],
                "revert": "Invalid RLP bytes32 value."
            },
            "invalid length > 33 (should revert)": {
                "in": [
                    "0x11110000000000000000000000000000000000000000000000000000000000000000"
                ],
                "revert": "Invalid RLP bytes32 length."
            }
        },
        "readString": {
            "emptystring": {
                "in": [
                    "0x80"
                ],
                "out": [
                    ""
                ]
            },
            "shortstring": {
                "in": [
                    "0x83646f67"
                ],
                "out": [
                    "dog"
                ]
            },
            "shortstring2": {
                "in": [
                    "0xb74c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e7365637465747572206164697069736963696e6720656c69"
                ],
                "out": [
                    "Lorem ipsum dolor sit amet, consectetur adipisicing eli"
                ]
            },
            "longstring": {
                "in": [
                    "0xb8384c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e7365637465747572206164697069736963696e6720656c6974"
                ],
                "out": [
                    "Lorem ipsum dolor sit amet, consectetur adipisicing elit"
                ]
            },
            "longstring2": {
                "in": [
                    "0xb904004c6f72656d20697073756d20646f6c6f722073697420616d65742c20636f6e73656374657475722061646970697363696e6720656c69742e20437572616269747572206d6175726973206d61676e612c20737573636970697420736564207665686963756c61206e6f6e2c20696163756c697320666175636962757320746f72746f722e2050726f696e20737573636970697420756c74726963696573206d616c6573756164612e204475697320746f72746f7220656c69742c2064696374756d2071756973207472697374697175652065752c20756c7472696365732061742072697375732e204d6f72626920612065737420696d70657264696574206d6920756c6c616d636f7270657220616c6971756574207375736369706974206e6563206c6f72656d2e2041656e65616e2071756973206c656f206d6f6c6c69732c2076756c70757461746520656c6974207661726975732c20636f6e73657175617420656e696d2e204e756c6c6120756c74726963657320747572706973206a7573746f2c20657420706f73756572652075726e6120636f6e7365637465747572206e65632e2050726f696e206e6f6e20636f6e76616c6c6973206d657475732e20446f6e65632074656d706f7220697073756d20696e206d617572697320636f6e67756520736f6c6c696369747564696e2e20566573746962756c756d20616e746520697073756d207072696d697320696e206661756369627573206f726369206c756374757320657420756c74726963657320706f737565726520637562696c69612043757261653b2053757370656e646973736520636f6e76616c6c69732073656d2076656c206d617373612066617563696275732c2065676574206c6163696e6961206c616375732074656d706f722e204e756c6c61207175697320756c747269636965732070757275732e2050726f696e20617563746f722072686f6e637573206e69626820636f6e64696d656e74756d206d6f6c6c69732e20416c697175616d20636f6e73657175617420656e696d206174206d65747573206c75637475732c206120656c656966656e6420707572757320656765737461732e20437572616269747572206174206e696268206d657475732e204e616d20626962656e64756d2c206e6571756520617420617563746f72207472697374697175652c206c6f72656d206c696265726f20616c697175657420617263752c206e6f6e20696e74657264756d2074656c6c7573206c65637475732073697420616d65742065726f732e20437261732072686f6e6375732c206d65747573206163206f726e617265206375727375732c20646f6c6f72206a7573746f20756c747269636573206d657475732c20617420756c6c616d636f7270657220766f6c7574706174"
                ],
                "out": [
                    "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur mauris magna, suscipit sed vehicula non, iaculis faucibus tortor. Proin suscipit ultricies malesuada. Duis tortor elit, dictum quis tristique eu, ultrices at risus. Morbi a est imperdiet mi ullamcorper aliquet suscipit nec lorem. Aenean quis leo mollis, vulputate elit varius, consequat enim. Nulla ultrices turpis justo, et posuere urna consectetur nec. Proin non convallis metus. Donec tempor ipsum in mauris congue sollicitudin. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse convallis sem vel massa faucibus, eget lacinia lacus tempor. Nulla quis ultricies purus. Proin auctor rhoncus nibh condimentum mollis. Aliquam consequat enim at metus luctus, a eleifend purus egestas. Curabitur at nibh metus. Nam bibendum, neque at auctor tristique, lorem libero aliquet arcu, non interdum tellus lectus sit amet eros. Cras rhoncus, metus ac ornare cursus, dolor justo ultrices metus, at ullamcorper volutpat"
                ]
            }
        },
        "readUint256": {
            "zero": {
                "in": [
                    "0x80"
                ],
                "out": [
                    0
                ]
            },
            "smallint": {
                "in": [
                    "0x01"
                ],
                "out": [
                    1
                ]
            },
            "smallint2": {
                "in": [
                    "0x10"
                ],
                "out": [
                    16
                ]
            },
            "smallint3": {
                "in": [
                    "0x4f"
                ],
                "out": [
                    79
                ]
            },
            "smallint4": {
                "in": [
                    "0x7f"
                ],
                "out": [
                    127
                ]
            },
            "mediumint1": {
                "in": [
                    "0x8180"
                ],
                "out": [
                    128
                ]
            },
            "mediumint2": {
                "in": [
                    "0x8203e8"
                ],
                "out": [
                    1000
                ]
            },
            "mediumint3": {
                "in": [
                    "0x830186a0"
                ],
                "out": [
                    100000
                ]
            }
        },
        "readList": {
            "emptylist": {
                "in": [
                    "0xc0"
                ],
                "out": [
                    []
                ]
            },
            "stringlist": {
                "in": [
                    "0xcc83646f6783676f6483636174"
                ],
                "out": [
                    [
                        "0x83646f67",
                        "0x83676f64",
                        "0x83636174"
                    ]
                ]
            },
            "multilist": {
                "in": [
                    "0xc6827a77c10401"
                ],
                "out": [
                    [
                        "0x827a77",
                        "0xc104",
                        "0x01"
                    ]
                ]
            },
            "shortListMax1": {
                "in": [
                    "0xf784617364668471776572847a78637684617364668471776572847a78637684617364668471776572847a78637684617364668471776572"
                ],
                "out": [
                    [
                        "0x8461736466",
                        "0x8471776572",
                        "0x847a786376",
                        "0x8461736466",
                        "0x8471776572",
                        "0x847a786376",
                        "0x8461736466",
                        "0x8471776572",
                        "0x847a786376",
                        "0x8461736466",
                        "0x8471776572"
                    ]
                ]
            },
            "longList1": {
                "in": [
                    "0xf840cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376"
                ],
                "out": [
                    [
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376"
                    ]
                ]
            },
            "longList2": {
                "in": [
                    "0xf90200cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376cf84617364668471776572847a786376"
                ],
                "out": [
                    [
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376",
                        "0xcf84617364668471776572847a786376"
                    ]
                ]
            },
            "listsoflists": {
                "in": [
                    "0xc4c2c0c0c0"
                ],
                "out": [
                    [
                        "0xc2c0c0",
                        "0xc0"
                    ]
                ]
            },
            "listsoflists2": {
                "in": [
                    "0xc7c0c1c0c3c0c1c0"
                ],
                "out": [
                    [
                        "0xc0",
                        "0xc1c0",
                        "0xc3c0c1c0"
                    ]
                ]
            },
            "dictTest1": {
                "in": [
                    "0xecca846b6579318476616c31ca846b6579328476616c32ca846b6579338476616c33ca846b6579348476616c34"
                ],
                "out": [
                    [
                        "0xca846b6579318476616c31",
                        "0xca846b6579328476616c32",
                        "0xca846b6579338476616c33",
                        "0xca846b6579348476616c34"
                    ]
                ]
            },
            "invalid rlp: not enough bytes for string length": {
                "in": ["0xefdebd"],
                "revert":"Invalid RLP short list."
            },
            "invalid rlp: expected string length to be greater than 55": {
                "in": ["0xefb83600"],
                "revert":"Invalid RLP short list."
            },
            "invalid rlp: not enough bytes for string": {
                "in": ["0xefdebdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
                "revert":"Invalid RLP long list length."
            },
            "int32Overflow": {
                "in": ["0xbf0f000000000000021111"],
                "revert": "Invalid RLP long string."
            },
            "int32Overflow2": {
                "in": ["0xff0f000000000000021111"],
                "revert": "Invalid RLP long list."
            }, 
            "incorrectLengthInArray": {
                "in": ["0xb9002100dc2b275d0f74e8a53e6f4ec61b27f24278820be3f82ea2110e582081b0565df0"],
                "revert": "Invalid RLP list value."
            },
            "leadingZerosInLongLengthArray1": {
                "in": ["0xb90040000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"],
                "revert": "Invalid RLP list value."
            },
            "leadingZerosInLongLengthArray2": {
                "in": ["0xb800"],
                "revert": "Invalid RLP list value."
            },
            "leadingZerosInLongLengthList1": {
                "in": ["0xfb00000040000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"],
                "revert": "Provided RLP list exceeds max list length."
            },
            "nonOptimalLongLengthArray1": {
                "in": ["0xb81000112233445566778899aabbccddeeff"],
                "revert": "Invalid RLP list value."
            },
            "nonOptimalLongLengthArray2": {
                "in": ["0xb801ff"],
                "revert": "Invalid RLP list value."
            },
            "invalid list value, 0x7f < prefix < 0xb7 (should revert)": {
                "in": [
                    "0x91"
                ],
                "revert": "Invalid RLP short string."
            }
        }
    }
}
