{
  "contractName": "Utils",
  "abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "name": "N",
          "type": "bytes"
        },
        {
          "name": "E",
          "type": "bytes"
        },
        {
          "name": "S",
          "type": "bytes"
        }
      ],
      "name": "verify",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function",
      "signature": "0xc658da51"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "recoverSigner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function",
      "signature": "0x97aba7f9"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_sender",
          "type": "address"
        },
        {
          "name": "_player",
          "type": "address"
        },
        {
          "name": "_bankroller",
          "type": "address"
        },
        {
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "checkSigner",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function",
      "signature": "0x7190881e"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "signatureSplit",
      "outputs": [
        {
          "name": "r",
          "type": "bytes32"
        },
        {
          "name": "s",
          "type": "bytes32"
        },
        {
          "name": "v",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function",
      "signature": "0xefcd1cd9"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_users",
          "type": "address[2]"
        },
        {
          "name": "_hash",
          "type": "bytes32"
        },
        {
          "name": "v",
          "type": "uint8[2]"
        },
        {
          "name": "r",
          "type": "bytes32[2]"
        },
        {
          "name": "s",
          "type": "bytes32[2]"
        }
      ],
      "name": "checkDoubleSignature",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function",
      "signature": "0x38a6fcf0"
    }
  ],
  "bytecode": "0x610914610030600b82828239805160001a6073146000811461002057610022565bfe5b5030600052607381538281f30073000000000000000000000000000000000000000030146080604052600436106100835763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166338a6fcf081146100885780637190881e146100af57806397aba7f9146100e0578063c658da511461014d578063efcd1cd91461017c575b600080fd5b61009b6004604435606460a460e46101e9565b604080519115158252519081900360200190f35b61009b60048035600160a060020a039081169160248035831692604435169160643591608435908101910135610413565b60408051602060046024803582810135601f81018590048502860185019096528585526101319583359536956044949193909101919081908401838280828437509497506106179650505050505050565b60408051600160a060020a039092168252519081900360200190f35b61009b60048035906024803580820192908101359160443580820192908101359160643590810191013561069e565b6040805160206004803580820135601f81018490048402850184019095528484526101c89436949293602493928401919081908401838280828437509497506107749650505050505050565b60408051938452602084019290925260ff1682820152519081900360600190f35b6040805160008082526020808301808552889052863560ff16838501528535606084015284356080840152925190928835600160a060020a03169260019260a08083019392601f19830192908190039091019087865af1158015610251573d6000803e3d6000fd5b50505060206040510351600160a060020a03161480156102ef5750604080516000808252602082810180855289905260ff8882013516838501528681013560608401528581013560808401529251600160a060020a038a850135169360019360a0808201949293601f198101939281900390910191865af11580156102da573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b806103f957506040805160008082526020828101808552899052873560ff16838501528635606084015285356080840152925189840135600160a060020a03169360019360a0808201949293601f198101939281900390910191865af115801561035d573d6000803e3d6000fd5b50505060206040510351600160a060020a03161480156103f9575060408051600080825260208281018085528990528781013560ff168385015286810135606084015285810135608084015292518935600160a060020a03169360019360a0808201949293601f198101939281900390910191865af11580156103e4573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b156104065750600161040a565b5060005b95945050505050565b6000806104508585858080601f01602080910402602001604051908101604052809392919081815260200183838082843750610617945050505050565b905086600160a060020a031681600160a060020a03161480610483575085600160a060020a031681600160a060020a0316145b15156104f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03888116908216141561056b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c6964206d73672e73656e6465720000000000000000000000000000604482015290519081900360640190fd5b86600160a060020a031688600160a060020a0316148061059c575085600160a060020a031688600160a060020a0316145b151561060957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f73656e646572206973206e6f742061206d656d62657200000000000000000000604482015290519081900360640190fd5b506001979650505050505050565b60008060008061062685610774565b60408051600080825260208083018085528d905260ff8516838501526060830187905260808301869052925195985093965091945060019360a0808401949293601f19830193908390039091019190865af1158015610689573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6000806060600061074486868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505089898080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437506107aa945050505050565b909350915061075282610890565b905060018315151480156107655750808b145b9b9a5050505050505050505050565b60208101516040820151604183015160ff16601b81148061079857508060ff16601c145b15156107a357600080fd5b9193909250565b60006060600080600080606089519450885193508751925082848660600101019150816040519080825280601f01601f1916602001820160405280156107fa578160200160208202803883390190505b509050826040519080825280601f01601f19166020018201604052801561082b578160200160208202803883390190505b50955084602082015283604082015282606082015261084f8a600083606089610897565b610860896000838860600188610897565b6108738860008387896060010187610897565b8260208701836020840160055afa96505050505050935093915050565b8051015190565b93830160209081019492820101915b602081106108c5578451835260209485019490920191601f19016108a6565b6001816020036101000a03801986511681855116808217865250505050505050505600a165627a7a72305820f41a7f37085e2a4b512817a9e3acd6cec9356c316aa4d03d5827c1f20bbf16370029",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100835763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166338a6fcf081146100885780637190881e146100af57806397aba7f9146100e0578063c658da511461014d578063efcd1cd91461017c575b600080fd5b61009b6004604435606460a460e46101e9565b604080519115158252519081900360200190f35b61009b60048035600160a060020a039081169160248035831692604435169160643591608435908101910135610413565b60408051602060046024803582810135601f81018590048502860185019096528585526101319583359536956044949193909101919081908401838280828437509497506106179650505050505050565b60408051600160a060020a039092168252519081900360200190f35b61009b60048035906024803580820192908101359160443580820192908101359160643590810191013561069e565b6040805160206004803580820135601f81018490048402850184019095528484526101c89436949293602493928401919081908401838280828437509497506107749650505050505050565b60408051938452602084019290925260ff1682820152519081900360600190f35b6040805160008082526020808301808552889052863560ff16838501528535606084015284356080840152925190928835600160a060020a03169260019260a08083019392601f19830192908190039091019087865af1158015610251573d6000803e3d6000fd5b50505060206040510351600160a060020a03161480156102ef5750604080516000808252602082810180855289905260ff8882013516838501528681013560608401528581013560808401529251600160a060020a038a850135169360019360a0808201949293601f198101939281900390910191865af11580156102da573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b806103f957506040805160008082526020828101808552899052873560ff16838501528635606084015285356080840152925189840135600160a060020a03169360019360a0808201949293601f198101939281900390910191865af115801561035d573d6000803e3d6000fd5b50505060206040510351600160a060020a03161480156103f9575060408051600080825260208281018085528990528781013560ff168385015286810135606084015285810135608084015292518935600160a060020a03169360019360a0808201949293601f198101939281900390910191865af11580156103e4573d6000803e3d6000fd5b50505060206040510351600160a060020a0316145b156104065750600161040a565b5060005b95945050505050565b6000806104508585858080601f01602080910402602001604051908101604052809392919081815260200183838082843750610617945050505050565b905086600160a060020a031681600160a060020a03161480610483575085600160a060020a031681600160a060020a0316145b15156104f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c6964207369676e6174757265000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03888116908216141561056b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e76616c6964206d73672e73656e6465720000000000000000000000000000604482015290519081900360640190fd5b86600160a060020a031688600160a060020a0316148061059c575085600160a060020a031688600160a060020a0316145b151561060957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f73656e646572206973206e6f742061206d656d62657200000000000000000000604482015290519081900360640190fd5b506001979650505050505050565b60008060008061062685610774565b60408051600080825260208083018085528d905260ff8516838501526060830187905260808301869052925195985093965091945060019360a0808401949293601f19830193908390039091019190865af1158015610689573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6000806060600061074486868080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505089898080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050508c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437506107aa945050505050565b909350915061075282610890565b905060018315151480156107655750808b145b9b9a5050505050505050505050565b60208101516040820151604183015160ff16601b81148061079857508060ff16601c145b15156107a357600080fd5b9193909250565b60006060600080600080606089519450885193508751925082848660600101019150816040519080825280601f01601f1916602001820160405280156107fa578160200160208202803883390190505b509050826040519080825280601f01601f19166020018201604052801561082b578160200160208202803883390190505b50955084602082015283604082015282606082015261084f8a600083606089610897565b610860896000838860600188610897565b6108738860008387896060010187610897565b8260208701836020840160055afa96505050505050935093915050565b8051015190565b93830160209081019492820101915b602081106108c5578451835260209485019490920191601f19016108a6565b6001816020036101000a03801986511681855116808217865250505050505050505600a165627a7a72305820f41a7f37085e2a4b512817a9e3acd6cec9356c316aa4d03d5827c1f20bbf16370029",
  "sourceMap": "97:5331:12:-;;132:2:-1;166:7;155:9;146:7;137:37;252:7;246:14;243:1;238:23;232:4;229:33;270:1;265:20;;;;222:63;;265:20;274:9;222:63;;298:9;295:1;288:20;328:4;319:7;311:22;352:7;343;336:24",
  "deployedSourceMap": "97:5331:12:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2188:450;;;;;;;;;;;;;;;;;;;;;;;;;;;;1263:457;;;;;-1:-1:-1;;;;;1263:457:12;;;;;;;;;;;;;;;;;;;;;;;;;;;787:235;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;787:235:12;;-1:-1:-1;787:235:12;;-1:-1:-1;;;;;;;787:235:12;;;;;-1:-1:-1;;;;;787:235:12;;;;;;;;;;;;;;323:279;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1877:305;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1877:305:12;;-1:-1:-1;1877:305:12;;-1:-1:-1;;;;;;;1877:305:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2188:450;2348:34;;;2314:4;2348:34;;;2371:4;2348:34;;;;;;;;;2365:4;;;;2348:34;;;;2371:4;;2348:34;;;;2377:4;;2348:34;;;;;;2314:4;;2386:9;;-1:-1:-1;;;;;2386:9:12;;2348:34;;;;;;;2371:4;-1:-1:-1;;2348:34:12;;;;;;;;;;;2314:4;2348:34;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2348:34:12;;;;;;;;-1:-1:-1;;;;;2348:47:12;;:98;;;;-1:-1:-1;2399:34:12;;;2428:4;2399:34;;;2437:9;2399:34;;;;;;;;;2416:4;;;;;;2399:34;;;;2422:4;;;;2399:34;;;;2428:4;;;;2399:34;;;;;;-1:-1:-1;;;;;2437:9:12;;;;;;2444:1;;2399:34;;;;;2437:9;;-1:-1:-1;;2399:34:12;;;;;;;;;;;2444:1;2399:34;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2399:34:12;;;;;;;;-1:-1:-1;;;;;2399:47:12;;2348:98;2347:216;;;-1:-1:-1;2464:34:12;;;2483:1;2464:34;;;2502:9;2464:34;;;;;;;;;2481:4;;;;2464:34;;;;2487:4;;2464:34;;;;2493:4;;2464:34;;;;;;2502:9;;;;-1:-1:-1;;;;;2502:9:12;;2509:1;;2464:34;;;;;2502:9;;-1:-1:-1;;2464:34:12;;;;;;;;;;;2509:1;2464:34;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2464:34:12;;;;;;;;-1:-1:-1;;;;;2464:47:12;;:98;;;;-1:-1:-1;2515:34:12;;;2544:4;2515:34;;;2553:9;2515:34;;;;;;;;;2532:4;;;;;;2515:34;;;;2538:4;;;;2515:34;;;;2544:4;;;;2515:34;;;;;;2553:9;;-1:-1:-1;;;;;2553:9:12;;2515:34;;;;;;;2553:9;;-1:-1:-1;;2515:34:12;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2515:34:12;;;;;;;;-1:-1:-1;;;;;2515:47:12;;2464:98;2330:280;;;-1:-1:-1;2595:4:12;2588:11;;2330:280;-1:-1:-1;2626:5:12;2188:450;;;;;;;;:::o;1263:457::-;1394:4;1410:15;1428:32;1442:5;1449:10;;1428:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1428:13:12;;-1:-1:-1;;;;;1428:32:12:i;:::-;1410:50;;1489:7;-1:-1:-1;;;;;1478:18:12;:7;-1:-1:-1;;;;;1478:18:12;;:44;;;;1511:11;-1:-1:-1;;;;;1500:22:12;:7;-1:-1:-1;;;;;1500:22:12;;1478:44;1470:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1562:18:12;;;;;;;;1554:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1632:7;-1:-1:-1;;;;;1621:18:12;:7;-1:-1:-1;;;;;1621:18:12;;:44;;;;1654:11;-1:-1:-1;;;;;1643:22:12;:7;-1:-1:-1;;;;;1643:22:12;;1621:44;1613:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1709:4:12;;1263:457;-1:-1:-1;;;;;;;1263:457:12:o;787:235::-;862:7;881:9;900;919:7;948:25;963:9;948:14;:25::i;:::-;990;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;936:37;;-1:-1:-1;936:37:12;;-1:-1:-1;936:37:12;;-1:-1:-1;990:25:12;;;;;;;;;-1:-1:-1;;990:25:12;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;990:25:12;;-1:-1:-1;;990:25:12;;;787:235;-1:-1:-1;;;;;;;787:235:12:o;323:279::-;404:4;420:9;439:17;506:14;481:15;488:1;;481:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;491:1;;481:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;494:1;;481:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;481:6:12;;-1:-1:-1;;;;;481:15:12:i;:::-;466:30;;-1:-1:-1;466:30:12;-1:-1:-1;523:22:12;466:30;523:16;:22::i;:::-;506:39;-1:-1:-1;571:4:12;563:12;;;;:31;;;;-1:-1:-1;579:15:12;;;563:31;555:40;323:279;-1:-1:-1;;;;;;;;;;;323:279:12:o;1877:305::-;2028:2;2013:18;;2007:25;2071:2;2056:18;;2050:25;2118:2;2103:18;;2097:25;2124:4;2093:36;2161:2;2156:7;;;:18;;;2167:1;:7;;2172:2;2167:7;2156:18;2148:27;;;;;;;;1877:305;;;;;:::o;3909:1300::-;3991:12;4005;4029:16;4069:20;4117:19;4200:9;4279:18;4048:4;:11;4029:30;;4092:8;:15;4069:38;;4139:7;:14;4117:36;;4255:14;4237:15;4223:11;4213:6;4212:22;:40;:57;4200:69;;4310:4;4300:15;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;4300:15:12;;4279:36;;4384:14;4374:25;;;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;4374:25:12;;4365:34;;4552:11;4547:2;4540:5;4536:14;4529:35;4635:15;4630:2;4623:5;4619:14;4612:39;4687:14;4682:2;4675:5;4671:14;4664:38;4754:40;4762:4;4768:1;4771:5;4778:2;4782:11;4754:7;:40::i;:::-;4841:62;4849:8;4859:1;4862:5;4874:11;4869:2;:16;4887:15;4841:7;:62::i;:::-;4949:78;4957:7;4966:1;4969:5;4995:15;4981:11;4976:2;:16;:34;5012:14;4949:7;:78::i;:::-;5178:14;5173:2;5165:6;5161:15;5155:4;5150:2;5143:5;5139:14;5136:1;5129:5;5118:75;5107:86;;5093:110;;;;;;;;;;;:::o;5219:206::-;5323:15;;5387:21;5381:28;;5357:62::o;2835:1068::-;3012:28;;;3025:2;3012:28;;;;3060;;;;;3135:387;3202:2;3194:11;;3135:387;;3509:10;;3497:23;;3271:2;3338:12;;;;3262;;;;-1:-1:-1;;3409:12:12;3135:387;;;3620:1;3613:3;3609:2;3605:12;3600:3;3596:22;3592:30;3689:4;3685:9;3679:3;3673:10;3669:26;3764:4;3758:3;3752:10;3748:21;3837:7;3828;3825:20;3820:3;3813:33;2949:948;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.24;\n\n/**\n * @title Utils\n * @dev Library for operations with signatures\n */\nlibrary Utils {\n\n    /**\n    @notice Verify of RSA sign\n    @param _hash raw message\n    @param N N-component of RSA public keys\n    @param E E-component of RSA public keys\n    @param S Signature of the raw message\n    */\n    function verify(bytes32 _hash, bytes N, bytes E, bytes S) external view returns (bool) {\n        bool retS;\n        bytes memory valS;\n        (retS, valS) = modexp(S, E, N);\n        bytes32 valS32 = sliceLastBytes32(valS);\n        return (retS == true && valS32 == _hash);\n    }\n\n    /**\n    @notice Recover address from signature and hash\n    @param _hash Hash for signature\n    @param signature Signature hash\n    @return The subscriber hash address\n    */\n    function recoverSigner(bytes32 _hash, bytes signature) public pure returns(address) {\n        bytes32 r;\n        bytes32 s;\n        uint8 v;\n        (r, s, v) = signatureSplit(signature);\n        return ecrecover(_hash, v, r, s);\n    }\n\n    /**\n    @notice check signer\n    @param _sender msg.sender address\n    @param _player player address\n    @param _bankroller bankroller address\n    @param _hash message hash\n    @param _signature signature\n    @return result\n    */\n    function checkSigner(address _sender, address _player, address _bankroller, bytes32 _hash, bytes _signature) external pure returns(bool) {\n        address _signer = recoverSigner(_hash, _signature);\n        require(_signer == _player || _signer == _bankroller, 'invalid signature');\n        require(_sender != _signer, 'invalid msg.sender');\n        require(_sender == _player || _sender == _bankroller, 'sender is not a member');\n        return true;\n    }\n\n    /**\n     * @dev Splits signature to R, S and V parts\n     * @param signature interpretation of signature\n     * @return Parts of signature\n     */\n    function signatureSplit(bytes signature) public pure returns(bytes32 r, bytes32 s, uint8 v) {\n        assembly {\n            r := mload(add(signature, 32))\n            s := mload(add(signature, 64))\n            v := and(mload(add(signature, 65)), 0xff)\n        }\n        require(v == 27 || v == 28);\n    }\n\n    function checkDoubleSignature(address[2] _users, bytes32 _hash, uint8[2] v, bytes32[2] r, bytes32[2] s) external pure returns(bool) {\n        if (\n            (ecrecover(_hash, v[0], r[0], s[0]) == _users[0] && ecrecover(_hash, v[1], r[1], s[1]) == _users[1]) ||\n            (ecrecover(_hash, v[0], r[0], s[0]) == _users[1] && ecrecover(_hash, v[1], r[1], s[1]) == _users[0])\n        ) {\n            return true;\n        }\n        return false;\n    }\n\n    function checkSum(uint256[2] _a, uint256[2] _b) internal pure returns(bool) {\n        if(_a[0] + _a[1] == _b[0] + _b[1]) {\n            return true;\n        }\n        return false;\n    }\n\n    function memcopy(bytes src, uint srcoffset, bytes dst, uint dstoffset, uint len) pure internal {\n        assembly {\n        //begining of data in src and dst\n            src := add(src, add(32, srcoffset))\n            dst := add(dst, add(32, dstoffset))\n\n        // copy 32 bytes at once\n            for\n            {} //counter not needed\n            iszero(lt(len, 32)) //untill (len>32)\n            {\n                dst := add(dst, 32) //destination pointer shift to 32 bytes\n                src := add(src, 32) //source pointer shift to 32 bytes\n                len := sub(len, 32) //length of the remainder decrease to 32 bytes\n            }\n            { mstore(dst, mload(src)) }\n        // copy the remainder (0 < len < 32)\n            let mask := sub(exp(256, sub(32, len)), 1) //256^(32-len) - 1\n            let srcpart := and(mload(src), not(mask)) //select first len bytes\n            let dstpart := and(mload(dst), mask)  //set to zero first len bytes\n            mstore(dst, or(srcpart, dstpart))   //first len bits of source copy to dst\n        }\n    }\n\n    function modexp(bytes base, bytes exponent, bytes modulus) internal view returns (bool success, bytes output) {\n        uint base_length = base.length;\n        uint exponent_length = exponent.length;\n        uint modulus_length = modulus.length;\n\n        //Allocate memory for input\n        uint size = (32 * 3) + base_length + exponent_length + modulus_length;\n        bytes memory input = new bytes(size);\n\n        ////Allocate memory for output\n        output = new bytes(modulus_length);\n\n        //Push lengths on the stack\n        assembly {\n        //mstore(addr, src) - push src to addr on the stack\n            mstore(add(input, 32), base_length) //push base_length on the bytes[0]\n            mstore(add(input, 64), exponent_length)\n            mstore(add(input, 96), modulus_length)\n        }\n        //push base on the stack\n        memcopy(base, 0, input, 96, base_length);\n        //push exponent on the stack\n        memcopy(exponent, 0, input, 96 + base_length, exponent_length);\n        //push modulus on the stack\n        memcopy(modulus, 0, input, 96 + base_length + exponent_length, modulus_length);\n\n        //call bigModExp precompiled contract\n        assembly {\n            success := staticcall(gas(), 5, add(input, 32), size, add(output, 32), modulus_length)\n        }\n    }\n\n        function sliceLastBytes32(bytes bytesArr) internal pure returns(bytes32 result) {\n        uint length = bytesArr.length;\n        assembly {\n            result := mload(add(bytesArr, length))\n        }\n    }\n\n}",
  "sourcePath": "/Users/fanyshu/Documents/Projects/DCLabs/monorepo/packages/dc-sdk-example/dapp/contracts/library/Utils.sol",
  "ast": {
    "absolutePath": "/Users/fanyshu/Documents/Projects/DCLabs/monorepo/packages/dc-sdk-example/dapp/contracts/library/Utils.sol",
    "exportedSymbols": {
      "Utils": [
        2338
      ]
    },
    "id": 2339,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1929,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:12"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@title Utils\n@dev Library for operations with signatures",
        "fullyImplemented": true,
        "id": 2338,
        "linearizedBaseContracts": [
          2338
        ],
        "name": "Utils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1973,
              "nodeType": "Block",
              "src": "410:192:12",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1943,
                      "name": "retS",
                      "nodeType": "VariableDeclaration",
                      "scope": 1974,
                      "src": "420:9:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1942,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "420:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1944,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "420:9:12"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1946,
                      "name": "valS",
                      "nodeType": "VariableDeclaration",
                      "scope": 1974,
                      "src": "439:17:12",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1945,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "439:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1947,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "439:17:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1948,
                          "name": "retS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1943,
                          "src": "467:4:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1949,
                          "name": "valS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1946,
                          "src": "473:4:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "id": 1950,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "466:12:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1952,
                          "name": "S",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1937,
                          "src": "488:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1953,
                          "name": "E",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1935,
                          "src": "491:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1954,
                          "name": "N",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "494:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 1951,
                        "name": "modexp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2323,
                        "src": "481:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"
                        }
                      },
                      "id": 1955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "481:15:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "src": "466:30:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1957,
                  "nodeType": "ExpressionStatement",
                  "src": "466:30:12"
                },
                {
                  "assignments": [
                    1959
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1959,
                      "name": "valS32",
                      "nodeType": "VariableDeclaration",
                      "scope": 1974,
                      "src": "506:14:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1958,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "506:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1963,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1961,
                        "name": "valS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1946,
                        "src": "540:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1960,
                      "name": "sliceLastBytes32",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2337,
                      "src": "523:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "523:22:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "506:39:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1966,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1964,
                            "name": "retS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1943,
                            "src": "563:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 1965,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "571:4:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "563:12:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 1969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1967,
                            "name": "valS32",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1959,
                            "src": "579:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1968,
                            "name": "_hash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1931,
                            "src": "589:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "579:15:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "563:31:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 1971,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "562:33:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1941,
                  "id": 1972,
                  "nodeType": "Return",
                  "src": "555:40:12"
                }
              ]
            },
            "documentation": "@notice Verify of RSA sign\n@param _hash raw message\n@param N N-component of RSA public keys\n@param E E-component of RSA public keys\n@param S Signature of the raw message",
            "id": 1974,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "verify",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1931,
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "scope": 1974,
                  "src": "339:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1930,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "339:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1933,
                  "name": "N",
                  "nodeType": "VariableDeclaration",
                  "scope": 1974,
                  "src": "354:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1932,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "354:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1935,
                  "name": "E",
                  "nodeType": "VariableDeclaration",
                  "scope": 1974,
                  "src": "363:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1934,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "363:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1937,
                  "name": "S",
                  "nodeType": "VariableDeclaration",
                  "scope": 1974,
                  "src": "372:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1936,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "338:42:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 1941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1940,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1974,
                  "src": "404:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1939,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "404:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "403:6:12"
            },
            "scope": 2338,
            "src": "323:279:12",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2008,
              "nodeType": "Block",
              "src": "871:151:12",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1984,
                      "name": "r",
                      "nodeType": "VariableDeclaration",
                      "scope": 2009,
                      "src": "881:9:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1983,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "881:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1985,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "881:9:12"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1987,
                      "name": "s",
                      "nodeType": "VariableDeclaration",
                      "scope": 2009,
                      "src": "900:9:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1986,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "900:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1988,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "900:9:12"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1990,
                      "name": "v",
                      "nodeType": "VariableDeclaration",
                      "scope": 2009,
                      "src": "919:7:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 1989,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "919:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1991,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "919:7:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1992,
                          "name": "r",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1984,
                          "src": "937:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1993,
                          "name": "s",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1987,
                          "src": "940:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1994,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1990,
                          "src": "943:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "id": 1995,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "936:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$_t_uint8_$",
                        "typeString": "tuple(bytes32,bytes32,uint8)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1997,
                          "name": "signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1978,
                          "src": "963:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1996,
                        "name": "signatureSplit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2086,
                        "src": "948:14:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$_t_bytes32_$_t_uint8_$",
                          "typeString": "function (bytes memory) pure returns (bytes32,bytes32,uint8)"
                        }
                      },
                      "id": 1998,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "948:25:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$_t_uint8_$",
                        "typeString": "tuple(bytes32,bytes32,uint8)"
                      }
                    },
                    "src": "936:37:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2000,
                  "nodeType": "ExpressionStatement",
                  "src": "936:37:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2002,
                        "name": "_hash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1976,
                        "src": "1000:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2003,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1990,
                        "src": "1007:1:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2004,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1984,
                        "src": "1010:1:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2005,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1987,
                        "src": "1013:1:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 2001,
                      "name": "ecrecover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3269,
                      "src": "990:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 2006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "990:25:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1982,
                  "id": 2007,
                  "nodeType": "Return",
                  "src": "983:32:12"
                }
              ]
            },
            "documentation": "@notice Recover address from signature and hash\n@param _hash Hash for signature\n@param signature Signature hash\n@return The subscriber hash address",
            "id": 2009,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "recoverSigner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1976,
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "scope": 2009,
                  "src": "810:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1975,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "810:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1978,
                  "name": "signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 2009,
                  "src": "825:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1977,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "825:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "809:32:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 1982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1981,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2009,
                  "src": "862:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "862:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "861:9:12"
            },
            "scope": 2338,
            "src": "787:235:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2062,
              "nodeType": "Block",
              "src": "1400:320:12",
              "statements": [
                {
                  "assignments": [
                    2025
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2025,
                      "name": "_signer",
                      "nodeType": "VariableDeclaration",
                      "scope": 2063,
                      "src": "1410:15:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2024,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1410:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2030,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2027,
                        "name": "_hash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2017,
                        "src": "1442:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2028,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2019,
                        "src": "1449:10:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 2026,
                      "name": "recoverSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2009,
                      "src": "1428:13:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 2029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1428:32:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1410:50:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2034,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2032,
                            "name": "_signer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2025,
                            "src": "1478:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2033,
                            "name": "_player",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2013,
                            "src": "1489:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1478:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2037,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2035,
                            "name": "_signer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2025,
                            "src": "1500:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2036,
                            "name": "_bankroller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2015,
                            "src": "1511:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1500:22:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1478:44:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c6964207369676e6174757265",
                        "id": 2039,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1524:19:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_12a179e1a73f41ef8e1ba2f259a99bc53b6ace3abb110ac2ea058e42c6104e1a",
                          "typeString": "literal_string \"invalid signature\""
                        },
                        "value": "invalid signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_12a179e1a73f41ef8e1ba2f259a99bc53b6ace3abb110ac2ea058e42c6104e1a",
                          "typeString": "literal_string \"invalid signature\""
                        }
                      ],
                      "id": 2031,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3280,
                        3281
                      ],
                      "referencedDeclaration": 3281,
                      "src": "1470:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1470:74:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2041,
                  "nodeType": "ExpressionStatement",
                  "src": "1470:74:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2043,
                          "name": "_sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2011,
                          "src": "1562:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2044,
                          "name": "_signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2025,
                          "src": "1573:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1562:18:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c6964206d73672e73656e646572",
                        "id": 2046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1582:20:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_810795f7aac7fabc0f1e2de8716b36729c537ecf5c23a9dbab9303dd70225cdd",
                          "typeString": "literal_string \"invalid msg.sender\""
                        },
                        "value": "invalid msg.sender"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_810795f7aac7fabc0f1e2de8716b36729c537ecf5c23a9dbab9303dd70225cdd",
                          "typeString": "literal_string \"invalid msg.sender\""
                        }
                      ],
                      "id": 2042,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3280,
                        3281
                      ],
                      "referencedDeclaration": 3281,
                      "src": "1554:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1554:49:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2048,
                  "nodeType": "ExpressionStatement",
                  "src": "1554:49:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2052,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2050,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2011,
                            "src": "1621:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2051,
                            "name": "_player",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2013,
                            "src": "1632:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1621:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2053,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2011,
                            "src": "1643:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2054,
                            "name": "_bankroller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2015,
                            "src": "1654:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1643:22:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1621:44:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "73656e646572206973206e6f742061206d656d626572",
                        "id": 2057,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1667:24:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c045747c488158a10436e9546fc18287a6e52d3a0cd79c0d8b54322807fe739",
                          "typeString": "literal_string \"sender is not a member\""
                        },
                        "value": "sender is not a member"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5c045747c488158a10436e9546fc18287a6e52d3a0cd79c0d8b54322807fe739",
                          "typeString": "literal_string \"sender is not a member\""
                        }
                      ],
                      "id": 2049,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3280,
                        3281
                      ],
                      "referencedDeclaration": 3281,
                      "src": "1613:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1613:79:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2059,
                  "nodeType": "ExpressionStatement",
                  "src": "1613:79:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2060,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1709:4:12",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2023,
                  "id": 2061,
                  "nodeType": "Return",
                  "src": "1702:11:12"
                }
              ]
            },
            "documentation": "@notice check signer\n@param _sender msg.sender address\n@param _player player address\n@param _bankroller bankroller address\n@param _hash message hash\n@param _signature signature\n@return result",
            "id": 2063,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkSigner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2020,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2011,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1284:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2010,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1284:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2013,
                  "name": "_player",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1301:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2012,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1301:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2015,
                  "name": "_bankroller",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1318:19:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2014,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1318:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2017,
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1339:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2016,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1339:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2019,
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1354:16:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2018,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1354:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1283:88:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2023,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2022,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1394:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2021,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1394:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1393:6:12"
            },
            "scope": 2338,
            "src": "1263:457:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2085,
              "nodeType": "Block",
              "src": "1969:213:12",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "r": {
                        "declaration": 2068,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2002:1:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "v": {
                        "declaration": 2072,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2088:1:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "s": {
                        "declaration": 2070,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2045:1:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "signature": {
                        "declaration": 2065,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2017:9:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "signature": {
                        "declaration": 2065,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2060:9:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "signature": {
                        "declaration": 2065,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2107:9:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2074,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    r := mload(add(signature, 32))\n    s := mload(add(signature, 64))\n    v := and(mload(add(signature, 65)), 0xff)\n}",
                  "src": "1979:176:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2082,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 2078,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2076,
                            "name": "v",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2072,
                            "src": "2156:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 2077,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2161:2:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          },
                          "src": "2156:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 2081,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2079,
                            "name": "v",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2072,
                            "src": "2167:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3238",
                            "id": 2080,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2172:2:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_28_by_1",
                              "typeString": "int_const 28"
                            },
                            "value": "28"
                          },
                          "src": "2167:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2156:18:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2075,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3280,
                        3281
                      ],
                      "referencedDeclaration": 3280,
                      "src": "2148:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2148:27:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2084,
                  "nodeType": "ExpressionStatement",
                  "src": "2148:27:12"
                }
              ]
            },
            "documentation": "@dev Splits signature to R, S and V parts\n@param signature interpretation of signature\n@return Parts of signature",
            "id": 2086,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "signatureSplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2066,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2065,
                  "name": "signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "1901:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2064,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1901:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1900:17:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2068,
                  "name": "r",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "1938:9:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2067,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1938:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2070,
                  "name": "s",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "1949:9:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2069,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1949:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2072,
                  "name": "v",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "1960:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 2071,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1960:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1937:31:12"
            },
            "scope": 2338,
            "src": "1877:305:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2184,
              "nodeType": "Block",
              "src": "2320:318:12",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2141,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2124,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2110,
                                  "name": "_hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2092,
                                  "src": "2358:5:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2111,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2096,
                                    "src": "2365:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint8_$2_calldata_ptr",
                                      "typeString": "uint8[2] calldata"
                                    }
                                  },
                                  "id": 2113,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2112,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2367:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2365:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2114,
                                    "name": "r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2100,
                                    "src": "2371:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2116,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2115,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2373:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2371:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2117,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2104,
                                    "src": "2377:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2119,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2118,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2379:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2377:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 2109,
                                "name": "ecrecover",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3269,
                                "src": "2348:9:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                  "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                }
                              },
                              "id": 2120,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2348:34:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2121,
                                "name": "_users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2090,
                                "src": "2386:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$2_calldata_ptr",
                                  "typeString": "address[2] calldata"
                                }
                              },
                              "id": 2123,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 2122,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2393:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2386:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "2348:47:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2140,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2126,
                                  "name": "_hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2092,
                                  "src": "2409:5:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2127,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2096,
                                    "src": "2416:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint8_$2_calldata_ptr",
                                      "typeString": "uint8[2] calldata"
                                    }
                                  },
                                  "id": 2129,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2128,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2418:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2416:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2130,
                                    "name": "r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2100,
                                    "src": "2422:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2132,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2131,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2424:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2422:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2133,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2104,
                                    "src": "2428:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2135,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2134,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2430:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2428:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 2125,
                                "name": "ecrecover",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3269,
                                "src": "2399:9:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                  "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                }
                              },
                              "id": 2136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2399:34:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2137,
                                "name": "_users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2090,
                                "src": "2437:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$2_calldata_ptr",
                                  "typeString": "address[2] calldata"
                                }
                              },
                              "id": 2139,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 2138,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2444:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2437:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "2399:47:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "2348:98:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 2142,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2347:100:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2158,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2144,
                                  "name": "_hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2092,
                                  "src": "2474:5:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2145,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2096,
                                    "src": "2481:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint8_$2_calldata_ptr",
                                      "typeString": "uint8[2] calldata"
                                    }
                                  },
                                  "id": 2147,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2146,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2483:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2481:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2148,
                                    "name": "r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2100,
                                    "src": "2487:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2150,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2149,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2489:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2487:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2151,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2104,
                                    "src": "2493:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2153,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2152,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2495:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2493:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 2143,
                                "name": "ecrecover",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3269,
                                "src": "2464:9:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                  "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                }
                              },
                              "id": 2154,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2464:34:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2155,
                                "name": "_users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2090,
                                "src": "2502:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$2_calldata_ptr",
                                  "typeString": "address[2] calldata"
                                }
                              },
                              "id": 2157,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 2156,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2509:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2502:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "2464:47:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2160,
                                  "name": "_hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2092,
                                  "src": "2525:5:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2161,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2096,
                                    "src": "2532:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint8_$2_calldata_ptr",
                                      "typeString": "uint8[2] calldata"
                                    }
                                  },
                                  "id": 2163,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2162,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2534:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2532:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2164,
                                    "name": "r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2100,
                                    "src": "2538:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2166,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2165,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2540:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2538:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2167,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2104,
                                    "src": "2544:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2169,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2168,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2546:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2544:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 2159,
                                "name": "ecrecover",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3269,
                                "src": "2515:9:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                  "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                }
                              },
                              "id": 2170,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2515:34:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2171,
                                "name": "_users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2090,
                                "src": "2553:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$2_calldata_ptr",
                                  "typeString": "address[2] calldata"
                                }
                              },
                              "id": 2173,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 2172,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2560:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2553:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "2515:47:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "2464:98:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 2176,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2463:100:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2347:216:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2181,
                  "nodeType": "IfStatement",
                  "src": "2330:280:12",
                  "trueBody": {
                    "id": 2180,
                    "nodeType": "Block",
                    "src": "2574:36:12",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 2178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2595:4:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 2108,
                        "id": 2179,
                        "nodeType": "Return",
                        "src": "2588:11:12"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 2182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2626:5:12",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 2108,
                  "id": 2183,
                  "nodeType": "Return",
                  "src": "2619:12:12"
                }
              ]
            },
            "documentation": null,
            "id": 2185,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkDoubleSignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2090,
                  "name": "_users",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2218:17:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$2_calldata_ptr",
                    "typeString": "address[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2087,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2218:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 2089,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2226:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2218:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$2_storage_ptr",
                      "typeString": "address[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2092,
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2237:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2091,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2237:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2096,
                  "name": "v",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2252:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint8_$2_calldata_ptr",
                    "typeString": "uint8[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2093,
                      "name": "uint8",
                      "nodeType": "ElementaryTypeName",
                      "src": "2252:5:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 2095,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2258:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2252:8:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint8_$2_storage_ptr",
                      "typeString": "uint8[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2100,
                  "name": "r",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2264:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                    "typeString": "bytes32[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2097,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2264:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 2099,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2098,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2272:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2264:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$2_storage_ptr",
                      "typeString": "bytes32[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2104,
                  "name": "s",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2278:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                    "typeString": "bytes32[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2101,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2278:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 2103,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2102,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2286:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2278:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$2_storage_ptr",
                      "typeString": "bytes32[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2217:74:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2107,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2314:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2106,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2314:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2313:6:12"
            },
            "scope": 2338,
            "src": "2188:450:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2219,
              "nodeType": "Block",
              "src": "2720:109:12",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2204,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2198,
                          "name": "_a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2189,
                          "src": "2733:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                            "typeString": "uint256[2] memory"
                          }
                        },
                        "id": 2200,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2736:1:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2733:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2201,
                          "name": "_a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2189,
                          "src": "2741:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                            "typeString": "uint256[2] memory"
                          }
                        },
                        "id": 2203,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 2202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2744:1:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2741:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2733:13:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2211,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2205,
                          "name": "_b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2193,
                          "src": "2750:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                            "typeString": "uint256[2] memory"
                          }
                        },
                        "id": 2207,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2753:1:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2750:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2208,
                          "name": "_b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2193,
                          "src": "2758:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                            "typeString": "uint256[2] memory"
                          }
                        },
                        "id": 2210,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 2209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2761:1:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2758:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2750:13:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2733:30:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2216,
                  "nodeType": "IfStatement",
                  "src": "2730:71:12",
                  "trueBody": {
                    "id": 2215,
                    "nodeType": "Block",
                    "src": "2765:36:12",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 2213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2786:4:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 2197,
                        "id": 2214,
                        "nodeType": "Return",
                        "src": "2779:11:12"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 2217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2817:5:12",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 2197,
                  "id": 2218,
                  "nodeType": "Return",
                  "src": "2810:12:12"
                }
              ]
            },
            "documentation": null,
            "id": 2220,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkSum",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2189,
                  "name": "_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 2220,
                  "src": "2662:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                    "typeString": "uint256[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2186,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2662:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2188,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2187,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2670:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2662:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$2_storage_ptr",
                      "typeString": "uint256[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2193,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 2220,
                  "src": "2677:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                    "typeString": "uint256[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2190,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2677:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2192,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2191,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2685:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2677:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$2_storage_ptr",
                      "typeString": "uint256[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2661:30:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2196,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2220,
                  "src": "2714:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2195,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2714:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2713:6:12"
            },
            "scope": 2338,
            "src": "2644:185:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2234,
              "nodeType": "Block",
              "src": "2930:973:12",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3005:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3255:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3064:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3016:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "srcoffset": {
                        "declaration": 2224,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3029:9:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3053:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dstoffset": {
                        "declaration": 2228,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3077:9:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2230,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3197:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3266:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3331:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2230,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3402:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3342:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3504:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3515:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2230,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3413:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3820:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3679:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3758:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2230,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3613:3:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2233,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    src := add(src, add(32, srcoffset))\n    dst := add(dst, add(32, dstoffset))\n    for {\n    }\n    iszero(lt(len, 32))\n    {\n        dst := add(dst, 32)\n        src := add(src, 32)\n        len := sub(len, 32)\n    }\n    {\n        mstore(dst, mload(src))\n    }\n    let mask := sub(exp(256, sub(32, len)), 1)\n    let srcpart := and(mload(src), not(mask))\n    let dstpart := and(mload(dst), mask)\n    mstore(dst, or(srcpart, dstpart))\n}",
                  "src": "2940:963:12"
                }
              ]
            },
            "documentation": null,
            "id": 2235,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "memcopy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2222,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 2235,
                  "src": "2852:9:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2221,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2852:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2224,
                  "name": "srcoffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2235,
                  "src": "2863:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2223,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2863:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2226,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 2235,
                  "src": "2879:9:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2225,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2879:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2228,
                  "name": "dstoffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2235,
                  "src": "2890:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2227,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2890:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2230,
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 2235,
                  "src": "2906:8:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2229,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2906:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2851:64:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2232,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2930:0:12"
            },
            "scope": 2338,
            "src": "2835:1068:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2322,
              "nodeType": "Block",
              "src": "4019:1190:12",
              "statements": [
                {
                  "assignments": [
                    2249
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2249,
                      "name": "base_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2323,
                      "src": "4029:16:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2248,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4029:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2252,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2250,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2237,
                      "src": "4048:4:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4048:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4029:30:12"
                },
                {
                  "assignments": [
                    2254
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2254,
                      "name": "exponent_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2323,
                      "src": "4069:20:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2253,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4069:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2257,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2255,
                      "name": "exponent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2239,
                      "src": "4092:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4092:15:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4069:38:12"
                },
                {
                  "assignments": [
                    2259
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2259,
                      "name": "modulus_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2323,
                      "src": "4117:19:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2258,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4117:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2262,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2260,
                      "name": "modulus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2241,
                      "src": "4139:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4139:14:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4117:36:12"
                },
                {
                  "assignments": [
                    2264
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2264,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 2323,
                      "src": "4200:9:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2263,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4200:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2275,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              },
                              "id": 2267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "hexValue": "3332",
                                "id": 2265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4213:2:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 2266,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4218:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "4213:6:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              }
                            }
                          ],
                          "id": 2268,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4212:8:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_96_by_1",
                            "typeString": "int_const 96"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2269,
                          "name": "base_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2249,
                          "src": "4223:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4212:22:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2271,
                        "name": "exponent_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2254,
                        "src": "4237:15:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4212:40:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2273,
                      "name": "modulus_length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2259,
                      "src": "4255:14:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4212:57:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4200:69:12"
                },
                {
                  "assignments": [
                    2277
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2277,
                      "name": "input",
                      "nodeType": "VariableDeclaration",
                      "scope": 2323,
                      "src": "4279:18:12",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2276,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4279:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2282,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2280,
                        "name": "size",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2264,
                        "src": "4310:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "4300:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 2278,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4304:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 2281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4300:15:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4279:36:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2283,
                      "name": "output",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2246,
                      "src": "4365:6:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2286,
                          "name": "modulus_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2259,
                          "src": "4384:14:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "4374:9:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                          "typeString": "function (uint256) pure returns (bytes memory)"
                        },
                        "typeName": {
                          "id": 2284,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4378:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        }
                      },
                      "id": 2287,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4374:25:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "4365:34:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2289,
                  "nodeType": "ExpressionStatement",
                  "src": "4365:34:12"
                },
                {
                  "externalReferences": [
                    {
                      "base_length": {
                        "declaration": 2249,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4552:11:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2277,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4540:5:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "exponent_length": {
                        "declaration": 2254,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4635:15:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2277,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4623:5:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "modulus_length": {
                        "declaration": 2259,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4687:14:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2277,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4675:5:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2290,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    mstore(add(input, 32), base_length)\n    mstore(add(input, 64), exponent_length)\n    mstore(add(input, 96), modulus_length)\n}",
                  "src": "4446:315:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2292,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2237,
                        "src": "4762:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2293,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4768:1:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2294,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2277,
                        "src": "4771:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "3936",
                        "id": 2295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4778:2:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_96_by_1",
                          "typeString": "int_const 96"
                        },
                        "value": "96"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2296,
                        "name": "base_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2249,
                        "src": "4782:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_96_by_1",
                          "typeString": "int_const 96"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2291,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2235,
                      "src": "4754:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4754:40:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2298,
                  "nodeType": "ExpressionStatement",
                  "src": "4754:40:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2300,
                        "name": "exponent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2239,
                        "src": "4849:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2301,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4859:1:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2302,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2277,
                        "src": "4862:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3936",
                          "id": 2303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4869:2:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_96_by_1",
                            "typeString": "int_const 96"
                          },
                          "value": "96"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2304,
                          "name": "base_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2249,
                          "src": "4874:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4869:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2306,
                        "name": "exponent_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2254,
                        "src": "4887:15:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2299,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2235,
                      "src": "4841:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4841:62:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2308,
                  "nodeType": "ExpressionStatement",
                  "src": "4841:62:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2310,
                        "name": "modulus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2241,
                        "src": "4957:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4966:1:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2312,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2277,
                        "src": "4969:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2317,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "3936",
                            "id": 2313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4976:2:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_96_by_1",
                              "typeString": "int_const 96"
                            },
                            "value": "96"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2314,
                            "name": "base_length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2249,
                            "src": "4981:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4976:16:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2316,
                          "name": "exponent_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2254,
                          "src": "4995:15:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4976:34:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2318,
                        "name": "modulus_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2259,
                        "src": "5012:14:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2309,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2235,
                      "src": "4949:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4949:78:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2320,
                  "nodeType": "ExpressionStatement",
                  "src": "4949:78:12"
                },
                {
                  "externalReferences": [
                    {
                      "input": {
                        "declaration": 2277,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5143:5:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "output": {
                        "declaration": 2246,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5165:6:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 2244,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5107:7:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "size": {
                        "declaration": 2264,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5155:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "modulus_length": {
                        "declaration": 2259,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5178:14:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2321,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    success := staticcall(gas(), 5, add(input, 32), size, add(output, 32), modulus_length)\n}",
                  "src": "5084:125:12"
                }
              ]
            },
            "documentation": null,
            "id": 2323,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "modexp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2237,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 2323,
                  "src": "3925:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2236,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3925:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2239,
                  "name": "exponent",
                  "nodeType": "VariableDeclaration",
                  "scope": 2323,
                  "src": "3937:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2238,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3937:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2241,
                  "name": "modulus",
                  "nodeType": "VariableDeclaration",
                  "scope": 2323,
                  "src": "3953:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2240,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3953:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3924:43:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2244,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 2323,
                  "src": "3991:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2243,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3991:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2246,
                  "name": "output",
                  "nodeType": "VariableDeclaration",
                  "scope": 2323,
                  "src": "4005:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2245,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4005:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3990:28:12"
            },
            "scope": 2338,
            "src": "3909:1300:12",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2336,
              "nodeType": "Block",
              "src": "5299:126:12",
              "statements": [
                {
                  "assignments": [
                    2331
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2331,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2337,
                      "src": "5309:11:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2330,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5309:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2334,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2332,
                      "name": "bytesArr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2325,
                      "src": "5323:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "5323:15:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5309:29:12"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 2328,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5371:6:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "bytesArr": {
                        "declaration": 2325,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5391:8:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "length": {
                        "declaration": 2331,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5401:6:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2335,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    result := mload(add(bytesArr, length))\n}",
                  "src": "5348:77:12"
                }
              ]
            },
            "documentation": null,
            "id": 2337,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "sliceLastBytes32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2326,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2325,
                  "name": "bytesArr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2337,
                  "src": "5245:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2324,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5245:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5244:16:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2328,
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 2337,
                  "src": "5283:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2327,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5283:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5282:16:12"
            },
            "scope": 2338,
            "src": "5219:206:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2339,
        "src": "97:5331:12"
      }
    ],
    "src": "0:5428:12"
  },
  "legacyAST": {
    "absolutePath": "/Users/fanyshu/Documents/Projects/DCLabs/monorepo/packages/dc-sdk-example/dapp/contracts/library/Utils.sol",
    "exportedSymbols": {
      "Utils": [
        2338
      ]
    },
    "id": 2339,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1929,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:12"
      },
      {
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": "@title Utils\n@dev Library for operations with signatures",
        "fullyImplemented": true,
        "id": 2338,
        "linearizedBaseContracts": [
          2338
        ],
        "name": "Utils",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 1973,
              "nodeType": "Block",
              "src": "410:192:12",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1943,
                      "name": "retS",
                      "nodeType": "VariableDeclaration",
                      "scope": 1974,
                      "src": "420:9:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1942,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "420:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1944,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "420:9:12"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1946,
                      "name": "valS",
                      "nodeType": "VariableDeclaration",
                      "scope": 1974,
                      "src": "439:17:12",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 1945,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "439:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1947,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "439:17:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1956,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1948,
                          "name": "retS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1943,
                          "src": "467:4:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1949,
                          "name": "valS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1946,
                          "src": "473:4:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "id": 1950,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "466:12:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1952,
                          "name": "S",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1937,
                          "src": "488:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1953,
                          "name": "E",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1935,
                          "src": "491:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1954,
                          "name": "N",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1933,
                          "src": "494:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          },
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "id": 1951,
                        "name": "modexp",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2323,
                        "src": "481:6:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory,bytes memory,bytes memory) view returns (bool,bytes memory)"
                        }
                      },
                      "id": 1955,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "481:15:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                        "typeString": "tuple(bool,bytes memory)"
                      }
                    },
                    "src": "466:30:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1957,
                  "nodeType": "ExpressionStatement",
                  "src": "466:30:12"
                },
                {
                  "assignments": [
                    1959
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1959,
                      "name": "valS32",
                      "nodeType": "VariableDeclaration",
                      "scope": 1974,
                      "src": "506:14:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1958,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "506:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1963,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1961,
                        "name": "valS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1946,
                        "src": "540:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1960,
                      "name": "sliceLastBytes32",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2337,
                      "src": "523:16:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "523:22:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "506:39:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 1970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 1966,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1964,
                            "name": "retS",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1943,
                            "src": "563:4:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 1965,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "571:4:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "563:12:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 1969,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1967,
                            "name": "valS32",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1959,
                            "src": "579:6:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 1968,
                            "name": "_hash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1931,
                            "src": "589:5:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "579:15:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "563:31:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 1971,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "562:33:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1941,
                  "id": 1972,
                  "nodeType": "Return",
                  "src": "555:40:12"
                }
              ]
            },
            "documentation": "@notice Verify of RSA sign\n@param _hash raw message\n@param N N-component of RSA public keys\n@param E E-component of RSA public keys\n@param S Signature of the raw message",
            "id": 1974,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "verify",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1938,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1931,
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "scope": 1974,
                  "src": "339:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1930,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "339:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1933,
                  "name": "N",
                  "nodeType": "VariableDeclaration",
                  "scope": 1974,
                  "src": "354:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1932,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "354:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1935,
                  "name": "E",
                  "nodeType": "VariableDeclaration",
                  "scope": 1974,
                  "src": "363:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1934,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "363:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1937,
                  "name": "S",
                  "nodeType": "VariableDeclaration",
                  "scope": 1974,
                  "src": "372:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1936,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "372:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "338:42:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 1941,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1940,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1974,
                  "src": "404:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1939,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "404:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "403:6:12"
            },
            "scope": 2338,
            "src": "323:279:12",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2008,
              "nodeType": "Block",
              "src": "871:151:12",
              "statements": [
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1984,
                      "name": "r",
                      "nodeType": "VariableDeclaration",
                      "scope": 2009,
                      "src": "881:9:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1983,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "881:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1985,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "881:9:12"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1987,
                      "name": "s",
                      "nodeType": "VariableDeclaration",
                      "scope": 2009,
                      "src": "900:9:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1986,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "900:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1988,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "900:9:12"
                },
                {
                  "assignments": [],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1990,
                      "name": "v",
                      "nodeType": "VariableDeclaration",
                      "scope": 2009,
                      "src": "919:7:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 1989,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "919:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1991,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "919:7:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1999,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "id": 1992,
                          "name": "r",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1984,
                          "src": "937:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1993,
                          "name": "s",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1987,
                          "src": "940:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 1994,
                          "name": "v",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1990,
                          "src": "943:1:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        }
                      ],
                      "id": 1995,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "TupleExpression",
                      "src": "936:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$_t_uint8_$",
                        "typeString": "tuple(bytes32,bytes32,uint8)"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1997,
                          "name": "signature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1978,
                          "src": "963:9:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 1996,
                        "name": "signatureSplit",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2086,
                        "src": "948:14:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$_t_bytes32_$_t_uint8_$",
                          "typeString": "function (bytes memory) pure returns (bytes32,bytes32,uint8)"
                        }
                      },
                      "id": 1998,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "948:25:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes32_$_t_uint8_$",
                        "typeString": "tuple(bytes32,bytes32,uint8)"
                      }
                    },
                    "src": "936:37:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2000,
                  "nodeType": "ExpressionStatement",
                  "src": "936:37:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2002,
                        "name": "_hash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1976,
                        "src": "1000:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2003,
                        "name": "v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1990,
                        "src": "1007:1:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2004,
                        "name": "r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1984,
                        "src": "1010:1:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2005,
                        "name": "s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1987,
                        "src": "1013:1:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 2001,
                      "name": "ecrecover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3269,
                      "src": "990:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 2006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "990:25:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 1982,
                  "id": 2007,
                  "nodeType": "Return",
                  "src": "983:32:12"
                }
              ]
            },
            "documentation": "@notice Recover address from signature and hash\n@param _hash Hash for signature\n@param signature Signature hash\n@return The subscriber hash address",
            "id": 2009,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "recoverSigner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1979,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1976,
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "scope": 2009,
                  "src": "810:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1975,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "810:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1978,
                  "name": "signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 2009,
                  "src": "825:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1977,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "825:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "809:32:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 1982,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1981,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2009,
                  "src": "862:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1980,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "862:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "861:9:12"
            },
            "scope": 2338,
            "src": "787:235:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2062,
              "nodeType": "Block",
              "src": "1400:320:12",
              "statements": [
                {
                  "assignments": [
                    2025
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2025,
                      "name": "_signer",
                      "nodeType": "VariableDeclaration",
                      "scope": 2063,
                      "src": "1410:15:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 2024,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "1410:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2030,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2027,
                        "name": "_hash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2017,
                        "src": "1442:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2028,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2019,
                        "src": "1449:10:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 2026,
                      "name": "recoverSigner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2009,
                      "src": "1428:13:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes32,bytes memory) pure returns (address)"
                      }
                    },
                    "id": 2029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1428:32:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1410:50:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2038,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2034,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2032,
                            "name": "_signer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2025,
                            "src": "1478:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2033,
                            "name": "_player",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2013,
                            "src": "1489:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1478:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2037,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2035,
                            "name": "_signer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2025,
                            "src": "1500:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2036,
                            "name": "_bankroller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2015,
                            "src": "1511:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1500:22:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1478:44:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c6964207369676e6174757265",
                        "id": 2039,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1524:19:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_12a179e1a73f41ef8e1ba2f259a99bc53b6ace3abb110ac2ea058e42c6104e1a",
                          "typeString": "literal_string \"invalid signature\""
                        },
                        "value": "invalid signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_12a179e1a73f41ef8e1ba2f259a99bc53b6ace3abb110ac2ea058e42c6104e1a",
                          "typeString": "literal_string \"invalid signature\""
                        }
                      ],
                      "id": 2031,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3280,
                        3281
                      ],
                      "referencedDeclaration": 3281,
                      "src": "1470:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2040,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1470:74:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2041,
                  "nodeType": "ExpressionStatement",
                  "src": "1470:74:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 2045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 2043,
                          "name": "_sender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2011,
                          "src": "1562:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2044,
                          "name": "_signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2025,
                          "src": "1573:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1562:18:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "696e76616c6964206d73672e73656e646572",
                        "id": 2046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1582:20:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_810795f7aac7fabc0f1e2de8716b36729c537ecf5c23a9dbab9303dd70225cdd",
                          "typeString": "literal_string \"invalid msg.sender\""
                        },
                        "value": "invalid msg.sender"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_810795f7aac7fabc0f1e2de8716b36729c537ecf5c23a9dbab9303dd70225cdd",
                          "typeString": "literal_string \"invalid msg.sender\""
                        }
                      ],
                      "id": 2042,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3280,
                        3281
                      ],
                      "referencedDeclaration": 3281,
                      "src": "1554:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2047,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1554:49:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2048,
                  "nodeType": "ExpressionStatement",
                  "src": "1554:49:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2056,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2052,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2050,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2011,
                            "src": "1621:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2051,
                            "name": "_player",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2013,
                            "src": "1632:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1621:18:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 2055,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2053,
                            "name": "_sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2011,
                            "src": "1643:7:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2054,
                            "name": "_bankroller",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2015,
                            "src": "1654:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "1643:22:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "1621:44:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "73656e646572206973206e6f742061206d656d626572",
                        "id": 2057,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1667:24:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5c045747c488158a10436e9546fc18287a6e52d3a0cd79c0d8b54322807fe739",
                          "typeString": "literal_string \"sender is not a member\""
                        },
                        "value": "sender is not a member"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5c045747c488158a10436e9546fc18287a6e52d3a0cd79c0d8b54322807fe739",
                          "typeString": "literal_string \"sender is not a member\""
                        }
                      ],
                      "id": 2049,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3280,
                        3281
                      ],
                      "referencedDeclaration": 3281,
                      "src": "1613:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2058,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1613:79:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2059,
                  "nodeType": "ExpressionStatement",
                  "src": "1613:79:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 2060,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1709:4:12",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 2023,
                  "id": 2061,
                  "nodeType": "Return",
                  "src": "1702:11:12"
                }
              ]
            },
            "documentation": "@notice check signer\n@param _sender msg.sender address\n@param _player player address\n@param _bankroller bankroller address\n@param _hash message hash\n@param _signature signature\n@return result",
            "id": 2063,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkSigner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2020,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2011,
                  "name": "_sender",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1284:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2010,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1284:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2013,
                  "name": "_player",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1301:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2012,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1301:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2015,
                  "name": "_bankroller",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1318:19:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2014,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1318:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2017,
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1339:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2016,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1339:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2019,
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1354:16:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2018,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1354:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1283:88:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2023,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2022,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2063,
                  "src": "1394:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2021,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1394:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1393:6:12"
            },
            "scope": 2338,
            "src": "1263:457:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2085,
              "nodeType": "Block",
              "src": "1969:213:12",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "r": {
                        "declaration": 2068,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2002:1:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "v": {
                        "declaration": 2072,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2088:1:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "s": {
                        "declaration": 2070,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2045:1:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "signature": {
                        "declaration": 2065,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2017:9:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "signature": {
                        "declaration": 2065,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2060:9:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "signature": {
                        "declaration": 2065,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "2107:9:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2074,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    r := mload(add(signature, 32))\n    s := mload(add(signature, 64))\n    v := and(mload(add(signature, 65)), 0xff)\n}",
                  "src": "1979:176:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2082,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 2078,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2076,
                            "name": "v",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2072,
                            "src": "2156:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3237",
                            "id": 2077,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2161:2:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_27_by_1",
                              "typeString": "int_const 27"
                            },
                            "value": "27"
                          },
                          "src": "2156:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 2081,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 2079,
                            "name": "v",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2072,
                            "src": "2167:1:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "3238",
                            "id": 2080,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2172:2:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_28_by_1",
                              "typeString": "int_const 28"
                            },
                            "value": "28"
                          },
                          "src": "2167:7:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2156:18:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 2075,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        3280,
                        3281
                      ],
                      "referencedDeclaration": 3280,
                      "src": "2148:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 2083,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2148:27:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2084,
                  "nodeType": "ExpressionStatement",
                  "src": "2148:27:12"
                }
              ]
            },
            "documentation": "@dev Splits signature to R, S and V parts\n@param signature interpretation of signature\n@return Parts of signature",
            "id": 2086,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "signatureSplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2066,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2065,
                  "name": "signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "1901:15:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2064,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1901:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1900:17:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2068,
                  "name": "r",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "1938:9:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2067,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1938:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2070,
                  "name": "s",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "1949:9:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2069,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1949:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2072,
                  "name": "v",
                  "nodeType": "VariableDeclaration",
                  "scope": 2086,
                  "src": "1960:7:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 2071,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1960:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1937:31:12"
            },
            "scope": 2338,
            "src": "1877:305:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2184,
              "nodeType": "Block",
              "src": "2320:318:12",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2141,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2124,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2110,
                                  "name": "_hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2092,
                                  "src": "2358:5:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2111,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2096,
                                    "src": "2365:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint8_$2_calldata_ptr",
                                      "typeString": "uint8[2] calldata"
                                    }
                                  },
                                  "id": 2113,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2112,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2367:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2365:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2114,
                                    "name": "r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2100,
                                    "src": "2371:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2116,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2115,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2373:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2371:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2117,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2104,
                                    "src": "2377:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2119,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2118,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2379:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2377:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 2109,
                                "name": "ecrecover",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3269,
                                "src": "2348:9:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                  "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                }
                              },
                              "id": 2120,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2348:34:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2121,
                                "name": "_users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2090,
                                "src": "2386:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$2_calldata_ptr",
                                  "typeString": "address[2] calldata"
                                }
                              },
                              "id": 2123,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 2122,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2393:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2386:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "2348:47:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2140,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2126,
                                  "name": "_hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2092,
                                  "src": "2409:5:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2127,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2096,
                                    "src": "2416:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint8_$2_calldata_ptr",
                                      "typeString": "uint8[2] calldata"
                                    }
                                  },
                                  "id": 2129,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2128,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2418:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2416:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2130,
                                    "name": "r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2100,
                                    "src": "2422:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2132,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2131,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2424:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2422:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2133,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2104,
                                    "src": "2428:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2135,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2134,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2430:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2428:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 2125,
                                "name": "ecrecover",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3269,
                                "src": "2399:9:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                  "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                }
                              },
                              "id": 2136,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2399:34:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2137,
                                "name": "_users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2090,
                                "src": "2437:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$2_calldata_ptr",
                                  "typeString": "address[2] calldata"
                                }
                              },
                              "id": 2139,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 2138,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2444:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2437:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "2399:47:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "2348:98:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 2142,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2347:100:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2158,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2144,
                                  "name": "_hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2092,
                                  "src": "2474:5:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2145,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2096,
                                    "src": "2481:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint8_$2_calldata_ptr",
                                      "typeString": "uint8[2] calldata"
                                    }
                                  },
                                  "id": 2147,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2146,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2483:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2481:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2148,
                                    "name": "r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2100,
                                    "src": "2487:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2150,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2149,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2489:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2487:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2151,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2104,
                                    "src": "2493:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2153,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 2152,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2495:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2493:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 2143,
                                "name": "ecrecover",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3269,
                                "src": "2464:9:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                  "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                }
                              },
                              "id": 2154,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2464:34:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2155,
                                "name": "_users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2090,
                                "src": "2502:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$2_calldata_ptr",
                                  "typeString": "address[2] calldata"
                                }
                              },
                              "id": 2157,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 2156,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2509:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2502:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "2464:47:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "id": 2174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 2160,
                                  "name": "_hash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2092,
                                  "src": "2525:5:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2161,
                                    "name": "v",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2096,
                                    "src": "2532:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint8_$2_calldata_ptr",
                                      "typeString": "uint8[2] calldata"
                                    }
                                  },
                                  "id": 2163,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2162,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2534:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2532:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2164,
                                    "name": "r",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2100,
                                    "src": "2538:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2166,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2165,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2540:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2538:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 2167,
                                    "name": "s",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2104,
                                    "src": "2544:1:12",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                      "typeString": "bytes32[2] calldata"
                                    }
                                  },
                                  "id": 2169,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 2168,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "2546:1:12",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "2544:4:12",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                ],
                                "id": 2159,
                                "name": "ecrecover",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3269,
                                "src": "2515:9:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                  "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                }
                              },
                              "id": 2170,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2515:34:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "==",
                            "rightExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 2171,
                                "name": "_users",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2090,
                                "src": "2553:6:12",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$2_calldata_ptr",
                                  "typeString": "address[2] calldata"
                                }
                              },
                              "id": 2173,
                              "indexExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 2172,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "2560:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2553:9:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "src": "2515:47:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "2464:98:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 2176,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "2463:100:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2347:216:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2181,
                  "nodeType": "IfStatement",
                  "src": "2330:280:12",
                  "trueBody": {
                    "id": 2180,
                    "nodeType": "Block",
                    "src": "2574:36:12",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 2178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2595:4:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 2108,
                        "id": 2179,
                        "nodeType": "Return",
                        "src": "2588:11:12"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 2182,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2626:5:12",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 2108,
                  "id": 2183,
                  "nodeType": "Return",
                  "src": "2619:12:12"
                }
              ]
            },
            "documentation": null,
            "id": 2185,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkDoubleSignature",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2105,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2090,
                  "name": "_users",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2218:17:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$2_calldata_ptr",
                    "typeString": "address[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2087,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2218:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 2089,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2088,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2226:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2218:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$2_storage_ptr",
                      "typeString": "address[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2092,
                  "name": "_hash",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2237:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2091,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2237:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2096,
                  "name": "v",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2252:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint8_$2_calldata_ptr",
                    "typeString": "uint8[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2093,
                      "name": "uint8",
                      "nodeType": "ElementaryTypeName",
                      "src": "2252:5:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 2095,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2094,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2258:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2252:8:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint8_$2_storage_ptr",
                      "typeString": "uint8[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2100,
                  "name": "r",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2264:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                    "typeString": "bytes32[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2097,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2264:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 2099,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2098,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2272:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2264:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$2_storage_ptr",
                      "typeString": "bytes32[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2104,
                  "name": "s",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2278:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                    "typeString": "bytes32[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2101,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2278:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 2103,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2102,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2286:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2278:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$2_storage_ptr",
                      "typeString": "bytes32[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2217:74:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2108,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2107,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "2314:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2106,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2314:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2313:6:12"
            },
            "scope": 2338,
            "src": "2188:450:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 2219,
              "nodeType": "Block",
              "src": "2720:109:12",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2204,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2198,
                          "name": "_a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2189,
                          "src": "2733:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                            "typeString": "uint256[2] memory"
                          }
                        },
                        "id": 2200,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2199,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2736:1:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2733:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2201,
                          "name": "_a",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2189,
                          "src": "2741:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                            "typeString": "uint256[2] memory"
                          }
                        },
                        "id": 2203,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 2202,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2744:1:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2741:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2733:13:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2211,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2205,
                          "name": "_b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2193,
                          "src": "2750:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                            "typeString": "uint256[2] memory"
                          }
                        },
                        "id": 2207,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 2206,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2753:1:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2750:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 2208,
                          "name": "_b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2193,
                          "src": "2758:2:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                            "typeString": "uint256[2] memory"
                          }
                        },
                        "id": 2210,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 2209,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2761:1:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "2758:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2750:13:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2733:30:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 2216,
                  "nodeType": "IfStatement",
                  "src": "2730:71:12",
                  "trueBody": {
                    "id": 2215,
                    "nodeType": "Block",
                    "src": "2765:36:12",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "74727565",
                          "id": 2213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2786:4:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 2197,
                        "id": 2214,
                        "nodeType": "Return",
                        "src": "2779:11:12"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 2217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "2817:5:12",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 2197,
                  "id": 2218,
                  "nodeType": "Return",
                  "src": "2810:12:12"
                }
              ]
            },
            "documentation": null,
            "id": 2220,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkSum",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2189,
                  "name": "_a",
                  "nodeType": "VariableDeclaration",
                  "scope": 2220,
                  "src": "2662:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                    "typeString": "uint256[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2186,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2662:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2188,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2187,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2670:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2662:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$2_storage_ptr",
                      "typeString": "uint256[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2193,
                  "name": "_b",
                  "nodeType": "VariableDeclaration",
                  "scope": 2220,
                  "src": "2677:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$2_memory_ptr",
                    "typeString": "uint256[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2190,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "2677:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2192,
                    "length": {
                      "argumentTypes": null,
                      "hexValue": "32",
                      "id": 2191,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2685:1:12",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": null,
                        "typeString": null
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "2677:10:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$2_storage_ptr",
                      "typeString": "uint256[2]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2661:30:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2197,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2196,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2220,
                  "src": "2714:4:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2195,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2714:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2713:6:12"
            },
            "scope": 2338,
            "src": "2644:185:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2234,
              "nodeType": "Block",
              "src": "2930:973:12",
              "statements": [
                {
                  "externalReferences": [
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3005:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3255:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3064:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3016:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "srcoffset": {
                        "declaration": 2224,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3029:9:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3053:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dstoffset": {
                        "declaration": 2228,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3077:9:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2230,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3197:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3266:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3331:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2230,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3402:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3342:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3504:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3515:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2230,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3413:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3820:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "src": {
                        "declaration": 2222,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3679:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "dst": {
                        "declaration": 2226,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3758:3:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "len": {
                        "declaration": 2230,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "3613:3:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2233,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    src := add(src, add(32, srcoffset))\n    dst := add(dst, add(32, dstoffset))\n    for {\n    }\n    iszero(lt(len, 32))\n    {\n        dst := add(dst, 32)\n        src := add(src, 32)\n        len := sub(len, 32)\n    }\n    {\n        mstore(dst, mload(src))\n    }\n    let mask := sub(exp(256, sub(32, len)), 1)\n    let srcpart := and(mload(src), not(mask))\n    let dstpart := and(mload(dst), mask)\n    mstore(dst, or(srcpart, dstpart))\n}",
                  "src": "2940:963:12"
                }
              ]
            },
            "documentation": null,
            "id": 2235,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "memcopy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2231,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2222,
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 2235,
                  "src": "2852:9:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2221,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2852:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2224,
                  "name": "srcoffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2235,
                  "src": "2863:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2223,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2863:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2226,
                  "name": "dst",
                  "nodeType": "VariableDeclaration",
                  "scope": 2235,
                  "src": "2879:9:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2225,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2879:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2228,
                  "name": "dstoffset",
                  "nodeType": "VariableDeclaration",
                  "scope": 2235,
                  "src": "2890:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2227,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2890:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2230,
                  "name": "len",
                  "nodeType": "VariableDeclaration",
                  "scope": 2235,
                  "src": "2906:8:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2229,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2906:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2851:64:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2232,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2930:0:12"
            },
            "scope": 2338,
            "src": "2835:1068:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2322,
              "nodeType": "Block",
              "src": "4019:1190:12",
              "statements": [
                {
                  "assignments": [
                    2249
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2249,
                      "name": "base_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2323,
                      "src": "4029:16:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2248,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4029:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2252,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2250,
                      "name": "base",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2237,
                      "src": "4048:4:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2251,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4048:11:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4029:30:12"
                },
                {
                  "assignments": [
                    2254
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2254,
                      "name": "exponent_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2323,
                      "src": "4069:20:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2253,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4069:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2257,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2255,
                      "name": "exponent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2239,
                      "src": "4092:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2256,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4092:15:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4069:38:12"
                },
                {
                  "assignments": [
                    2259
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2259,
                      "name": "modulus_length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2323,
                      "src": "4117:19:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2258,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4117:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2262,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2260,
                      "name": "modulus",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2241,
                      "src": "4139:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2261,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "4139:14:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4117:36:12"
                },
                {
                  "assignments": [
                    2264
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2264,
                      "name": "size",
                      "nodeType": "VariableDeclaration",
                      "scope": 2323,
                      "src": "4200:9:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2263,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "4200:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2275,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2274,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2272,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2270,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              },
                              "id": 2267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "hexValue": "3332",
                                "id": 2265,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4213:2:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_32_by_1",
                                  "typeString": "int_const 32"
                                },
                                "value": "32"
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "*",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "33",
                                "id": 2266,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4218:1:12",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "4213:6:12",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_96_by_1",
                                "typeString": "int_const 96"
                              }
                            }
                          ],
                          "id": 2268,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4212:8:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_96_by_1",
                            "typeString": "int_const 96"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2269,
                          "name": "base_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2249,
                          "src": "4223:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4212:22:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "id": 2271,
                        "name": "exponent_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2254,
                        "src": "4237:15:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4212:40:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 2273,
                      "name": "modulus_length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2259,
                      "src": "4255:14:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4212:57:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4200:69:12"
                },
                {
                  "assignments": [
                    2277
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2277,
                      "name": "input",
                      "nodeType": "VariableDeclaration",
                      "scope": 2323,
                      "src": "4279:18:12",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 2276,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4279:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2282,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2280,
                        "name": "size",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2264,
                        "src": "4310:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2279,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "4300:9:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                        "typeString": "function (uint256) pure returns (bytes memory)"
                      },
                      "typeName": {
                        "id": 2278,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "4304:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      }
                    },
                    "id": 2281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4300:15:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4279:36:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 2288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 2283,
                      "name": "output",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2246,
                      "src": "4365:6:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 2286,
                          "name": "modulus_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2259,
                          "src": "4384:14:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "NewExpression",
                        "src": "4374:9:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_$",
                          "typeString": "function (uint256) pure returns (bytes memory)"
                        },
                        "typeName": {
                          "id": 2284,
                          "name": "bytes",
                          "nodeType": "ElementaryTypeName",
                          "src": "4378:5:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_storage_ptr",
                            "typeString": "bytes"
                          }
                        }
                      },
                      "id": 2287,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4374:25:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory",
                        "typeString": "bytes memory"
                      }
                    },
                    "src": "4365:34:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "id": 2289,
                  "nodeType": "ExpressionStatement",
                  "src": "4365:34:12"
                },
                {
                  "externalReferences": [
                    {
                      "base_length": {
                        "declaration": 2249,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4552:11:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2277,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4540:5:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "exponent_length": {
                        "declaration": 2254,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4635:15:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2277,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4623:5:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "modulus_length": {
                        "declaration": 2259,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4687:14:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "input": {
                        "declaration": 2277,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "4675:5:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2290,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    mstore(add(input, 32), base_length)\n    mstore(add(input, 64), exponent_length)\n    mstore(add(input, 96), modulus_length)\n}",
                  "src": "4446:315:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2292,
                        "name": "base",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2237,
                        "src": "4762:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2293,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4768:1:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2294,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2277,
                        "src": "4771:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "3936",
                        "id": 2295,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4778:2:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_96_by_1",
                          "typeString": "int_const 96"
                        },
                        "value": "96"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2296,
                        "name": "base_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2249,
                        "src": "4782:11:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_96_by_1",
                          "typeString": "int_const 96"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2291,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2235,
                      "src": "4754:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4754:40:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2298,
                  "nodeType": "ExpressionStatement",
                  "src": "4754:40:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2300,
                        "name": "exponent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2239,
                        "src": "4849:8:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2301,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4859:1:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2302,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2277,
                        "src": "4862:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2305,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "hexValue": "3936",
                          "id": 2303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4869:2:12",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_96_by_1",
                            "typeString": "int_const 96"
                          },
                          "value": "96"
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2304,
                          "name": "base_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2249,
                          "src": "4874:11:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4869:16:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2306,
                        "name": "exponent_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2254,
                        "src": "4887:15:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2299,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2235,
                      "src": "4841:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2307,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4841:62:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2308,
                  "nodeType": "ExpressionStatement",
                  "src": "4841:62:12"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 2310,
                        "name": "modulus",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2241,
                        "src": "4957:7:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 2311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4966:1:12",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      {
                        "argumentTypes": null,
                        "id": 2312,
                        "name": "input",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2277,
                        "src": "4969:5:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2317,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "hexValue": "3936",
                            "id": 2313,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4976:2:12",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_96_by_1",
                              "typeString": "int_const 96"
                            },
                            "value": "96"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 2314,
                            "name": "base_length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2249,
                            "src": "4981:11:12",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4976:16:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 2316,
                          "name": "exponent_length",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2254,
                          "src": "4995:15:12",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4976:34:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 2318,
                        "name": "modulus_length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2259,
                        "src": "5012:14:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2309,
                      "name": "memcopy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2235,
                      "src": "4949:7:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes memory,uint256,bytes memory,uint256,uint256) pure"
                      }
                    },
                    "id": 2319,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4949:78:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2320,
                  "nodeType": "ExpressionStatement",
                  "src": "4949:78:12"
                },
                {
                  "externalReferences": [
                    {
                      "input": {
                        "declaration": 2277,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5143:5:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "output": {
                        "declaration": 2246,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5165:6:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "success": {
                        "declaration": 2244,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5107:7:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "size": {
                        "declaration": 2264,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5155:4:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "modulus_length": {
                        "declaration": 2259,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5178:14:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2321,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    success := staticcall(gas(), 5, add(input, 32), size, add(output, 32), modulus_length)\n}",
                  "src": "5084:125:12"
                }
              ]
            },
            "documentation": null,
            "id": 2323,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "modexp",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2237,
                  "name": "base",
                  "nodeType": "VariableDeclaration",
                  "scope": 2323,
                  "src": "3925:10:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2236,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3925:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2239,
                  "name": "exponent",
                  "nodeType": "VariableDeclaration",
                  "scope": 2323,
                  "src": "3937:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2238,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3937:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2241,
                  "name": "modulus",
                  "nodeType": "VariableDeclaration",
                  "scope": 2323,
                  "src": "3953:13:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2240,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3953:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3924:43:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2247,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2244,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 2323,
                  "src": "3991:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2243,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3991:4:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2246,
                  "name": "output",
                  "nodeType": "VariableDeclaration",
                  "scope": 2323,
                  "src": "4005:12:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2245,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4005:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3990:28:12"
            },
            "scope": 2338,
            "src": "3909:1300:12",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2336,
              "nodeType": "Block",
              "src": "5299:126:12",
              "statements": [
                {
                  "assignments": [
                    2331
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2331,
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2337,
                      "src": "5309:11:12",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2330,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5309:4:12",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 2334,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 2332,
                      "name": "bytesArr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2325,
                      "src": "5323:8:12",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes memory"
                      }
                    },
                    "id": 2333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "5323:15:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5309:29:12"
                },
                {
                  "externalReferences": [
                    {
                      "result": {
                        "declaration": 2328,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5371:6:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "bytesArr": {
                        "declaration": 2325,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5391:8:12",
                        "valueSize": 1
                      }
                    },
                    {
                      "length": {
                        "declaration": 2331,
                        "isOffset": false,
                        "isSlot": false,
                        "src": "5401:6:12",
                        "valueSize": 1
                      }
                    }
                  ],
                  "id": 2335,
                  "nodeType": "InlineAssembly",
                  "operations": "{\n    result := mload(add(bytesArr, length))\n}",
                  "src": "5348:77:12"
                }
              ]
            },
            "documentation": null,
            "id": 2337,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "sliceLastBytes32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2326,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2325,
                  "name": "bytesArr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2337,
                  "src": "5245:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2324,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5245:5:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5244:16:12"
            },
            "payable": false,
            "returnParameters": {
              "id": 2329,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2328,
                  "name": "result",
                  "nodeType": "VariableDeclaration",
                  "scope": 2337,
                  "src": "5283:14:12",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2327,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5283:7:12",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5282:16:12"
            },
            "scope": 2338,
            "src": "5219:206:12",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 2339,
        "src": "97:5331:12"
      }
    ],
    "src": "0:5428:12"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.25+commit.59dbf8f1.Emscripten.clang"
  },
  "networks": {
    "1543924054456": {
      "events": {},
      "links": {},
      "address": "0xf25186B5081Ff5cE73482AD761DB0eB0d25abfBF",
      "transactionHash": "0x17f889f5cc807c14b1dc550118d2b0071676cc341e2ebb680b715f94f0f61947"
    }
  },
  "schemaVersion": "3.0.0-beta.0",
  "updatedAt": "2018-12-04T11:48:20.893Z"
}