{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "error",
          "type": "bytes"
        }
      ],
      "name": "CallReverted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "GroupTreeNotWellFormed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InsufficientSigners",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSigner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MissingConfig",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OutOfBoundsGroup",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OutOfBoundsGroupQuorum",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OutOfBoundsNumOfSigners",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PendingOps",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PostOpCountReached",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ProofCannotBeVerified",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RootExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignedHashAlreadySeen",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignerGroupsLengthMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignerInDisabledGroup",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SignersAddressesMustBeStrictlyIncreasing",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ValidUntilHasAlreadyPassed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WrongChainId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WrongMultiSig",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WrongNonce",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WrongPostOpCount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "WrongPreOpCount",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "addr",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "index",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "group",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ManyChainMultiSig.Signer[]",
              "name": "signers",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[32]",
              "name": "groupQuorums",
              "type": "uint8[32]"
            },
            {
              "internalType": "uint8[32]",
              "name": "groupParents",
              "type": "uint8[32]"
            }
          ],
          "indexed": false,
          "internalType": "struct ManyChainMultiSig.Config",
          "name": "config",
          "type": "tuple"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isRootCleared",
          "type": "bool"
        }
      ],
      "name": "ConfigSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "validUntil",
          "type": "uint32"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "chainId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "multiSig",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "preOpCount",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "postOpCount",
              "type": "uint40"
            },
            {
              "internalType": "bool",
              "name": "overridePreviousRoot",
              "type": "bool"
            }
          ],
          "indexed": false,
          "internalType": "struct ManyChainMultiSig.RootMetadata",
          "name": "metadata",
          "type": "tuple"
        }
      ],
      "name": "NewRoot",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint40",
          "name": "nonce",
          "type": "uint40"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "OpExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MAX_NUM_SIGNERS",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "NUM_GROUPS",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "chainId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "multiSig",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "nonce",
              "type": "uint40"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct ManyChainMultiSig.Op",
          "name": "op",
          "type": "tuple"
        },
        {
          "internalType": "bytes32[]",
          "name": "proof",
          "type": "bytes32[]"
        }
      ],
      "name": "execute",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getConfig",
      "outputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "addr",
                  "type": "address"
                },
                {
                  "internalType": "uint8",
                  "name": "index",
                  "type": "uint8"
                },
                {
                  "internalType": "uint8",
                  "name": "group",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ManyChainMultiSig.Signer[]",
              "name": "signers",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[32]",
              "name": "groupQuorums",
              "type": "uint8[32]"
            },
            {
              "internalType": "uint8[32]",
              "name": "groupParents",
              "type": "uint8[32]"
            }
          ],
          "internalType": "struct ManyChainMultiSig.Config",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getOpCount",
      "outputs": [
        {
          "internalType": "uint40",
          "name": "",
          "type": "uint40"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        },
        {
          "internalType": "uint32",
          "name": "validUntil",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRootMetadata",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "chainId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "multiSig",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "preOpCount",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "postOpCount",
              "type": "uint40"
            },
            {
              "internalType": "bool",
              "name": "overridePreviousRoot",
              "type": "bool"
            }
          ],
          "internalType": "struct ManyChainMultiSig.RootMetadata",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "signerAddresses",
          "type": "address[]"
        },
        {
          "internalType": "uint8[]",
          "name": "signerGroups",
          "type": "uint8[]"
        },
        {
          "internalType": "uint8[32]",
          "name": "groupQuorums",
          "type": "uint8[32]"
        },
        {
          "internalType": "uint8[32]",
          "name": "groupParents",
          "type": "uint8[32]"
        },
        {
          "internalType": "bool",
          "name": "clearRoot",
          "type": "bool"
        }
      ],
      "name": "setConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "root",
          "type": "bytes32"
        },
        {
          "internalType": "uint32",
          "name": "validUntil",
          "type": "uint32"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "chainId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "multiSig",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "preOpCount",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "postOpCount",
              "type": "uint40"
            },
            {
              "internalType": "bool",
              "name": "overridePreviousRoot",
              "type": "bool"
            }
          ],
          "internalType": "struct ManyChainMultiSig.RootMetadata",
          "name": "metadata",
          "type": "tuple"
        },
        {
          "internalType": "bytes32[]",
          "name": "metadataProof",
          "type": "bytes32[]"
        },
        {
          "components": [
            {
              "internalType": "uint8",
              "name": "v",
              "type": "uint8"
            },
            {
              "internalType": "bytes32",
              "name": "r",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "s",
              "type": "bytes32"
            }
          ],
          "internalType": "struct ManyChainMultiSig.Signature[]",
          "name": "signatures",
          "type": "tuple[]"
        }
      ],
      "name": "setRoot",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": {
    "object": "0x60806040523480156200001157600080fd5b5062000032620000266200003860201b60201c565b6200004060201b60201c565b6200013d565b600033905090565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905562000076816200007960201b60201c565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614d82806200014d6000396000f3fe6080604052600436106100e15760003560e01c8063846c67ef1161007f578063b759d68511610059578063b759d68514610270578063c3f909d41461028c578063e30c3978146102b7578063f2fde38b146102e2576100e8565b8063846c67ef146101f15780638da5cb5b1461021a578063a76f559814610245576100e8565b80636b45fb3e116100bb5780636b45fb3e1461016f578063715018a61461019a57806379ba5097146101b15780637cc38b28146101c8576100e8565b80635a2519ef146100ed5780635ca1e16514610118578063627e8a3b14610144576100e8565b366100e857005b600080fd5b3480156100f957600080fd5b5061010261030b565b60405161010f9190612762565b60405180910390f35b34801561012457600080fd5b5061012d610310565b60405161013b9291906127b5565b60405180910390f35b34801561015057600080fd5b50610159610390565b60405161016691906127fe565b60405180910390f35b34801561017b57600080fd5b506101846103ae565b6040516101919190612905565b60405180910390f35b3480156101a657600080fd5b506101af610495565b005b3480156101bd57600080fd5b506101c66104a9565b005b3480156101d457600080fd5b506101ef60048036038101906101ea9190612a61565b610536565b005b3480156101fd57600080fd5b5061021860048036038101906102139190612c18565b610df6565b005b34801561022657600080fd5b5061022f611960565b60405161023c9190612ce6565b60405180910390f35b34801561025157600080fd5b5061025a611989565b6040516102679190612762565b60405180910390f35b61028a60048036038101906102859190612d20565b61198e565b005b34801561029857600080fd5b506102a1611d69565b6040516102ae9190612f8a565b60405180910390f35b3480156102c357600080fd5b506102cc611f44565b6040516102d99190612ce6565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190612fd8565b611f6e565b005b602081565b60008060006007604051806060016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152505090508060000151816020015192509250509091565b6000600760010160049054906101000a900464ffffffffff16905090565b6103b66125aa565b60096040518060a0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160199054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201601e9054906101000a900460ff161515151581525050905090565b61049d61201b565b6104a76000612099565b565b60006104b36120ca565b90508073ffffffffffffffffffffffffffffffffffffffff166104d4611f44565b73ffffffffffffffffffffffffffffffffffffffff161461052a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052190613088565b60405180910390fd5b61053381612099565b50565b6000610569888860405160200161054e9291906127b5565b604051602081830303815290604052805190602001206120d2565b90506006600082815260200190815260200160002060009054906101000a900460ff16156105c3576040517f48c2688b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105cb6125ff565b60006105d561263c565b60005b868690508110156108c857368787838181106105f7576105f66130a8565b5b90506060020190506000610627878360000160208101906106189190613103565b84602001358560400135612108565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161061068e576040517f4a36ec0800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809450600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900460ff1660ff1660ff168152505095508073ffffffffffffffffffffffffffffffffffffffff16866000015173ffffffffffffffffffffffffffffffffffffffff16146107d6576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000866040015190505b6001156108b257848160ff16602081106107fd576107fc6130a8565b5b60200201805180919061080f9061315f565b60ff1660ff168152505060036001018160ff1660208110610833576108326130a8565b5b602091828204019190069054906101000a900460ff1660ff16858260ff1660208110610862576108616130a8565b5b602002015160ff16036108b25760008160ff1603156108b25760036002018160ff1660208110610895576108946130a8565b5b602091828204019190069054906101000a900460ff1690506107e0565b50505080806108c090613188565b9150506105d8565b50600060036001016000602081106108e3576108e26130a8565b5b602091828204019190069054906101000a900460ff1660ff1603610933576040517faa6185ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360010160006020811061094b5761094a6130a8565b5b602091828204019190069054906101000a900460ff1660ff1681600060208110610978576109776130a8565b5b602002015160ff1610156109b8576040517fc2ee9b9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050428763ffffffff1610156109fb576040517fb057a45200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007fe6b82be989101b4eb519770114b997b97b3c8707515286748a871717f0e4ea1c87604051602001610a30929190613314565b604051602081830303815290604052805190602001209050610a94868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508a83612133565b610aca576040517f2522a1c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5085600001354614610b08576040517f5f87bc0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b856020016020810190610b1b9190612fd8565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610b7f576040517f9a84601500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600760010160049054906101000a900464ffffffffff169050600960010160199054906101000a900464ffffffffff1664ffffffffff168164ffffffffff1614158015610bde5750866080016020810190610bdc919061333d565b155b15610c15576040517f3230825b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866040016020810190610c28919061336a565b64ffffffffff168164ffffffffff1614610c6e576040517fa255a76300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866060016020810190610c81919061336a565b64ffffffffff16876040016020810190610c9b919061336a565b64ffffffffff161115610cda576040517fc61352f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016006600084815260200190815260200160002060006101000a81548160ff02191690831515021790555060405180606001604052808a81526020018963ffffffff168152602001886040016020810190610d36919061336a565b64ffffffffff1681525060076000820151816000015560208201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060408201518160010160046101000a81548164ffffffffff021916908364ffffffffff1602179055509050508660098181610dae919061377d565b905050887f7ea643ae44677f24e0d6f40168893712daaf729b0a38fe7702d21cb544c841018989604051610de392919061378b565b60405180910390a2505050505050505050565b610dfe61201b565b6000878790501480610e16575060c860ff1687879050115b15610e4d576040517ff0ec1ca400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b848490508787905014610e8c576040517ff1f3053000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e9461263c565b60005b86869050811015610f7557602060ff16878783818110610eba57610eb96130a8565b5b9050602002016020810190610ecf9190613103565b60ff1610610f09576040517fb9ae8e5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81878783818110610f1d57610f1c6130a8565b5b9050602002016020810190610f329190613103565b60ff1660208110610f4657610f456130a8565b5b602002018051809190610f589061315f565b60ff1660ff16815250508080610f6d90613188565b915050610e97565b5060005b602060ff168110156111cd5760008160016020610f9691906137b4565b60ff16610fa391906137e9565b905060008114158015610fde575080858260208110610fc557610fc46130a8565b5b602002016020810190610fd89190613103565b60ff1610155b8061101e575060008114801561101d57506000858260208110611004576110036130a8565b5b6020020160208101906110179190613103565b60ff1614155b5b15611055576040517fff063a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008087836020811061106b5761106a6130a8565b5b60200201602081019061107e9190613103565b60ff1614905080156110e45783826020811061109d5761109c6130a8565b5b602002015160ff16600010156110df576040517f8db4e75d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b8565b8682602081106110f7576110f66130a8565b5b60200201602081019061110a9190613103565b60ff168483602081106111205761111f6130a8565b5b602002015160ff161015611160576040517fbb00136e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83868360208110611174576111736130a8565b5b6020020160208101906111879190613103565b60ff166020811061119b5761119a6130a8565b5b6020020180518091906111ad9061315f565b60ff1660ff16815250505b505080806111c590613188565b915050610f79565b505060006003600001805480602002602001604051908101604052809291908181526020016000905b828210156112b4578382906000526020600020016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900460ff1660ff1660ff1681525050815260200190600101906111f6565b50505050905060005b81518110156114075760008282815181106112db576112da6130a8565b5b6020026020010151600001519050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff02191690556000820160156101000a81549060ff02191690555050600360000180548061138f5761138e61381d565b5b60019003818190600052602060002001600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff02191690556000820160156101000a81549060ff0219169055505090555080806113ff90613188565b9150506112bd565b506000600360000180549050146114215761142061384c565b5b83600360010190602061143592919061265f565b5082600360020190602061144a92919061265f565b506000805b898990508110156117565789898281811061146d5761146c6130a8565b5b90506020020160208101906114829190612fd8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16106114e6576040517f4a36ec0800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060405180606001604052808c8c85818110611506576115056130a8565b5b905060200201602081019061151b9190612fd8565b73ffffffffffffffffffffffffffffffffffffffff1681526020018360ff1681526020018a8a85818110611552576115516130a8565b5b90506020020160208101906115679190613103565b60ff16815250905080600260008d8d86818110611587576115866130a8565b5b905060200201602081019061159c9190612fd8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff021916908360ff16021790555060408201518160000160156101000a81548160ff021916908360ff1602179055509050506003600001819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff021916908360ff16021790555060408201518160000160156101000a81548160ff021916908360ff16021790555050508a8a8381811061172b5761172a6130a8565b5b90506020020160208101906117409190612fd8565b925050808061174e90613188565b91505061144f565b50821561191b576000600760010160049054906101000a900464ffffffffff16905060405180606001604052806000801b8152602001600063ffffffff1681526020018264ffffffffff1681525060076000820151816000015560208201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060408201518160010160046101000a81548164ffffffffff021916908364ffffffffff1602179055509050506040518060a001604052804681526020013073ffffffffffffffffffffffffffffffffffffffff1681526020018264ffffffffff1681526020018264ffffffffff1681526020016001151581525060096000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548164ffffffffff021916908364ffffffffff16021790555060608201518160010160196101000a81548164ffffffffff021916908364ffffffffff160217905550608082015181600101601e6101000a81548160ff021916908315150217905550905050505b7f0a4974ad206b9c736f9ab2feac1c9b1d043fe4ef377c70ae45659f2ef089f03e60038460405161194d92919061472f565b60405180910390a1505050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60c881565b60006007604051806060016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815250509050806040015164ffffffffff16600960010160199054906101000a900464ffffffffff1664ffffffffff1611611a59576040517fadb1331800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b46846000013514611a96576040517f5f87bc0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16846020016020810190611ac09190612fd8565b73ffffffffffffffffffffffffffffffffffffffff1614611b0d576040517f9a84601500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015163ffffffff16421115611b51576040517f9ba6743000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806040015164ffffffffff16846040016020810190611b70919061336a565b64ffffffffff1614611bae576040517fd9c6386f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f08d275622006c4ca82d03f498e90163cafd53c663a48470c3b52ac8bfbd9f52c85604051602001611be39291906148ea565b604051602081830303815290604052805190602001209050611c4b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050836000015183612133565b611c81576040517f2522a1c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260400151611c92919061491a565b600760010160046101000a81548164ffffffffff021916908364ffffffffff160217905550611ce7856060016020810190611ccd9190612fd8565b8660800135878060a00190611ce29190614962565b61214a565b846040016020810190611cfa919061336a565b64ffffffffff167f87d58fdd48be753fb9ef4ec8a5895086c401506da8b4d752abc90602c3e62d1d866060016020810190611d359190612fd8565b878060a00190611d459190614962565b8960800135604051611d5a9493929190614a12565b60405180910390a25050505050565b611d716126fc565b600360405180606001604052908160008201805480602002602001604051908101604052809291908181526020016000905b82821015611e61578382906000526020600020016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900460ff1660ff1660ff168152505081526020019060010190611da3565b50505050815260200160018201602080602002604051908101604052809291908260208015611ecb576020028201916000905b82829054906101000a900460ff1660ff1681526020019060010190602082600001049283019260010382029150808411611e945790505b5050505050815260200160028201602080602002604051908101604052809291908260208015611f36576020028201916000905b82829054906101000a900460ff1660ff1681526020019060010190602082600001049283019260010382029150808411611eff5790505b505050505081525050905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f7661201b565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16611fd6611960565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6120236120ca565b73ffffffffffffffffffffffffffffffffffffffff16612041611960565b73ffffffffffffffffffffffffffffffffffffffff1614612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e90614a9e565b60405180910390fd5b565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556120c781612206565b50565b600033905090565b60007f19457468657265756d205369676e6564204d6573736167653a0a33320000000060005281601c52603c6000209050919050565b6000806000612119878787876122ca565b91509150612126816123ac565b8192505050949350505050565b6000826121408584612512565b1490509392505050565b6000808573ffffffffffffffffffffffffffffffffffffffff16858585604051612175929190614aee565b60006040518083038185875af1925050503d80600081146121b2576040519150601f19603f3d011682016040523d82523d6000602084013e6121b7565b606091505b5091509150816121fe57806040517f70de1b4b0000000000000000000000000000000000000000000000000000000081526004016121f59190614b75565b60405180910390fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156123055760006003915091506123a3565b60006001878787876040516000815260200160405260405161232a9493929190614b97565b6020604051602081039080840390855afa15801561234c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361239a576000600192509250506123a3565b80600092509250505b94509492505050565b600060048111156123c0576123bf614bdc565b5b8160048111156123d3576123d2614bdc565b5b031561250f57600160048111156123ed576123ec614bdc565b5b816004811115612400576123ff614bdc565b5b03612440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243790614c57565b60405180910390fd5b6002600481111561245457612453614bdc565b5b81600481111561246757612466614bdc565b5b036124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e90614cc3565b60405180910390fd5b600360048111156124bb576124ba614bdc565b5b8160048111156124ce576124cd614bdc565b5b0361250e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250590614d55565b60405180910390fd5b5b50565b60008082905060005b845181101561255d576125488286838151811061253b5761253a6130a8565b5b6020026020010151612568565b9150808061255590613188565b91505061251b565b508091505092915050565b60008183106125805761257b8284612593565b61258b565b61258a8383612593565b5b905092915050565b600082600052816020526040600020905092915050565b6040518060a0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600064ffffffffff168152602001600064ffffffffff1681526020016000151581525090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b604051806104000160405280602090602082028036833780820191505090505090565b826020601f016020900481019282156126eb5791602002820160005b838211156126bc57833560ff1683826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261267b565b80156126e95782816101000a81549060ff02191690556001016020816000010492830192600103026126bc565b505b5090506126f89190612729565b5090565b60405180606001604052806060815260200161271661263c565b815260200161272361263c565b81525090565b5b8082111561274257600081600090555060010161272a565b5090565b600060ff82169050919050565b61275c81612746565b82525050565b60006020820190506127776000830184612753565b92915050565b6000819050919050565b6127908161277d565b82525050565b600063ffffffff82169050919050565b6127af81612796565b82525050565b60006040820190506127ca6000830185612787565b6127d760208301846127a6565b9392505050565b600064ffffffffff82169050919050565b6127f8816127de565b82525050565b600060208201905061281360008301846127ef565b92915050565b6000819050919050565b61282c81612819565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061285d82612832565b9050919050565b61286d81612852565b82525050565b61287c816127de565b82525050565b60008115159050919050565b61289781612882565b82525050565b60a0820160008201516128b36000850182612823565b5060208201516128c66020850182612864565b5060408201516128d96040850182612873565b5060608201516128ec6060850182612873565b5060808201516128ff608085018261288e565b50505050565b600060a08201905061291a600083018461289d565b92915050565b600080fd5b600080fd5b6129338161277d565b811461293e57600080fd5b50565b6000813590506129508161292a565b92915050565b61295f81612796565b811461296a57600080fd5b50565b60008135905061297c81612956565b92915050565b600080fd5b600060a0828403121561299d5761299c612982565b5b81905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126129cb576129ca6129a6565b5b8235905067ffffffffffffffff8111156129e8576129e76129ab565b5b602083019150836020820283011115612a0457612a036129b0565b5b9250929050565b60008083601f840112612a2157612a206129a6565b5b8235905067ffffffffffffffff811115612a3e57612a3d6129ab565b5b602083019150836060820283011115612a5a57612a596129b0565b5b9250929050565b6000806000806000806000610120888a031215612a8157612a80612920565b5b6000612a8f8a828b01612941565b9750506020612aa08a828b0161296d565b9650506040612ab18a828b01612987565b95505060e088013567ffffffffffffffff811115612ad257612ad1612925565b5b612ade8a828b016129b5565b945094505061010088013567ffffffffffffffff811115612b0257612b01612925565b5b612b0e8a828b01612a0b565b925092505092959891949750929550565b60008083601f840112612b3557612b346129a6565b5b8235905067ffffffffffffffff811115612b5257612b516129ab565b5b602083019150836020820283011115612b6e57612b6d6129b0565b5b9250929050565b60008083601f840112612b8b57612b8a6129a6565b5b8235905067ffffffffffffffff811115612ba857612ba76129ab565b5b602083019150836020820283011115612bc457612bc36129b0565b5b9250929050565b6000819050826020800282011115612be657612be56129b0565b5b92915050565b612bf581612882565b8114612c0057600080fd5b50565b600081359050612c1281612bec565b92915050565b6000806000806000806000610860888a031215612c3857612c37612920565b5b600088013567ffffffffffffffff811115612c5657612c55612925565b5b612c628a828b01612b1f565b9750975050602088013567ffffffffffffffff811115612c8557612c84612925565b5b612c918a828b01612b75565b95509550506040612ca48a828b01612bcb565b935050610440612cb68a828b01612bcb565b925050610840612cc88a828b01612c03565b91505092959891949750929550565b612ce081612852565b82525050565b6000602082019050612cfb6000830184612cd7565b92915050565b600060c08284031215612d1757612d16612982565b5b81905092915050565b600080600060408486031215612d3957612d38612920565b5b600084013567ffffffffffffffff811115612d5757612d56612925565b5b612d6386828701612d01565b935050602084013567ffffffffffffffff811115612d8457612d83612925565b5b612d90868287016129b5565b92509250509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612dd181612746565b82525050565b606082016000820151612ded6000850182612864565b506020820151612e006020850182612dc8565b506040820151612e136040850182612dc8565b50505050565b6000612e258383612dd7565b60608301905092915050565b6000602082019050919050565b6000612e4982612d9c565b612e538185612da7565b9350612e5e83612db8565b8060005b83811015612e8f578151612e768882612e19565b9750612e8183612e31565b925050600181019050612e62565b5085935050505092915050565b600060209050919050565b600081905092915050565b6000819050919050565b6000612ec88383612dc8565b60208301905092915050565b6000602082019050919050565b612eea81612e9c565b612ef48184612ea7565b9250612eff82612eb2565b8060005b83811015612f30578151612f178782612ebc565b9650612f2283612ed4565b925050600181019050612f03565b505050505050565b6000610820830160008301518482036000860152612f568282612e3e565b9150506020830151612f6b6020860182612ee1565b506040830151612f7f610420860182612ee1565b508091505092915050565b60006020820190508181036000830152612fa48184612f38565b905092915050565b612fb581612852565b8114612fc057600080fd5b50565b600081359050612fd281612fac565b92915050565b600060208284031215612fee57612fed612920565b5b6000612ffc84828501612fc3565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060008201527f6e6577206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613072602983613005565b915061307d82613016565b604082019050919050565b600060208201905081810360008301526130a181613065565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6130e081612746565b81146130eb57600080fd5b50565b6000813590506130fd816130d7565b92915050565b60006020828403121561311957613118612920565b5b6000613127848285016130ee565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316a82612746565b915060ff820361317d5761317c613130565b5b600182019050919050565b600061319382612819565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131c5576131c4613130565b5b600182019050919050565b6131d981612819565b81146131e457600080fd5b50565b6000813590506131f6816131d0565b92915050565b600061320b60208401846131e7565b905092915050565b60006132226020840184612fc3565b905092915050565b613233816127de565b811461323e57600080fd5b50565b6000813590506132508161322a565b92915050565b60006132656020840184613241565b905092915050565b600061327c6020840184612c03565b905092915050565b60a0820161329560008301836131fc565b6132a26000850182612823565b506132b06020830183613213565b6132bd6020850182612864565b506132cb6040830183613256565b6132d86040850182612873565b506132e66060830183613256565b6132f36060850182612873565b50613301608083018361326d565b61330e608085018261288e565b50505050565b600060c0820190506133296000830185612787565b6133366020830184613284565b9392505050565b60006020828403121561335357613352612920565b5b600061336184828501612c03565b91505092915050565b6000602082840312156133805761337f612920565b5b600061338e84828501613241565b91505092915050565b600081356133a4816131d0565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6133e6846133ad565b9350801983169250808416831791505092915050565b6000819050919050565b600061342161341c61341784612819565b6133fc565b612819565b9050919050565b6000819050919050565b61343b82613406565b61344e61344782613428565b83546133ba565b8255505050565b6000813561346281612fac565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff61348b846133ad565b9350801983169250808416831791505092915050565b60006134bc6134b76134b284612832565b6133fc565b612832565b9050919050565b60006134ce826134a1565b9050919050565b60006134e0826134c3565b9050919050565b6000819050919050565b6134fa826134d5565b61350d613506826134e7565b835461346b565b8255505050565b600081356135218161322a565b80915050919050565b60008160a01b9050919050565b600078ffffffffff000000000000000000000000000000000000000061355c8461352a565b9350801983169250808416831791505092915050565b600061358d613588613583846127de565b6133fc565b6127de565b9050919050565b6000819050919050565b6135a782613572565b6135ba6135b382613594565b8354613537565b8255505050565b60008160c81b9050919050565b60007dffffffffff000000000000000000000000000000000000000000000000006135f8846135c1565b9350801983169250808416831791505092915050565b61361782613572565b61362a61362382613594565b83546135ce565b8255505050565b6000813561363e81612bec565b80915050919050565b60008160f01b9050919050565b60007eff00000000000000000000000000000000000000000000000000000000000061367f84613647565b9350801983169250808416831791505092915050565b60006136a082612882565b9050919050565b6000819050919050565b6136ba82613695565b6136cd6136c6826136a7565b8354613654565b8255505050565b6000810160008301806136e681613397565b90506136f28184613432565b50505060018101602083018061370781613455565b905061371381846134f1565b50505060018101604083018061372881613514565b9050613734818461359e565b50505060018101606083018061374981613514565b9050613755818461360e565b50505060018101608083018061376a81613631565b905061377681846136b1565b5050505050565b61378782826136d4565b5050565b600060c0820190506137a060008301856127a6565b6137ad6020830184613284565b9392505050565b60006137bf82612746565b91506137ca83612746565b9250828203905060ff8111156137e3576137e2613130565b5b92915050565b60006137f482612819565b91506137ff83612819565b925082820390508181111561381757613816613130565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600081549050919050565b60008190508160005260206000209050919050565b60008160001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138db6138d68361389b565b6138a8565b9050919050565b60008160a01c9050919050565b600060ff82169050919050565b600061390f61390a836138e2565b6138ef565b9050919050565b60008160a81c9050919050565b600061393661393183613916565b6138ef565b9050919050565b606082016000808301549050613952816138c8565b61395f6000860182612864565b50613969816138fc565b6139766020860182612dc8565b5061398081613923565b61398d6040860182612dc8565b5050505050565b60006139a0838361393d565b60608301905092915050565b6000600182019050919050565b60006139c48261387b565b6139ce8185612da7565b93506139d983613886565b8060005b83811015613a0957816139f08882613994565b97506139fb836139ac565b9250506001810190506139dd565b5085935050505092915050565b600060209050919050565b6000819050919050565b6000613a3e613a398361389b565b6138ef565b9050919050565b60008160081c9050919050565b6000613a65613a6083613a45565b6138ef565b9050919050565b60008160101c9050919050565b6000613a8c613a8783613a6c565b6138ef565b9050919050565b60008160181c9050919050565b6000613ab3613aae83613a93565b6138ef565b9050919050565b60008160201c9050919050565b6000613ada613ad583613aba565b6138ef565b9050919050565b60008160281c9050919050565b6000613b01613afc83613ae1565b6138ef565b9050919050565b60008160301c9050919050565b6000613b28613b2383613b08565b6138ef565b9050919050565b60008160381c9050919050565b6000613b4f613b4a83613b2f565b6138ef565b9050919050565b60008160401c9050919050565b6000613b76613b7183613b56565b6138ef565b9050919050565b60008160481c9050919050565b6000613b9d613b9883613b7d565b6138ef565b9050919050565b60008160501c9050919050565b6000613bc4613bbf83613ba4565b6138ef565b9050919050565b60008160581c9050919050565b6000613beb613be683613bcb565b6138ef565b9050919050565b60008160601c9050919050565b6000613c12613c0d83613bf2565b6138ef565b9050919050565b60008160681c9050919050565b6000613c39613c3483613c19565b6138ef565b9050919050565b60008160701c9050919050565b6000613c60613c5b83613c40565b6138ef565b9050919050565b60008160781c9050919050565b6000613c87613c8283613c67565b6138ef565b9050919050565b60008160801c9050919050565b6000613cae613ca983613c8e565b6138ef565b9050919050565b60008160881c9050919050565b6000613cd5613cd083613cb5565b6138ef565b9050919050565b60008160901c9050919050565b6000613cfc613cf783613cdc565b6138ef565b9050919050565b60008160981c9050919050565b6000613d23613d1e83613d03565b6138ef565b9050919050565b60008160b01c9050919050565b6000613d4a613d4583613d2a565b6138ef565b9050919050565b60008160b81c9050919050565b6000613d71613d6c83613d51565b6138ef565b9050919050565b60008160c01c9050919050565b6000613d98613d9383613d78565b6138ef565b9050919050565b60008160c81c9050919050565b6000613dbf613dba83613d9f565b6138ef565b9050919050565b60008160d01c9050919050565b6000613de6613de183613dc6565b6138ef565b9050919050565b60008160d81c9050919050565b6000613e0d613e0883613ded565b6138ef565b9050919050565b60008160e01c9050919050565b6000613e34613e2f83613e14565b6138ef565b9050919050565b60008160e81c9050919050565b6000613e5b613e5683613e3b565b6138ef565b9050919050565b60008160f01c9050919050565b6000613e82613e7d83613e62565b6138ef565b9050919050565b60008160f81c9050919050565b6000613ea9613ea483613e89565b6138ef565b9050919050565b613eb981613a16565b613ec38184612ea7565b925082613ecf83613a21565b60006001156141fc575b836001602003820110156141fb578154613efb87613ef683613a2b565b612dc8565b602087019650613f1387613f0e83613a52565b612dc8565b602087019650613f2b87613f2683613a79565b612dc8565b602087019650613f4387613f3e83613aa0565b612dc8565b602087019650613f5b87613f5683613ac7565b612dc8565b602087019650613f7387613f6e83613aee565b612dc8565b602087019650613f8b87613f8683613b15565b612dc8565b602087019650613fa387613f9e83613b3c565b612dc8565b602087019650613fbb87613fb683613b63565b612dc8565b602087019650613fd387613fce83613b8a565b612dc8565b602087019650613feb87613fe683613bb1565b612dc8565b60208701965061400387613ffe83613bd8565b612dc8565b60208701965061401b8761401683613bff565b612dc8565b6020870196506140338761402e83613c26565b612dc8565b60208701965061404b8761404683613c4d565b612dc8565b6020870196506140638761405e83613c74565b612dc8565b60208701965061407b8761407683613c9b565b612dc8565b6020870196506140938761408e83613cc2565b612dc8565b6020870196506140ab876140a683613ce9565b612dc8565b6020870196506140c3876140be83613d10565b612dc8565b6020870196506140db876140d6836138fc565b612dc8565b6020870196506140f3876140ee83613923565b612dc8565b60208701965061410b8761410683613d37565b612dc8565b6020870196506141238761411e83613d5e565b612dc8565b60208701965061413b8761413683613d85565b612dc8565b6020870196506141538761414e83613dac565b612dc8565b60208701965061416b8761416683613dd3565b612dc8565b6020870196506141838761417e83613dfa565b612dc8565b60208701965061419b8761419683613e21565b612dc8565b6020870196506141b3876141ae83613e48565b612dc8565b6020870196506141cb876141c683613e6f565b612dc8565b6020870196506141e3876141de83613e96565b612dc8565b60208701965060018301925050602081019050613ed9565b5b6000156146c757815460001561422b5761421e8761421983613a2b565b612dc8565b6020870196506001820191505b600015614251576142448761423f83613a52565b612dc8565b6020870196506001820191505b6000156142775761426a8761426583613a79565b612dc8565b6020870196506001820191505b60001561429d576142908761428b83613aa0565b612dc8565b6020870196506001820191505b6000156142c3576142b6876142b183613ac7565b612dc8565b6020870196506001820191505b6000156142e9576142dc876142d783613aee565b612dc8565b6020870196506001820191505b60001561430f57614302876142fd83613b15565b612dc8565b6020870196506001820191505b600015614335576143288761432383613b3c565b612dc8565b6020870196506001820191505b60001561435b5761434e8761434983613b63565b612dc8565b6020870196506001820191505b600015614381576143748761436f83613b8a565b612dc8565b6020870196506001820191505b6000156143a75761439a8761439583613bb1565b612dc8565b6020870196506001820191505b6000156143cd576143c0876143bb83613bd8565b612dc8565b6020870196506001820191505b6000156143f3576143e6876143e183613bff565b612dc8565b6020870196506001820191505b6000156144195761440c8761440783613c26565b612dc8565b6020870196506001820191505b60001561443f576144328761442d83613c4d565b612dc8565b6020870196506001820191505b600015614465576144588761445383613c74565b612dc8565b6020870196506001820191505b60001561448b5761447e8761447983613c9b565b612dc8565b6020870196506001820191505b6000156144b1576144a48761449f83613cc2565b612dc8565b6020870196506001820191505b6000156144d7576144ca876144c583613ce9565b612dc8565b6020870196506001820191505b6000156144fd576144f0876144eb83613d10565b612dc8565b6020870196506001820191505b6000156145235761451687614511836138fc565b612dc8565b6020870196506001820191505b6000156145495761453c8761453783613923565b612dc8565b6020870196506001820191505b60001561456f576145628761455d83613d37565b612dc8565b6020870196506001820191505b600015614595576145888761458383613d5e565b612dc8565b6020870196506001820191505b6000156145bb576145ae876145a983613d85565b612dc8565b6020870196506001820191505b6000156145e1576145d4876145cf83613dac565b612dc8565b6020870196506001820191505b600015614607576145fa876145f583613dd3565b612dc8565b6020870196506001820191505b60001561462d576146208761461b83613dfa565b612dc8565b6020870196506001820191505b600015614653576146468761464183613e21565b612dc8565b6020870196506001820191505b6000156146795761466c8761466783613e48565b612dc8565b6020870196506001820191505b60001561469f576146928761468d83613e6f565b612dc8565b6020870196506001820191505b6000156146c5576146b8876146b383613e96565b612dc8565b6020870196506001820191505b505b505050505050565b60006108208301600080840185830360008701526146ed83826139b9565b925050600184016147016020870182613eb0565b5060028401614714610420870182613eb0565b50819250505092915050565b61472981612882565b82525050565b6000604082019050818103600083015261474981856146cf565b90506147586020830184614720565b9392505050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261478b5761478a614769565b5b83810192508235915060208301925067ffffffffffffffff8211156147b3576147b261475f565b5b6001820236038313156147c9576147c8614764565b5b509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061480e83856147d1565b935061481b8385846147e2565b614824836147f1565b840190509392505050565b600060c0830161484260008401846131fc565b61484f6000860182612823565b5061485d6020840184613213565b61486a6020860182612864565b506148786040840184613256565b6148856040860182612873565b506148936060840184613213565b6148a06060860182612864565b506148ae60808401846131fc565b6148bb6080860182612823565b506148c960a084018461476e565b85830360a08701526148dc838284614802565b925050508091505092915050565b60006040820190506148ff6000830185612787565b8181036020830152614911818461482f565b90509392505050565b6000614925826127de565b9150614930836127de565b9250828201905064ffffffffff81111561494d5761494c613130565b5b92915050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261497f5761497e614953565b5b80840192508235915067ffffffffffffffff8211156149a1576149a0614958565b5b6020830192506001820236038313156149bd576149bc61495d565b5b509250929050565b600082825260208201905092915050565b60006149e283856149c5565b93506149ef8385846147e2565b6149f8836147f1565b840190509392505050565b614a0c81612819565b82525050565b6000606082019050614a276000830187612cd7565b8181036020830152614a3a8185876149d6565b9050614a496040830184614a03565b95945050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a88602083613005565b9150614a9382614a52565b602082019050919050565b60006020820190508181036000830152614ab781614a7b565b9050919050565b600081905092915050565b6000614ad58385614abe565b9350614ae28385846147e2565b82840190509392505050565b6000614afb828486614ac9565b91508190509392505050565b600081519050919050565b60005b83811015614b30578082015181840152602081019050614b15565b60008484015250505050565b6000614b4782614b07565b614b5181856149c5565b9350614b61818560208601614b12565b614b6a816147f1565b840191505092915050565b60006020820190508181036000830152614b8f8184614b3c565b905092915050565b6000608082019050614bac6000830187612787565b614bb96020830186612753565b614bc66040830185612787565b614bd36060830184612787565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000614c41601883613005565b9150614c4c82614c0b565b602082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000614cad601f83613005565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d3f602283613005565b9150614d4a82614ce3565b604082019050919050565b60006020820190508181036000830152614d6e81614d32565b905091905056fea164736f6c6343000813000a",
    "sourceMap": "2855:25134:8:-:0;;;;;;;;;;;;;936:32:0;955:12;:10;;;:12;;:::i;:::-;936:18;;;:32;;:::i;:::-;2855:25134:8;;640:96:2;693:7;719:10;712:17;;640:96;:::o;1501:153:1:-;1590:13;;1583:20;;;;;;;;;;;1613:34;1638:8;1613:24;;;:34;;:::i;:::-;1501:153;:::o;2426:187:0:-;2499:16;2518:6;;;;;;;;;;;2499:25;;2543:8;2534:6;;:17;;;;;;;;;;;;;;;;;;2597:8;2566:40;;2587:8;2566:40;;;;;;;;;;;;2489:124;2426:187;:::o;2855:25134:8:-;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x6080604052600436106100e15760003560e01c8063846c67ef1161007f578063b759d68511610059578063b759d68514610270578063c3f909d41461028c578063e30c3978146102b7578063f2fde38b146102e2576100e8565b8063846c67ef146101f15780638da5cb5b1461021a578063a76f559814610245576100e8565b80636b45fb3e116100bb5780636b45fb3e1461016f578063715018a61461019a57806379ba5097146101b15780637cc38b28146101c8576100e8565b80635a2519ef146100ed5780635ca1e16514610118578063627e8a3b14610144576100e8565b366100e857005b600080fd5b3480156100f957600080fd5b5061010261030b565b60405161010f9190612762565b60405180910390f35b34801561012457600080fd5b5061012d610310565b60405161013b9291906127b5565b60405180910390f35b34801561015057600080fd5b50610159610390565b60405161016691906127fe565b60405180910390f35b34801561017b57600080fd5b506101846103ae565b6040516101919190612905565b60405180910390f35b3480156101a657600080fd5b506101af610495565b005b3480156101bd57600080fd5b506101c66104a9565b005b3480156101d457600080fd5b506101ef60048036038101906101ea9190612a61565b610536565b005b3480156101fd57600080fd5b5061021860048036038101906102139190612c18565b610df6565b005b34801561022657600080fd5b5061022f611960565b60405161023c9190612ce6565b60405180910390f35b34801561025157600080fd5b5061025a611989565b6040516102679190612762565b60405180910390f35b61028a60048036038101906102859190612d20565b61198e565b005b34801561029857600080fd5b506102a1611d69565b6040516102ae9190612f8a565b60405180910390f35b3480156102c357600080fd5b506102cc611f44565b6040516102d99190612ce6565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190612fd8565b611f6e565b005b602081565b60008060006007604051806060016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900464ffffffffff1664ffffffffff1664ffffffffff168152505090508060000151816020015192509250509091565b6000600760010160049054906101000a900464ffffffffff16905090565b6103b66125aa565b60096040518060a0016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900464ffffffffff1664ffffffffff1664ffffffffff1681526020016001820160199054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160018201601e9054906101000a900460ff161515151581525050905090565b61049d61201b565b6104a76000612099565b565b60006104b36120ca565b90508073ffffffffffffffffffffffffffffffffffffffff166104d4611f44565b73ffffffffffffffffffffffffffffffffffffffff161461052a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052190613088565b60405180910390fd5b61053381612099565b50565b6000610569888860405160200161054e9291906127b5565b604051602081830303815290604052805190602001206120d2565b90506006600082815260200190815260200160002060009054906101000a900460ff16156105c3576040517f48c2688b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105cb6125ff565b60006105d561263c565b60005b868690508110156108c857368787838181106105f7576105f66130a8565b5b90506060020190506000610627878360000160208101906106189190613103565b84602001358560400135612108565b90508073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161061068e576040517f4a36ec0800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809450600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900460ff1660ff1660ff168152505095508073ffffffffffffffffffffffffffffffffffffffff16866000015173ffffffffffffffffffffffffffffffffffffffff16146107d6576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000866040015190505b6001156108b257848160ff16602081106107fd576107fc6130a8565b5b60200201805180919061080f9061315f565b60ff1660ff168152505060036001018160ff1660208110610833576108326130a8565b5b602091828204019190069054906101000a900460ff1660ff16858260ff1660208110610862576108616130a8565b5b602002015160ff16036108b25760008160ff1603156108b25760036002018160ff1660208110610895576108946130a8565b5b602091828204019190069054906101000a900460ff1690506107e0565b50505080806108c090613188565b9150506105d8565b50600060036001016000602081106108e3576108e26130a8565b5b602091828204019190069054906101000a900460ff1660ff1603610933576040517faa6185ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360010160006020811061094b5761094a6130a8565b5b602091828204019190069054906101000a900460ff1660ff1681600060208110610978576109776130a8565b5b602002015160ff1610156109b8576040517fc2ee9b9e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050428763ffffffff1610156109fb576040517fb057a45200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007fe6b82be989101b4eb519770114b997b97b3c8707515286748a871717f0e4ea1c87604051602001610a30929190613314565b604051602081830303815290604052805190602001209050610a94868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508a83612133565b610aca576040517f2522a1c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5085600001354614610b08576040517f5f87bc0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b856020016020810190610b1b9190612fd8565b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610b7f576040517f9a84601500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600760010160049054906101000a900464ffffffffff169050600960010160199054906101000a900464ffffffffff1664ffffffffff168164ffffffffff1614158015610bde5750866080016020810190610bdc919061333d565b155b15610c15576040517f3230825b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866040016020810190610c28919061336a565b64ffffffffff168164ffffffffff1614610c6e576040517fa255a76300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b866060016020810190610c81919061336a565b64ffffffffff16876040016020810190610c9b919061336a565b64ffffffffff161115610cda576040517fc61352f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016006600084815260200190815260200160002060006101000a81548160ff02191690831515021790555060405180606001604052808a81526020018963ffffffff168152602001886040016020810190610d36919061336a565b64ffffffffff1681525060076000820151816000015560208201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060408201518160010160046101000a81548164ffffffffff021916908364ffffffffff1602179055509050508660098181610dae919061377d565b905050887f7ea643ae44677f24e0d6f40168893712daaf729b0a38fe7702d21cb544c841018989604051610de392919061378b565b60405180910390a2505050505050505050565b610dfe61201b565b6000878790501480610e16575060c860ff1687879050115b15610e4d576040517ff0ec1ca400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b848490508787905014610e8c576040517ff1f3053000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e9461263c565b60005b86869050811015610f7557602060ff16878783818110610eba57610eb96130a8565b5b9050602002016020810190610ecf9190613103565b60ff1610610f09576040517fb9ae8e5200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81878783818110610f1d57610f1c6130a8565b5b9050602002016020810190610f329190613103565b60ff1660208110610f4657610f456130a8565b5b602002018051809190610f589061315f565b60ff1660ff16815250508080610f6d90613188565b915050610e97565b5060005b602060ff168110156111cd5760008160016020610f9691906137b4565b60ff16610fa391906137e9565b905060008114158015610fde575080858260208110610fc557610fc46130a8565b5b602002016020810190610fd89190613103565b60ff1610155b8061101e575060008114801561101d57506000858260208110611004576110036130a8565b5b6020020160208101906110179190613103565b60ff1614155b5b15611055576040517fff063a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008087836020811061106b5761106a6130a8565b5b60200201602081019061107e9190613103565b60ff1614905080156110e45783826020811061109d5761109c6130a8565b5b602002015160ff16600010156110df576040517f8db4e75d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b8565b8682602081106110f7576110f66130a8565b5b60200201602081019061110a9190613103565b60ff168483602081106111205761111f6130a8565b5b602002015160ff161015611160576040517fbb00136e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83868360208110611174576111736130a8565b5b6020020160208101906111879190613103565b60ff166020811061119b5761119a6130a8565b5b6020020180518091906111ad9061315f565b60ff1660ff16815250505b505080806111c590613188565b915050610f79565b505060006003600001805480602002602001604051908101604052809291908181526020016000905b828210156112b4578382906000526020600020016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900460ff1660ff1660ff1681525050815260200190600101906111f6565b50505050905060005b81518110156114075760008282815181106112db576112da6130a8565b5b6020026020010151600001519050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff02191690556000820160156101000a81549060ff02191690555050600360000180548061138f5761138e61381d565b5b60019003818190600052602060002001600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549060ff02191690556000820160156101000a81549060ff0219169055505090555080806113ff90613188565b9150506112bd565b506000600360000180549050146114215761142061384c565b5b83600360010190602061143592919061265f565b5082600360020190602061144a92919061265f565b506000805b898990508110156117565789898281811061146d5761146c6130a8565b5b90506020020160208101906114829190612fd8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16106114e6576040517f4a36ec0800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060405180606001604052808c8c85818110611506576115056130a8565b5b905060200201602081019061151b9190612fd8565b73ffffffffffffffffffffffffffffffffffffffff1681526020018360ff1681526020018a8a85818110611552576115516130a8565b5b90506020020160208101906115679190613103565b60ff16815250905080600260008d8d86818110611587576115866130a8565b5b905060200201602081019061159c9190612fd8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff021916908360ff16021790555060408201518160000160156101000a81548160ff021916908360ff1602179055509050506003600001819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff021916908360ff16021790555060408201518160000160156101000a81548160ff021916908360ff16021790555050508a8a8381811061172b5761172a6130a8565b5b90506020020160208101906117409190612fd8565b925050808061174e90613188565b91505061144f565b50821561191b576000600760010160049054906101000a900464ffffffffff16905060405180606001604052806000801b8152602001600063ffffffff1681526020018264ffffffffff1681525060076000820151816000015560208201518160010160006101000a81548163ffffffff021916908363ffffffff16021790555060408201518160010160046101000a81548164ffffffffff021916908364ffffffffff1602179055509050506040518060a001604052804681526020013073ffffffffffffffffffffffffffffffffffffffff1681526020018264ffffffffff1681526020018264ffffffffff1681526020016001151581525060096000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548164ffffffffff021916908364ffffffffff16021790555060608201518160010160196101000a81548164ffffffffff021916908364ffffffffff160217905550608082015181600101601e6101000a81548160ff021916908315150217905550905050505b7f0a4974ad206b9c736f9ab2feac1c9b1d043fe4ef377c70ae45659f2ef089f03e60038460405161194d92919061472f565b60405180910390a1505050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60c881565b60006007604051806060016040529081600082015481526020016001820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160049054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815250509050806040015164ffffffffff16600960010160199054906101000a900464ffffffffff1664ffffffffff1611611a59576040517fadb1331800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b46846000013514611a96576040517f5f87bc0000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16846020016020810190611ac09190612fd8565b73ffffffffffffffffffffffffffffffffffffffff1614611b0d576040517f9a84601500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015163ffffffff16421115611b51576040517f9ba6743000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806040015164ffffffffff16846040016020810190611b70919061336a565b64ffffffffff1614611bae576040517fd9c6386f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f08d275622006c4ca82d03f498e90163cafd53c663a48470c3b52ac8bfbd9f52c85604051602001611be39291906148ea565b604051602081830303815290604052805190602001209050611c4b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050836000015183612133565b611c81576040517f2522a1c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018260400151611c92919061491a565b600760010160046101000a81548164ffffffffff021916908364ffffffffff160217905550611ce7856060016020810190611ccd9190612fd8565b8660800135878060a00190611ce29190614962565b61214a565b846040016020810190611cfa919061336a565b64ffffffffff167f87d58fdd48be753fb9ef4ec8a5895086c401506da8b4d752abc90602c3e62d1d866060016020810190611d359190612fd8565b878060a00190611d459190614962565b8960800135604051611d5a9493929190614a12565b60405180910390a25050505050565b611d716126fc565b600360405180606001604052908160008201805480602002602001604051908101604052809291908181526020016000905b82821015611e61578382906000526020600020016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900460ff1660ff1660ff1681526020016000820160159054906101000a900460ff1660ff1660ff168152505081526020019060010190611da3565b50505050815260200160018201602080602002604051908101604052809291908260208015611ecb576020028201916000905b82829054906101000a900460ff1660ff1681526020019060010190602082600001049283019260010382029150808411611e945790505b5050505050815260200160028201602080602002604051908101604052809291908260208015611f36576020028201916000905b82829054906101000a900460ff1660ff1681526020019060010190602082600001049283019260010382029150808411611eff5790505b505050505081525050905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f7661201b565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16611fd6611960565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6120236120ca565b73ffffffffffffffffffffffffffffffffffffffff16612041611960565b73ffffffffffffffffffffffffffffffffffffffff1614612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e90614a9e565b60405180910390fd5b565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556120c781612206565b50565b600033905090565b60007f19457468657265756d205369676e6564204d6573736167653a0a33320000000060005281601c52603c6000209050919050565b6000806000612119878787876122ca565b91509150612126816123ac565b8192505050949350505050565b6000826121408584612512565b1490509392505050565b6000808573ffffffffffffffffffffffffffffffffffffffff16858585604051612175929190614aee565b60006040518083038185875af1925050503d80600081146121b2576040519150601f19603f3d011682016040523d82523d6000602084013e6121b7565b606091505b5091509150816121fe57806040517f70de1b4b0000000000000000000000000000000000000000000000000000000081526004016121f59190614b75565b60405180910390fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156123055760006003915091506123a3565b60006001878787876040516000815260200160405260405161232a9493929190614b97565b6020604051602081039080840390855afa15801561234c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361239a576000600192509250506123a3565b80600092509250505b94509492505050565b600060048111156123c0576123bf614bdc565b5b8160048111156123d3576123d2614bdc565b5b031561250f57600160048111156123ed576123ec614bdc565b5b816004811115612400576123ff614bdc565b5b03612440576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243790614c57565b60405180910390fd5b6002600481111561245457612453614bdc565b5b81600481111561246757612466614bdc565b5b036124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e90614cc3565b60405180910390fd5b600360048111156124bb576124ba614bdc565b5b8160048111156124ce576124cd614bdc565b5b0361250e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250590614d55565b60405180910390fd5b5b50565b60008082905060005b845181101561255d576125488286838151811061253b5761253a6130a8565b5b6020026020010151612568565b9150808061255590613188565b91505061251b565b508091505092915050565b60008183106125805761257b8284612593565b61258b565b61258a8383612593565b5b905092915050565b600082600052816020526040600020905092915050565b6040518060a0016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600064ffffffffff168152602001600064ffffffffff1681526020016000151581525090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff168152602001600060ff1681525090565b604051806104000160405280602090602082028036833780820191505090505090565b826020601f016020900481019282156126eb5791602002820160005b838211156126bc57833560ff1683826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261267b565b80156126e95782816101000a81549060ff02191690556001016020816000010492830192600103026126bc565b505b5090506126f89190612729565b5090565b60405180606001604052806060815260200161271661263c565b815260200161272361263c565b81525090565b5b8082111561274257600081600090555060010161272a565b5090565b600060ff82169050919050565b61275c81612746565b82525050565b60006020820190506127776000830184612753565b92915050565b6000819050919050565b6127908161277d565b82525050565b600063ffffffff82169050919050565b6127af81612796565b82525050565b60006040820190506127ca6000830185612787565b6127d760208301846127a6565b9392505050565b600064ffffffffff82169050919050565b6127f8816127de565b82525050565b600060208201905061281360008301846127ef565b92915050565b6000819050919050565b61282c81612819565b82525050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061285d82612832565b9050919050565b61286d81612852565b82525050565b61287c816127de565b82525050565b60008115159050919050565b61289781612882565b82525050565b60a0820160008201516128b36000850182612823565b5060208201516128c66020850182612864565b5060408201516128d96040850182612873565b5060608201516128ec6060850182612873565b5060808201516128ff608085018261288e565b50505050565b600060a08201905061291a600083018461289d565b92915050565b600080fd5b600080fd5b6129338161277d565b811461293e57600080fd5b50565b6000813590506129508161292a565b92915050565b61295f81612796565b811461296a57600080fd5b50565b60008135905061297c81612956565b92915050565b600080fd5b600060a0828403121561299d5761299c612982565b5b81905092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126129cb576129ca6129a6565b5b8235905067ffffffffffffffff8111156129e8576129e76129ab565b5b602083019150836020820283011115612a0457612a036129b0565b5b9250929050565b60008083601f840112612a2157612a206129a6565b5b8235905067ffffffffffffffff811115612a3e57612a3d6129ab565b5b602083019150836060820283011115612a5a57612a596129b0565b5b9250929050565b6000806000806000806000610120888a031215612a8157612a80612920565b5b6000612a8f8a828b01612941565b9750506020612aa08a828b0161296d565b9650506040612ab18a828b01612987565b95505060e088013567ffffffffffffffff811115612ad257612ad1612925565b5b612ade8a828b016129b5565b945094505061010088013567ffffffffffffffff811115612b0257612b01612925565b5b612b0e8a828b01612a0b565b925092505092959891949750929550565b60008083601f840112612b3557612b346129a6565b5b8235905067ffffffffffffffff811115612b5257612b516129ab565b5b602083019150836020820283011115612b6e57612b6d6129b0565b5b9250929050565b60008083601f840112612b8b57612b8a6129a6565b5b8235905067ffffffffffffffff811115612ba857612ba76129ab565b5b602083019150836020820283011115612bc457612bc36129b0565b5b9250929050565b6000819050826020800282011115612be657612be56129b0565b5b92915050565b612bf581612882565b8114612c0057600080fd5b50565b600081359050612c1281612bec565b92915050565b6000806000806000806000610860888a031215612c3857612c37612920565b5b600088013567ffffffffffffffff811115612c5657612c55612925565b5b612c628a828b01612b1f565b9750975050602088013567ffffffffffffffff811115612c8557612c84612925565b5b612c918a828b01612b75565b95509550506040612ca48a828b01612bcb565b935050610440612cb68a828b01612bcb565b925050610840612cc88a828b01612c03565b91505092959891949750929550565b612ce081612852565b82525050565b6000602082019050612cfb6000830184612cd7565b92915050565b600060c08284031215612d1757612d16612982565b5b81905092915050565b600080600060408486031215612d3957612d38612920565b5b600084013567ffffffffffffffff811115612d5757612d56612925565b5b612d6386828701612d01565b935050602084013567ffffffffffffffff811115612d8457612d83612925565b5b612d90868287016129b5565b92509250509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612dd181612746565b82525050565b606082016000820151612ded6000850182612864565b506020820151612e006020850182612dc8565b506040820151612e136040850182612dc8565b50505050565b6000612e258383612dd7565b60608301905092915050565b6000602082019050919050565b6000612e4982612d9c565b612e538185612da7565b9350612e5e83612db8565b8060005b83811015612e8f578151612e768882612e19565b9750612e8183612e31565b925050600181019050612e62565b5085935050505092915050565b600060209050919050565b600081905092915050565b6000819050919050565b6000612ec88383612dc8565b60208301905092915050565b6000602082019050919050565b612eea81612e9c565b612ef48184612ea7565b9250612eff82612eb2565b8060005b83811015612f30578151612f178782612ebc565b9650612f2283612ed4565b925050600181019050612f03565b505050505050565b6000610820830160008301518482036000860152612f568282612e3e565b9150506020830151612f6b6020860182612ee1565b506040830151612f7f610420860182612ee1565b508091505092915050565b60006020820190508181036000830152612fa48184612f38565b905092915050565b612fb581612852565b8114612fc057600080fd5b50565b600081359050612fd281612fac565b92915050565b600060208284031215612fee57612fed612920565b5b6000612ffc84828501612fc3565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060008201527f6e6577206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613072602983613005565b915061307d82613016565b604082019050919050565b600060208201905081810360008301526130a181613065565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6130e081612746565b81146130eb57600080fd5b50565b6000813590506130fd816130d7565b92915050565b60006020828403121561311957613118612920565b5b6000613127848285016130ee565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061316a82612746565b915060ff820361317d5761317c613130565b5b600182019050919050565b600061319382612819565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131c5576131c4613130565b5b600182019050919050565b6131d981612819565b81146131e457600080fd5b50565b6000813590506131f6816131d0565b92915050565b600061320b60208401846131e7565b905092915050565b60006132226020840184612fc3565b905092915050565b613233816127de565b811461323e57600080fd5b50565b6000813590506132508161322a565b92915050565b60006132656020840184613241565b905092915050565b600061327c6020840184612c03565b905092915050565b60a0820161329560008301836131fc565b6132a26000850182612823565b506132b06020830183613213565b6132bd6020850182612864565b506132cb6040830183613256565b6132d86040850182612873565b506132e66060830183613256565b6132f36060850182612873565b50613301608083018361326d565b61330e608085018261288e565b50505050565b600060c0820190506133296000830185612787565b6133366020830184613284565b9392505050565b60006020828403121561335357613352612920565b5b600061336184828501612c03565b91505092915050565b6000602082840312156133805761337f612920565b5b600061338e84828501613241565b91505092915050565b600081356133a4816131d0565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6133e6846133ad565b9350801983169250808416831791505092915050565b6000819050919050565b600061342161341c61341784612819565b6133fc565b612819565b9050919050565b6000819050919050565b61343b82613406565b61344e61344782613428565b83546133ba565b8255505050565b6000813561346281612fac565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff61348b846133ad565b9350801983169250808416831791505092915050565b60006134bc6134b76134b284612832565b6133fc565b612832565b9050919050565b60006134ce826134a1565b9050919050565b60006134e0826134c3565b9050919050565b6000819050919050565b6134fa826134d5565b61350d613506826134e7565b835461346b565b8255505050565b600081356135218161322a565b80915050919050565b60008160a01b9050919050565b600078ffffffffff000000000000000000000000000000000000000061355c8461352a565b9350801983169250808416831791505092915050565b600061358d613588613583846127de565b6133fc565b6127de565b9050919050565b6000819050919050565b6135a782613572565b6135ba6135b382613594565b8354613537565b8255505050565b60008160c81b9050919050565b60007dffffffffff000000000000000000000000000000000000000000000000006135f8846135c1565b9350801983169250808416831791505092915050565b61361782613572565b61362a61362382613594565b83546135ce565b8255505050565b6000813561363e81612bec565b80915050919050565b60008160f01b9050919050565b60007eff00000000000000000000000000000000000000000000000000000000000061367f84613647565b9350801983169250808416831791505092915050565b60006136a082612882565b9050919050565b6000819050919050565b6136ba82613695565b6136cd6136c6826136a7565b8354613654565b8255505050565b6000810160008301806136e681613397565b90506136f28184613432565b50505060018101602083018061370781613455565b905061371381846134f1565b50505060018101604083018061372881613514565b9050613734818461359e565b50505060018101606083018061374981613514565b9050613755818461360e565b50505060018101608083018061376a81613631565b905061377681846136b1565b5050505050565b61378782826136d4565b5050565b600060c0820190506137a060008301856127a6565b6137ad6020830184613284565b9392505050565b60006137bf82612746565b91506137ca83612746565b9250828203905060ff8111156137e3576137e2613130565b5b92915050565b60006137f482612819565b91506137ff83612819565b925082820390508181111561381757613816613130565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600081549050919050565b60008190508160005260206000209050919050565b60008160001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138db6138d68361389b565b6138a8565b9050919050565b60008160a01c9050919050565b600060ff82169050919050565b600061390f61390a836138e2565b6138ef565b9050919050565b60008160a81c9050919050565b600061393661393183613916565b6138ef565b9050919050565b606082016000808301549050613952816138c8565b61395f6000860182612864565b50613969816138fc565b6139766020860182612dc8565b5061398081613923565b61398d6040860182612dc8565b5050505050565b60006139a0838361393d565b60608301905092915050565b6000600182019050919050565b60006139c48261387b565b6139ce8185612da7565b93506139d983613886565b8060005b83811015613a0957816139f08882613994565b97506139fb836139ac565b9250506001810190506139dd565b5085935050505092915050565b600060209050919050565b6000819050919050565b6000613a3e613a398361389b565b6138ef565b9050919050565b60008160081c9050919050565b6000613a65613a6083613a45565b6138ef565b9050919050565b60008160101c9050919050565b6000613a8c613a8783613a6c565b6138ef565b9050919050565b60008160181c9050919050565b6000613ab3613aae83613a93565b6138ef565b9050919050565b60008160201c9050919050565b6000613ada613ad583613aba565b6138ef565b9050919050565b60008160281c9050919050565b6000613b01613afc83613ae1565b6138ef565b9050919050565b60008160301c9050919050565b6000613b28613b2383613b08565b6138ef565b9050919050565b60008160381c9050919050565b6000613b4f613b4a83613b2f565b6138ef565b9050919050565b60008160401c9050919050565b6000613b76613b7183613b56565b6138ef565b9050919050565b60008160481c9050919050565b6000613b9d613b9883613b7d565b6138ef565b9050919050565b60008160501c9050919050565b6000613bc4613bbf83613ba4565b6138ef565b9050919050565b60008160581c9050919050565b6000613beb613be683613bcb565b6138ef565b9050919050565b60008160601c9050919050565b6000613c12613c0d83613bf2565b6138ef565b9050919050565b60008160681c9050919050565b6000613c39613c3483613c19565b6138ef565b9050919050565b60008160701c9050919050565b6000613c60613c5b83613c40565b6138ef565b9050919050565b60008160781c9050919050565b6000613c87613c8283613c67565b6138ef565b9050919050565b60008160801c9050919050565b6000613cae613ca983613c8e565b6138ef565b9050919050565b60008160881c9050919050565b6000613cd5613cd083613cb5565b6138ef565b9050919050565b60008160901c9050919050565b6000613cfc613cf783613cdc565b6138ef565b9050919050565b60008160981c9050919050565b6000613d23613d1e83613d03565b6138ef565b9050919050565b60008160b01c9050919050565b6000613d4a613d4583613d2a565b6138ef565b9050919050565b60008160b81c9050919050565b6000613d71613d6c83613d51565b6138ef565b9050919050565b60008160c01c9050919050565b6000613d98613d9383613d78565b6138ef565b9050919050565b60008160c81c9050919050565b6000613dbf613dba83613d9f565b6138ef565b9050919050565b60008160d01c9050919050565b6000613de6613de183613dc6565b6138ef565b9050919050565b60008160d81c9050919050565b6000613e0d613e0883613ded565b6138ef565b9050919050565b60008160e01c9050919050565b6000613e34613e2f83613e14565b6138ef565b9050919050565b60008160e81c9050919050565b6000613e5b613e5683613e3b565b6138ef565b9050919050565b60008160f01c9050919050565b6000613e82613e7d83613e62565b6138ef565b9050919050565b60008160f81c9050919050565b6000613ea9613ea483613e89565b6138ef565b9050919050565b613eb981613a16565b613ec38184612ea7565b925082613ecf83613a21565b60006001156141fc575b836001602003820110156141fb578154613efb87613ef683613a2b565b612dc8565b602087019650613f1387613f0e83613a52565b612dc8565b602087019650613f2b87613f2683613a79565b612dc8565b602087019650613f4387613f3e83613aa0565b612dc8565b602087019650613f5b87613f5683613ac7565b612dc8565b602087019650613f7387613f6e83613aee565b612dc8565b602087019650613f8b87613f8683613b15565b612dc8565b602087019650613fa387613f9e83613b3c565b612dc8565b602087019650613fbb87613fb683613b63565b612dc8565b602087019650613fd387613fce83613b8a565b612dc8565b602087019650613feb87613fe683613bb1565b612dc8565b60208701965061400387613ffe83613bd8565b612dc8565b60208701965061401b8761401683613bff565b612dc8565b6020870196506140338761402e83613c26565b612dc8565b60208701965061404b8761404683613c4d565b612dc8565b6020870196506140638761405e83613c74565b612dc8565b60208701965061407b8761407683613c9b565b612dc8565b6020870196506140938761408e83613cc2565b612dc8565b6020870196506140ab876140a683613ce9565b612dc8565b6020870196506140c3876140be83613d10565b612dc8565b6020870196506140db876140d6836138fc565b612dc8565b6020870196506140f3876140ee83613923565b612dc8565b60208701965061410b8761410683613d37565b612dc8565b6020870196506141238761411e83613d5e565b612dc8565b60208701965061413b8761413683613d85565b612dc8565b6020870196506141538761414e83613dac565b612dc8565b60208701965061416b8761416683613dd3565b612dc8565b6020870196506141838761417e83613dfa565b612dc8565b60208701965061419b8761419683613e21565b612dc8565b6020870196506141b3876141ae83613e48565b612dc8565b6020870196506141cb876141c683613e6f565b612dc8565b6020870196506141e3876141de83613e96565b612dc8565b60208701965060018301925050602081019050613ed9565b5b6000156146c757815460001561422b5761421e8761421983613a2b565b612dc8565b6020870196506001820191505b600015614251576142448761423f83613a52565b612dc8565b6020870196506001820191505b6000156142775761426a8761426583613a79565b612dc8565b6020870196506001820191505b60001561429d576142908761428b83613aa0565b612dc8565b6020870196506001820191505b6000156142c3576142b6876142b183613ac7565b612dc8565b6020870196506001820191505b6000156142e9576142dc876142d783613aee565b612dc8565b6020870196506001820191505b60001561430f57614302876142fd83613b15565b612dc8565b6020870196506001820191505b600015614335576143288761432383613b3c565b612dc8565b6020870196506001820191505b60001561435b5761434e8761434983613b63565b612dc8565b6020870196506001820191505b600015614381576143748761436f83613b8a565b612dc8565b6020870196506001820191505b6000156143a75761439a8761439583613bb1565b612dc8565b6020870196506001820191505b6000156143cd576143c0876143bb83613bd8565b612dc8565b6020870196506001820191505b6000156143f3576143e6876143e183613bff565b612dc8565b6020870196506001820191505b6000156144195761440c8761440783613c26565b612dc8565b6020870196506001820191505b60001561443f576144328761442d83613c4d565b612dc8565b6020870196506001820191505b600015614465576144588761445383613c74565b612dc8565b6020870196506001820191505b60001561448b5761447e8761447983613c9b565b612dc8565b6020870196506001820191505b6000156144b1576144a48761449f83613cc2565b612dc8565b6020870196506001820191505b6000156144d7576144ca876144c583613ce9565b612dc8565b6020870196506001820191505b6000156144fd576144f0876144eb83613d10565b612dc8565b6020870196506001820191505b6000156145235761451687614511836138fc565b612dc8565b6020870196506001820191505b6000156145495761453c8761453783613923565b612dc8565b6020870196506001820191505b60001561456f576145628761455d83613d37565b612dc8565b6020870196506001820191505b600015614595576145888761458383613d5e565b612dc8565b6020870196506001820191505b6000156145bb576145ae876145a983613d85565b612dc8565b6020870196506001820191505b6000156145e1576145d4876145cf83613dac565b612dc8565b6020870196506001820191505b600015614607576145fa876145f583613dd3565b612dc8565b6020870196506001820191505b60001561462d576146208761461b83613dfa565b612dc8565b6020870196506001820191505b600015614653576146468761464183613e21565b612dc8565b6020870196506001820191505b6000156146795761466c8761466783613e48565b612dc8565b6020870196506001820191505b60001561469f576146928761468d83613e6f565b612dc8565b6020870196506001820191505b6000156146c5576146b8876146b383613e96565b612dc8565b6020870196506001820191505b505b505050505050565b60006108208301600080840185830360008701526146ed83826139b9565b925050600184016147016020870182613eb0565b5060028401614714610420870182613eb0565b50819250505092915050565b61472981612882565b82525050565b6000604082019050818103600083015261474981856146cf565b90506147586020830184614720565b9392505050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261478b5761478a614769565b5b83810192508235915060208301925067ffffffffffffffff8211156147b3576147b261475f565b5b6001820236038313156147c9576147c8614764565b5b509250929050565b600082825260208201905092915050565b82818337600083830152505050565b6000601f19601f8301169050919050565b600061480e83856147d1565b935061481b8385846147e2565b614824836147f1565b840190509392505050565b600060c0830161484260008401846131fc565b61484f6000860182612823565b5061485d6020840184613213565b61486a6020860182612864565b506148786040840184613256565b6148856040860182612873565b506148936060840184613213565b6148a06060860182612864565b506148ae60808401846131fc565b6148bb6080860182612823565b506148c960a084018461476e565b85830360a08701526148dc838284614802565b925050508091505092915050565b60006040820190506148ff6000830185612787565b8181036020830152614911818461482f565b90509392505050565b6000614925826127de565b9150614930836127de565b9250828201905064ffffffffff81111561494d5761494c613130565b5b92915050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261497f5761497e614953565b5b80840192508235915067ffffffffffffffff8211156149a1576149a0614958565b5b6020830192506001820236038313156149bd576149bc61495d565b5b509250929050565b600082825260208201905092915050565b60006149e283856149c5565b93506149ef8385846147e2565b6149f8836147f1565b840190509392505050565b614a0c81612819565b82525050565b6000606082019050614a276000830187612cd7565b8181036020830152614a3a8185876149d6565b9050614a496040830184614a03565b95945050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a88602083613005565b9150614a9382614a52565b602082019050919050565b60006020820190508181036000830152614ab781614a7b565b9050919050565b600081905092915050565b6000614ad58385614abe565b9350614ae28385846147e2565b82840190509392505050565b6000614afb828486614ac9565b91508190509392505050565b600081519050919050565b60005b83811015614b30578082015181840152602081019050614b15565b60008484015250505050565b6000614b4782614b07565b614b5181856149c5565b9350614b61818560208601614b12565b614b6a816147f1565b840191505092915050565b60006020820190508181036000830152614b8f8184614b3c565b905092915050565b6000608082019050614bac6000830187612787565b614bb96020830186612753565b614bc66040830185612787565b614bd36060830184612787565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000614c41601883613005565b9150614c4c82614c0b565b602082019050919050565b60006020820190508181036000830152614c7081614c34565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000614cad601f83613005565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d3f602283613005565b9150614d4a82614ce3565b604082019050919050565b60006020820190508181036000830152614d6e81614d32565b905091905056fea164736f6c6343000813000a",
    "sourceMap": "2855:25134:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2939:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24349:247;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24236:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24602;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1824:101:0;;;;;;;;;;;;;:::i;:::-;;1734:212:1;;;;;;;;;;;;;:::i;:::-;;11087:4554:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19676:4061;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1201:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2982:43:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17180:1294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24141:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;847:99:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1139:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2939:37:8;2974:2;2939:37;:::o;24349:247::-;24389:12;24403:17;24432:51;24486:24;24432:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24528:21;:26;;;24556:21;:32;;;24520:69;;;;;24349:247;;:::o;24236:107::-;24279:6;24304:24;:32;;;;;;;;;;;;24297:39;;24236:107;:::o;24602:::-;24650:19;;:::i;:::-;24688:14;24681:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24602:107;:::o;1824:101:0:-;1094:13;:11;:13::i;:::-;1888:30:::1;1915:1;1888:18;:30::i;:::-;1824:101::o:0;1734:212:1:-;1786:14;1803:12;:10;:12::i;:::-;1786:29;;1851:6;1833:24;;:14;:12;:14::i;:::-;:24;;;1825:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;1913:26;1932:6;1913:18;:26::i;:::-;1776:170;1734:212::o;11087:4554:8:-;11301:18;11322:69;11372:4;11378:10;11361:28;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11351:39;;;;;;11322:28;:69::i;:::-;11301:90;;11704:18;:30;11723:10;11704:30;;;;;;;;;;;;;;;;;;;;;11700:91;;;11757:23;;;;;;;;;;;;;;11700:91;11986:20;;:::i;:::-;12020:19;12068:40;;:::i;:::-;12156:9;12151:1347;12175:10;;:17;;12171:1;:21;12151:1347;;;12217:22;12242:10;;12253:1;12242:13;;;;;;;:::i;:::-;;;;;;;12217:38;;12273:21;12297:46;12311:10;12323:3;:5;;;;;;;;;;:::i;:::-;12330:3;:5;;;12337:3;:5;;;12297:13;:46::i;:::-;12273:70;;12519:13;12504:28;;:11;:28;;;12500:124;;12563:42;;;;;;;;;;;;;;12500:124;12655:13;12641:27;;12696:9;:24;12706:13;12696:24;;;;;;;;;;;;;;;12687:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12757:13;12742:28;;:6;:11;;;:28;;;12738:97;;12801:15;;;;;;;;;;;;;;12738:97;12852:11;12866:6;:12;;;12852:26;;12896:588;12903:4;12896:588;;;12931:15;12947:5;12931:22;;;;;;;;;:::i;:::-;;;;;:24;;;;;;;;:::i;:::-;;;;;;;;;13007:8;:21;;13029:5;13007:28;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;12981:54;;:15;12997:5;12981:22;;;;;;;;;:::i;:::-;;;;;;:54;;;13248:5;12977:299;13310:1;13301:5;:10;;;13297:110;13379:5;13297:110;13437:8;:21;;13459:5;13437:28;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;13429:36;;12896:588;;;12199:1299;;;12194:3;;;;;:::i;:::-;;;;12151:1347;;;;13730:1;13702:8;:21;;13724:1;13702:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:29;;;13698:90;;13758:15;;;;;;;;;;;;;;13698:90;13878:8;:21;;13900:1;13878:24;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;13857:45;;:15;13873:1;13857:18;;;;;;;:::i;:::-;;;;;;:45;;;13853:112;;;13929:21;;;;;;;;;;;;;;13853:112;11903:2072;;;14002:15;13989:10;:28;;;13985:94;;;14040:28;;;;;;;;;;;;;;13985:94;14139:18;812:59;14245:8;14186:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14176:79;;;;;;14139:116;;14274:51;14293:13;;14274:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14308:4;14314:10;14274:18;:51::i;:::-;14269:121;;14352:23;;;;;;;;;;;;;;14269:121;14089:311;14431:8;:16;;;14414:13;:33;14410:85;;14470:14;;;;;;;;;;;;;;14410:85;14526:8;:17;;;;;;;;;;:::i;:::-;14509:34;;14517:4;14509:34;;;14505:87;;14566:15;;;;;;;;;;;;;;14505:87;14602:14;14619:24;:32;;;;;;;;;;;;14602:49;;14831:14;:26;;;;;;;;;;;;14820:37;;:7;:37;;;;:71;;;;;14862:8;:29;;;;;;;;;;:::i;:::-;14861:30;14820:71;14816:121;;;14914:12;;;;;;;;;;;;;;14816:121;15089:8;:19;;;;;;;;;;:::i;:::-;15078:30;;:7;:30;;;15074:85;;15131:17;;;;;;;;;;;;;;15074:85;15195:8;:20;;;;;;;;;;:::i;:::-;15173:42;;:8;:19;;;;;;;;;;:::i;:::-;:42;;;15169:98;;;15238:18;;;;;;;;;;;;;;15169:98;15372:4;15339:18;:30;15358:10;15339:30;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;15413:136;;;;;;;;15456:4;15413:136;;;;15486:10;15413:136;;;;;;15519:8;:19;;;;;;;;;;:::i;:::-;15413:136;;;;;15386:24;:163;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15576:8;15559:14;:25;;;;;;:::i;:::-;;;;15607:4;15599:35;15613:10;15625:8;15599:35;;;;;;;:::i;:::-;;;;;;;;11291:4350;;11087:4554;;;;;;;:::o;19676:4061::-;1094:13:0;:11;:13::i;:::-;19965:1:8::1;19939:15;;:22;;:27;:71;;;;3022:3;19970:40;;:15;;:22;;:40;19939:71;19935:134;;;20033:25;;;;;;;;;;;;;;19935:134;20109:12;;:19;;20083:15;;:22;;:45;20079:111;;20151:28;;;;;;;;;;;;;;20079:111;20313:44;;:::i;:::-;20431:9;20426:239;20450:12;;:19;;20446:1;:23;20426:239;;;2974:2;20498:29;;:12;;20511:1;20498:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:29;;;20494:101;;20558:18;;;;;;;;;;;;;;20494:101;20612:19;20632:12;;20645:1;20632:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;20612:36;;;;;;;;;:::i;:::-;;;;;:38;;;;;;;;:::i;:::-;;;;;;;::::0;::::1;20471:3;;;;;:::i;:::-;;;;20426:239;;;;20847:9;20842:1086;2974:2;20862:14;;:1;:14;20842:1086;;;20901:9;20930:1;20926;2974:2;20913:14;;;;:::i;:::-;:18;;;;;;:::i;:::-;20901:30;;21057:1;21052;:6;;:30;;;;;21081:1;21062:12;21075:1;21062:15;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:20;;;;21052:30;21051:68;;;;21093:1;21088;:6;:30;;;;;21117:1;21098:12;21111:1;21098:15;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:20;;;;21088:30;21051:68;21047:146;;;21150:24;;;;;;;;;;;;;;21047:146;21210:13;21245:1:::0;21226:12:::1;21239:1;21226:15;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:20;;;21210:36;;21268:8;21264:650;;;21376:19;21396:1;21376:22;;;;;;;:::i;:::-;;;;;;21372:26;;:1;:26;21368:111;;;21433:23;;;;;;;;;;;;;;21368:111;21264:650;;;21617:12;21630:1;21617:15;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;21592:40;;:19;21612:1;21592:22;;;;;;;:::i;:::-;;;;;;:40;;;21588:126;;;21667:24;;;;;;;;;;;;;;21588:126;21735:19;21755:12;21768:1;21755:15;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;21735:36;;;;;;;;;:::i;:::-;;;;;:38;;;;;;;;:::i;:::-;;;;;;;::::0;::::1;21264:650;20883:1045;;20878:3;;;;;:::i;:::-;;;;20842:1086;;;;20200:1738;21948:26;21977:8;:16;;21948:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;22051:9;22046:202;22070:10;:17;22066:1;:21;22046:202;;;22108:24;22135:10;22146:1;22135:13;;;;;;;;:::i;:::-;;;;;;;;:18;;;22108:45;;22174:9;:27;22184:16;22174:27;;;;;;;;;;;;;;;;22167:34:::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22215:8;:16;;:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22094:154;22089:3;;;;;:::i;:::-;;;;22046:202;;;;22383:1;22356:8;:16;;:23;;;;:28;22349:36;;;;:::i;:::-;;22419:12;22395:8;:21;;:36;;;;;;;:::i;:::-;;22465:12;22441:8;:21;;:36;;;;;;;:::i;:::-;;22615:18;22663:9:::0;22658:465:::1;22682:15;;:22;;22678:1;:26;22658:465;;;22743:15;;22759:1;22743:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22729:32;;:10;:32;;;22725:120;;22788:42;;;;;;;;;;;;;;22725:120;22858:20;22897:75;;;;;;;;22911:15;;22927:1;22911:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22897:75;;;;;;22944:1;22897:75;;;;;;22955:12;;22968:1;22955:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22897:75;;;;::::0;22858:114:::1;;23018:6;22986:9;:29;22996:15;;23012:1;22996:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22986:29;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23038:8;:16;;23060:6;23038:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23094:15;;23110:1;23094:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23081:31;;22711:412;22706:3;;;;;:::i;:::-;;;;22658:465;;;;23137:9;23133:553;;;23244:14;23261:24;:32;;;;;;;;;;;;23244:49;;23350:66;;;;;;;;23380:1;23350:66:::0;::::1;;;;;23395:1;23350:66;;;;;;23407:7;23350:66;;;;::::0;23307:24:::1;:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23447:228;;;;;;;;23487:13;23447:228;;;;23536:4;23447:228;;;;;;23571:7;23447:228;;;;;;23609:7;23447:228;;;;;;23656:4;23447:228;;;;::::0;23430:14:::1;:245;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23148:538;23133:553;23700:30;23710:8;23720:9;23700:30;;;;;;;:::i;:::-;;;;;;;;19925:3812;;19676:4061:::0;;;;;;;:::o;1201:85:0:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;2982:43:8:-;3022:3;2982:43;:::o;17180:1294::-;17266:59;17328:24;17266:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17397:29;:37;;;17367:67;;:14;:26;;;;;;;;;;;;:67;;;17363:125;;17457:20;;;;;;;;;;;;;;17363:125;17516:13;17502:2;:10;;;:27;17498:79;;17552:14;;;;;;;;;;;;;;17498:79;17614:4;17591:28;;:2;:11;;;;;;;;;;:::i;:::-;:28;;;17587:81;;17642:15;;;;;;;;;;;;;;17587:81;17700:29;:40;;;17682:58;;:15;:58;17678:109;;;17763:13;;;;;;;;;;;;;;17678:109;17813:29;:37;;;17801:49;;:2;:8;;;;;;;;;;:::i;:::-;:49;;;17797:99;;17873:12;;;;;;;;;;;;;;17797:99;17962:18;494:53;18046:2;17993:56;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17983:67;;;;;;17962:88;;18065:73;18084:5;;18065:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18091:29;:34;;;18127:10;18065:18;:73::i;:::-;18060:135;;18161:23;;;;;;;;;;;;;;18060:135;18360:1;18320:29;:37;;;:41;;;;:::i;:::-;18285:24;:32;;;:76;;;;;;;;;;;;;;;;;;18372:34;18381:2;:5;;;;;;;;;;:::i;:::-;18388:2;:8;;;18398:2;:7;;;;;;;;:::i;:::-;18372:8;:34::i;:::-;18432:2;:8;;;;;;;;;;:::i;:::-;18421:46;;;18442:2;:5;;;;;;;;;;:::i;:::-;18449:2;:7;;;;;;;;:::i;:::-;18458:2;:8;;;18421:46;;;;;;;;;:::i;:::-;;;;;;;;17256:1218;;17180:1294;;;:::o;24141:89::-;24183:13;;:::i;:::-;24215:8;24208:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24141:89;:::o;847:99:1:-;900:7;926:13;;;;;;;;;;;919:20;;847:99;:::o;1139:178::-;1094:13:0;:11;:13::i;:::-;1244:8:1::1;1228:13;;:24;;;;;;;;;;;;;;;;;;1301:8;1267:43;;1292:7;:5;:7::i;:::-;1267:43;;;;;;;;;;;;1139:178:::0;:::o;1359:130:0:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;1501:153:1:-;1590:13;;1583:20;;;;;;;;;;;1613:34;1638:8;1613:24;:34::i;:::-;1501:153;:::o;640:96:2:-;693:7;719:10;712:17;;640:96;:::o;7120:396:4:-;7189:15;7389:34;7383:4;7376:48;7450:4;7444;7437:18;7495:4;7489;7479:21;7468:32;;7120:396;;;:::o;6598:232::-;6683:7;6703:17;6722:18;6744:25;6755:4;6761:1;6764;6767;6744:10;:25::i;:::-;6702:67;;;;6779:18;6791:5;6779:11;:18::i;:::-;6814:9;6807:16;;;;6598:232;;;;;;:::o;1156:154:5:-;1247:4;1299;1270:25;1283:5;1290:4;1270:12;:25::i;:::-;:33;1263:40;;1156:154;;;;;:::o;23862:242:8:-;23960:12;23974:16;23994:6;:11;;24013:5;24020:4;;23994:31;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23959:66;;;;24040:7;24035:63;;24083:3;24070:17;;;;;;;;;;;:::i;:::-;;;;;;;;24035:63;23949:155;;23862:242;;;;:::o;2426:187:0:-;2499:16;2518:6;;;;;;;;;;;2499:25;;2543:8;2534:6;;:17;;;;;;;;;;;;;;;;;;2597:8;2566:40;;2587:8;2566:40;;;;;;;;;;;;2489:124;2426:187;:::o;5009:1456:4:-;5097:7;5106:12;6021:66;6016:1;6008:10;;:79;6004:161;;;6119:1;6123:30;6103:51;;;;;;6004:161;6259:14;6276:24;6286:4;6292:1;6295;6298;6276:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6259:41;;6332:1;6314:20;;:6;:20;;;6310:101;;6366:1;6370:29;6350:50;;;;;;;6310:101;6429:6;6437:20;6421:37;;;;;5009:1456;;;;;;;;:::o;570:511::-;647:20;638:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;634:441;683:7;634:441;743:29;734:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;730:345;;788:34;;;;;;;;;;:::i;:::-;;;;;;;;730:345;852:35;843:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;839:236;;903:41;;;;;;;;;;:::i;:::-;;;;;;;;839:236;974:30;965:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;961:114;;1020:44;;;;;;;;;;:::i;:::-;;;;;;;;961:114;570:511;;:::o;1934:290:5:-;2017:7;2036:20;2059:4;2036:27;;2078:9;2073:116;2097:5;:12;2093:1;:16;2073:116;;;2145:33;2155:12;2169:5;2175:1;2169:8;;;;;;;;:::i;:::-;;;;;;;;2145:9;:33::i;:::-;2130:48;;2111:3;;;;;:::i;:::-;;;;2073:116;;;;2205:12;2198:19;;;1934:290;;;;:::o;8975:147::-;9038:7;9068:1;9064;:5;:51;;9095:20;9110:1;9113;9095:14;:20::i;:::-;9064:51;;;9072:20;9087:1;9090;9072:14;:20::i;:::-;9064:51;9057:58;;8975:147;;;;:::o;9128:261::-;9196:13;9300:1;9294:4;9287:15;9328:1;9322:4;9315:15;9368:4;9362;9352:21;9343:30;;9128:261;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:86:10:-;42:7;82:4;75:5;71:16;60:27;;7:86;;;:::o;99:112::-;182:22;198:5;182:22;:::i;:::-;177:3;170:35;99:112;;:::o;217:214::-;306:4;344:2;333:9;329:18;321:26;;357:67;421:1;410:9;406:17;397:6;357:67;:::i;:::-;217:214;;;;:::o;437:77::-;474:7;503:5;492:16;;437:77;;;:::o;520:118::-;607:24;625:5;607:24;:::i;:::-;602:3;595:37;520:118;;:::o;644:93::-;680:7;720:10;713:5;709:22;698:33;;644:93;;;:::o;743:115::-;828:23;845:5;828:23;:::i;:::-;823:3;816:36;743:115;;:::o;864:328::-;983:4;1021:2;1010:9;1006:18;998:26;;1034:71;1102:1;1091:9;1087:17;1078:6;1034:71;:::i;:::-;1115:70;1181:2;1170:9;1166:18;1157:6;1115:70;:::i;:::-;864:328;;;;;:::o;1198:95::-;1234:7;1274:12;1267:5;1263:24;1252:35;;1198:95;;;:::o;1299:115::-;1384:23;1401:5;1384:23;:::i;:::-;1379:3;1372:36;1299:115;;:::o;1420:218::-;1511:4;1549:2;1538:9;1534:18;1526:26;;1562:69;1628:1;1617:9;1613:17;1604:6;1562:69;:::i;:::-;1420:218;;;;:::o;1644:77::-;1681:7;1710:5;1699:16;;1644:77;;;:::o;1727:108::-;1804:24;1822:5;1804:24;:::i;:::-;1799:3;1792:37;1727:108;;:::o;1841:126::-;1878:7;1918:42;1911:5;1907:54;1896:65;;1841:126;;;:::o;1973:96::-;2010:7;2039:24;2057:5;2039:24;:::i;:::-;2028:35;;1973:96;;;:::o;2075:108::-;2152:24;2170:5;2152:24;:::i;:::-;2147:3;2140:37;2075:108;;:::o;2189:105::-;2264:23;2281:5;2264:23;:::i;:::-;2259:3;2252:36;2189:105;;:::o;2300:90::-;2334:7;2377:5;2370:13;2363:21;2352:32;;2300:90;;;:::o;2396:99::-;2467:21;2482:5;2467:21;:::i;:::-;2462:3;2455:34;2396:99;;:::o;2587:1065::-;2744:4;2739:3;2735:14;2834:4;2827:5;2823:16;2817:23;2853:63;2910:4;2905:3;2901:14;2887:12;2853:63;:::i;:::-;2759:167;3012:4;3005:5;3001:16;2995:23;3031:63;3088:4;3083:3;3079:14;3065:12;3031:63;:::i;:::-;2936:168;3192:4;3185:5;3181:16;3175:23;3211:61;3266:4;3261:3;3257:14;3243:12;3211:61;:::i;:::-;3114:168;3371:4;3364:5;3360:16;3354:23;3390:61;3445:4;3440:3;3436:14;3422:12;3390:61;:::i;:::-;3292:169;3559:4;3552:5;3548:16;3542:23;3578:57;3629:4;3624:3;3620:14;3606:12;3578:57;:::i;:::-;3471:174;2713:939;2587:1065;;:::o;3658:343::-;3811:4;3849:3;3838:9;3834:19;3826:27;;3863:131;3991:1;3980:9;3976:17;3967:6;3863:131;:::i;:::-;3658:343;;;;:::o;4088:117::-;4197:1;4194;4187:12;4211:117;4320:1;4317;4310:12;4334:122;4407:24;4425:5;4407:24;:::i;:::-;4400:5;4397:35;4387:63;;4446:1;4443;4436:12;4387:63;4334:122;:::o;4462:139::-;4508:5;4546:6;4533:20;4524:29;;4562:33;4589:5;4562:33;:::i;:::-;4462:139;;;;:::o;4607:120::-;4679:23;4696:5;4679:23;:::i;:::-;4672:5;4669:34;4659:62;;4717:1;4714;4707:12;4659:62;4607:120;:::o;4733:137::-;4778:5;4816:6;4803:20;4794:29;;4832:32;4858:5;4832:32;:::i;:::-;4733:137;;;;:::o;4876:117::-;4985:1;4982;4975:12;5044:237;5122:5;5163:3;5154:6;5149:3;5145:16;5141:26;5138:113;;;5170:79;;:::i;:::-;5138:113;5269:6;5260:15;;5044:237;;;;:::o;5287:117::-;5396:1;5393;5386:12;5410:117;5519:1;5516;5509:12;5533:117;5642:1;5639;5632:12;5673:568;5746:8;5756:6;5806:3;5799:4;5791:6;5787:17;5783:27;5773:122;;5814:79;;:::i;:::-;5773:122;5927:6;5914:20;5904:30;;5957:18;5949:6;5946:30;5943:117;;;5979:79;;:::i;:::-;5943:117;6093:4;6085:6;6081:17;6069:29;;6147:3;6139:4;6131:6;6127:17;6117:8;6113:32;6110:41;6107:128;;;6154:79;;:::i;:::-;6107:128;5673:568;;;;;:::o;6291:597::-;6393:8;6403:6;6453:3;6446:4;6438:6;6434:17;6430:27;6420:122;;6461:79;;:::i;:::-;6420:122;6574:6;6561:20;6551:30;;6604:18;6596:6;6593:30;6590:117;;;6626:79;;:::i;:::-;6590:117;6740:4;6732:6;6728:17;6716:29;;6794:3;6786:4;6778:6;6774:17;6764:8;6760:32;6757:41;6754:128;;;6801:79;;:::i;:::-;6754:128;6291:597;;;;;:::o;6894:1492::-;7103:6;7111;7119;7127;7135;7143;7151;7200:3;7188:9;7179:7;7175:23;7171:33;7168:120;;;7207:79;;:::i;:::-;7168:120;7327:1;7352:53;7397:7;7388:6;7377:9;7373:22;7352:53;:::i;:::-;7342:63;;7298:117;7454:2;7480:52;7524:7;7515:6;7504:9;7500:22;7480:52;:::i;:::-;7470:62;;7425:117;7581:2;7607:85;7684:7;7675:6;7664:9;7660:22;7607:85;:::i;:::-;7597:95;;7552:150;7769:3;7758:9;7754:19;7741:33;7801:18;7793:6;7790:30;7787:117;;;7823:79;;:::i;:::-;7787:117;7936:80;8008:7;7999:6;7988:9;7984:22;7936:80;:::i;:::-;7918:98;;;;7712:314;8093:3;8082:9;8078:19;8065:33;8125:18;8117:6;8114:30;8111:117;;;8147:79;;:::i;:::-;8111:117;8260:109;8361:7;8352:6;8341:9;8337:22;8260:109;:::i;:::-;8242:127;;;;8036:343;6894:1492;;;;;;;;;;:::o;8409:568::-;8482:8;8492:6;8542:3;8535:4;8527:6;8523:17;8519:27;8509:122;;8550:79;;:::i;:::-;8509:122;8663:6;8650:20;8640:30;;8693:18;8685:6;8682:30;8679:117;;;8715:79;;:::i;:::-;8679:117;8829:4;8821:6;8817:17;8805:29;;8883:3;8875:4;8867:6;8863:17;8853:8;8849:32;8846:41;8843:128;;;8890:79;;:::i;:::-;8843:128;8409:568;;;;;:::o;8998:566::-;9069:8;9079:6;9129:3;9122:4;9114:6;9110:17;9106:27;9096:122;;9137:79;;:::i;:::-;9096:122;9250:6;9237:20;9227:30;;9280:18;9272:6;9269:30;9266:117;;;9302:79;;:::i;:::-;9266:117;9416:4;9408:6;9404:17;9392:29;;9470:3;9462:4;9454:6;9450:17;9440:8;9436:32;9433:41;9430:128;;;9477:79;;:::i;:::-;9430:128;8998:566;;;;;:::o;9587:248::-;9657:8;9688:6;9676:18;;9741:3;9733:4;9727;9723:15;9713:8;9709:30;9706:39;9703:126;;;9748:79;;:::i;:::-;9703:126;9587:248;;;;:::o;9841:116::-;9911:21;9926:5;9911:21;:::i;:::-;9904:5;9901:32;9891:60;;9947:1;9944;9937:12;9891:60;9841:116;:::o;9963:133::-;10006:5;10044:6;10031:20;10022:29;;10060:30;10084:5;10060:30;:::i;:::-;9963:133;;;;:::o;10102:1461::-;10294:6;10302;10310;10318;10326;10334;10342;10391:4;10379:9;10370:7;10366:23;10362:34;10359:121;;;10399:79;;:::i;:::-;10359:121;10547:1;10536:9;10532:17;10519:31;10577:18;10569:6;10566:30;10563:117;;;10599:79;;:::i;:::-;10563:117;10712:80;10784:7;10775:6;10764:9;10760:22;10712:80;:::i;:::-;10694:98;;;;10490:312;10869:2;10858:9;10854:18;10841:32;10900:18;10892:6;10889:30;10886:117;;;10922:79;;:::i;:::-;10886:117;11035:78;11105:7;11096:6;11085:9;11081:22;11035:78;:::i;:::-;11017:96;;;;10812:311;11162:2;11188:77;11257:7;11248:6;11237:9;11233:22;11188:77;:::i;:::-;11178:87;;11133:142;11314:4;11342:77;11411:7;11402:6;11391:9;11387:22;11342:77;:::i;:::-;11332:87;;11285:144;11468:4;11496:50;11538:7;11529:6;11518:9;11514:22;11496:50;:::i;:::-;11486:60;;11439:117;10102:1461;;;;;;;;;;:::o;11569:118::-;11656:24;11674:5;11656:24;:::i;:::-;11651:3;11644:37;11569:118;;:::o;11693:222::-;11786:4;11824:2;11813:9;11809:18;11801:26;;11837:71;11905:1;11894:9;11890:17;11881:6;11837:71;:::i;:::-;11693:222;;;;:::o;11956:227::-;12024:5;12065:3;12056:6;12051:3;12047:16;12043:26;12040:113;;;12072:79;;:::i;:::-;12040:113;12171:6;12162:15;;11956:227;;;;:::o;12189:908::-;12306:6;12314;12322;12371:2;12359:9;12350:7;12346:23;12342:32;12339:119;;;12377:79;;:::i;:::-;12339:119;12525:1;12514:9;12510:17;12497:31;12555:18;12547:6;12544:30;12541:117;;;12577:79;;:::i;:::-;12541:117;12682:75;12749:7;12740:6;12729:9;12725:22;12682:75;:::i;:::-;12672:85;;12468:299;12834:2;12823:9;12819:18;12806:32;12865:18;12857:6;12854:30;12851:117;;;12887:79;;:::i;:::-;12851:117;13000:80;13072:7;13063:6;13052:9;13048:22;13000:80;:::i;:::-;12982:98;;;;12777:313;12189:908;;;;;:::o;13103:138::-;13194:6;13228:5;13222:12;13212:22;;13103:138;;;:::o;13247:198::-;13360:11;13394:6;13389:3;13382:19;13434:4;13429:3;13425:14;13410:29;;13247:198;;;;:::o;13451:156::-;13542:4;13565:3;13557:11;;13595:4;13590:3;13586:14;13578:22;;13451:156;;;:::o;13613:102::-;13686:22;13702:5;13686:22;:::i;:::-;13681:3;13674:35;13613:102;;:::o;13795:663::-;13930:4;13925:3;13921:14;14017:4;14010:5;14006:16;14000:23;14036:63;14093:4;14088:3;14084:14;14070:12;14036:63;:::i;:::-;13945:164;14192:4;14185:5;14181:16;14175:23;14211:59;14264:4;14259:3;14255:14;14241:12;14211:59;:::i;:::-;14119:161;14363:4;14356:5;14352:16;14346:23;14382:59;14435:4;14430:3;14426:14;14412:12;14382:59;:::i;:::-;14290:161;13899:559;13795:663;;:::o;14464:275::-;14581:10;14602:94;14692:3;14684:6;14602:94;:::i;:::-;14728:4;14723:3;14719:14;14705:28;;14464:275;;;;:::o;14745:137::-;14839:4;14871;14866:3;14862:14;14854:22;;14745:137;;;:::o;14966:904::-;15123:3;15152:78;15224:5;15152:78;:::i;:::-;15246:100;15339:6;15334:3;15246:100;:::i;:::-;15239:107;;15370:80;15444:5;15370:80;:::i;:::-;15473:7;15504:1;15489:356;15514:6;15511:1;15508:13;15489:356;;;15590:6;15584:13;15617:111;15724:3;15709:13;15617:111;:::i;:::-;15610:118;;15751:84;15828:6;15751:84;:::i;:::-;15741:94;;15549:296;15536:1;15533;15529:9;15524:14;;15489:356;;;15493:14;15861:3;15854:10;;15128:742;;;14966:904;;;;:::o;15876:103::-;15940:6;15968:4;15958:14;;15876:103;;;:::o;15985:132::-;16071:11;16108:3;16093:18;;15985:132;;;;:::o;16123:97::-;16187:4;16210:3;16202:11;;16123:97;;;:::o;16226:171::-;16291:10;16312:42;16350:3;16342:6;16312:42;:::i;:::-;16386:4;16381:3;16377:14;16363:28;;16226:171;;;;:::o;16403:110::-;16470:4;16502;16497:3;16493:14;16485:22;;16403:110;;;:::o;16549:664::-;16673:51;16718:5;16673:51;:::i;:::-;16740:73;16806:6;16801:3;16740:73;:::i;:::-;16733:80;;16837:53;16884:5;16837:53;:::i;:::-;16913:7;16944:1;16929:277;16954:6;16951:1;16948:13;16929:277;;;17030:6;17024:13;17057:59;17112:3;17097:13;17057:59;:::i;:::-;17050:66;;17139:57;17189:6;17139:57;:::i;:::-;17129:67;;16989:217;16976:1;16973;16969:9;16964:14;;16929:277;;;16933:14;16649:564;;;16549:664;;:::o;17293:967::-;17410:3;17446:6;17441:3;17437:16;17538:4;17531:5;17527:16;17521:23;17591:3;17585:4;17581:14;17574:4;17569:3;17565:14;17558:38;17617:151;17763:4;17749:12;17617:151;:::i;:::-;17609:159;;17463:316;17869:4;17862:5;17858:16;17852:23;17888:107;17989:4;17984:3;17980:14;17966:12;17888:107;:::i;:::-;17789:216;18095:4;18088:5;18084:16;18078:23;18114:109;18215:6;18210:3;18206:16;18192:12;18114:109;:::i;:::-;18015:218;18250:4;18243:11;;17415:845;17293:967;;;;:::o;18266:369::-;18407:4;18445:2;18434:9;18430:18;18422:26;;18494:9;18488:4;18484:20;18480:1;18469:9;18465:17;18458:47;18522:106;18623:4;18614:6;18522:106;:::i;:::-;18514:114;;18266:369;;;;:::o;18641:122::-;18714:24;18732:5;18714:24;:::i;:::-;18707:5;18704:35;18694:63;;18753:1;18750;18743:12;18694:63;18641:122;:::o;18769:139::-;18815:5;18853:6;18840:20;18831:29;;18869:33;18896:5;18869:33;:::i;:::-;18769:139;;;;:::o;18914:329::-;18973:6;19022:2;19010:9;19001:7;18997:23;18993:32;18990:119;;;19028:79;;:::i;:::-;18990:119;19148:1;19173:53;19218:7;19209:6;19198:9;19194:22;19173:53;:::i;:::-;19163:63;;19119:117;18914:329;;;;:::o;19249:169::-;19333:11;19367:6;19362:3;19355:19;19407:4;19402:3;19398:14;19383:29;;19249:169;;;;:::o;19424:228::-;19564:34;19560:1;19552:6;19548:14;19541:58;19633:11;19628:2;19620:6;19616:15;19609:36;19424:228;:::o;19658:366::-;19800:3;19821:67;19885:2;19880:3;19821:67;:::i;:::-;19814:74;;19897:93;19986:3;19897:93;:::i;:::-;20015:2;20010:3;20006:12;19999:19;;19658:366;;;:::o;20030:419::-;20196:4;20234:2;20223:9;20219:18;20211:26;;20283:9;20277:4;20273:20;20269:1;20258:9;20254:17;20247:47;20311:131;20437:4;20311:131;:::i;:::-;20303:139;;20030:419;;;:::o;20455:180::-;20503:77;20500:1;20493:88;20600:4;20597:1;20590:15;20624:4;20621:1;20614:15;20641:118;20712:22;20728:5;20712:22;:::i;:::-;20705:5;20702:33;20692:61;;20749:1;20746;20739:12;20692:61;20641:118;:::o;20765:135::-;20809:5;20847:6;20834:20;20825:29;;20863:31;20888:5;20863:31;:::i;:::-;20765:135;;;;:::o;20906:325::-;20963:6;21012:2;21000:9;20991:7;20987:23;20983:32;20980:119;;;21018:79;;:::i;:::-;20980:119;21138:1;21163:51;21206:7;21197:6;21186:9;21182:22;21163:51;:::i;:::-;21153:61;;21109:115;20906:325;;;;:::o;21237:180::-;21285:77;21282:1;21275:88;21382:4;21379:1;21372:15;21406:4;21403:1;21396:15;21423:167;21460:3;21483:22;21499:5;21483:22;:::i;:::-;21474:31;;21527:4;21520:5;21517:15;21514:41;;21535:18;;:::i;:::-;21514:41;21582:1;21575:5;21571:13;21564:20;;21423:167;;;:::o;21596:233::-;21635:3;21658:24;21676:5;21658:24;:::i;:::-;21649:33;;21704:66;21697:5;21694:77;21691:103;;21774:18;;:::i;:::-;21691:103;21821:1;21814:5;21810:13;21803:20;;21596:233;;;:::o;21835:122::-;21908:24;21926:5;21908:24;:::i;:::-;21901:5;21898:35;21888:63;;21947:1;21944;21937:12;21888:63;21835:122;:::o;21963:139::-;22009:5;22047:6;22034:20;22025:29;;22063:33;22090:5;22063:33;:::i;:::-;21963:139;;;;:::o;22108:122::-;22160:5;22185:39;22220:2;22215:3;22211:12;22206:3;22185:39;:::i;:::-;22176:48;;22108:122;;;;:::o;22236:::-;22288:5;22313:39;22348:2;22343:3;22339:12;22334:3;22313:39;:::i;:::-;22304:48;;22236:122;;;;:::o;22364:120::-;22436:23;22453:5;22436:23;:::i;:::-;22429:5;22426:34;22416:62;;22474:1;22471;22464:12;22416:62;22364:120;:::o;22490:137::-;22535:5;22573:6;22560:20;22551:29;;22589:32;22615:5;22589:32;:::i;:::-;22490:137;;;;:::o;22633:120::-;22684:5;22709:38;22743:2;22738:3;22734:12;22729:3;22709:38;:::i;:::-;22700:47;;22633:120;;;;:::o;22759:116::-;22808:5;22833:36;22865:2;22860:3;22856:12;22851:3;22833:36;:::i;:::-;22824:45;;22759:116;;;;:::o;22967:1197::-;23126:4;23121:3;23117:14;23199:50;23243:4;23236:5;23232:16;23225:5;23199:50;:::i;:::-;23262:63;23319:4;23314:3;23310:14;23296:12;23262:63;:::i;:::-;23141:194;23404:50;23448:4;23441:5;23437:16;23430:5;23404:50;:::i;:::-;23467:63;23524:4;23519:3;23515:14;23501:12;23467:63;:::i;:::-;23345:195;23611:49;23654:4;23647:5;23643:16;23636:5;23611:49;:::i;:::-;23673:61;23728:4;23723:3;23719:14;23705:12;23673:61;:::i;:::-;23550:194;23816:49;23859:4;23852:5;23848:16;23841:5;23816:49;:::i;:::-;23878:61;23933:4;23928:3;23924:14;23910:12;23878:61;:::i;:::-;23754:195;24030:47;24071:4;24064:5;24060:16;24053:5;24030:47;:::i;:::-;24090:57;24141:4;24136:3;24132:14;24118:12;24090:57;:::i;:::-;23959:198;23095:1069;22967:1197;;:::o;24170:457::-;24353:4;24391:3;24380:9;24376:19;24368:27;;24405:71;24473:1;24462:9;24458:17;24449:6;24405:71;:::i;:::-;24486:134;24616:2;24605:9;24601:18;24592:6;24486:134;:::i;:::-;24170:457;;;;;:::o;24633:323::-;24689:6;24738:2;24726:9;24717:7;24713:23;24709:32;24706:119;;;24744:79;;:::i;:::-;24706:119;24864:1;24889:50;24931:7;24922:6;24911:9;24907:22;24889:50;:::i;:::-;24879:60;;24835:114;24633:323;;;;:::o;24962:327::-;25020:6;25069:2;25057:9;25048:7;25044:23;25040:32;25037:119;;;25075:79;;:::i;:::-;25037:119;25195:1;25220:52;25264:7;25255:6;25244:9;25240:22;25220:52;:::i;:::-;25210:62;;25166:116;24962:327;;;;:::o;25481:186::-;25526:11;25575:3;25562:17;25588:33;25615:5;25588:33;:::i;:::-;25655:5;25631:29;;25538:129;25481:186;;;:::o;25673:92::-;25705:8;25752:5;25749:1;25745:13;25724:34;;25673:92;;;:::o;25771:290::-;25829:6;25858:66;25945:22;25958:8;25945:22;:::i;:::-;25933:34;;26000:4;25996:9;25989:5;25985:21;25976:30;;26049:4;26039:8;26035:19;26028:5;26025:30;26015:40;;25836:225;25771:290;;;;:::o;26067:60::-;26095:3;26116:5;26109:12;;26067:60;;;:::o;26133:142::-;26183:9;26216:53;26234:34;26243:24;26261:5;26243:24;:::i;:::-;26234:34;:::i;:::-;26216:53;:::i;:::-;26203:66;;26133:142;;;:::o;26281:75::-;26324:3;26345:5;26338:12;;26281:75;;;:::o;26362:262::-;26472:39;26503:7;26472:39;:::i;:::-;26533:84;26575:41;26599:16;26575:41;:::i;:::-;26568:4;26562:11;26533:84;:::i;:::-;26527:4;26520:98;26438:186;26362:262;;:::o;26630:186::-;26675:11;26724:3;26711:17;26737:33;26764:5;26737:33;:::i;:::-;26804:5;26780:29;;26687:129;26630:186;;;:::o;26822:266::-;26880:6;26909:42;26972:22;26985:8;26972:22;:::i;:::-;26960:34;;27027:4;27023:9;27016:5;27012:21;27003:30;;27076:4;27066:8;27062:19;27055:5;27052:30;27042:40;;26887:201;26822:266;;;;:::o;27094:142::-;27144:9;27177:53;27195:34;27204:24;27222:5;27204:24;:::i;:::-;27195:34;:::i;:::-;27177:53;:::i;:::-;27164:66;;27094:142;;;:::o;27242:126::-;27292:9;27325:37;27356:5;27325:37;:::i;:::-;27312:50;;27242:126;;;:::o;27374:::-;27424:9;27457:37;27488:5;27457:37;:::i;:::-;27444:50;;27374:126;;;:::o;27506:75::-;27549:3;27570:5;27563:12;;27506:75;;;:::o;27587:262::-;27697:39;27728:7;27697:39;:::i;:::-;27758:84;27800:41;27824:16;27800:41;:::i;:::-;27793:4;27787:11;27758:84;:::i;:::-;27752:4;27745:98;27663:186;27587:262;;:::o;27855:184::-;27899:11;27948:3;27935:17;27961:32;27987:5;27961:32;:::i;:::-;28027:5;28003:29;;27911:128;27855:184;;;:::o;28045:96::-;28079:8;28128:5;28123:3;28119:15;28098:36;;28045:96;;;:::o;28147:278::-;28205:6;28234:52;28307:24;28322:8;28307:24;:::i;:::-;28295:36;;28364:4;28360:9;28353:5;28349:21;28340:30;;28413:4;28403:8;28399:19;28392:5;28389:30;28379:40;;28212:213;28147:278;;;;:::o;28431:138::-;28479:9;28512:51;28529:33;28538:23;28555:5;28538:23;:::i;:::-;28529:33;:::i;:::-;28512:51;:::i;:::-;28499:64;;28431:138;;;:::o;28575:74::-;28617:3;28638:5;28631:12;;28575:74;;;:::o;28655:258::-;28764:37;28793:7;28764:37;:::i;:::-;28823:83;28865:40;28888:16;28865:40;:::i;:::-;28858:4;28852:11;28823:83;:::i;:::-;28817:4;28810:97;28730:183;28655:258;;:::o;28919:96::-;28953:8;29002:5;28997:3;28993:15;28972:36;;28919:96;;;:::o;29021:288::-;29079:6;29108:62;29191:24;29206:8;29191:24;:::i;:::-;29179:36;;29248:4;29244:9;29237:5;29233:21;29224:30;;29297:4;29287:8;29283:19;29276:5;29273:30;29263:40;;29086:223;29021:288;;;;:::o;29315:258::-;29424:37;29453:7;29424:37;:::i;:::-;29483:83;29525:40;29548:16;29525:40;:::i;:::-;29518:4;29512:11;29483:83;:::i;:::-;29477:4;29470:97;29390:183;29315:258;;:::o;29579:180::-;29621:11;29670:3;29657:17;29683:30;29707:5;29683:30;:::i;:::-;29747:5;29723:29;;29633:126;29579:180;;;:::o;29765:96::-;29799:8;29848:5;29843:3;29839:15;29818:36;;29765:96;;;:::o;29867:290::-;29925:6;29954:64;30039:24;30054:8;30039:24;:::i;:::-;30027:36;;30096:4;30092:9;30085:5;30081:21;30072:30;;30145:4;30135:8;30131:19;30124:5;30121:30;30111:40;;29932:225;29867:290;;;;:::o;30163:104::-;30207:9;30240:21;30255:5;30240:21;:::i;:::-;30227:34;;30163:104;;;:::o;30273:72::-;30313:3;30334:5;30327:12;;30273:72;;;:::o;30351:248::-;30456:33;30481:7;30456:33;:::i;:::-;30511:81;30553:38;30574:16;30553:38;:::i;:::-;30546:4;30540:11;30511:81;:::i;:::-;30505:4;30498:95;30422:177;30351:248;;:::o;30605:1818::-;30791:1;30785:4;30781:12;30837:1;30830:5;30826:13;30887:12;30930:42;30958:13;30930:42;:::i;:::-;30913:59;;30986:78;31050:13;31038:10;30986:78;:::i;:::-;30748:327;;;31128:1;31122:4;31118:12;31174:2;31167:5;31163:14;31225:12;31268:42;31296:13;31268:42;:::i;:::-;31251:59;;31324:78;31388:13;31376:10;31324:78;:::i;:::-;31085:328;;;31466:1;31460:4;31456:12;31512:2;31505:5;31501:14;31563:12;31606:41;31633:13;31606:41;:::i;:::-;31589:58;;31661:77;31724:13;31712:10;31661:77;:::i;:::-;31423:326;;;31802:1;31796:4;31792:12;31848:2;31841:5;31837:14;31899:12;31942:41;31969:13;31942:41;:::i;:::-;31925:58;;31997:77;32060:13;32048:10;31997:77;:::i;:::-;31759:326;;;32138:1;32132:4;32128:12;32184:3;32177:5;32173:15;32236:12;32279:39;32304:13;32279:39;:::i;:::-;32262:56;;32332:73;32391:13;32379:10;32332:73;:::i;:::-;32095:321;;;30605:1818;;:::o;32429:276::-;32575:124;32691:7;32685:4;32575:124;:::i;:::-;32429:276;;:::o;32711:453::-;32892:4;32930:3;32919:9;32915:19;32907:27;;32944:69;33010:1;32999:9;32995:17;32986:6;32944:69;:::i;:::-;33023:134;33153:2;33142:9;33138:18;33129:6;33023:134;:::i;:::-;32711:453;;;;;:::o;33170:191::-;33208:4;33228:18;33244:1;33228:18;:::i;:::-;33223:23;;33260:18;33276:1;33260:18;:::i;:::-;33255:23;;33302:1;33299;33295:9;33287:17;;33326:4;33320;33317:14;33314:40;;;33334:18;;:::i;:::-;33314:40;33170:191;;;;:::o;33367:194::-;33407:4;33427:20;33445:1;33427:20;:::i;:::-;33422:25;;33461:20;33479:1;33461:20;:::i;:::-;33456:25;;33505:1;33502;33498:9;33490:17;;33529:1;33523:4;33520:11;33517:37;;;33534:18;;:::i;:::-;33517:37;33367:194;;;;:::o;33567:180::-;33615:77;33612:1;33605:88;33712:4;33709:1;33702:15;33736:4;33733:1;33726:15;33753:180;33801:77;33798:1;33791:88;33898:4;33895:1;33888:15;33922:4;33919:1;33912:15;33939:132;34024:6;34058:5;34052:12;34042:22;;33939:132;;;:::o;34077:177::-;34162:4;34185:3;34177:11;;34208:3;34205:1;34198:14;34242:4;34239:1;34229:18;34221:26;;34077:177;;;:::o;34260:102::-;34302:8;34349:5;34346:1;34342:13;34321:34;;34260:102;;;:::o;34368:139::-;34418:7;34458:42;34451:5;34447:54;34436:65;;34368:139;;;:::o;34513:166::-;34582:5;34607:66;34638:34;34661:10;34638:34;:::i;:::-;34607:66;:::i;:::-;34598:75;;34513:166;;;:::o;34685:106::-;34729:8;34778:5;34773:3;34769:15;34748:36;;34685:106;;;:::o;34797:99::-;34845:7;34885:4;34878:5;34874:16;34863:27;;34797:99;;;:::o;34902:165::-;34970:5;34995:66;35024:36;35049:10;35024:36;:::i;:::-;34995:66;:::i;:::-;34986:75;;34902:165;;;:::o;35073:106::-;35117:8;35166:5;35161:3;35157:15;35136:36;;35073:106;;;:::o;35185:165::-;35253:5;35278:66;35307:36;35332:10;35307:36;:::i;:::-;35278:66;:::i;:::-;35269:75;;35185:165;;;:::o;35430:829::-;35562:4;35557:3;35553:14;35593:1;35668:4;35661:5;35657:16;35651:23;35638:36;;35707:55;35752:9;35707:55;:::i;:::-;35775:63;35832:4;35827:3;35823:14;35809:12;35775:63;:::i;:::-;35604:244;35914:54;35958:9;35914:54;:::i;:::-;35981:59;36034:4;36029:3;36025:14;36011:12;35981:59;:::i;:::-;35858:192;36116:54;36160:9;36116:54;:::i;:::-;36183:59;36236:4;36231:3;36227:14;36213:12;36183:59;:::i;:::-;36060:192;35531:728;;35430:829;;:::o;36265:269::-;36379:10;36400:91;36487:3;36479:6;36400:91;:::i;:::-;36523:4;36518:3;36514:14;36500:28;;36265:269;;;;:::o;36540:131::-;36628:4;36660;36655:3;36651:14;36643:22;;36540:131;;;:::o;36755:870::-;36906:3;36935:72;37001:5;36935:72;:::i;:::-;37023:100;37116:6;37111:3;37023:100;:::i;:::-;37016:107;;37147:74;37215:5;37147:74;:::i;:::-;37244:7;37275:1;37260:340;37285:6;37282:1;37279:13;37260:340;;;37355:6;37381:108;37485:3;37470:13;37381:108;:::i;:::-;37374:115;;37512:78;37583:6;37512:78;:::i;:::-;37502:88;;37320:280;37307:1;37304;37300:9;37295:14;;37260:340;;;37264:14;37616:3;37609:10;;36911:714;;;36755:870;;;;:::o;37631:100::-;37692:6;37720:4;37710:14;;37631:100;;;:::o;37737:94::-;37798:4;37821:3;37813:11;;37737:94;;;:::o;37837:162::-;37904:5;37929:64;37958:34;37981:10;37958:34;:::i;:::-;37929:64;:::i;:::-;37920:73;;37837:162;;;:::o;38005:102::-;38047:8;38094:5;38091:1;38087:13;38066:34;;38005:102;;;:::o;38113:162::-;38180:5;38205:64;38234:34;38257:10;38234:34;:::i;:::-;38205:64;:::i;:::-;38196:73;;38113:162;;;:::o;38281:104::-;38324:8;38372:5;38368:2;38364:14;38343:35;;38281:104;;;:::o;38391:163::-;38458:5;38483:65;38512:35;38536:10;38512:35;:::i;:::-;38483:65;:::i;:::-;38474:74;;38391:163;;;:::o;38560:104::-;38603:8;38651:5;38647:2;38643:14;38622:35;;38560:104;;;:::o;38670:163::-;38737:5;38762:65;38791:35;38815:10;38791:35;:::i;:::-;38762:65;:::i;:::-;38753:74;;38670:163;;;:::o;38839:104::-;38882:8;38930:5;38926:2;38922:14;38901:35;;38839:104;;;:::o;38949:163::-;39016:5;39041:65;39070:35;39094:10;39070:35;:::i;:::-;39041:65;:::i;:::-;39032:74;;38949:163;;;:::o;39118:104::-;39161:8;39209:5;39205:2;39201:14;39180:35;;39118:104;;;:::o;39228:163::-;39295:5;39320:65;39349:35;39373:10;39349:35;:::i;:::-;39320:65;:::i;:::-;39311:74;;39228:163;;;:::o;39397:104::-;39440:8;39488:5;39484:2;39480:14;39459:35;;39397:104;;;:::o;39507:163::-;39574:5;39599:65;39628:35;39652:10;39628:35;:::i;:::-;39599:65;:::i;:::-;39590:74;;39507:163;;;:::o;39676:104::-;39719:8;39767:5;39763:2;39759:14;39738:35;;39676:104;;;:::o;39786:163::-;39853:5;39878:65;39907:35;39931:10;39907:35;:::i;:::-;39878:65;:::i;:::-;39869:74;;39786:163;;;:::o;39955:104::-;39998:8;40046:5;40042:2;40038:14;40017:35;;39955:104;;;:::o;40065:163::-;40132:5;40157:65;40186:35;40210:10;40186:35;:::i;:::-;40157:65;:::i;:::-;40148:74;;40065:163;;;:::o;40234:104::-;40277:8;40325:5;40321:2;40317:14;40296:35;;40234:104;;;:::o;40344:163::-;40411:5;40436:65;40465:35;40489:10;40465:35;:::i;:::-;40436:65;:::i;:::-;40427:74;;40344:163;;;:::o;40513:104::-;40556:8;40604:5;40600:2;40596:14;40575:35;;40513:104;;;:::o;40623:164::-;40691:5;40716:65;40745:35;40769:10;40745:35;:::i;:::-;40716:65;:::i;:::-;40707:74;;40623:164;;;:::o;40793:104::-;40836:8;40884:5;40880:2;40876:14;40855:35;;40793:104;;;:::o;40903:164::-;40971:5;40996:65;41025:35;41049:10;41025:35;:::i;:::-;40996:65;:::i;:::-;40987:74;;40903:164;;;:::o;41073:104::-;41116:8;41164:5;41160:2;41156:14;41135:35;;41073:104;;;:::o;41183:164::-;41251:5;41276:65;41305:35;41329:10;41305:35;:::i;:::-;41276:65;:::i;:::-;41267:74;;41183:164;;;:::o;41353:106::-;41397:8;41446:5;41441:3;41437:15;41416:36;;41353:106;;;:::o;41465:165::-;41533:5;41558:66;41587:36;41612:10;41587:36;:::i;:::-;41558:66;:::i;:::-;41549:75;;41465:165;;;:::o;41636:106::-;41680:8;41729:5;41724:3;41720:15;41699:36;;41636:106;;;:::o;41748:165::-;41816:5;41841:66;41870:36;41895:10;41870:36;:::i;:::-;41841:66;:::i;:::-;41832:75;;41748:165;;;:::o;41919:106::-;41963:8;42012:5;42007:3;42003:15;41982:36;;41919:106;;;:::o;42031:165::-;42099:5;42124:66;42153:36;42178:10;42153:36;:::i;:::-;42124:66;:::i;:::-;42115:75;;42031:165;;;:::o;42202:106::-;42246:8;42295:5;42290:3;42286:15;42265:36;;42202:106;;;:::o;42314:165::-;42382:5;42407:66;42436:36;42461:10;42436:36;:::i;:::-;42407:66;:::i;:::-;42398:75;;42314:165;;;:::o;42485:106::-;42529:8;42578:5;42573:3;42569:15;42548:36;;42485:106;;;:::o;42597:165::-;42665:5;42690:66;42719:36;42744:10;42719:36;:::i;:::-;42690:66;:::i;:::-;42681:75;;42597:165;;;:::o;42768:106::-;42812:8;42861:5;42856:3;42852:15;42831:36;;42768:106;;;:::o;42880:165::-;42948:5;42973:66;43002:36;43027:10;43002:36;:::i;:::-;42973:66;:::i;:::-;42964:75;;42880:165;;;:::o;43051:106::-;43095:8;43144:5;43139:3;43135:15;43114:36;;43051:106;;;:::o;43163:165::-;43231:5;43256:66;43285:36;43310:10;43285:36;:::i;:::-;43256:66;:::i;:::-;43247:75;;43163:165;;;:::o;43334:106::-;43378:8;43427:5;43422:3;43418:15;43397:36;;43334:106;;;:::o;43446:165::-;43514:5;43539:66;43568:36;43593:10;43568:36;:::i;:::-;43539:66;:::i;:::-;43530:75;;43446:165;;;:::o;43617:106::-;43661:8;43710:5;43705:3;43701:15;43680:36;;43617:106;;;:::o;43729:165::-;43797:5;43822:66;43851:36;43876:10;43851:36;:::i;:::-;43822:66;:::i;:::-;43813:75;;43729:165;;;:::o;43900:106::-;43944:8;43993:5;43988:3;43984:15;43963:36;;43900:106;;;:::o;44012:165::-;44080:5;44105:66;44134:36;44159:10;44134:36;:::i;:::-;44105:66;:::i;:::-;44096:75;;44012:165;;;:::o;44183:106::-;44227:8;44276:5;44271:3;44267:15;44246:36;;44183:106;;;:::o;44295:165::-;44363:5;44388:66;44417:36;44442:10;44417:36;:::i;:::-;44388:66;:::i;:::-;44379:75;;44295:165;;;:::o;44466:106::-;44510:8;44559:5;44554:3;44550:15;44529:36;;44466:106;;;:::o;44578:165::-;44646:5;44671:66;44700:36;44725:10;44700:36;:::i;:::-;44671:66;:::i;:::-;44662:75;;44578:165;;;:::o;44749:106::-;44793:8;44842:5;44837:3;44833:15;44812:36;;44749:106;;;:::o;44861:165::-;44929:5;44954:66;44983:36;45008:10;44983:36;:::i;:::-;44954:66;:::i;:::-;44945:75;;44861:165;;;:::o;45032:106::-;45076:8;45125:5;45120:3;45116:15;45095:36;;45032:106;;;:::o;45144:165::-;45212:5;45237:66;45266:36;45291:10;45266:36;:::i;:::-;45237:66;:::i;:::-;45228:75;;45144:165;;;:::o;45315:106::-;45359:8;45408:5;45403:3;45399:15;45378:36;;45315:106;;;:::o;45427:165::-;45495:5;45520:66;45549:36;45574:10;45549:36;:::i;:::-;45520:66;:::i;:::-;45511:75;;45427:165;;;:::o;45598:106::-;45642:8;45691:5;45686:3;45682:15;45661:36;;45598:106;;;:::o;45710:165::-;45778:5;45803:66;45832:36;45857:10;45832:36;:::i;:::-;45803:66;:::i;:::-;45794:75;;45710:165;;;:::o;45881:106::-;45925:8;45974:5;45969:3;45965:15;45944:36;;45881:106;;;:::o;45993:165::-;46061:5;46086:66;46115:36;46140:10;46115:36;:::i;:::-;46086:66;:::i;:::-;46077:75;;45993:165;;;:::o;46194:12517::-;46315:48;46357:5;46315:48;:::i;:::-;46379:73;46445:6;46440:3;46379:73;:::i;:::-;46372:80;;46480:3;46506:50;46550:5;46506:50;:::i;:::-;46584:1;46597;46594:4791;;;46661:4714;46702:6;46697:1;46693:2;46689:10;46676:11;46672:28;46669:40;46661:4714;;;46810:6;46804:13;46835:84;46915:3;46865:48;46908:4;46865:48;:::i;:::-;46835:84;:::i;:::-;46952:4;46947:3;46943:14;46936:21;;46975:84;47055:3;47005:48;47048:4;47005:48;:::i;:::-;46975:84;:::i;:::-;47092:4;47087:3;47083:14;47076:21;;47115:84;47195:3;47145:48;47188:4;47145:48;:::i;:::-;47115:84;:::i;:::-;47232:4;47227:3;47223:14;47216:21;;47255:84;47335:3;47285:48;47328:4;47285:48;:::i;:::-;47255:84;:::i;:::-;47372:4;47367:3;47363:14;47356:21;;47395:84;47475:3;47425:48;47468:4;47425:48;:::i;:::-;47395:84;:::i;:::-;47512:4;47507:3;47503:14;47496:21;;47535:84;47615:3;47565:48;47608:4;47565:48;:::i;:::-;47535:84;:::i;:::-;47652:4;47647:3;47643:14;47636:21;;47675:84;47755:3;47705:48;47748:4;47705:48;:::i;:::-;47675:84;:::i;:::-;47792:4;47787:3;47783:14;47776:21;;47815:84;47895:3;47845:48;47888:4;47845:48;:::i;:::-;47815:84;:::i;:::-;47932:4;47927:3;47923:14;47916:21;;47955:84;48035:3;47985:48;48028:4;47985:48;:::i;:::-;47955:84;:::i;:::-;48072:4;48067:3;48063:14;48056:21;;48095:84;48175:3;48125:48;48168:4;48125:48;:::i;:::-;48095:84;:::i;:::-;48212:4;48207:3;48203:14;48196:21;;48235:85;48316:3;48265:49;48309:4;48265:49;:::i;:::-;48235:85;:::i;:::-;48353:4;48348:3;48344:14;48337:21;;48376:85;48457:3;48406:49;48450:4;48406:49;:::i;:::-;48376:85;:::i;:::-;48494:4;48489:3;48485:14;48478:21;;48517:85;48598:3;48547:49;48591:4;48547:49;:::i;:::-;48517:85;:::i;:::-;48635:4;48630:3;48626:14;48619:21;;48658:85;48739:3;48688:49;48732:4;48688:49;:::i;:::-;48658:85;:::i;:::-;48776:4;48771:3;48767:14;48760:21;;48799:85;48880:3;48829:49;48873:4;48829:49;:::i;:::-;48799:85;:::i;:::-;48917:4;48912:3;48908:14;48901:21;;48940:85;49021:3;48970:49;49014:4;48970:49;:::i;:::-;48940:85;:::i;:::-;49058:4;49053:3;49049:14;49042:21;;49081:85;49162:3;49111:49;49155:4;49111:49;:::i;:::-;49081:85;:::i;:::-;49199:4;49194:3;49190:14;49183:21;;49222:85;49303:3;49252:49;49296:4;49252:49;:::i;:::-;49222:85;:::i;:::-;49340:4;49335:3;49331:14;49324:21;;49363:85;49444:3;49393:49;49437:4;49393:49;:::i;:::-;49363:85;:::i;:::-;49481:4;49476:3;49472:14;49465:21;;49504:85;49585:3;49534:49;49578:4;49534:49;:::i;:::-;49504:85;:::i;:::-;49622:4;49617:3;49613:14;49606:21;;49645:85;49726:3;49675:49;49719:4;49675:49;:::i;:::-;49645:85;:::i;:::-;49763:4;49758:3;49754:14;49747:21;;49786:85;49867:3;49816:49;49860:4;49816:49;:::i;:::-;49786:85;:::i;:::-;49904:4;49899:3;49895:14;49888:21;;49927:85;50008:3;49957:49;50001:4;49957:49;:::i;:::-;49927:85;:::i;:::-;50045:4;50040:3;50036:14;50029:21;;50068:85;50149:3;50098:49;50142:4;50098:49;:::i;:::-;50068:85;:::i;:::-;50186:4;50181:3;50177:14;50170:21;;50209:85;50290:3;50239:49;50283:4;50239:49;:::i;:::-;50209:85;:::i;:::-;50327:4;50322:3;50318:14;50311:21;;50350:85;50431:3;50380:49;50424:4;50380:49;:::i;:::-;50350:85;:::i;:::-;50468:4;50463:3;50459:14;50452:21;;50491:85;50572:3;50521:49;50565:4;50521:49;:::i;:::-;50491:85;:::i;:::-;50609:4;50604:3;50600:14;50593:21;;50632:85;50713:3;50662:49;50706:4;50662:49;:::i;:::-;50632:85;:::i;:::-;50750:4;50745:3;50741:14;50734:21;;50773:85;50854:3;50803:49;50847:4;50803:49;:::i;:::-;50773:85;:::i;:::-;50891:4;50886:3;50882:14;50875:21;;50914:85;50995:3;50944:49;50988:4;50944:49;:::i;:::-;50914:85;:::i;:::-;51032:4;51027:3;51023:14;51016:21;;51055:85;51136:3;51085:49;51129:4;51085:49;:::i;:::-;51055:85;:::i;:::-;51173:4;51168:3;51164:14;51157:21;;51196:85;51277:3;51226:49;51270:4;51226:49;:::i;:::-;51196:85;:::i;:::-;51314:4;51309:3;51305:14;51298:21;;51359:1;51351:6;51347:14;51337:24;;46774:4601;46756:2;46743:11;46739:20;46724:35;;46661:4714;;;46594:4791;51462:1;51459:7245;;;51496:6;51490:13;51520:1;51517:210;;;51540:84;51620:3;51570:48;51613:4;51570:48;:::i;:::-;51540:84;:::i;:::-;51657:4;51652:3;51648:14;51641:21;;51711:1;51698:11;51694:19;51679:34;;51517:210;51744:1;51741:210;;;51764:84;51844:3;51794:48;51837:4;51794:48;:::i;:::-;51764:84;:::i;:::-;51881:4;51876:3;51872:14;51865:21;;51935:1;51922:11;51918:19;51903:34;;51741:210;51968:1;51965:210;;;51988:84;52068:3;52018:48;52061:4;52018:48;:::i;:::-;51988:84;:::i;:::-;52105:4;52100:3;52096:14;52089:21;;52159:1;52146:11;52142:19;52127:34;;51965:210;52192:1;52189:210;;;52212:84;52292:3;52242:48;52285:4;52242:48;:::i;:::-;52212:84;:::i;:::-;52329:4;52324:3;52320:14;52313:21;;52383:1;52370:11;52366:19;52351:34;;52189:210;52416:1;52413:210;;;52436:84;52516:3;52466:48;52509:4;52466:48;:::i;:::-;52436:84;:::i;:::-;52553:4;52548:3;52544:14;52537:21;;52607:1;52594:11;52590:19;52575:34;;52413:210;52640:1;52637:210;;;52660:84;52740:3;52690:48;52733:4;52690:48;:::i;:::-;52660:84;:::i;:::-;52777:4;52772:3;52768:14;52761:21;;52831:1;52818:11;52814:19;52799:34;;52637:210;52864:1;52861:210;;;52884:84;52964:3;52914:48;52957:4;52914:48;:::i;:::-;52884:84;:::i;:::-;53001:4;52996:3;52992:14;52985:21;;53055:1;53042:11;53038:19;53023:34;;52861:210;53088:1;53085:210;;;53108:84;53188:3;53138:48;53181:4;53138:48;:::i;:::-;53108:84;:::i;:::-;53225:4;53220:3;53216:14;53209:21;;53279:1;53266:11;53262:19;53247:34;;53085:210;53312:1;53309:210;;;53332:84;53412:3;53362:48;53405:4;53362:48;:::i;:::-;53332:84;:::i;:::-;53449:4;53444:3;53440:14;53433:21;;53503:1;53490:11;53486:19;53471:34;;53309:210;53536:1;53533:210;;;53556:84;53636:3;53586:48;53629:4;53586:48;:::i;:::-;53556:84;:::i;:::-;53673:4;53668:3;53664:14;53657:21;;53727:1;53714:11;53710:19;53695:34;;53533:210;53760:1;53757:211;;;53780:85;53861:3;53810:49;53854:4;53810:49;:::i;:::-;53780:85;:::i;:::-;53898:4;53893:3;53889:14;53882:21;;53952:1;53939:11;53935:19;53920:34;;53757:211;53985:1;53982:211;;;54005:85;54086:3;54035:49;54079:4;54035:49;:::i;:::-;54005:85;:::i;:::-;54123:4;54118:3;54114:14;54107:21;;54177:1;54164:11;54160:19;54145:34;;53982:211;54210:1;54207:211;;;54230:85;54311:3;54260:49;54304:4;54260:49;:::i;:::-;54230:85;:::i;:::-;54348:4;54343:3;54339:14;54332:21;;54402:1;54389:11;54385:19;54370:34;;54207:211;54435:1;54432:211;;;54455:85;54536:3;54485:49;54529:4;54485:49;:::i;:::-;54455:85;:::i;:::-;54573:4;54568:3;54564:14;54557:21;;54627:1;54614:11;54610:19;54595:34;;54432:211;54660:1;54657:211;;;54680:85;54761:3;54710:49;54754:4;54710:49;:::i;:::-;54680:85;:::i;:::-;54798:4;54793:3;54789:14;54782:21;;54852:1;54839:11;54835:19;54820:34;;54657:211;54885:1;54882:211;;;54905:85;54986:3;54935:49;54979:4;54935:49;:::i;:::-;54905:85;:::i;:::-;55023:4;55018:3;55014:14;55007:21;;55077:1;55064:11;55060:19;55045:34;;54882:211;55110:1;55107:211;;;55130:85;55211:3;55160:49;55204:4;55160:49;:::i;:::-;55130:85;:::i;:::-;55248:4;55243:3;55239:14;55232:21;;55302:1;55289:11;55285:19;55270:34;;55107:211;55335:1;55332:211;;;55355:85;55436:3;55385:49;55429:4;55385:49;:::i;:::-;55355:85;:::i;:::-;55473:4;55468:3;55464:14;55457:21;;55527:1;55514:11;55510:19;55495:34;;55332:211;55560:1;55557:211;;;55580:85;55661:3;55610:49;55654:4;55610:49;:::i;:::-;55580:85;:::i;:::-;55698:4;55693:3;55689:14;55682:21;;55752:1;55739:11;55735:19;55720:34;;55557:211;55785:1;55782:211;;;55805:85;55886:3;55835:49;55879:4;55835:49;:::i;:::-;55805:85;:::i;:::-;55923:4;55918:3;55914:14;55907:21;;55977:1;55964:11;55960:19;55945:34;;55782:211;56010:1;56007:211;;;56030:85;56111:3;56060:49;56104:4;56060:49;:::i;:::-;56030:85;:::i;:::-;56148:4;56143:3;56139:14;56132:21;;56202:1;56189:11;56185:19;56170:34;;56007:211;56235:1;56232:211;;;56255:85;56336:3;56285:49;56329:4;56285:49;:::i;:::-;56255:85;:::i;:::-;56373:4;56368:3;56364:14;56357:21;;56427:1;56414:11;56410:19;56395:34;;56232:211;56460:1;56457:211;;;56480:85;56561:3;56510:49;56554:4;56510:49;:::i;:::-;56480:85;:::i;:::-;56598:4;56593:3;56589:14;56582:21;;56652:1;56639:11;56635:19;56620:34;;56457:211;56685:1;56682:211;;;56705:85;56786:3;56735:49;56779:4;56735:49;:::i;:::-;56705:85;:::i;:::-;56823:4;56818:3;56814:14;56807:21;;56877:1;56864:11;56860:19;56845:34;;56682:211;56910:1;56907:211;;;56930:85;57011:3;56960:49;57004:4;56960:49;:::i;:::-;56930:85;:::i;:::-;57048:4;57043:3;57039:14;57032:21;;57102:1;57089:11;57085:19;57070:34;;56907:211;57135:1;57132:211;;;57155:85;57236:3;57185:49;57229:4;57185:49;:::i;:::-;57155:85;:::i;:::-;57273:4;57268:3;57264:14;57257:21;;57327:1;57314:11;57310:19;57295:34;;57132:211;57360:1;57357:211;;;57380:85;57461:3;57410:49;57454:4;57410:49;:::i;:::-;57380:85;:::i;:::-;57498:4;57493:3;57489:14;57482:21;;57552:1;57539:11;57535:19;57520:34;;57357:211;57585:1;57582:211;;;57605:85;57686:3;57635:49;57679:4;57635:49;:::i;:::-;57605:85;:::i;:::-;57723:4;57718:3;57714:14;57707:21;;57777:1;57764:11;57760:19;57745:34;;57582:211;57810:1;57807:211;;;57830:85;57911:3;57860:49;57904:4;57860:49;:::i;:::-;57830:85;:::i;:::-;57948:4;57943:3;57939:14;57932:21;;58002:1;57989:11;57985:19;57970:34;;57807:211;58035:1;58032:211;;;58055:85;58136:3;58085:49;58129:4;58085:49;:::i;:::-;58055:85;:::i;:::-;58173:4;58168:3;58164:14;58157:21;;58227:1;58214:11;58210:19;58195:34;;58032:211;58260:1;58257:211;;;58280:85;58361:3;58310:49;58354:4;58310:49;:::i;:::-;58280:85;:::i;:::-;58398:4;58393:3;58389:14;58382:21;;58452:1;58439:11;58435:19;58420:34;;58257:211;58485:1;58482:211;;;58505:85;58586:3;58535:49;58579:4;58535:49;:::i;:::-;58505:85;:::i;:::-;58623:4;58618:3;58614:14;58607:21;;58677:1;58664:11;58660:19;58645:34;;58482:211;51464:7240;51459:7245;46291:12420;;;;46194:12517;;:::o;58791:958::-;58905:3;58941:6;58936:3;58932:16;58974:1;59054:4;59047:5;59043:16;59106:3;59100:4;59096:14;59089:4;59084:3;59080:14;59073:38;59132:145;59272:4;59258:12;59132:145;:::i;:::-;59124:153;;58985:303;59372:4;59365:5;59361:16;59390:104;59488:4;59483:3;59479:14;59465:12;59390:104;:::i;:::-;59298:206;59588:4;59581:5;59577:16;59606:106;59704:6;59699:3;59695:16;59681:12;59606:106;:::i;:::-;59514:208;59739:4;59732:11;;58910:839;;58791:958;;;;:::o;59755:109::-;59836:21;59851:5;59836:21;:::i;:::-;59831:3;59824:34;59755:109;;:::o;59870:461::-;60030:4;60068:2;60057:9;60053:18;60045:26;;60117:9;60111:4;60107:20;60103:1;60092:9;60088:17;60081:47;60145:103;60243:4;60234:6;60145:103;:::i;:::-;60137:111;;60258:66;60320:2;60309:9;60305:18;60296:6;60258:66;:::i;:::-;59870:461;;;;;:::o;60337:117::-;60446:1;60443;60436:12;60460:117;60569:1;60566;60559:12;60583:117;60692:1;60689;60682:12;60706:711;60770:5;60777:6;60833:3;60820:17;60925:1;60919:4;60915:12;60904:8;60888:14;60884:29;60880:48;60860:18;60856:73;60846:168;;60933:79;;:::i;:::-;60846:168;61056:8;61036:18;61032:33;61023:42;;61098:5;61085:19;61075:29;;61133:4;61126:5;61122:16;61113:25;;61161:18;61153:6;61150:30;61147:117;;;61183:79;;:::i;:::-;61147:117;61319:4;61311:6;61307:17;61291:14;61287:38;61280:5;61276:50;61273:137;;;61329:79;;:::i;:::-;61273:137;60784:633;60706:711;;;;;:::o;61423:158::-;61496:11;61530:6;61525:3;61518:19;61570:4;61565:3;61561:14;61546:29;;61423:158;;;;:::o;61587:146::-;61684:6;61679:3;61674;61661:30;61725:1;61716:6;61711:3;61707:16;61700:27;61587:146;;;:::o;61739:102::-;61780:6;61831:2;61827:7;61822:2;61815:5;61811:14;61807:28;61797:38;;61739:102;;;:::o;61869:294::-;61955:3;61976:60;62029:6;62024:3;61976:60;:::i;:::-;61969:67;;62046:56;62095:6;62090:3;62083:5;62046:56;:::i;:::-;62127:29;62149:6;62127:29;:::i;:::-;62122:3;62118:39;62111:46;;61869:294;;;;;:::o;62235:1499::-;62346:3;62382:4;62377:3;62373:14;62455:50;62499:4;62492:5;62488:16;62481:5;62455:50;:::i;:::-;62518:63;62575:4;62570:3;62566:14;62552:12;62518:63;:::i;:::-;62397:194;62660:50;62704:4;62697:5;62693:16;62686:5;62660:50;:::i;:::-;62723:63;62780:4;62775:3;62771:14;62757:12;62723:63;:::i;:::-;62601:195;62862:49;62905:4;62898:5;62894:16;62887:5;62862:49;:::i;:::-;62924:61;62979:4;62974:3;62970:14;62956:12;62924:61;:::i;:::-;62806:189;63058:50;63102:4;63095:5;63091:16;63084:5;63058:50;:::i;:::-;63121:63;63178:4;63173:3;63169:14;63155:12;63121:63;:::i;:::-;63005:189;63260:50;63304:4;63297:5;63293:16;63286:5;63260:50;:::i;:::-;63323:63;63380:4;63375:3;63371:14;63357:12;63323:63;:::i;:::-;63204:192;63475:61;63530:4;63523:5;63519:16;63512:5;63475:61;:::i;:::-;63583:3;63577:4;63573:14;63566:4;63561:3;63557:14;63550:38;63609:87;63691:4;63677:12;63663;63609:87;:::i;:::-;63601:95;;63406:301;;63724:4;63717:11;;62351:1383;62235:1499;;;;:::o;63740:467::-;63903:4;63941:2;63930:9;63926:18;63918:26;;63954:71;64022:1;64011:9;64007:17;63998:6;63954:71;:::i;:::-;64072:9;64066:4;64062:20;64057:2;64046:9;64042:18;64035:48;64100:100;64195:4;64186:6;64100:100;:::i;:::-;64092:108;;63740:467;;;;;:::o;64213:199::-;64252:3;64271:19;64288:1;64271:19;:::i;:::-;64266:24;;64304:19;64321:1;64304:19;:::i;:::-;64299:24;;64346:1;64343;64339:9;64332:16;;64369:12;64364:3;64361:21;64358:47;;;64385:18;;:::i;:::-;64358:47;64213:199;;;;:::o;64418:117::-;64527:1;64524;64517:12;64541:117;64650:1;64647;64640:12;64664:117;64773:1;64770;64763:12;64787:724;64864:4;64870:6;64926:11;64913:25;65026:1;65020:4;65016:12;65005:8;64989:14;64985:29;64981:48;64961:18;64957:73;64947:168;;65034:79;;:::i;:::-;64947:168;65146:18;65136:8;65132:33;65124:41;;65198:4;65185:18;65175:28;;65226:18;65218:6;65215:30;65212:117;;;65248:79;;:::i;:::-;65212:117;65356:2;65350:4;65346:13;65338:21;;65413:4;65405:6;65401:17;65385:14;65381:38;65375:4;65371:49;65368:136;;;65423:79;;:::i;:::-;65368:136;64877:634;64787:724;;;;;:::o;65517:168::-;65600:11;65634:6;65629:3;65622:19;65674:4;65669:3;65665:14;65650:29;;65517:168;;;;:::o;65713:314::-;65809:3;65830:70;65893:6;65888:3;65830:70;:::i;:::-;65823:77;;65910:56;65959:6;65954:3;65947:5;65910:56;:::i;:::-;65991:29;66013:6;65991:29;:::i;:::-;65986:3;65982:39;65975:46;;65713:314;;;;;:::o;66033:118::-;66120:24;66138:5;66120:24;:::i;:::-;66115:3;66108:37;66033:118;;:::o;66157:549::-;66334:4;66372:2;66361:9;66357:18;66349:26;;66385:71;66453:1;66442:9;66438:17;66429:6;66385:71;:::i;:::-;66503:9;66497:4;66493:20;66488:2;66477:9;66473:18;66466:48;66531:86;66612:4;66603:6;66595;66531:86;:::i;:::-;66523:94;;66627:72;66695:2;66684:9;66680:18;66671:6;66627:72;:::i;:::-;66157:549;;;;;;;:::o;66712:182::-;66852:34;66848:1;66840:6;66836:14;66829:58;66712:182;:::o;66900:366::-;67042:3;67063:67;67127:2;67122:3;67063:67;:::i;:::-;67056:74;;67139:93;67228:3;67139:93;:::i;:::-;67257:2;67252:3;67248:12;67241:19;;66900:366;;;:::o;67272:419::-;67438:4;67476:2;67465:9;67461:18;67453:26;;67525:9;67519:4;67515:20;67511:1;67500:9;67496:17;67489:47;67553:131;67679:4;67553:131;:::i;:::-;67545:139;;67272:419;;;:::o;67697:147::-;67798:11;67835:3;67820:18;;67697:147;;;;:::o;67872:327::-;67986:3;68007:88;68088:6;68083:3;68007:88;:::i;:::-;68000:95;;68105:56;68154:6;68149:3;68142:5;68105:56;:::i;:::-;68186:6;68181:3;68177:16;68170:23;;67872:327;;;;;:::o;68205:291::-;68345:3;68367:103;68466:3;68457:6;68449;68367:103;:::i;:::-;68360:110;;68487:3;68480:10;;68205:291;;;;;:::o;68502:98::-;68553:6;68587:5;68581:12;68571:22;;68502:98;;;:::o;68606:246::-;68687:1;68697:113;68711:6;68708:1;68705:13;68697:113;;;68796:1;68791:3;68787:11;68781:18;68777:1;68772:3;68768:11;68761:39;68733:2;68730:1;68726:10;68721:15;;68697:113;;;68844:1;68835:6;68830:3;68826:16;68819:27;68668:184;68606:246;;;:::o;68858:373::-;68944:3;68972:38;69004:5;68972:38;:::i;:::-;69026:70;69089:6;69084:3;69026:70;:::i;:::-;69019:77;;69105:65;69163:6;69158:3;69151:4;69144:5;69140:16;69105:65;:::i;:::-;69195:29;69217:6;69195:29;:::i;:::-;69190:3;69186:39;69179:46;;68948:283;68858:373;;;;:::o;69237:309::-;69348:4;69386:2;69375:9;69371:18;69363:26;;69435:9;69429:4;69425:20;69421:1;69410:9;69406:17;69399:47;69463:76;69534:4;69525:6;69463:76;:::i;:::-;69455:84;;69237:309;;;;:::o;69552:545::-;69725:4;69763:3;69752:9;69748:19;69740:27;;69777:71;69845:1;69834:9;69830:17;69821:6;69777:71;:::i;:::-;69858:68;69922:2;69911:9;69907:18;69898:6;69858:68;:::i;:::-;69936:72;70004:2;69993:9;69989:18;69980:6;69936:72;:::i;:::-;70018;70086:2;70075:9;70071:18;70062:6;70018:72;:::i;:::-;69552:545;;;;;;;:::o;70103:180::-;70151:77;70148:1;70141:88;70248:4;70245:1;70238:15;70272:4;70269:1;70262:15;70289:174;70429:26;70425:1;70417:6;70413:14;70406:50;70289:174;:::o;70469:366::-;70611:3;70632:67;70696:2;70691:3;70632:67;:::i;:::-;70625:74;;70708:93;70797:3;70708:93;:::i;:::-;70826:2;70821:3;70817:12;70810:19;;70469:366;;;:::o;70841:419::-;71007:4;71045:2;71034:9;71030:18;71022:26;;71094:9;71088:4;71084:20;71080:1;71069:9;71065:17;71058:47;71122:131;71248:4;71122:131;:::i;:::-;71114:139;;70841:419;;;:::o;71266:181::-;71406:33;71402:1;71394:6;71390:14;71383:57;71266:181;:::o;71453:366::-;71595:3;71616:67;71680:2;71675:3;71616:67;:::i;:::-;71609:74;;71692:93;71781:3;71692:93;:::i;:::-;71810:2;71805:3;71801:12;71794:19;;71453:366;;;:::o;71825:419::-;71991:4;72029:2;72018:9;72014:18;72006:26;;72078:9;72072:4;72068:20;72064:1;72053:9;72049:17;72042:47;72106:131;72232:4;72106:131;:::i;:::-;72098:139;;71825:419;;;:::o;72250:221::-;72390:34;72386:1;72378:6;72374:14;72367:58;72459:4;72454:2;72446:6;72442:15;72435:29;72250:221;:::o;72477:366::-;72619:3;72640:67;72704:2;72699:3;72640:67;:::i;:::-;72633:74;;72716:93;72805:3;72716:93;:::i;:::-;72834:2;72829:3;72825:12;72818:19;;72477:366;;;:::o;72849:419::-;73015:4;73053:2;73042:9;73038:18;73030:26;;73102:9;73096:4;73092:20;73088:1;73077:9;73073:17;73066:47;73130:131;73256:4;73130:131;:::i;:::-;73122:139;;72849:419;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "MAX_NUM_SIGNERS()": "a76f5598",
    "NUM_GROUPS()": "5a2519ef",
    "acceptOwnership()": "79ba5097",
    "execute((uint256,address,uint40,address,uint256,bytes),bytes32[])": "b759d685",
    "getConfig()": "c3f909d4",
    "getOpCount()": "627e8a3b",
    "getRoot()": "5ca1e165",
    "getRootMetadata()": "6b45fb3e",
    "owner()": "8da5cb5b",
    "pendingOwner()": "e30c3978",
    "renounceOwnership()": "715018a6",
    "setConfig(address[],uint8[],uint8[32],uint8[32],bool)": "846c67ef",
    "setRoot(bytes32,uint32,(uint256,address,uint40,uint40,bool),bytes32[],(uint8,bytes32,bytes32)[])": "7cc38b28",
    "transferOwnership(address)": "f2fde38b"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"CallReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GroupTreeNotWellFormed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBoundsGroup\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBoundsGroupQuorum\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBoundsNumOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingOps\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PostOpCountReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProofCannotBeVerified\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RootExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignedHashAlreadySeen\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignerGroupsLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignerInDisabledGroup\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignersAddressesMustBeStrictlyIncreasing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidUntilHasAlreadyPassed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongChainId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongMultiSig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongPostOpCount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongPreOpCount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"group\",\"type\":\"uint8\"}],\"internalType\":\"struct ManyChainMultiSig.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint8[32]\",\"name\":\"groupQuorums\",\"type\":\"uint8[32]\"},{\"internalType\":\"uint8[32]\",\"name\":\"groupParents\",\"type\":\"uint8[32]\"}],\"indexed\":false,\"internalType\":\"struct ManyChainMultiSig.Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isRootCleared\",\"type\":\"bool\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"validUntil\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"multiSig\",\"type\":\"address\"},{\"internalType\":\"uint40\",\"name\":\"preOpCount\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"postOpCount\",\"type\":\"uint40\"},{\"internalType\":\"bool\",\"name\":\"overridePreviousRoot\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct ManyChainMultiSig.RootMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"name\":\"NewRoot\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint40\",\"name\":\"nonce\",\"type\":\"uint40\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"OpExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_NUM_SIGNERS\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NUM_GROUPS\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"multiSig\",\"type\":\"address\"},{\"internalType\":\"uint40\",\"name\":\"nonce\",\"type\":\"uint40\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct ManyChainMultiSig.Op\",\"name\":\"op\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"group\",\"type\":\"uint8\"}],\"internalType\":\"struct ManyChainMultiSig.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint8[32]\",\"name\":\"groupQuorums\",\"type\":\"uint8[32]\"},{\"internalType\":\"uint8[32]\",\"name\":\"groupParents\",\"type\":\"uint8[32]\"}],\"internalType\":\"struct ManyChainMultiSig.Config\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOpCount\",\"outputs\":[{\"internalType\":\"uint40\",\"name\":\"\",\"type\":\"uint40\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"validUntil\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRootMetadata\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"multiSig\",\"type\":\"address\"},{\"internalType\":\"uint40\",\"name\":\"preOpCount\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"postOpCount\",\"type\":\"uint40\"},{\"internalType\":\"bool\",\"name\":\"overridePreviousRoot\",\"type\":\"bool\"}],\"internalType\":\"struct ManyChainMultiSig.RootMetadata\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signerAddresses\",\"type\":\"address[]\"},{\"internalType\":\"uint8[]\",\"name\":\"signerGroups\",\"type\":\"uint8[]\"},{\"internalType\":\"uint8[32]\",\"name\":\"groupQuorums\",\"type\":\"uint8[32]\"},{\"internalType\":\"uint8[32]\",\"name\":\"groupParents\",\"type\":\"uint8[32]\"},{\"internalType\":\"bool\",\"name\":\"clearRoot\",\"type\":\"bool\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"validUntil\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"multiSig\",\"type\":\"address\"},{\"internalType\":\"uint40\",\"name\":\"preOpCount\",\"type\":\"uint40\"},{\"internalType\":\"uint40\",\"name\":\"postOpCount\",\"type\":\"uint40\"},{\"internalType\":\"bool\",\"name\":\"overridePreviousRoot\",\"type\":\"bool\"}],\"internalType\":\"struct ManyChainMultiSig.RootMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"metadataProof\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct ManyChainMultiSig.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"}],\"name\":\"setRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"execute((uint256,address,uint40,address,uint256,bytes),bytes32[])\":{\"details\":\"ANYONE can call this function! That's intentional. Callers can only execute verified, ordered ops in the Merkle tree.we perform a raw call to each target. Raw calls to targets that don't have associated contract code will always succeed regardless of data.the gas limit of the call can be freely determined by the caller of this function. We expect callees to revert if they run out of gas.\",\"params\":{\"op\":\"is Op to be executed\",\"proof\":\"is the MerkleProof for the op's inclusion in the MerkleTree which its root is the s_expiringRootAndOpCount.root.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"setConfig(address[],uint8[],uint8[32],uint8[32],bool)\":{\"params\":{\"clearRoot\":\", if set to true, invalidates the current root. This option is needed to invalidate the current root, so to prevent further ops from being executed. This might be used when the current root was signed under a loser group configuration or when some previous signers aren't trusted any more.\",\"groupParents\":\"holds each group's parent. The groups must be arranged in a tree s.t. group 0 is the root of the tree and the i-th group's parent has index j less than i. Iff setRoot is called with a set of signatures that causes the root group to be successful, setRoot allows a root to be set.\",\"groupQuorums\":\"holds the required number of valid signatures in each group. A group i is called successful group if at least groupQuorum[i] distinct signers provide a valid signature.\",\"signerAddresses\":\"holds the addresses of the active signers. The addresses must be in ascending order.\",\"signerGroups\":\"maps each signer to its group\"}},\"setRoot(bytes32,uint32,(uint256,address,uint40,uint40,bool),bytes32[],(uint8,bytes32,bytes32)[])\":{\"details\":\"the message (root, validUntil) should be signed by a sufficient set of signers. This signature authenticates also the metadata.this method can be executed by anyone who has the root and valid signatures. as we validate the correctness of signatures, this imposes no risk.\",\"params\":{\"metadata\":\"is the authenticated metadata about the root, which is stored as one of the leaves.\",\"metadataProof\":\"is the MerkleProof of inclusion of the metadata in the Merkle tree.\",\"root\":\"is the new expiring root.\",\"signatures\":\"the ECDSA signatures on (root, validUntil).\",\"validUntil\":\"is the time by which root is valid\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"CallReverted(bytes)\":[{\"notice\":\"Thrown when the underlying call in _execute() reverts.\"}],\"GroupTreeNotWellFormed()\":[{\"notice\":\"Thrown when the group tree isn't well-formed.\"}],\"InsufficientSigners()\":[{\"notice\":\"Thrown when there is no sufficient set of valid signatures provided to make the root group successful.\"}],\"InvalidSigner()\":[{\"notice\":\"Thrown when the signature corresponds to invalid signer.\"}],\"MissingConfig()\":[{\"notice\":\"Thrown when setRoot() is called before setting a config.\"}],\"OutOfBoundsGroup()\":[{\"notice\":\"Thrown when number of some signer's group is greater than (NUM_GROUPS-1).\"}],\"OutOfBoundsGroupQuorum()\":[{\"notice\":\"Thrown when the quorum of some group is larger than the number of signers in it.\"}],\"OutOfBoundsNumOfSigners()\":[{\"notice\":\"Thrown when number of signers is 0 or greater than MAX_NUM_SIGNERS.\"}],\"PendingOps()\":[{\"notice\":\"Thrown when attempting to set a new root while there are still pending ops from the previous root without explicitly overriding it.\"}],\"PostOpCountReached()\":[{\"notice\":\"Thrown when attempting to execute an op even though opCount equals metadata.postOpCount.\"}],\"ProofCannotBeVerified()\":[{\"notice\":\"Thrown when the provided merkle proof cannot be verified.\"}],\"RootExpired()\":[{\"notice\":\"Thrown when attempt to execute an op after s_expiringRootAndOpCount.validUntil has passed.\"}],\"SignedHashAlreadySeen()\":[{\"notice\":\"Thrown when attempt to set the same (root, validUntil) in setRoot().\"}],\"SignerGroupsLengthMismatch()\":[{\"notice\":\"Thrown when signerAddresses and signerGroups have different lengths.\"}],\"SignerInDisabledGroup()\":[{\"notice\":\"Thrown when a disabled group contains a signer.\"}],\"SignersAddressesMustBeStrictlyIncreasing()\":[{\"notice\":\"Thrown when the signers' addresses are not a strictly increasing monotone sequence. Prevents signers from including more than one signature.\"}],\"ValidUntilHasAlreadyPassed()\":[{\"notice\":\"Thrown when attempt to set past validUntil for the root.\"}],\"WrongChainId()\":[{\"notice\":\"Thrown when attempt to set metadata or execute op for another chain.\"}],\"WrongMultiSig()\":[{\"notice\":\"Thrown when the multiSig address in metadata or op is incompatible with the address of this contract.\"}],\"WrongNonce()\":[{\"notice\":\"Thrown when attempt to bypass the enforced ops' order in the merkle tree or re-execute an op.\"}],\"WrongPostOpCount()\":[{\"notice\":\"Thrown when the preOpCount <= postOpCount invariant is violated.\"}],\"WrongPreOpCount()\":[{\"notice\":\"Thrown when preOpCount in metadata is incompatible with the current opCount.\"}]},\"events\":{\"ConfigSet(((address,uint8,uint8)[],uint8[32],uint8[32]),bool)\":{\"notice\":\"Emitted when a new config is set.\"},\"NewRoot(bytes32,uint32,(uint256,address,uint40,uint40,bool))\":{\"notice\":\"Emitted when a new root is set.\"},\"OpExecuted(uint40,address,bytes,uint256)\":{\"notice\":\"Emitted when an op gets successfully executed.\"}},\"kind\":\"user\",\"methods\":{\"execute((uint256,address,uint40,address,uint256,bytes),bytes32[])\":{\"notice\":\"Execute the received op after verifying the proof of its inclusion in the current Merkle tree. The op should be the next op according to the order enforced by the merkle tree whose root is stored in s_expiringRootAndOpCount, i.e., the nonce of the op should be equal to s_expiringRootAndOpCount.opCount.\"},\"setConfig(address[],uint8[],uint8[32],uint8[32],bool)\":{\"notice\":\"sets a new s_config. If clearRoot is true, then it also invalidates s_expiringRootAndOpCount.root.\"},\"setRoot(bytes32,uint32,(uint256,address,uint40,uint40,bool),bytes32[],(uint8,bytes32,bytes32)[])\":{\"notice\":\"setRoot Sets a new expiring root.\"}},\"notice\":\"This is a multi-sig contract that supports signing many transactions (called \\\"ops\\\" in the context of this contract to prevent confusion with transactions on the underlying chain) targeting many chains with a single set of signatures. Authorized ops along with some metadata are stored in a Merkle tree, which is generated offchain. Each op has an associated chain id, ManyChainMultiSig contract address and nonce. The nonce enables us to enforce the (per-ManyChainMultiSig contract instance) ordering of ops. At any time, this contract stores at most one Merkle root. In the typical case, all ops in the Merkle tree are expected to be executed before another root is set. Since the Merkle root itself reveals ~ no information about the tree's contents, we take two measures to improve transparency. First, we attach an expiration time to each Merkle root after which it cannot be used any more. Second, we embed metadata in the tree itself that has to be proven/revealed to the contract when a new root is set; the metadata contains the range of nonces (and thus number of ops) in the tree intended for the ManyChainMultiSig contract instance on which the root is being set. Once a root is registered, *anyone* is allowed to furnish proofs of op inclusion in the Merkle tree and execute the corresponding op. The contract enforces that ops are executed in the correct order and with the correct arguments. A notable exception to this is the gas limit of the call, which can be freely determined by the executor. We expect (transitive) callees to implement standard behavior of simply reverting if insufficient gas is provided. In particular, this means callees should not have non-reverting gas-dependent branches. Note: In the typical case, we expect the time from a root being set to all of the ops therein having been executed to be on the order of a couple of minutes.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/v0.8/mcm/ManyChainMultiSig/ManyChainMultiSig.sol\":\"ManyChainMultiSig\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":@eth-optimism/=node_modules/@eth-optimism/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=foundry-lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=foundry-lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=foundry-lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\",\":openzeppelin-contracts/=foundry-lib/openzeppelin-contracts/contracts/\"]},\"sources\":{\"foundry-lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0x923b9774b81c1abfb992262ae7763b6e6de77b077a7180d53c6ebb7b1c8bd648\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53445dc0431f9b45c06f567c6091da961d4087bec0010cca5bd62100fa624a38\",\"dweb:/ipfs/QmNvBYpBv183czrAqNXr76E8M3LF93ouAJFeAcHfb59Rcx\"]},\"foundry-lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0x7cdab82b437a17902683a413c86d14f512674a0710007bf44c584a2d2d3ca833\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ffe4db7a9f3cdd5a5d019462c2859f4f98f7aae08704afdcb3ef0d08d966bbeb\",\"dweb:/ipfs/QmTCHSuoi22dAu55qv4TcENyTmv5mTpAoxmYWD8cRnEp3M\"]},\"foundry-lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"foundry-lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x2626d8ab3dfdad0fad630c212ad146d59473d0f48b771784c61a7c1dbbea1f3f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7c144532f1e7c76ac95fb6a8f617c1f740d7a73442a907eb60910e99dfa1fbf\",\"dweb:/ipfs/QmZsGyooD6emxB8JCuugRjnRYS2MPZEL586uuV7dgC8Jng\"]},\"foundry-lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xbb3a7044647cb4088be40b49b87ff990fac44f2d50569110a2b2ce7942365020\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5deecb9394b327096dee59f6d2600e5dc41795d20d6312b9e17184d04941855e\",\"dweb:/ipfs/QmNRLLFHxfdzPBcUF2NpyGqBoYzGGoR34g7HWFzEcPokEX\"]},\"foundry-lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol\":{\"keccak256\":\"0xcc76dbe53154a5bbd12fdd1613a73f73f3dc7c63d813be36f7ee606f52d6a7b3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://345232794f2cfafccfb4371e44910af9fd86f972ecace1bb6843532536590929\",\"dweb:/ipfs/QmSnapDBk6P2JG6LJHwituQq7wMM8DawKj32APiPj5Bzpn\"]},\"foundry-lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xbaf3bd8c64ac943fafde717797ee797c96360586b9448ea25e9872490a6e6858\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bab65b9b5ea0c68e96e1a73460db616042f639d144a6a75595434cfa2a483ed4\",\"dweb:/ipfs/QmUgwEcWXaEu4VSpymiVq8tZYKgA44HPMWZowpg2L8Kiij\"]},\"foundry-lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7\",\"dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6\"]},\"src/v0.8/mcm/ManyChainMultiSig/ManyChainMultiSig.sol\":{\"keccak256\":\"0xcbe4e6dad99faed82bce8389918e5f14c35b1f3cb4bd5a6efd6f78a9c1112748\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e5ee1c3e76968fad30f36546ae447ff8a2c812a50a378dbaba04aa97ed07107b\",\"dweb:/ipfs/QmYjn9bKx1siZi8FxEVpZ3SBLaBCqr2xLkNv5N8wfa8XcB\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.19+commit.7dd6d404"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "bytes",
              "name": "error",
              "type": "bytes"
            }
          ],
          "type": "error",
          "name": "CallReverted"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "GroupTreeNotWellFormed"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InsufficientSigners"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidSigner"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "MissingConfig"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "OutOfBoundsGroup"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "OutOfBoundsGroupQuorum"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "OutOfBoundsNumOfSigners"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "PendingOps"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "PostOpCountReached"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "ProofCannotBeVerified"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "RootExpired"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "SignedHashAlreadySeen"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "SignerGroupsLengthMismatch"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "SignerInDisabledGroup"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "SignersAddressesMustBeStrictlyIncreasing"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "ValidUntilHasAlreadyPassed"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "WrongChainId"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "WrongMultiSig"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "WrongNonce"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "WrongPostOpCount"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "WrongPreOpCount"
        },
        {
          "inputs": [
            {
              "internalType": "struct ManyChainMultiSig.Config",
              "name": "config",
              "type": "tuple",
              "components": [
                {
                  "internalType": "struct ManyChainMultiSig.Signer[]",
                  "name": "signers",
                  "type": "tuple[]",
                  "components": [
                    {
                      "internalType": "address",
                      "name": "addr",
                      "type": "address"
                    },
                    {
                      "internalType": "uint8",
                      "name": "index",
                      "type": "uint8"
                    },
                    {
                      "internalType": "uint8",
                      "name": "group",
                      "type": "uint8"
                    }
                  ]
                },
                {
                  "internalType": "uint8[32]",
                  "name": "groupQuorums",
                  "type": "uint8[32]"
                },
                {
                  "internalType": "uint8[32]",
                  "name": "groupParents",
                  "type": "uint8[32]"
                }
              ],
              "indexed": false
            },
            {
              "internalType": "bool",
              "name": "isRootCleared",
              "type": "bool",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "ConfigSet",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "root",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "uint32",
              "name": "validUntil",
              "type": "uint32",
              "indexed": false
            },
            {
              "internalType": "struct ManyChainMultiSig.RootMetadata",
              "name": "metadata",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "chainId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "multiSig",
                  "type": "address"
                },
                {
                  "internalType": "uint40",
                  "name": "preOpCount",
                  "type": "uint40"
                },
                {
                  "internalType": "uint40",
                  "name": "postOpCount",
                  "type": "uint40"
                },
                {
                  "internalType": "bool",
                  "name": "overridePreviousRoot",
                  "type": "bool"
                }
              ],
              "indexed": false
            }
          ],
          "type": "event",
          "name": "NewRoot",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "uint40",
              "name": "nonce",
              "type": "uint40",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": false
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes",
              "indexed": false
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "OpExecuted",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "previousOwner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferStarted",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "previousOwner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "OwnershipTransferred",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "MAX_NUM_SIGNERS",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "NUM_GROUPS",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "acceptOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "struct ManyChainMultiSig.Op",
              "name": "op",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "chainId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "multiSig",
                  "type": "address"
                },
                {
                  "internalType": "uint40",
                  "name": "nonce",
                  "type": "uint40"
                },
                {
                  "internalType": "address",
                  "name": "to",
                  "type": "address"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                }
              ]
            },
            {
              "internalType": "bytes32[]",
              "name": "proof",
              "type": "bytes32[]"
            }
          ],
          "stateMutability": "payable",
          "type": "function",
          "name": "execute"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getConfig",
          "outputs": [
            {
              "internalType": "struct ManyChainMultiSig.Config",
              "name": "",
              "type": "tuple",
              "components": [
                {
                  "internalType": "struct ManyChainMultiSig.Signer[]",
                  "name": "signers",
                  "type": "tuple[]",
                  "components": [
                    {
                      "internalType": "address",
                      "name": "addr",
                      "type": "address"
                    },
                    {
                      "internalType": "uint8",
                      "name": "index",
                      "type": "uint8"
                    },
                    {
                      "internalType": "uint8",
                      "name": "group",
                      "type": "uint8"
                    }
                  ]
                },
                {
                  "internalType": "uint8[32]",
                  "name": "groupQuorums",
                  "type": "uint8[32]"
                },
                {
                  "internalType": "uint8[32]",
                  "name": "groupParents",
                  "type": "uint8[32]"
                }
              ]
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getOpCount",
          "outputs": [
            {
              "internalType": "uint40",
              "name": "",
              "type": "uint40"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getRoot",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "root",
              "type": "bytes32"
            },
            {
              "internalType": "uint32",
              "name": "validUntil",
              "type": "uint32"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getRootMetadata",
          "outputs": [
            {
              "internalType": "struct ManyChainMultiSig.RootMetadata",
              "name": "",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "chainId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "multiSig",
                  "type": "address"
                },
                {
                  "internalType": "uint40",
                  "name": "preOpCount",
                  "type": "uint40"
                },
                {
                  "internalType": "uint40",
                  "name": "postOpCount",
                  "type": "uint40"
                },
                {
                  "internalType": "bool",
                  "name": "overridePreviousRoot",
                  "type": "bool"
                }
              ]
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "owner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "pendingOwner",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "renounceOwnership"
        },
        {
          "inputs": [
            {
              "internalType": "address[]",
              "name": "signerAddresses",
              "type": "address[]"
            },
            {
              "internalType": "uint8[]",
              "name": "signerGroups",
              "type": "uint8[]"
            },
            {
              "internalType": "uint8[32]",
              "name": "groupQuorums",
              "type": "uint8[32]"
            },
            {
              "internalType": "uint8[32]",
              "name": "groupParents",
              "type": "uint8[32]"
            },
            {
              "internalType": "bool",
              "name": "clearRoot",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setConfig"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "root",
              "type": "bytes32"
            },
            {
              "internalType": "uint32",
              "name": "validUntil",
              "type": "uint32"
            },
            {
              "internalType": "struct ManyChainMultiSig.RootMetadata",
              "name": "metadata",
              "type": "tuple",
              "components": [
                {
                  "internalType": "uint256",
                  "name": "chainId",
                  "type": "uint256"
                },
                {
                  "internalType": "address",
                  "name": "multiSig",
                  "type": "address"
                },
                {
                  "internalType": "uint40",
                  "name": "preOpCount",
                  "type": "uint40"
                },
                {
                  "internalType": "uint40",
                  "name": "postOpCount",
                  "type": "uint40"
                },
                {
                  "internalType": "bool",
                  "name": "overridePreviousRoot",
                  "type": "bool"
                }
              ]
            },
            {
              "internalType": "bytes32[]",
              "name": "metadataProof",
              "type": "bytes32[]"
            },
            {
              "internalType": "struct ManyChainMultiSig.Signature[]",
              "name": "signatures",
              "type": "tuple[]",
              "components": [
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ]
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setRoot"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "newOwner",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferOwnership"
        },
        {
          "inputs": [],
          "stateMutability": "payable",
          "type": "receive"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "acceptOwnership()": {
            "details": "The new owner accepts the ownership transfer."
          },
          "execute((uint256,address,uint40,address,uint256,bytes),bytes32[])": {
            "details": "ANYONE can call this function! That's intentional. Callers can only execute verified, ordered ops in the Merkle tree.we perform a raw call to each target. Raw calls to targets that don't have associated contract code will always succeed regardless of data.the gas limit of the call can be freely determined by the caller of this function. We expect callees to revert if they run out of gas.",
            "params": {
              "op": "is Op to be executed",
              "proof": "is the MerkleProof for the op's inclusion in the MerkleTree which its root is the s_expiringRootAndOpCount.root."
            }
          },
          "owner()": {
            "details": "Returns the address of the current owner."
          },
          "pendingOwner()": {
            "details": "Returns the address of the pending owner."
          },
          "renounceOwnership()": {
            "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."
          },
          "setConfig(address[],uint8[],uint8[32],uint8[32],bool)": {
            "params": {
              "clearRoot": ", if set to true, invalidates the current root. This option is needed to invalidate the current root, so to prevent further ops from being executed. This might be used when the current root was signed under a loser group configuration or when some previous signers aren't trusted any more.",
              "groupParents": "holds each group's parent. The groups must be arranged in a tree s.t. group 0 is the root of the tree and the i-th group's parent has index j less than i. Iff setRoot is called with a set of signatures that causes the root group to be successful, setRoot allows a root to be set.",
              "groupQuorums": "holds the required number of valid signatures in each group. A group i is called successful group if at least groupQuorum[i] distinct signers provide a valid signature.",
              "signerAddresses": "holds the addresses of the active signers. The addresses must be in ascending order.",
              "signerGroups": "maps each signer to its group"
            }
          },
          "setRoot(bytes32,uint32,(uint256,address,uint40,uint40,bool),bytes32[],(uint8,bytes32,bytes32)[])": {
            "details": "the message (root, validUntil) should be signed by a sufficient set of signers. This signature authenticates also the metadata.this method can be executed by anyone who has the root and valid signatures. as we validate the correctness of signatures, this imposes no risk.",
            "params": {
              "metadata": "is the authenticated metadata about the root, which is stored as one of the leaves.",
              "metadataProof": "is the MerkleProof of inclusion of the metadata in the Merkle tree.",
              "root": "is the new expiring root.",
              "signatures": "the ECDSA signatures on (root, validUntil).",
              "validUntil": "is the time by which root is valid"
            }
          },
          "transferOwnership(address)": {
            "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "execute((uint256,address,uint40,address,uint256,bytes),bytes32[])": {
            "notice": "Execute the received op after verifying the proof of its inclusion in the current Merkle tree. The op should be the next op according to the order enforced by the merkle tree whose root is stored in s_expiringRootAndOpCount, i.e., the nonce of the op should be equal to s_expiringRootAndOpCount.opCount."
          },
          "setConfig(address[],uint8[],uint8[32],uint8[32],bool)": {
            "notice": "sets a new s_config. If clearRoot is true, then it also invalidates s_expiringRootAndOpCount.root."
          },
          "setRoot(bytes32,uint32,(uint256,address,uint40,uint40,bool),bytes32[],(uint8,bytes32,bytes32)[])": {
            "notice": "setRoot Sets a new expiring root."
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        ":@eth-optimism/=node_modules/@eth-optimism/",
        ":@openzeppelin/=node_modules/@openzeppelin/",
        ":ds-test/=foundry-lib/forge-std/lib/ds-test/src/",
        ":erc4626-tests/=foundry-lib/openzeppelin-contracts/lib/erc4626-tests/",
        ":forge-std/=foundry-lib/forge-std/src/",
        ":hardhat/=node_modules/hardhat/",
        ":openzeppelin-contracts/=foundry-lib/openzeppelin-contracts/contracts/"
      ],
      "optimizer": {
        "enabled": false,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "none"
      },
      "compilationTarget": {
        "src/v0.8/mcm/ManyChainMultiSig/ManyChainMultiSig.sol": "ManyChainMultiSig"
      },
      "libraries": {}
    },
    "sources": {
      "foundry-lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
        "keccak256": "0x923b9774b81c1abfb992262ae7763b6e6de77b077a7180d53c6ebb7b1c8bd648",
        "urls": [
          "bzz-raw://53445dc0431f9b45c06f567c6091da961d4087bec0010cca5bd62100fa624a38",
          "dweb:/ipfs/QmNvBYpBv183czrAqNXr76E8M3LF93ouAJFeAcHfb59Rcx"
        ],
        "license": "MIT"
      },
      "foundry-lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": {
        "keccak256": "0x7cdab82b437a17902683a413c86d14f512674a0710007bf44c584a2d2d3ca833",
        "urls": [
          "bzz-raw://ffe4db7a9f3cdd5a5d019462c2859f4f98f7aae08704afdcb3ef0d08d966bbeb",
          "dweb:/ipfs/QmTCHSuoi22dAu55qv4TcENyTmv5mTpAoxmYWD8cRnEp3M"
        ],
        "license": "MIT"
      },
      "foundry-lib/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7",
        "urls": [
          "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92",
          "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"
        ],
        "license": "MIT"
      },
      "foundry-lib/openzeppelin-contracts/contracts/utils/Strings.sol": {
        "keccak256": "0x2626d8ab3dfdad0fad630c212ad146d59473d0f48b771784c61a7c1dbbea1f3f",
        "urls": [
          "bzz-raw://d7c144532f1e7c76ac95fb6a8f617c1f740d7a73442a907eb60910e99dfa1fbf",
          "dweb:/ipfs/QmZsGyooD6emxB8JCuugRjnRYS2MPZEL586uuV7dgC8Jng"
        ],
        "license": "MIT"
      },
      "foundry-lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": {
        "keccak256": "0xbb3a7044647cb4088be40b49b87ff990fac44f2d50569110a2b2ce7942365020",
        "urls": [
          "bzz-raw://5deecb9394b327096dee59f6d2600e5dc41795d20d6312b9e17184d04941855e",
          "dweb:/ipfs/QmNRLLFHxfdzPBcUF2NpyGqBoYzGGoR34g7HWFzEcPokEX"
        ],
        "license": "MIT"
      },
      "foundry-lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol": {
        "keccak256": "0xcc76dbe53154a5bbd12fdd1613a73f73f3dc7c63d813be36f7ee606f52d6a7b3",
        "urls": [
          "bzz-raw://345232794f2cfafccfb4371e44910af9fd86f972ecace1bb6843532536590929",
          "dweb:/ipfs/QmSnapDBk6P2JG6LJHwituQq7wMM8DawKj32APiPj5Bzpn"
        ],
        "license": "MIT"
      },
      "foundry-lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
        "keccak256": "0xbaf3bd8c64ac943fafde717797ee797c96360586b9448ea25e9872490a6e6858",
        "urls": [
          "bzz-raw://bab65b9b5ea0c68e96e1a73460db616042f639d144a6a75595434cfa2a483ed4",
          "dweb:/ipfs/QmUgwEcWXaEu4VSpymiVq8tZYKgA44HPMWZowpg2L8Kiij"
        ],
        "license": "MIT"
      },
      "foundry-lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": {
        "keccak256": "0xf92515413956f529d95977adc9b0567d583c6203fc31ab1c23824c35187e3ddc",
        "urls": [
          "bzz-raw://c50fcc459e49a9858b6d8ad5f911295cb7c9ab57567845a250bf0153f84a95c7",
          "dweb:/ipfs/QmcEW85JRzvDkQggxiBBLVAasXWdkhEysqypj9EaB6H2g6"
        ],
        "license": "MIT"
      },
      "src/v0.8/mcm/ManyChainMultiSig/ManyChainMultiSig.sol": {
        "keccak256": "0xcbe4e6dad99faed82bce8389918e5f14c35b1f3cb4bd5a6efd6f78a9c1112748",
        "urls": [
          "bzz-raw://e5ee1c3e76968fad30f36546ae447ff8a2c812a50a378dbaba04aa97ed07107b",
          "dweb:/ipfs/QmYjn9bKx1siZi8FxEVpZ3SBLaBCqr2xLkNv5N8wfa8XcB"
        ],
        "license": "BUSL-1.1"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/v0.8/mcm/ManyChainMultiSig/ManyChainMultiSig.sol",
    "id": 3319,
    "exportedSymbols": {
      "Context": [
        217
      ],
      "ECDSA": [
        812
      ],
      "MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_METADATA": [
        2304
      ],
      "MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_OP": [
        2299
      ],
      "ManyChainMultiSig": [
        3318
      ],
      "Math": [
        2184
      ],
      "MerkleProof": [
        1318
      ],
      "Ownable": [
        112
      ],
      "Ownable2Step": [
        195
      ],
      "SignedMath": [
        2289
      ],
      "Strings": [
        446
      ]
    },
    "nodeType": "SourceUnit",
    "src": "37:27953:8",
    "nodes": [
      {
        "id": 2291,
        "nodeType": "PragmaDirective",
        "src": "37:24:8",
        "nodes": [],
        "literals": [
          "solidity",
          "=",
          "0.8",
          ".19"
        ]
      },
      {
        "id": 2292,
        "nodeType": "ImportDirective",
        "src": "63:67:8",
        "nodes": [],
        "absolutePath": "foundry-lib/openzeppelin-contracts/contracts/utils/cryptography/MerkleProof.sol",
        "file": "openzeppelin-contracts/utils/cryptography/MerkleProof.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 3319,
        "sourceUnit": 1319,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 2293,
        "nodeType": "ImportDirective",
        "src": "131:56:8",
        "nodes": [],
        "absolutePath": "foundry-lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol",
        "file": "openzeppelin-contracts/access/Ownable2Step.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 3319,
        "sourceUnit": 196,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 2294,
        "nodeType": "ImportDirective",
        "src": "188:61:8",
        "nodes": [],
        "absolutePath": "foundry-lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol",
        "file": "openzeppelin-contracts/utils/cryptography/ECDSA.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 3319,
        "sourceUnit": 813,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 2299,
        "nodeType": "VariableDeclaration",
        "src": "430:117:8",
        "nodes": [],
        "constant": true,
        "mutability": "constant",
        "name": "MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_OP",
        "nameLocation": "447:40:8",
        "scope": 3319,
        "stateVariable": false,
        "storageLocation": "default",
        "typeDescriptions": {
          "typeIdentifier": "t_bytes32",
          "typeString": "bytes32"
        },
        "typeName": {
          "id": 2295,
          "name": "bytes32",
          "nodeType": "ElementaryTypeName",
          "src": "430:7:8",
          "typeDescriptions": {
            "typeIdentifier": "t_bytes32",
            "typeString": "bytes32"
          }
        },
        "value": {
          "arguments": [
            {
              "hexValue": "4d414e595f434841494e5f4d554c54495f5349475f444f4d41494e5f534550415241544f525f4f50",
              "id": 2297,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "504:42:8",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_08d275622006c4ca82d03f498e90163cafd53c663a48470c3b52ac8bfbd9f52c",
                "typeString": "literal_string \"MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_OP\""
              },
              "value": "MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_OP"
            }
          ],
          "expression": {
            "argumentTypes": [
              {
                "typeIdentifier": "t_stringliteral_08d275622006c4ca82d03f498e90163cafd53c663a48470c3b52ac8bfbd9f52c",
                "typeString": "literal_string \"MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_OP\""
              }
            ],
            "id": 2296,
            "name": "keccak256",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": -8,
            "src": "494:9:8",
            "typeDescriptions": {
              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
              "typeString": "function (bytes memory) pure returns (bytes32)"
            }
          },
          "id": 2298,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "functionCall",
          "lValueRequested": false,
          "nameLocations": [],
          "names": [],
          "nodeType": "FunctionCall",
          "src": "494:53:8",
          "tryCall": false,
          "typeDescriptions": {
            "typeIdentifier": "t_bytes32",
            "typeString": "bytes32"
          }
        },
        "visibility": "internal"
      },
      {
        "id": 2304,
        "nodeType": "VariableDeclaration",
        "src": "742:129:8",
        "nodes": [],
        "constant": true,
        "mutability": "constant",
        "name": "MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_METADATA",
        "nameLocation": "759:46:8",
        "scope": 3319,
        "stateVariable": false,
        "storageLocation": "default",
        "typeDescriptions": {
          "typeIdentifier": "t_bytes32",
          "typeString": "bytes32"
        },
        "typeName": {
          "id": 2300,
          "name": "bytes32",
          "nodeType": "ElementaryTypeName",
          "src": "742:7:8",
          "typeDescriptions": {
            "typeIdentifier": "t_bytes32",
            "typeString": "bytes32"
          }
        },
        "value": {
          "arguments": [
            {
              "hexValue": "4d414e595f434841494e5f4d554c54495f5349475f444f4d41494e5f534550415241544f525f4d45544144415441",
              "id": 2302,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "822:48:8",
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_e6b82be989101b4eb519770114b997b97b3c8707515286748a871717f0e4ea1c",
                "typeString": "literal_string \"MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_METADATA\""
              },
              "value": "MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_METADATA"
            }
          ],
          "expression": {
            "argumentTypes": [
              {
                "typeIdentifier": "t_stringliteral_e6b82be989101b4eb519770114b997b97b3c8707515286748a871717f0e4ea1c",
                "typeString": "literal_string \"MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_METADATA\""
              }
            ],
            "id": 2301,
            "name": "keccak256",
            "nodeType": "Identifier",
            "overloadedDeclarations": [],
            "referencedDeclaration": -8,
            "src": "812:9:8",
            "typeDescriptions": {
              "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
              "typeString": "function (bytes memory) pure returns (bytes32)"
            }
          },
          "id": 2303,
          "isConstant": false,
          "isLValue": false,
          "isPure": true,
          "kind": "functionCall",
          "lValueRequested": false,
          "nameLocations": [],
          "names": [],
          "nodeType": "FunctionCall",
          "src": "812:59:8",
          "tryCall": false,
          "typeDescriptions": {
            "typeIdentifier": "t_bytes32",
            "typeString": "bytes32"
          }
        },
        "visibility": "internal"
      },
      {
        "id": 3318,
        "nodeType": "ContractDefinition",
        "src": "2855:25134:8",
        "nodes": [
          {
            "id": 2311,
            "nodeType": "FunctionDefinition",
            "src": "2904:29:8",
            "nodes": [],
            "body": {
              "id": 2310,
              "nodeType": "Block",
              "src": "2931:2:8",
              "nodes": [],
              "statements": []
            },
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 2308,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2911:2:8"
            },
            "returnParameters": {
              "id": 2309,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2931:0:8"
            },
            "scope": 3318,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 2314,
            "nodeType": "VariableDeclaration",
            "src": "2939:37:8",
            "nodes": [],
            "constant": true,
            "functionSelector": "5a2519ef",
            "mutability": "constant",
            "name": "NUM_GROUPS",
            "nameLocation": "2961:10:8",
            "scope": 3318,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 2312,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "2939:5:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "hexValue": "3332",
              "id": 2313,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "2974:2:8",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_32_by_1",
                "typeString": "int_const 32"
              },
              "value": "32"
            },
            "visibility": "public"
          },
          {
            "id": 2317,
            "nodeType": "VariableDeclaration",
            "src": "2982:43:8",
            "nodes": [],
            "constant": true,
            "functionSelector": "a76f5598",
            "mutability": "constant",
            "name": "MAX_NUM_SIGNERS",
            "nameLocation": "3004:15:8",
            "scope": 3318,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 2315,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "2982:5:8",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "hexValue": "323030",
              "id": 2316,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "3022:3:8",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_200_by_1",
                "typeString": "int_const 200"
              },
              "value": "200"
            },
            "visibility": "public"
          },
          {
            "id": 2324,
            "nodeType": "StructDefinition",
            "src": "3032:190:8",
            "nodes": [],
            "canonicalName": "ManyChainMultiSig.Signer",
            "members": [
              {
                "constant": false,
                "id": 2319,
                "mutability": "mutable",
                "name": "addr",
                "nameLocation": "3064:4:8",
                "nodeType": "VariableDeclaration",
                "scope": 2324,
                "src": "3056:12:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 2318,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "3056:7:8",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2321,
                "mutability": "mutable",
                "name": "index",
                "nameLocation": "3084:5:8",
                "nodeType": "VariableDeclaration",
                "scope": 2324,
                "src": "3078:11:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 2320,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "3078:5:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2323,
                "mutability": "mutable",
                "name": "group",
                "nameLocation": "3144:5:8",
                "nodeType": "VariableDeclaration",
                "scope": 2324,
                "src": "3138:11:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 2322,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "3138:5:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Signer",
            "nameLocation": "3039:6:8",
            "scope": 3318,
            "visibility": "public"
          },
          {
            "id": 2329,
            "nodeType": "VariableDeclaration",
            "src": "3425:36:8",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "s_signers",
            "nameLocation": "3452:9:8",
            "scope": 3318,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Signer_$2324_storage_$",
              "typeString": "mapping(address => struct ManyChainMultiSig.Signer)"
            },
            "typeName": {
              "id": 2328,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 2325,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "3433:7:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "3425:26:8",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Signer_$2324_storage_$",
                "typeString": "mapping(address => struct ManyChainMultiSig.Signer)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 2327,
                "nodeType": "UserDefinedTypeName",
                "pathNode": {
                  "id": 2326,
                  "name": "Signer",
                  "nameLocations": [
                    "3444:6:8"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2324,
                  "src": "3444:6:8"
                },
                "referencedDeclaration": 2324,
                "src": "3444:6:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Signer_$2324_storage_ptr",
                  "typeString": "struct ManyChainMultiSig.Signer"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 2342,
            "nodeType": "StructDefinition",
            "src": "6702:695:8",
            "nodes": [],
            "canonicalName": "ManyChainMultiSig.Config",
            "members": [
              {
                "constant": false,
                "id": 2333,
                "mutability": "mutable",
                "name": "signers",
                "nameLocation": "6735:7:8",
                "nodeType": "VariableDeclaration",
                "scope": 2342,
                "src": "6726:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Signer_$2324_storage_$dyn_storage_ptr",
                  "typeString": "struct ManyChainMultiSig.Signer[]"
                },
                "typeName": {
                  "baseType": {
                    "id": 2331,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2330,
                      "name": "Signer",
                      "nameLocations": [
                        "6726:6:8"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2324,
                      "src": "6726:6:8"
                    },
                    "referencedDeclaration": 2324,
                    "src": "6726:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Signer_$2324_storage_ptr",
                      "typeString": "struct ManyChainMultiSig.Signer"
                    }
                  },
                  "id": 2332,
                  "nodeType": "ArrayTypeName",
                  "src": "6726:8:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Signer_$2324_storage_$dyn_storage_ptr",
                    "typeString": "struct ManyChainMultiSig.Signer[]"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2337,
                "mutability": "mutable",
                "name": "groupQuorums",
                "nameLocation": "7030:12:8",
                "nodeType": "VariableDeclaration",
                "scope": 2342,
                "src": "7012:30:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint8_$32_storage_ptr",
                  "typeString": "uint8[32]"
                },
                "typeName": {
                  "baseType": {
                    "id": 2334,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "7012:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 2336,
                  "length": {
                    "id": 2335,
                    "name": "NUM_GROUPS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2314,
                    "src": "7018:10:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "ArrayTypeName",
                  "src": "7012:17:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint8_$32_storage_ptr",
                    "typeString": "uint8[32]"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2341,
                "mutability": "mutable",
                "name": "groupParents",
                "nameLocation": "7378:12:8",
                "nodeType": "VariableDeclaration",
                "scope": 2342,
                "src": "7360:30:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_uint8_$32_storage_ptr",
                  "typeString": "uint8[32]"
                },
                "typeName": {
                  "baseType": {
                    "id": 2338,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "7360:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 2340,
                  "length": {
                    "id": 2339,
                    "name": "NUM_GROUPS",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2314,
                    "src": "7366:10:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "ArrayTypeName",
                  "src": "7360:17:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint8_$32_storage_ptr",
                    "typeString": "uint8[32]"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Config",
            "nameLocation": "6709:6:8",
            "scope": 3318,
            "visibility": "public"
          },
          {
            "id": 2345,
            "nodeType": "VariableDeclaration",
            "src": "7403:15:8",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "s_config",
            "nameLocation": "7410:8:8",
            "scope": 3318,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Config_$2342_storage",
              "typeString": "struct ManyChainMultiSig.Config"
            },
            "typeName": {
              "id": 2344,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 2343,
                "name": "Config",
                "nameLocations": [
                  "7403:6:8"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 2342,
                "src": "7403:6:8"
              },
              "referencedDeclaration": 2342,
              "src": "7403:6:8",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Config_$2342_storage_ptr",
                "typeString": "struct ManyChainMultiSig.Config"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 2349,
            "nodeType": "VariableDeclaration",
            "src": "7521:43:8",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "s_seenSignedHashes",
            "nameLocation": "7546:18:8",
            "scope": 3318,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
              "typeString": "mapping(bytes32 => bool)"
            },
            "typeName": {
              "id": 2348,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 2346,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "7529:7:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "7521:24:8",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                "typeString": "mapping(bytes32 => bool)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 2347,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "7540:4:8",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 2356,
            "nodeType": "StructDefinition",
            "src": "8134:461:8",
            "nodes": [],
            "canonicalName": "ManyChainMultiSig.ExpiringRootAndOpCount",
            "members": [
              {
                "constant": false,
                "id": 2351,
                "mutability": "mutable",
                "name": "root",
                "nameLocation": "8182:4:8",
                "nodeType": "VariableDeclaration",
                "scope": 2356,
                "src": "8174:12:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 2350,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "8174:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2353,
                "mutability": "mutable",
                "name": "validUntil",
                "nameLocation": "8479:10:8",
                "nodeType": "VariableDeclaration",
                "scope": 2356,
                "src": "8472:17:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                },
                "typeName": {
                  "id": 2352,
                  "name": "uint32",
                  "nodeType": "ElementaryTypeName",
                  "src": "8472:6:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2355,
                "mutability": "mutable",
                "name": "opCount",
                "nameLocation": "8581:7:8",
                "nodeType": "VariableDeclaration",
                "scope": 2356,
                "src": "8574:14:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                },
                "typeName": {
                  "id": 2354,
                  "name": "uint40",
                  "nodeType": "ElementaryTypeName",
                  "src": "8574:6:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "ExpiringRootAndOpCount",
            "nameLocation": "8141:22:8",
            "scope": 3318,
            "visibility": "public"
          },
          {
            "id": 2359,
            "nodeType": "VariableDeclaration",
            "src": "8601:47:8",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "s_expiringRootAndOpCount",
            "nameLocation": "8624:24:8",
            "scope": 3318,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
              "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount"
            },
            "typeName": {
              "id": 2358,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 2357,
                "name": "ExpiringRootAndOpCount",
                "nameLocations": [
                  "8601:22:8"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 2356,
                "src": "8601:22:8"
              },
              "referencedDeclaration": 2356,
              "src": "8601:22:8",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage_ptr",
                "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 2370,
            "nodeType": "StructDefinition",
            "src": "9117:1030:8",
            "nodes": [],
            "canonicalName": "ManyChainMultiSig.RootMetadata",
            "members": [
              {
                "constant": false,
                "id": 2361,
                "mutability": "mutable",
                "name": "chainId",
                "nameLocation": "9540:7:8",
                "nodeType": "VariableDeclaration",
                "scope": 2370,
                "src": "9532:15:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2360,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "9532:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2363,
                "mutability": "mutable",
                "name": "multiSig",
                "nameLocation": "9565:8:8",
                "nodeType": "VariableDeclaration",
                "scope": 2370,
                "src": "9557:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 2362,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "9557:7:8",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2365,
                "mutability": "mutable",
                "name": "preOpCount",
                "nameLocation": "9633:10:8",
                "nodeType": "VariableDeclaration",
                "scope": 2370,
                "src": "9626:17:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                },
                "typeName": {
                  "id": 2364,
                  "name": "uint40",
                  "nodeType": "ElementaryTypeName",
                  "src": "9626:6:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2367,
                "mutability": "mutable",
                "name": "postOpCount",
                "nameLocation": "9716:11:8",
                "nodeType": "VariableDeclaration",
                "scope": 2370,
                "src": "9709:18:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                },
                "typeName": {
                  "id": 2366,
                  "name": "uint40",
                  "nodeType": "ElementaryTypeName",
                  "src": "9709:6:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2369,
                "mutability": "mutable",
                "name": "overridePreviousRoot",
                "nameLocation": "10120:20:8",
                "nodeType": "VariableDeclaration",
                "scope": 2370,
                "src": "10115:25:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 2368,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "10115:4:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "RootMetadata",
            "nameLocation": "9124:12:8",
            "scope": 3318,
            "visibility": "public"
          },
          {
            "id": 2373,
            "nodeType": "VariableDeclaration",
            "src": "10153:27:8",
            "nodes": [],
            "constant": false,
            "mutability": "mutable",
            "name": "s_rootMetadata",
            "nameLocation": "10166:14:8",
            "scope": 3318,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_RootMetadata_$2370_storage",
              "typeString": "struct ManyChainMultiSig.RootMetadata"
            },
            "typeName": {
              "id": 2372,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 2371,
                "name": "RootMetadata",
                "nameLocations": [
                  "10153:12:8"
                ],
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 2370,
                "src": "10153:12:8"
              },
              "referencedDeclaration": 2370,
              "src": "10153:12:8",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_RootMetadata_$2370_storage_ptr",
                "typeString": "struct ManyChainMultiSig.RootMetadata"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 2380,
            "nodeType": "StructDefinition",
            "src": "10223:79:8",
            "nodes": [],
            "canonicalName": "ManyChainMultiSig.Signature",
            "members": [
              {
                "constant": false,
                "id": 2375,
                "mutability": "mutable",
                "name": "v",
                "nameLocation": "10256:1:8",
                "nodeType": "VariableDeclaration",
                "scope": 2380,
                "src": "10250:7:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                },
                "typeName": {
                  "id": 2374,
                  "name": "uint8",
                  "nodeType": "ElementaryTypeName",
                  "src": "10250:5:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2377,
                "mutability": "mutable",
                "name": "r",
                "nameLocation": "10275:1:8",
                "nodeType": "VariableDeclaration",
                "scope": 2380,
                "src": "10267:9:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 2376,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "10267:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2379,
                "mutability": "mutable",
                "name": "s",
                "nameLocation": "10294:1:8",
                "nodeType": "VariableDeclaration",
                "scope": 2380,
                "src": "10286:9:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 2378,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "10286:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Signature",
            "nameLocation": "10230:9:8",
            "scope": 3318,
            "visibility": "public"
          },
          {
            "id": 2676,
            "nodeType": "FunctionDefinition",
            "src": "11087:4554:8",
            "nodes": [],
            "body": {
              "id": 2675,
              "nodeType": "Block",
              "src": "11291:4350:8",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    2399
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2399,
                      "mutability": "mutable",
                      "name": "signedHash",
                      "nameLocation": "11309:10:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 2675,
                      "src": "11301:18:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2398,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "11301:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2410,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 2405,
                                "name": "root",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2383,
                                "src": "11372:4:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 2406,
                                "name": "validUntil",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2385,
                                "src": "11378:10:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "expression": {
                                "id": 2403,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -1,
                                "src": "11361:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 2404,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "11365:6:8",
                              "memberName": "encode",
                              "nodeType": "MemberAccess",
                              "src": "11361:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 2407,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11361:28:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 2402,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "11351:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 2408,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11351:39:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 2400,
                        "name": "ECDSA",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 812,
                        "src": "11322:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ECDSA_$812_$",
                          "typeString": "type(library ECDSA)"
                        }
                      },
                      "id": 2401,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "11328:22:8",
                      "memberName": "toEthSignedMessageHash",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 757,
                      "src": "11322:28:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32) pure returns (bytes32)"
                      }
                    },
                    "id": 2409,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11322:69:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11301:90:8"
                },
                {
                  "condition": {
                    "baseExpression": {
                      "id": 2411,
                      "name": "s_seenSignedHashes",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2349,
                      "src": "11704:18:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                        "typeString": "mapping(bytes32 => bool)"
                      }
                    },
                    "id": 2413,
                    "indexExpression": {
                      "id": 2412,
                      "name": "signedHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2399,
                      "src": "11723:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "11704:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2418,
                  "nodeType": "IfStatement",
                  "src": "11700:91:8",
                  "trueBody": {
                    "id": 2417,
                    "nodeType": "Block",
                    "src": "11736:55:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2414,
                            "name": "SignedHashAlreadySeen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3317,
                            "src": "11757:21:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2415,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11757:23:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2416,
                        "nodeType": "RevertStatement",
                        "src": "11750:30:8"
                      }
                    ]
                  }
                },
                {
                  "id": 2558,
                  "nodeType": "Block",
                  "src": "11903:2072:8",
                  "statements": [
                    {
                      "assignments": [
                        2421
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2421,
                          "mutability": "mutable",
                          "name": "signer",
                          "nameLocation": "12000:6:8",
                          "nodeType": "VariableDeclaration",
                          "scope": 2558,
                          "src": "11986:20:8",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                            "typeString": "struct ManyChainMultiSig.Signer"
                          },
                          "typeName": {
                            "id": 2420,
                            "nodeType": "UserDefinedTypeName",
                            "pathNode": {
                              "id": 2419,
                              "name": "Signer",
                              "nameLocations": [
                                "11986:6:8"
                              ],
                              "nodeType": "IdentifierPath",
                              "referencedDeclaration": 2324,
                              "src": "11986:6:8"
                            },
                            "referencedDeclaration": 2324,
                            "src": "11986:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Signer_$2324_storage_ptr",
                              "typeString": "struct ManyChainMultiSig.Signer"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 2422,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "11986:20:8"
                    },
                    {
                      "assignments": [
                        2424
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2424,
                          "mutability": "mutable",
                          "name": "prevAddress",
                          "nameLocation": "12028:11:8",
                          "nodeType": "VariableDeclaration",
                          "scope": 2558,
                          "src": "12020:19:8",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "typeName": {
                            "id": 2423,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "12020:7:8",
                            "stateMutability": "nonpayable",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 2429,
                      "initialValue": {
                        "arguments": [
                          {
                            "hexValue": "307830",
                            "id": 2427,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "12050:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0x0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 2426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12042:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 2425,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "12042:7:8",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 2428,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12042:12:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "12020:34:8"
                    },
                    {
                      "assignments": [
                        2435
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2435,
                          "mutability": "mutable",
                          "name": "groupVoteCounts",
                          "nameLocation": "12093:15:8",
                          "nodeType": "VariableDeclaration",
                          "scope": 2558,
                          "src": "12068:40:8",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint8_$32_memory_ptr",
                            "typeString": "uint8[32]"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 2433,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "12068:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "id": 2434,
                            "length": {
                              "id": 2432,
                              "name": "NUM_GROUPS",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2314,
                              "src": "12074:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "ArrayTypeName",
                            "src": "12068:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint8_$32_storage_ptr",
                              "typeString": "uint8[32]"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 2436,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "12068:40:8"
                    },
                    {
                      "body": {
                        "id": 2532,
                        "nodeType": "Block",
                        "src": "12199:1299:8",
                        "statements": [
                          {
                            "assignments": [
                              2450
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2450,
                                "mutability": "mutable",
                                "name": "sig",
                                "nameLocation": "12236:3:8",
                                "nodeType": "VariableDeclaration",
                                "scope": 2532,
                                "src": "12217:22:8",
                                "stateVariable": false,
                                "storageLocation": "calldata",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Signature_$2380_calldata_ptr",
                                  "typeString": "struct ManyChainMultiSig.Signature"
                                },
                                "typeName": {
                                  "id": 2449,
                                  "nodeType": "UserDefinedTypeName",
                                  "pathNode": {
                                    "id": 2448,
                                    "name": "Signature",
                                    "nameLocations": [
                                      "12217:9:8"
                                    ],
                                    "nodeType": "IdentifierPath",
                                    "referencedDeclaration": 2380,
                                    "src": "12217:9:8"
                                  },
                                  "referencedDeclaration": 2380,
                                  "src": "12217:9:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Signature_$2380_storage_ptr",
                                    "typeString": "struct ManyChainMultiSig.Signature"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2454,
                            "initialValue": {
                              "baseExpression": {
                                "id": 2451,
                                "name": "signatures",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2395,
                                "src": "12242:10:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Signature_$2380_calldata_ptr_$dyn_calldata_ptr",
                                  "typeString": "struct ManyChainMultiSig.Signature calldata[] calldata"
                                }
                              },
                              "id": 2453,
                              "indexExpression": {
                                "id": 2452,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2438,
                                "src": "12253:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12242:13:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Signature_$2380_calldata_ptr",
                                "typeString": "struct ManyChainMultiSig.Signature calldata"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "12217:38:8"
                          },
                          {
                            "assignments": [
                              2456
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2456,
                                "mutability": "mutable",
                                "name": "signerAddress",
                                "nameLocation": "12281:13:8",
                                "nodeType": "VariableDeclaration",
                                "scope": 2532,
                                "src": "12273:21:8",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "typeName": {
                                  "id": 2455,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12273:7:8",
                                  "stateMutability": "nonpayable",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2467,
                            "initialValue": {
                              "arguments": [
                                {
                                  "id": 2459,
                                  "name": "signedHash",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2399,
                                  "src": "12311:10:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2460,
                                    "name": "sig",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2450,
                                    "src": "12323:3:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Signature_$2380_calldata_ptr",
                                      "typeString": "struct ManyChainMultiSig.Signature calldata"
                                    }
                                  },
                                  "id": 2461,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "12327:1:8",
                                  "memberName": "v",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2375,
                                  "src": "12323:5:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2462,
                                    "name": "sig",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2450,
                                    "src": "12330:3:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Signature_$2380_calldata_ptr",
                                      "typeString": "struct ManyChainMultiSig.Signature calldata"
                                    }
                                  },
                                  "id": 2463,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "12334:1:8",
                                  "memberName": "r",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2377,
                                  "src": "12330:5:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2464,
                                    "name": "sig",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2450,
                                    "src": "12337:3:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Signature_$2380_calldata_ptr",
                                      "typeString": "struct ManyChainMultiSig.Signature calldata"
                                    }
                                  },
                                  "id": 2465,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "12341:1:8",
                                  "memberName": "s",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2379,
                                  "src": "12337:5:8",
                                  "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"
                                  }
                                ],
                                "expression": {
                                  "id": 2457,
                                  "name": "ECDSA",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 812,
                                  "src": "12297:5:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_ECDSA_$812_$",
                                    "typeString": "type(library ECDSA)"
                                  }
                                },
                                "id": 2458,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "12303:7:8",
                                "memberName": "recover",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 747,
                                "src": "12297:13:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                                  "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                                }
                              },
                              "id": 2466,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12297:46:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "12273:70:8"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 2470,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 2468,
                                "name": "prevAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2424,
                                "src": "12504:11:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 2469,
                                "name": "signerAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2456,
                                "src": "12519:13:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "12504:28:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2475,
                            "nodeType": "IfStatement",
                            "src": "12500:124:8",
                            "trueBody": {
                              "id": 2474,
                              "nodeType": "Block",
                              "src": "12534:90:8",
                              "statements": [
                                {
                                  "errorCall": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 2471,
                                      "name": "SignersAddressesMustBeStrictlyIncreasing",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3270,
                                      "src": "12563:40:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 2472,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "12563:42:8",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 2473,
                                  "nodeType": "RevertStatement",
                                  "src": "12556:49:8"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "id": 2478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2476,
                                "name": "prevAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2424,
                                "src": "12641:11:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "id": 2477,
                                "name": "signerAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2456,
                                "src": "12655:13:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "12641:27:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "id": 2479,
                            "nodeType": "ExpressionStatement",
                            "src": "12641:27:8"
                          },
                          {
                            "expression": {
                              "id": 2484,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 2480,
                                "name": "signer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2421,
                                "src": "12687:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                                  "typeString": "struct ManyChainMultiSig.Signer memory"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "baseExpression": {
                                  "id": 2481,
                                  "name": "s_signers",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2329,
                                  "src": "12696:9:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Signer_$2324_storage_$",
                                    "typeString": "mapping(address => struct ManyChainMultiSig.Signer storage ref)"
                                  }
                                },
                                "id": 2483,
                                "indexExpression": {
                                  "id": 2482,
                                  "name": "signerAddress",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2456,
                                  "src": "12706:13:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "12696:24:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Signer_$2324_storage",
                                  "typeString": "struct ManyChainMultiSig.Signer storage ref"
                                }
                              },
                              "src": "12687:33:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                                "typeString": "struct ManyChainMultiSig.Signer memory"
                              }
                            },
                            "id": 2485,
                            "nodeType": "ExpressionStatement",
                            "src": "12687:33:8"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 2489,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "expression": {
                                  "id": 2486,
                                  "name": "signer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2421,
                                  "src": "12742:6:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                                    "typeString": "struct ManyChainMultiSig.Signer memory"
                                  }
                                },
                                "id": 2487,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "12749:4:8",
                                "memberName": "addr",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 2319,
                                "src": "12742:11:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "id": 2488,
                                "name": "signerAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2456,
                                "src": "12757:13:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "12742:28:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2494,
                            "nodeType": "IfStatement",
                            "src": "12738:97:8",
                            "trueBody": {
                              "id": 2493,
                              "nodeType": "Block",
                              "src": "12772:63:8",
                              "statements": [
                                {
                                  "errorCall": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 2490,
                                      "name": "InvalidSigner",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3273,
                                      "src": "12801:13:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 2491,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "12801:15:8",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 2492,
                                  "nodeType": "RevertStatement",
                                  "src": "12794:22:8"
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              2496
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2496,
                                "mutability": "mutable",
                                "name": "group",
                                "nameLocation": "12858:5:8",
                                "nodeType": "VariableDeclaration",
                                "scope": 2532,
                                "src": "12852:11:8",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "typeName": {
                                  "id": 2495,
                                  "name": "uint8",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "12852:5:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2499,
                            "initialValue": {
                              "expression": {
                                "id": 2497,
                                "name": "signer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2421,
                                "src": "12866:6:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                                  "typeString": "struct ManyChainMultiSig.Signer memory"
                                }
                              },
                              "id": 2498,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "12873:5:8",
                              "memberName": "group",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2323,
                              "src": "12866:12:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "12852:26:8"
                          },
                          {
                            "body": {
                              "id": 2530,
                              "nodeType": "Block",
                              "src": "12909:575:8",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 2504,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "12931:24:8",
                                    "subExpression": {
                                      "baseExpression": {
                                        "id": 2501,
                                        "name": "groupVoteCounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2435,
                                        "src": "12931:15:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint8_$32_memory_ptr",
                                          "typeString": "uint8[32] memory"
                                        }
                                      },
                                      "id": 2503,
                                      "indexExpression": {
                                        "id": 2502,
                                        "name": "group",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2496,
                                        "src": "12947:5:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "12931:22:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "id": 2505,
                                  "nodeType": "ExpressionStatement",
                                  "src": "12931:24:8"
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 2513,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "baseExpression": {
                                        "id": 2506,
                                        "name": "groupVoteCounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2435,
                                        "src": "12981:15:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint8_$32_memory_ptr",
                                          "typeString": "uint8[32] memory"
                                        }
                                      },
                                      "id": 2508,
                                      "indexExpression": {
                                        "id": 2507,
                                        "name": "group",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2496,
                                        "src": "12997:5:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "12981:22:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "!=",
                                    "rightExpression": {
                                      "baseExpression": {
                                        "expression": {
                                          "id": 2509,
                                          "name": "s_config",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2345,
                                          "src": "13007:8:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Config_$2342_storage",
                                            "typeString": "struct ManyChainMultiSig.Config storage ref"
                                          }
                                        },
                                        "id": 2510,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "13016:12:8",
                                        "memberName": "groupQuorums",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2337,
                                        "src": "13007:21:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint8_$32_storage",
                                          "typeString": "uint8[32] storage ref"
                                        }
                                      },
                                      "id": 2512,
                                      "indexExpression": {
                                        "id": 2511,
                                        "name": "group",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2496,
                                        "src": "13029:5:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "13007:28:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "12981:54:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2516,
                                  "nodeType": "IfStatement",
                                  "src": "12977:299:8",
                                  "trueBody": {
                                    "id": 2515,
                                    "nodeType": "Block",
                                    "src": "13037:239:8",
                                    "statements": [
                                      {
                                        "id": 2514,
                                        "nodeType": "Break",
                                        "src": "13248:5:8"
                                      }
                                    ]
                                  }
                                },
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 2519,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2517,
                                      "name": "group",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2496,
                                      "src": "13301:5:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "==",
                                    "rightExpression": {
                                      "hexValue": "30",
                                      "id": 2518,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "13310:1:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "src": "13301:10:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2522,
                                  "nodeType": "IfStatement",
                                  "src": "13297:110:8",
                                  "trueBody": {
                                    "id": 2521,
                                    "nodeType": "Block",
                                    "src": "13313:94:8",
                                    "statements": [
                                      {
                                        "id": 2520,
                                        "nodeType": "Break",
                                        "src": "13379:5:8"
                                      }
                                    ]
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2528,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 2523,
                                      "name": "group",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2496,
                                      "src": "13429:5:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "=",
                                    "rightHandSide": {
                                      "baseExpression": {
                                        "expression": {
                                          "id": 2524,
                                          "name": "s_config",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2345,
                                          "src": "13437:8:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Config_$2342_storage",
                                            "typeString": "struct ManyChainMultiSig.Config storage ref"
                                          }
                                        },
                                        "id": 2525,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberLocation": "13446:12:8",
                                        "memberName": "groupParents",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2341,
                                        "src": "13437:21:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint8_$32_storage",
                                          "typeString": "uint8[32] storage ref"
                                        }
                                      },
                                      "id": 2527,
                                      "indexExpression": {
                                        "id": 2526,
                                        "name": "group",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2496,
                                        "src": "13459:5:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "13437:28:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "13429:36:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "id": 2529,
                                  "nodeType": "ExpressionStatement",
                                  "src": "13429:36:8"
                                }
                              ]
                            },
                            "condition": {
                              "hexValue": "74727565",
                              "id": 2500,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "bool",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12903:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "value": "true"
                            },
                            "id": 2531,
                            "nodeType": "WhileStatement",
                            "src": "12896:588:8"
                          }
                        ]
                      },
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 2441,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2438,
                          "src": "12171:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "id": 2442,
                            "name": "signatures",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2395,
                            "src": "12175:10:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Signature_$2380_calldata_ptr_$dyn_calldata_ptr",
                              "typeString": "struct ManyChainMultiSig.Signature calldata[] calldata"
                            }
                          },
                          "id": 2443,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "12186:6:8",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "12175:17:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "12171:21:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 2533,
                      "initializationExpression": {
                        "assignments": [
                          2438
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2438,
                            "mutability": "mutable",
                            "name": "i",
                            "nameLocation": "12164:1:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 2533,
                            "src": "12156:9:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2437,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12156:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2440,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 2439,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12168:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12156:13:8"
                      },
                      "loopExpression": {
                        "expression": {
                          "id": 2446,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "12194:3:8",
                          "subExpression": {
                            "id": 2445,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2438,
                            "src": "12194:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2447,
                        "nodeType": "ExpressionStatement",
                        "src": "12194:3:8"
                      },
                      "nodeType": "ForStatement",
                      "src": "12151:1347:8"
                    },
                    {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 2539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "expression": {
                              "id": 2534,
                              "name": "s_config",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2345,
                              "src": "13702:8:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Config_$2342_storage",
                                "typeString": "struct ManyChainMultiSig.Config storage ref"
                              }
                            },
                            "id": 2535,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "13711:12:8",
                            "memberName": "groupQuorums",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2337,
                            "src": "13702:21:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint8_$32_storage",
                              "typeString": "uint8[32] storage ref"
                            }
                          },
                          "id": 2537,
                          "indexExpression": {
                            "hexValue": "30",
                            "id": 2536,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13724:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "13702:24:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 2538,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13730:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "13702:29:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 2544,
                      "nodeType": "IfStatement",
                      "src": "13698:90:8",
                      "trueBody": {
                        "id": 2543,
                        "nodeType": "Block",
                        "src": "13733:55:8",
                        "statements": [
                          {
                            "errorCall": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2540,
                                "name": "MissingConfig",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3314,
                                "src": "13758:13:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 2541,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13758:15:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 2542,
                            "nodeType": "RevertStatement",
                            "src": "13751:22:8"
                          }
                        ]
                      }
                    },
                    {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 2552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 2545,
                            "name": "groupVoteCounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2435,
                            "src": "13857:15:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint8_$32_memory_ptr",
                              "typeString": "uint8[32] memory"
                            }
                          },
                          "id": 2547,
                          "indexExpression": {
                            "hexValue": "30",
                            "id": 2546,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13873:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "13857:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "baseExpression": {
                            "expression": {
                              "id": 2548,
                              "name": "s_config",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2345,
                              "src": "13878:8:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Config_$2342_storage",
                                "typeString": "struct ManyChainMultiSig.Config storage ref"
                              }
                            },
                            "id": 2549,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "13887:12:8",
                            "memberName": "groupQuorums",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2337,
                            "src": "13878:21:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint8_$32_storage",
                              "typeString": "uint8[32] storage ref"
                            }
                          },
                          "id": 2551,
                          "indexExpression": {
                            "hexValue": "30",
                            "id": 2550,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13900:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "13878:24:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "13857:45:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 2557,
                      "nodeType": "IfStatement",
                      "src": "13853:112:8",
                      "trueBody": {
                        "id": 2556,
                        "nodeType": "Block",
                        "src": "13904:61:8",
                        "statements": [
                          {
                            "errorCall": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2553,
                                "name": "InsufficientSigners",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3276,
                                "src": "13929:19:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 2554,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13929:21:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 2555,
                            "nodeType": "RevertStatement",
                            "src": "13922:28:8"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2559,
                      "name": "validUntil",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2385,
                      "src": "13989:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2560,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "14002:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 2561,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14008:9:8",
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "14002:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13989:28:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2567,
                  "nodeType": "IfStatement",
                  "src": "13985:94:8",
                  "trueBody": {
                    "id": 2566,
                    "nodeType": "Block",
                    "src": "14019:60:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2563,
                            "name": "ValidUntilHasAlreadyPassed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3311,
                            "src": "14040:26:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2564,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14040:28:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2565,
                        "nodeType": "RevertStatement",
                        "src": "14033:35:8"
                      }
                    ]
                  }
                },
                {
                  "id": 2590,
                  "nodeType": "Block",
                  "src": "14089:311:8",
                  "statements": [
                    {
                      "assignments": [
                        2569
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2569,
                          "mutability": "mutable",
                          "name": "hashedLeaf",
                          "nameLocation": "14147:10:8",
                          "nodeType": "VariableDeclaration",
                          "scope": 2590,
                          "src": "14139:18:8",
                          "stateVariable": false,
                          "storageLocation": "default",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "typeName": {
                            "id": 2568,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "14139:7:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 2577,
                      "initialValue": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 2573,
                                "name": "MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_METADATA",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2304,
                                "src": "14197:46:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              {
                                "id": 2574,
                                "name": "metadata",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2388,
                                "src": "14245:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                                  "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                {
                                  "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                                  "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                                }
                              ],
                              "expression": {
                                "id": 2571,
                                "name": "abi",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -1,
                                "src": "14186:3:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_abi",
                                  "typeString": "abi"
                                }
                              },
                              "id": 2572,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberLocation": "14190:6:8",
                              "memberName": "encode",
                              "nodeType": "MemberAccess",
                              "src": "14186:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                                "typeString": "function () pure returns (bytes memory)"
                              }
                            },
                            "id": 2575,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14186:68:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 2570,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "14176:9:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 2576,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "14176:79:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "VariableDeclarationStatement",
                      "src": "14139:116:8"
                    },
                    {
                      "condition": {
                        "id": 2584,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "14273:52:8",
                        "subExpression": {
                          "arguments": [
                            {
                              "id": 2580,
                              "name": "metadataProof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2391,
                              "src": "14293:13:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              }
                            },
                            {
                              "id": 2581,
                              "name": "root",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2383,
                              "src": "14308:4:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 2582,
                              "name": "hashedLeaf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2569,
                              "src": "14314:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                                "typeString": "bytes32[] calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "id": 2578,
                              "name": "MerkleProof",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1318,
                              "src": "14274:11:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_MerkleProof_$1318_$",
                                "typeString": "type(library MerkleProof)"
                              }
                            },
                            "id": 2579,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "14286:6:8",
                            "memberName": "verify",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 836,
                            "src": "14274:18:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (bytes32[] memory,bytes32,bytes32) pure returns (bool)"
                            }
                          },
                          "id": 2583,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14274:51:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 2589,
                      "nodeType": "IfStatement",
                      "src": "14269:121:8",
                      "trueBody": {
                        "id": 2588,
                        "nodeType": "Block",
                        "src": "14327:63:8",
                        "statements": [
                          {
                            "errorCall": {
                              "arguments": [],
                              "expression": {
                                "argumentTypes": [],
                                "id": 2585,
                                "name": "ProofCannotBeVerified",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3294,
                                "src": "14352:21:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                  "typeString": "function () pure"
                                }
                              },
                              "id": 2586,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14352:23:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 2587,
                            "nodeType": "RevertStatement",
                            "src": "14345:30:8"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2591,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "14414:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 2592,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14420:7:8",
                      "memberName": "chainid",
                      "nodeType": "MemberAccess",
                      "src": "14414:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2593,
                        "name": "metadata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "14431:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                          "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                        }
                      },
                      "id": 2594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14440:7:8",
                      "memberName": "chainId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2361,
                      "src": "14431:16:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14414:33:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2600,
                  "nodeType": "IfStatement",
                  "src": "14410:85:8",
                  "trueBody": {
                    "id": 2599,
                    "nodeType": "Block",
                    "src": "14449:46:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2596,
                            "name": "WrongChainId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3279,
                            "src": "14470:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2597,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14470:14:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2598,
                        "nodeType": "RevertStatement",
                        "src": "14463:21:8"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 2603,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "14517:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ManyChainMultiSig_$3318",
                            "typeString": "contract ManyChainMultiSig"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ManyChainMultiSig_$3318",
                            "typeString": "contract ManyChainMultiSig"
                          }
                        ],
                        "id": 2602,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "14509:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 2601,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "14509:7:8",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 2604,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14509:13:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2605,
                        "name": "metadata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "14526:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                          "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                        }
                      },
                      "id": 2606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14535:8:8",
                      "memberName": "multiSig",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2363,
                      "src": "14526:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "14509:34:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2612,
                  "nodeType": "IfStatement",
                  "src": "14505:87:8",
                  "trueBody": {
                    "id": 2611,
                    "nodeType": "Block",
                    "src": "14545:47:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2608,
                            "name": "WrongMultiSig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3282,
                            "src": "14566:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2609,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14566:15:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2610,
                        "nodeType": "RevertStatement",
                        "src": "14559:22:8"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2614
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2614,
                      "mutability": "mutable",
                      "name": "opCount",
                      "nameLocation": "14609:7:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 2675,
                      "src": "14602:14:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      },
                      "typeName": {
                        "id": 2613,
                        "name": "uint40",
                        "nodeType": "ElementaryTypeName",
                        "src": "14602:6:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2617,
                  "initialValue": {
                    "expression": {
                      "id": 2615,
                      "name": "s_expiringRootAndOpCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2359,
                      "src": "14619:24:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
                        "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount storage ref"
                      }
                    },
                    "id": 2616,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "14644:7:8",
                    "memberName": "opCount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2355,
                    "src": "14619:32:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14602:49:8"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2625,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      },
                      "id": 2621,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 2618,
                        "name": "opCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2614,
                        "src": "14820:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "expression": {
                          "id": 2619,
                          "name": "s_rootMetadata",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2373,
                          "src": "14831:14:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RootMetadata_$2370_storage",
                            "typeString": "struct ManyChainMultiSig.RootMetadata storage ref"
                          }
                        },
                        "id": 2620,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14846:11:8",
                        "memberName": "postOpCount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2367,
                        "src": "14831:26:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "src": "14820:37:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "id": 2624,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "14861:30:8",
                      "subExpression": {
                        "expression": {
                          "id": 2622,
                          "name": "metadata",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2388,
                          "src": "14862:8:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                            "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                          }
                        },
                        "id": 2623,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "14871:20:8",
                        "memberName": "overridePreviousRoot",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2369,
                        "src": "14862:29:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "14820:71:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2630,
                  "nodeType": "IfStatement",
                  "src": "14816:121:8",
                  "trueBody": {
                    "id": 2629,
                    "nodeType": "Block",
                    "src": "14893:44:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2626,
                            "name": "PendingOps",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3288,
                            "src": "14914:10:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2627,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14914:12:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2628,
                        "nodeType": "RevertStatement",
                        "src": "14907:19:8"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    },
                    "id": 2634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2631,
                      "name": "opCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2614,
                      "src": "15078:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2632,
                        "name": "metadata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "15089:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                          "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                        }
                      },
                      "id": 2633,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15098:10:8",
                      "memberName": "preOpCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2365,
                      "src": "15089:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "15078:30:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2639,
                  "nodeType": "IfStatement",
                  "src": "15074:85:8",
                  "trueBody": {
                    "id": 2638,
                    "nodeType": "Block",
                    "src": "15110:49:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2635,
                            "name": "WrongPreOpCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3291,
                            "src": "15131:15:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2636,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15131:17:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2637,
                        "nodeType": "RevertStatement",
                        "src": "15124:24:8"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    },
                    "id": 2644,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2640,
                        "name": "metadata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "15173:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                          "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                        }
                      },
                      "id": 2641,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15182:10:8",
                      "memberName": "preOpCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2365,
                      "src": "15173:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 2642,
                        "name": "metadata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "15195:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                          "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                        }
                      },
                      "id": 2643,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15204:11:8",
                      "memberName": "postOpCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2367,
                      "src": "15195:20:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "15173:42:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2649,
                  "nodeType": "IfStatement",
                  "src": "15169:98:8",
                  "trueBody": {
                    "id": 2648,
                    "nodeType": "Block",
                    "src": "15217:50:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2645,
                            "name": "WrongPostOpCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3285,
                            "src": "15238:16:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15238:18:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2647,
                        "nodeType": "RevertStatement",
                        "src": "15231:25:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 2650,
                        "name": "s_seenSignedHashes",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2349,
                        "src": "15339:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 2652,
                      "indexExpression": {
                        "id": 2651,
                        "name": "signedHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2399,
                        "src": "15358:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15339:30:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 2653,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15372:4:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "15339:37:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2655,
                  "nodeType": "ExpressionStatement",
                  "src": "15339:37:8"
                },
                {
                  "expression": {
                    "id": 2663,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 2656,
                      "name": "s_expiringRootAndOpCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2359,
                      "src": "15386:24:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
                        "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 2658,
                          "name": "root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2383,
                          "src": "15456:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 2659,
                          "name": "validUntil",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2385,
                          "src": "15486:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "expression": {
                            "id": 2660,
                            "name": "metadata",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2388,
                            "src": "15519:8:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                              "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                            }
                          },
                          "id": 2661,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "15528:10:8",
                          "memberName": "preOpCount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2365,
                          "src": "15519:19:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        ],
                        "id": 2657,
                        "name": "ExpiringRootAndOpCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2356,
                        "src": "15413:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_struct$_ExpiringRootAndOpCount_$2356_storage_ptr_$",
                          "typeString": "type(struct ManyChainMultiSig.ExpiringRootAndOpCount storage pointer)"
                        }
                      },
                      "id": 2662,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "structConstructorCall",
                      "lValueRequested": false,
                      "nameLocations": [
                        "15450:4:8",
                        "15474:10:8",
                        "15510:7:8"
                      ],
                      "names": [
                        "root",
                        "validUntil",
                        "opCount"
                      ],
                      "nodeType": "FunctionCall",
                      "src": "15413:136:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                        "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount memory"
                      }
                    },
                    "src": "15386:163:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
                      "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount storage ref"
                    }
                  },
                  "id": 2664,
                  "nodeType": "ExpressionStatement",
                  "src": "15386:163:8"
                },
                {
                  "expression": {
                    "id": 2667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 2665,
                      "name": "s_rootMetadata",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2373,
                      "src": "15559:14:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RootMetadata_$2370_storage",
                        "typeString": "struct ManyChainMultiSig.RootMetadata storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 2666,
                      "name": "metadata",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2388,
                      "src": "15576:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                        "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                      }
                    },
                    "src": "15559:25:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RootMetadata_$2370_storage",
                      "typeString": "struct ManyChainMultiSig.RootMetadata storage ref"
                    }
                  },
                  "id": 2668,
                  "nodeType": "ExpressionStatement",
                  "src": "15559:25:8"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 2670,
                        "name": "root",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2383,
                        "src": "15607:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 2671,
                        "name": "validUntil",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2385,
                        "src": "15613:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 2672,
                        "name": "metadata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2388,
                        "src": "15625:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                          "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                          "typeString": "struct ManyChainMultiSig.RootMetadata calldata"
                        }
                      ],
                      "id": 2669,
                      "name": "NewRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3230,
                      "src": "15599:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint32_$_t_struct$_RootMetadata_$2370_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,uint32,struct ManyChainMultiSig.RootMetadata memory)"
                      }
                    },
                    "id": 2673,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15599:35:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2674,
                  "nodeType": "EmitStatement",
                  "src": "15594:40:8"
                }
              ]
            },
            "documentation": {
              "id": 2381,
              "nodeType": "StructuredDocumentation",
              "src": "10308:774:8",
              "text": "@notice setRoot Sets a new expiring root.\n @param root is the new expiring root.\n @param validUntil is the time by which root is valid\n @param metadata is the authenticated metadata about the root, which is stored as one of\n the leaves.\n @param metadataProof is the MerkleProof of inclusion of the metadata in the Merkle tree.\n @param signatures the ECDSA signatures on (root, validUntil).\n @dev the message (root, validUntil) should be signed by a sufficient set of signers.\n This signature authenticates also the metadata.\n @dev this method can be executed by anyone who has the root and valid signatures.\n as we validate the correctness of signatures, this imposes no risk."
            },
            "functionSelector": "7cc38b28",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setRoot",
            "nameLocation": "11096:7:8",
            "parameters": {
              "id": 2396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2383,
                  "mutability": "mutable",
                  "name": "root",
                  "nameLocation": "11121:4:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 2676,
                  "src": "11113:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 2382,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11113:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2385,
                  "mutability": "mutable",
                  "name": "validUntil",
                  "nameLocation": "11142:10:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 2676,
                  "src": "11135:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 2384,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11135:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2388,
                  "mutability": "mutable",
                  "name": "metadata",
                  "nameLocation": "11184:8:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 2676,
                  "src": "11162:30:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RootMetadata_$2370_calldata_ptr",
                    "typeString": "struct ManyChainMultiSig.RootMetadata"
                  },
                  "typeName": {
                    "id": 2387,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2386,
                      "name": "RootMetadata",
                      "nameLocations": [
                        "11162:12:8"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2370,
                      "src": "11162:12:8"
                    },
                    "referencedDeclaration": 2370,
                    "src": "11162:12:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RootMetadata_$2370_storage_ptr",
                      "typeString": "struct ManyChainMultiSig.RootMetadata"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2391,
                  "mutability": "mutable",
                  "name": "metadataProof",
                  "nameLocation": "11221:13:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 2676,
                  "src": "11202:32:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2389,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11202:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 2390,
                    "nodeType": "ArrayTypeName",
                    "src": "11202:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2395,
                  "mutability": "mutable",
                  "name": "signatures",
                  "nameLocation": "11265:10:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 2676,
                  "src": "11244:31:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Signature_$2380_calldata_ptr_$dyn_calldata_ptr",
                    "typeString": "struct ManyChainMultiSig.Signature[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2393,
                      "nodeType": "UserDefinedTypeName",
                      "pathNode": {
                        "id": 2392,
                        "name": "Signature",
                        "nameLocations": [
                          "11244:9:8"
                        ],
                        "nodeType": "IdentifierPath",
                        "referencedDeclaration": 2380,
                        "src": "11244:9:8"
                      },
                      "referencedDeclaration": 2380,
                      "src": "11244:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Signature_$2380_storage_ptr",
                        "typeString": "struct ManyChainMultiSig.Signature"
                      }
                    },
                    "id": 2394,
                    "nodeType": "ArrayTypeName",
                    "src": "11244:11:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Signature_$2380_storage_$dyn_storage_ptr",
                      "typeString": "struct ManyChainMultiSig.Signature[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11103:178:8"
            },
            "returnParameters": {
              "id": 2397,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11291:0:8"
            },
            "scope": 3318,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 2689,
            "nodeType": "StructDefinition",
            "src": "16008:153:8",
            "nodes": [],
            "canonicalName": "ManyChainMultiSig.Op",
            "members": [
              {
                "constant": false,
                "id": 2678,
                "mutability": "mutable",
                "name": "chainId",
                "nameLocation": "16036:7:8",
                "nodeType": "VariableDeclaration",
                "scope": 2689,
                "src": "16028:15:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2677,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "16028:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2680,
                "mutability": "mutable",
                "name": "multiSig",
                "nameLocation": "16061:8:8",
                "nodeType": "VariableDeclaration",
                "scope": 2689,
                "src": "16053:16:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 2679,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "16053:7:8",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2682,
                "mutability": "mutable",
                "name": "nonce",
                "nameLocation": "16086:5:8",
                "nodeType": "VariableDeclaration",
                "scope": 2689,
                "src": "16079:12:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint40",
                  "typeString": "uint40"
                },
                "typeName": {
                  "id": 2681,
                  "name": "uint40",
                  "nodeType": "ElementaryTypeName",
                  "src": "16079:6:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2684,
                "mutability": "mutable",
                "name": "to",
                "nameLocation": "16109:2:8",
                "nodeType": "VariableDeclaration",
                "scope": 2689,
                "src": "16101:10:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 2683,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "16101:7:8",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2686,
                "mutability": "mutable",
                "name": "value",
                "nameLocation": "16129:5:8",
                "nodeType": "VariableDeclaration",
                "scope": 2689,
                "src": "16121:13:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 2685,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "16121:7:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 2688,
                "mutability": "mutable",
                "name": "data",
                "nameLocation": "16150:4:8",
                "nodeType": "VariableDeclaration",
                "scope": 2689,
                "src": "16144:10:8",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes_storage_ptr",
                  "typeString": "bytes"
                },
                "typeName": {
                  "id": 2687,
                  "name": "bytes",
                  "nodeType": "ElementaryTypeName",
                  "src": "16144:5:8",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_storage_ptr",
                    "typeString": "bytes"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Op",
            "nameLocation": "16015:2:8",
            "scope": 3318,
            "visibility": "public"
          },
          {
            "id": 2809,
            "nodeType": "FunctionDefinition",
            "src": "17180:1294:8",
            "nodes": [],
            "body": {
              "id": 2808,
              "nodeType": "Block",
              "src": "17256:1218:8",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    2701
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2701,
                      "mutability": "mutable",
                      "name": "currentExpiringRootAndOpCount",
                      "nameLocation": "17296:29:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 2808,
                      "src": "17266:59:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                        "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount"
                      },
                      "typeName": {
                        "id": 2700,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 2699,
                          "name": "ExpiringRootAndOpCount",
                          "nameLocations": [
                            "17266:22:8"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 2356,
                          "src": "17266:22:8"
                        },
                        "referencedDeclaration": 2356,
                        "src": "17266:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage_ptr",
                          "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2703,
                  "initialValue": {
                    "id": 2702,
                    "name": "s_expiringRootAndOpCount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2359,
                    "src": "17328:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
                      "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17266:86:8"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    },
                    "id": 2708,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2704,
                        "name": "s_rootMetadata",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2373,
                        "src": "17367:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_RootMetadata_$2370_storage",
                          "typeString": "struct ManyChainMultiSig.RootMetadata storage ref"
                        }
                      },
                      "id": 2705,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17382:11:8",
                      "memberName": "postOpCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2367,
                      "src": "17367:26:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "expression": {
                        "id": 2706,
                        "name": "currentExpiringRootAndOpCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2701,
                        "src": "17397:29:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                          "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount memory"
                        }
                      },
                      "id": 2707,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17427:7:8",
                      "memberName": "opCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2355,
                      "src": "17397:37:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "17367:67:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2713,
                  "nodeType": "IfStatement",
                  "src": "17363:125:8",
                  "trueBody": {
                    "id": 2712,
                    "nodeType": "Block",
                    "src": "17436:52:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2709,
                            "name": "PostOpCountReached",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3303,
                            "src": "17457:18:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2710,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17457:20:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2711,
                        "nodeType": "RevertStatement",
                        "src": "17450:27:8"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2718,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2714,
                        "name": "op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2693,
                        "src": "17502:2:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                          "typeString": "struct ManyChainMultiSig.Op calldata"
                        }
                      },
                      "id": 2715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17505:7:8",
                      "memberName": "chainId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2678,
                      "src": "17502:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2716,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "17516:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 2717,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17522:7:8",
                      "memberName": "chainid",
                      "nodeType": "MemberAccess",
                      "src": "17516:13:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17502:27:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2723,
                  "nodeType": "IfStatement",
                  "src": "17498:79:8",
                  "trueBody": {
                    "id": 2722,
                    "nodeType": "Block",
                    "src": "17531:46:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2719,
                            "name": "WrongChainId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3279,
                            "src": "17552:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2720,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17552:14:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2721,
                        "nodeType": "RevertStatement",
                        "src": "17545:21:8"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 2730,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2724,
                        "name": "op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2693,
                        "src": "17591:2:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                          "typeString": "struct ManyChainMultiSig.Op calldata"
                        }
                      },
                      "id": 2725,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17594:8:8",
                      "memberName": "multiSig",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2680,
                      "src": "17591:11:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 2728,
                          "name": "this",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -28,
                          "src": "17614:4:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ManyChainMultiSig_$3318",
                            "typeString": "contract ManyChainMultiSig"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ManyChainMultiSig_$3318",
                            "typeString": "contract ManyChainMultiSig"
                          }
                        ],
                        "id": 2727,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "17606:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 2726,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "17606:7:8",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 2729,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17606:13:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "17591:28:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2735,
                  "nodeType": "IfStatement",
                  "src": "17587:81:8",
                  "trueBody": {
                    "id": 2734,
                    "nodeType": "Block",
                    "src": "17621:47:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2731,
                            "name": "WrongMultiSig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3282,
                            "src": "17642:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17642:15:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2733,
                        "nodeType": "RevertStatement",
                        "src": "17635:22:8"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2740,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2736,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -4,
                        "src": "17682:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 2737,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17688:9:8",
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "17682:15:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 2738,
                        "name": "currentExpiringRootAndOpCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2701,
                        "src": "17700:29:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                          "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount memory"
                        }
                      },
                      "id": 2739,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17730:10:8",
                      "memberName": "validUntil",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2353,
                      "src": "17700:40:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "17682:58:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2745,
                  "nodeType": "IfStatement",
                  "src": "17678:109:8",
                  "trueBody": {
                    "id": 2744,
                    "nodeType": "Block",
                    "src": "17742:45:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2741,
                            "name": "RootExpired",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3297,
                            "src": "17763:11:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17763:13:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2743,
                        "nodeType": "RevertStatement",
                        "src": "17756:20:8"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    },
                    "id": 2750,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2746,
                        "name": "op",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2693,
                        "src": "17801:2:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                          "typeString": "struct ManyChainMultiSig.Op calldata"
                        }
                      },
                      "id": 2747,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17804:5:8",
                      "memberName": "nonce",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2682,
                      "src": "17801:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2748,
                        "name": "currentExpiringRootAndOpCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2701,
                        "src": "17813:29:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                          "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount memory"
                        }
                      },
                      "id": 2749,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17843:7:8",
                      "memberName": "opCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2355,
                      "src": "17813:37:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "17801:49:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2755,
                  "nodeType": "IfStatement",
                  "src": "17797:99:8",
                  "trueBody": {
                    "id": 2754,
                    "nodeType": "Block",
                    "src": "17852:44:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2751,
                            "name": "WrongNonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3300,
                            "src": "17873:10:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2752,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17873:12:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2753,
                        "nodeType": "RevertStatement",
                        "src": "17866:19:8"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2757
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2757,
                      "mutability": "mutable",
                      "name": "hashedLeaf",
                      "nameLocation": "17970:10:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 2808,
                      "src": "17962:18:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 2756,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "17962:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2765,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 2761,
                            "name": "MANY_CHAIN_MULTI_SIG_DOMAIN_SEPARATOR_OP",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2299,
                            "src": "18004:40:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 2762,
                            "name": "op",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2693,
                            "src": "18046:2:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                              "typeString": "struct ManyChainMultiSig.Op calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                              "typeString": "struct ManyChainMultiSig.Op calldata"
                            }
                          ],
                          "expression": {
                            "id": 2759,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "17993:3:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 2760,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "17997:6:8",
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "17993:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 2763,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17993:56:8",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 2758,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "17983:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 2764,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17983:67:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17962:88:8"
                },
                {
                  "condition": {
                    "id": 2773,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18064:74:8",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 2768,
                          "name": "proof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2696,
                          "src": "18084:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          }
                        },
                        {
                          "expression": {
                            "id": 2769,
                            "name": "currentExpiringRootAndOpCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2701,
                            "src": "18091:29:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                              "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount memory"
                            }
                          },
                          "id": 2770,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "18121:4:8",
                          "memberName": "root",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2351,
                          "src": "18091:34:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        {
                          "id": 2771,
                          "name": "hashedLeaf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2757,
                          "src": "18127:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                            "typeString": "bytes32[] calldata"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 2766,
                          "name": "MerkleProof",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1318,
                          "src": "18065:11:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_MerkleProof_$1318_$",
                            "typeString": "type(library MerkleProof)"
                          }
                        },
                        "id": 2767,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18077:6:8",
                        "memberName": "verify",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 836,
                        "src": "18065:18:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$",
                          "typeString": "function (bytes32[] memory,bytes32,bytes32) pure returns (bool)"
                        }
                      },
                      "id": 2772,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18065:73:8",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2778,
                  "nodeType": "IfStatement",
                  "src": "18060:135:8",
                  "trueBody": {
                    "id": 2777,
                    "nodeType": "Block",
                    "src": "18140:55:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2774,
                            "name": "ProofCannotBeVerified",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3294,
                            "src": "18161:21:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18161:23:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2776,
                        "nodeType": "RevertStatement",
                        "src": "18154:30:8"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2786,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2779,
                        "name": "s_expiringRootAndOpCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2359,
                        "src": "18285:24:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
                          "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount storage ref"
                        }
                      },
                      "id": 2781,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "18310:7:8",
                      "memberName": "opCount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2355,
                      "src": "18285:32:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      },
                      "id": 2785,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2782,
                          "name": "currentExpiringRootAndOpCount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2701,
                          "src": "18320:29:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                            "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount memory"
                          }
                        },
                        "id": 2783,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18350:7:8",
                        "memberName": "opCount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2355,
                        "src": "18320:37:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 2784,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18360:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "18320:41:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint40",
                        "typeString": "uint40"
                      }
                    },
                    "src": "18285:76:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "id": 2787,
                  "nodeType": "ExpressionStatement",
                  "src": "18285:76:8"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2789,
                          "name": "op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2693,
                          "src": "18381:2:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                            "typeString": "struct ManyChainMultiSig.Op calldata"
                          }
                        },
                        "id": 2790,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18384:2:8",
                        "memberName": "to",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2684,
                        "src": "18381:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 2791,
                          "name": "op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2693,
                          "src": "18388:2:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                            "typeString": "struct ManyChainMultiSig.Op calldata"
                          }
                        },
                        "id": 2792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18391:5:8",
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2686,
                        "src": "18388:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2793,
                          "name": "op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2693,
                          "src": "18398:2:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                            "typeString": "struct ManyChainMultiSig.Op calldata"
                          }
                        },
                        "id": 2794,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18401:4:8",
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2688,
                        "src": "18398:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 2788,
                      "name": "_execute",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3174,
                      "src": "18372:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_calldata_ptr_$returns$__$",
                        "typeString": "function (address,uint256,bytes calldata)"
                      }
                    },
                    "id": 2795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18372:34:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2796,
                  "nodeType": "ExpressionStatement",
                  "src": "18372:34:8"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2798,
                          "name": "op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2693,
                          "src": "18432:2:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                            "typeString": "struct ManyChainMultiSig.Op calldata"
                          }
                        },
                        "id": 2799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18435:5:8",
                        "memberName": "nonce",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2682,
                        "src": "18432:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      },
                      {
                        "expression": {
                          "id": 2800,
                          "name": "op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2693,
                          "src": "18442:2:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                            "typeString": "struct ManyChainMultiSig.Op calldata"
                          }
                        },
                        "id": 2801,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18445:2:8",
                        "memberName": "to",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2684,
                        "src": "18442:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 2802,
                          "name": "op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2693,
                          "src": "18449:2:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                            "typeString": "struct ManyChainMultiSig.Op calldata"
                          }
                        },
                        "id": 2803,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18452:4:8",
                        "memberName": "data",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2688,
                        "src": "18449:7:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "expression": {
                          "id": 2804,
                          "name": "op",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2693,
                          "src": "18458:2:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                            "typeString": "struct ManyChainMultiSig.Op calldata"
                          }
                        },
                        "id": 2805,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "18461:5:8",
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2686,
                        "src": "18458:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2797,
                      "name": "OpExecuted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3249,
                      "src": "18421:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint40_$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (uint40,address,bytes memory,uint256)"
                      }
                    },
                    "id": 2806,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18421:46:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2807,
                  "nodeType": "EmitStatement",
                  "src": "18416:51:8"
                }
              ]
            },
            "documentation": {
              "id": 2690,
              "nodeType": "StructuredDocumentation",
              "src": "16167:1008:8",
              "text": "@notice Execute the received op after verifying the proof of its inclusion in the\n current Merkle tree. The op should be the next op according to the order\n enforced by the merkle tree whose root is stored in s_expiringRootAndOpCount, i.e., the\n nonce of the op should be equal to s_expiringRootAndOpCount.opCount.\n @param op is Op to be executed\n @param proof is the MerkleProof for the op's inclusion in the MerkleTree which its\n root is the s_expiringRootAndOpCount.root.\n @dev ANYONE can call this function! That's intentional. Callers can only execute verified,\n ordered ops in the Merkle tree.\n @dev we perform a raw call to each target. Raw calls to targets that don't have associated\n contract code will always succeed regardless of data.\n @dev the gas limit of the call can be freely determined by the caller of this function.\n We expect callees to revert if they run out of gas."
            },
            "functionSelector": "b759d685",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "execute",
            "nameLocation": "17189:7:8",
            "parameters": {
              "id": 2697,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2693,
                  "mutability": "mutable",
                  "name": "op",
                  "nameLocation": "17209:2:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 2809,
                  "src": "17197:14:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Op_$2689_calldata_ptr",
                    "typeString": "struct ManyChainMultiSig.Op"
                  },
                  "typeName": {
                    "id": 2692,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2691,
                      "name": "Op",
                      "nameLocations": [
                        "17197:2:8"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2689,
                      "src": "17197:2:8"
                    },
                    "referencedDeclaration": 2689,
                    "src": "17197:2:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Op_$2689_storage_ptr",
                      "typeString": "struct ManyChainMultiSig.Op"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2696,
                  "mutability": "mutable",
                  "name": "proof",
                  "nameLocation": "17232:5:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 2809,
                  "src": "17213:24:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2694,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "17213:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 2695,
                    "nodeType": "ArrayTypeName",
                    "src": "17213:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17196:42:8"
            },
            "returnParameters": {
              "id": 2698,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17256:0:8"
            },
            "scope": 3318,
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 3144,
            "nodeType": "FunctionDefinition",
            "src": "19676:4061:8",
            "nodes": [],
            "body": {
              "id": 3143,
              "nodeType": "Block",
              "src": "19925:3812:8",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2834,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2831,
                          "name": "signerAddresses",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2813,
                          "src": "19939:15:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 2832,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19955:6:8",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "19939:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 2833,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "19965:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "19939:27:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2838,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2835,
                          "name": "signerAddresses",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2813,
                          "src": "19970:15:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                            "typeString": "address[] calldata"
                          }
                        },
                        "id": 2836,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "19986:6:8",
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "19970:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": ">",
                      "rightExpression": {
                        "id": 2837,
                        "name": "MAX_NUM_SIGNERS",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2317,
                        "src": "19995:15:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "src": "19970:40:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "19939:71:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2844,
                  "nodeType": "IfStatement",
                  "src": "19935:134:8",
                  "trueBody": {
                    "id": 2843,
                    "nodeType": "Block",
                    "src": "20012:57:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2840,
                            "name": "OutOfBoundsNumOfSigners",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3252,
                            "src": "20033:23:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2841,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20033:25:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2842,
                        "nodeType": "RevertStatement",
                        "src": "20026:32:8"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2849,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2845,
                        "name": "signerAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2813,
                        "src": "20083:15:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 2846,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "20099:6:8",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "20083:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2847,
                        "name": "signerGroups",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2816,
                        "src": "20109:12:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint8_$dyn_calldata_ptr",
                          "typeString": "uint8[] calldata"
                        }
                      },
                      "id": 2848,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "20122:6:8",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "20109:19:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20083:45:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2854,
                  "nodeType": "IfStatement",
                  "src": "20079:111:8",
                  "trueBody": {
                    "id": 2853,
                    "nodeType": "Block",
                    "src": "20130:60:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 2850,
                            "name": "SignerGroupsLengthMismatch",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3255,
                            "src": "20151:26:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                              "typeString": "function () pure"
                            }
                          },
                          "id": 2851,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20151:28:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2852,
                        "nodeType": "RevertStatement",
                        "src": "20144:35:8"
                      }
                    ]
                  }
                },
                {
                  "id": 2979,
                  "nodeType": "Block",
                  "src": "20200:1738:8",
                  "statements": [
                    {
                      "assignments": [
                        2860
                      ],
                      "declarations": [
                        {
                          "constant": false,
                          "id": 2860,
                          "mutability": "mutable",
                          "name": "groupChildrenCounts",
                          "nameLocation": "20338:19:8",
                          "nodeType": "VariableDeclaration",
                          "scope": 2979,
                          "src": "20313:44:8",
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_uint8_$32_memory_ptr",
                            "typeString": "uint8[32]"
                          },
                          "typeName": {
                            "baseType": {
                              "id": 2858,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "20313:5:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "id": 2859,
                            "length": {
                              "id": 2857,
                              "name": "NUM_GROUPS",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2314,
                              "src": "20319:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "ArrayTypeName",
                            "src": "20313:17:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint8_$32_storage_ptr",
                              "typeString": "uint8[32]"
                            }
                          },
                          "visibility": "internal"
                        }
                      ],
                      "id": 2861,
                      "nodeType": "VariableDeclarationStatement",
                      "src": "20313:44:8"
                    },
                    {
                      "body": {
                        "id": 2890,
                        "nodeType": "Block",
                        "src": "20476:189:8",
                        "statements": [
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 2877,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 2873,
                                  "name": "signerGroups",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2816,
                                  "src": "20498:12:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint8_$dyn_calldata_ptr",
                                    "typeString": "uint8[] calldata"
                                  }
                                },
                                "id": 2875,
                                "indexExpression": {
                                  "id": 2874,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2863,
                                  "src": "20511:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "20498:15:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 2876,
                                "name": "NUM_GROUPS",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2314,
                                "src": "20517:10:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "src": "20498:29:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2882,
                            "nodeType": "IfStatement",
                            "src": "20494:101:8",
                            "trueBody": {
                              "id": 2881,
                              "nodeType": "Block",
                              "src": "20529:66:8",
                              "statements": [
                                {
                                  "errorCall": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 2878,
                                      "name": "OutOfBoundsGroup",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3258,
                                      "src": "20558:16:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 2879,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "20558:18:8",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 2880,
                                  "nodeType": "RevertStatement",
                                  "src": "20551:25:8"
                                }
                              ]
                            }
                          },
                          {
                            "expression": {
                              "id": 2888,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "++",
                              "prefix": false,
                              "src": "20612:38:8",
                              "subExpression": {
                                "baseExpression": {
                                  "id": 2883,
                                  "name": "groupChildrenCounts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2860,
                                  "src": "20612:19:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint8_$32_memory_ptr",
                                    "typeString": "uint8[32] memory"
                                  }
                                },
                                "id": 2887,
                                "indexExpression": {
                                  "baseExpression": {
                                    "id": 2884,
                                    "name": "signerGroups",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2816,
                                    "src": "20632:12:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint8_$dyn_calldata_ptr",
                                      "typeString": "uint8[] calldata"
                                    }
                                  },
                                  "id": 2886,
                                  "indexExpression": {
                                    "id": 2885,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2863,
                                    "src": "20645:1:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "20632:15:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "20612:36:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "id": 2889,
                            "nodeType": "ExpressionStatement",
                            "src": "20612:38:8"
                          }
                        ]
                      },
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 2866,
                          "name": "i",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2863,
                          "src": "20446:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "expression": {
                            "id": 2867,
                            "name": "signerGroups",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2816,
                            "src": "20450:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint8_$dyn_calldata_ptr",
                              "typeString": "uint8[] calldata"
                            }
                          },
                          "id": 2868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "20463:6:8",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "20450:19:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "20446:23:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 2891,
                      "initializationExpression": {
                        "assignments": [
                          2863
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2863,
                            "mutability": "mutable",
                            "name": "i",
                            "nameLocation": "20439:1:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 2891,
                            "src": "20431:9:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2862,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "20431:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2865,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 2864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20443:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "20431:13:8"
                      },
                      "loopExpression": {
                        "expression": {
                          "id": 2871,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "20471:3:8",
                          "subExpression": {
                            "id": 2870,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2863,
                            "src": "20471:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2872,
                        "nodeType": "ExpressionStatement",
                        "src": "20471:3:8"
                      },
                      "nodeType": "ForStatement",
                      "src": "20426:239:8"
                    },
                    {
                      "body": {
                        "id": 2977,
                        "nodeType": "Block",
                        "src": "20883:1045:8",
                        "statements": [
                          {
                            "assignments": [
                              2903
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2903,
                                "mutability": "mutable",
                                "name": "i",
                                "nameLocation": "20909:1:8",
                                "nodeType": "VariableDeclaration",
                                "scope": 2977,
                                "src": "20901:9:8",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "typeName": {
                                  "id": 2902,
                                  "name": "uint256",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "20901:7:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2909,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 2908,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 2906,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2904,
                                  "name": "NUM_GROUPS",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2314,
                                  "src": "20913:10:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "hexValue": "31",
                                  "id": 2905,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "20926:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "20913:14:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "id": 2907,
                                "name": "j",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2893,
                                "src": "20930:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "20913:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "20901:30:8"
                          },
                          {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "id": 2930,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 2918,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2912,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2910,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2903,
                                        "src": "21052:1:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "!=",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 2911,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "21057:1:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "21052:6:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2917,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "baseExpression": {
                                          "id": 2913,
                                          "name": "groupParents",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2824,
                                          "src": "21062:12:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint8_$32_calldata_ptr",
                                            "typeString": "uint8[32] calldata"
                                          }
                                        },
                                        "id": 2915,
                                        "indexExpression": {
                                          "id": 2914,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2903,
                                          "src": "21075:1:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "21062:15:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "id": 2916,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2903,
                                        "src": "21081:1:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "21062:20:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "21052:30:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 2919,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21051:32:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "||",
                              "rightExpression": {
                                "components": [
                                  {
                                    "commonType": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "id": 2928,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2922,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2920,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2903,
                                        "src": "21088:1:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 2921,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "21093:1:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "21088:6:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "&&",
                                    "rightExpression": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      },
                                      "id": 2927,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "baseExpression": {
                                          "id": 2923,
                                          "name": "groupParents",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2824,
                                          "src": "21098:12:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint8_$32_calldata_ptr",
                                            "typeString": "uint8[32] calldata"
                                          }
                                        },
                                        "id": 2925,
                                        "indexExpression": {
                                          "id": 2924,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2903,
                                          "src": "21111:1:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "21098:15:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "!=",
                                      "rightExpression": {
                                        "hexValue": "30",
                                        "id": 2926,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "21117:1:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "21098:20:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "src": "21088:30:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "id": 2929,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "21087:32:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "src": "21051:68:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "id": 2935,
                            "nodeType": "IfStatement",
                            "src": "21047:146:8",
                            "trueBody": {
                              "id": 2934,
                              "nodeType": "Block",
                              "src": "21121:72:8",
                              "statements": [
                                {
                                  "errorCall": {
                                    "arguments": [],
                                    "expression": {
                                      "argumentTypes": [],
                                      "id": 2931,
                                      "name": "GroupTreeNotWellFormed",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3261,
                                      "src": "21150:22:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                        "typeString": "function () pure"
                                      }
                                    },
                                    "id": 2932,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "functionCall",
                                    "lValueRequested": false,
                                    "nameLocations": [],
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "21150:24:8",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_tuple$__$",
                                      "typeString": "tuple()"
                                    }
                                  },
                                  "id": 2933,
                                  "nodeType": "RevertStatement",
                                  "src": "21143:31:8"
                                }
                              ]
                            }
                          },
                          {
                            "assignments": [
                              2937
                            ],
                            "declarations": [
                              {
                                "constant": false,
                                "id": 2937,
                                "mutability": "mutable",
                                "name": "disabled",
                                "nameLocation": "21215:8:8",
                                "nodeType": "VariableDeclaration",
                                "scope": 2977,
                                "src": "21210:13:8",
                                "stateVariable": false,
                                "storageLocation": "default",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "typeName": {
                                  "id": 2936,
                                  "name": "bool",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "21210:4:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "visibility": "internal"
                              }
                            ],
                            "id": 2943,
                            "initialValue": {
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 2942,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "id": 2938,
                                  "name": "groupQuorums",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2820,
                                  "src": "21226:12:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_uint8_$32_calldata_ptr",
                                    "typeString": "uint8[32] calldata"
                                  }
                                },
                                "id": 2940,
                                "indexExpression": {
                                  "id": 2939,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2903,
                                  "src": "21239:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "21226:15:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "==",
                              "rightExpression": {
                                "hexValue": "30",
                                "id": 2941,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21245:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "21226:20:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "VariableDeclarationStatement",
                            "src": "21210:36:8"
                          },
                          {
                            "condition": {
                              "id": 2944,
                              "name": "disabled",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2937,
                              "src": "21268:8:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "id": 2975,
                              "nodeType": "Block",
                              "src": "21503:411:8",
                              "statements": [
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 2962,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "baseExpression": {
                                        "id": 2956,
                                        "name": "groupChildrenCounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2860,
                                        "src": "21592:19:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint8_$32_memory_ptr",
                                          "typeString": "uint8[32] memory"
                                        }
                                      },
                                      "id": 2958,
                                      "indexExpression": {
                                        "id": 2957,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2903,
                                        "src": "21612:1:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "21592:22:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "baseExpression": {
                                        "id": 2959,
                                        "name": "groupQuorums",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2820,
                                        "src": "21617:12:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint8_$32_calldata_ptr",
                                          "typeString": "uint8[32] calldata"
                                        }
                                      },
                                      "id": 2961,
                                      "indexExpression": {
                                        "id": 2960,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2903,
                                        "src": "21630:1:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "21617:15:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "21592:40:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2967,
                                  "nodeType": "IfStatement",
                                  "src": "21588:126:8",
                                  "trueBody": {
                                    "id": 2966,
                                    "nodeType": "Block",
                                    "src": "21634:80:8",
                                    "statements": [
                                      {
                                        "errorCall": {
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "id": 2963,
                                            "name": "OutOfBoundsGroupQuorum",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3264,
                                            "src": "21667:22:8",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                              "typeString": "function () pure"
                                            }
                                          },
                                          "id": 2964,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "21667:24:8",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                          }
                                        },
                                        "id": 2965,
                                        "nodeType": "RevertStatement",
                                        "src": "21660:31:8"
                                      }
                                    ]
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2973,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "++",
                                    "prefix": false,
                                    "src": "21735:38:8",
                                    "subExpression": {
                                      "baseExpression": {
                                        "id": 2968,
                                        "name": "groupChildrenCounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2860,
                                        "src": "21735:19:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint8_$32_memory_ptr",
                                          "typeString": "uint8[32] memory"
                                        }
                                      },
                                      "id": 2972,
                                      "indexExpression": {
                                        "baseExpression": {
                                          "id": 2969,
                                          "name": "groupParents",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2824,
                                          "src": "21755:12:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_array$_t_uint8_$32_calldata_ptr",
                                            "typeString": "uint8[32] calldata"
                                          }
                                        },
                                        "id": 2971,
                                        "indexExpression": {
                                          "id": 2970,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2903,
                                          "src": "21768:1:8",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "21755:15:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "nodeType": "IndexAccess",
                                      "src": "21735:36:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "id": 2974,
                                  "nodeType": "ExpressionStatement",
                                  "src": "21735:38:8"
                                }
                              ]
                            },
                            "id": 2976,
                            "nodeType": "IfStatement",
                            "src": "21264:650:8",
                            "trueBody": {
                              "id": 2955,
                              "nodeType": "Block",
                              "src": "21278:219:8",
                              "statements": [
                                {
                                  "condition": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    },
                                    "id": 2949,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "hexValue": "30",
                                      "id": 2945,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "21372:1:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_0_by_1",
                                        "typeString": "int_const 0"
                                      },
                                      "value": "0"
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "<",
                                    "rightExpression": {
                                      "baseExpression": {
                                        "id": 2946,
                                        "name": "groupChildrenCounts",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2860,
                                        "src": "21376:19:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_uint8_$32_memory_ptr",
                                          "typeString": "uint8[32] memory"
                                        }
                                      },
                                      "id": 2948,
                                      "indexExpression": {
                                        "id": 2947,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2903,
                                        "src": "21396:1:8",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "21376:22:8",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "src": "21372:26:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "id": 2954,
                                  "nodeType": "IfStatement",
                                  "src": "21368:111:8",
                                  "trueBody": {
                                    "id": 2953,
                                    "nodeType": "Block",
                                    "src": "21400:79:8",
                                    "statements": [
                                      {
                                        "errorCall": {
                                          "arguments": [],
                                          "expression": {
                                            "argumentTypes": [],
                                            "id": 2950,
                                            "name": "SignerInDisabledGroup",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 3267,
                                            "src": "21433:21:8",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                              "typeString": "function () pure"
                                            }
                                          },
                                          "id": 2951,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "nameLocations": [],
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "21433:23:8",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_tuple$__$",
                                            "typeString": "tuple()"
                                          }
                                        },
                                        "id": 2952,
                                        "nodeType": "RevertStatement",
                                        "src": "21426:30:8"
                                      }
                                    ]
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      },
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2898,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 2896,
                          "name": "j",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2893,
                          "src": "20862:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "id": 2897,
                          "name": "NUM_GROUPS",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2314,
                          "src": "20866:10:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "20862:14:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "id": 2978,
                      "initializationExpression": {
                        "assignments": [
                          2893
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2893,
                            "mutability": "mutable",
                            "name": "j",
                            "nameLocation": "20855:1:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 2978,
                            "src": "20847:9:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 2892,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "20847:7:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2895,
                        "initialValue": {
                          "hexValue": "30",
                          "id": 2894,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "20859:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "20847:13:8"
                      },
                      "loopExpression": {
                        "expression": {
                          "id": 2900,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "20878:3:8",
                          "subExpression": {
                            "id": 2899,
                            "name": "j",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2893,
                            "src": "20878:1:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2901,
                        "nodeType": "ExpressionStatement",
                        "src": "20878:3:8"
                      },
                      "nodeType": "ForStatement",
                      "src": "20842:1086:8"
                    }
                  ]
                },
                {
                  "assignments": [
                    2984
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2984,
                      "mutability": "mutable",
                      "name": "oldSigners",
                      "nameLocation": "21964:10:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 3143,
                      "src": "21948:26:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Signer_$2324_memory_ptr_$dyn_memory_ptr",
                        "typeString": "struct ManyChainMultiSig.Signer[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 2982,
                          "nodeType": "UserDefinedTypeName",
                          "pathNode": {
                            "id": 2981,
                            "name": "Signer",
                            "nameLocations": [
                              "21948:6:8"
                            ],
                            "nodeType": "IdentifierPath",
                            "referencedDeclaration": 2324,
                            "src": "21948:6:8"
                          },
                          "referencedDeclaration": 2324,
                          "src": "21948:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Signer_$2324_storage_ptr",
                            "typeString": "struct ManyChainMultiSig.Signer"
                          }
                        },
                        "id": 2983,
                        "nodeType": "ArrayTypeName",
                        "src": "21948:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Signer_$2324_storage_$dyn_storage_ptr",
                          "typeString": "struct ManyChainMultiSig.Signer[]"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2987,
                  "initialValue": {
                    "expression": {
                      "id": 2985,
                      "name": "s_config",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2345,
                      "src": "21977:8:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Config_$2342_storage",
                        "typeString": "struct ManyChainMultiSig.Config storage ref"
                      }
                    },
                    "id": 2986,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "21986:7:8",
                    "memberName": "signers",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2333,
                    "src": "21977:16:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Signer_$2324_storage_$dyn_storage",
                      "typeString": "struct ManyChainMultiSig.Signer storage ref[] storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21948:45:8"
                },
                {
                  "body": {
                    "id": 3018,
                    "nodeType": "Block",
                    "src": "22094:154:8",
                    "statements": [
                      {
                        "assignments": [
                          3000
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3000,
                            "mutability": "mutable",
                            "name": "oldSignerAddress",
                            "nameLocation": "22116:16:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 3018,
                            "src": "22108:24:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 2999,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "22108:7:8",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3005,
                        "initialValue": {
                          "expression": {
                            "baseExpression": {
                              "id": 3001,
                              "name": "oldSigners",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2984,
                              "src": "22135:10:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Signer_$2324_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct ManyChainMultiSig.Signer memory[] memory"
                              }
                            },
                            "id": 3003,
                            "indexExpression": {
                              "id": 3002,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2989,
                              "src": "22146:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "22135:13:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                              "typeString": "struct ManyChainMultiSig.Signer memory"
                            }
                          },
                          "id": 3004,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "22149:4:8",
                          "memberName": "addr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2319,
                          "src": "22135:18:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "22108:45:8"
                      },
                      {
                        "expression": {
                          "id": 3009,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "22167:34:8",
                          "subExpression": {
                            "baseExpression": {
                              "id": 3006,
                              "name": "s_signers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2329,
                              "src": "22174:9:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Signer_$2324_storage_$",
                                "typeString": "mapping(address => struct ManyChainMultiSig.Signer storage ref)"
                              }
                            },
                            "id": 3008,
                            "indexExpression": {
                              "id": 3007,
                              "name": "oldSignerAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3000,
                              "src": "22184:16:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "22174:27:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Signer_$2324_storage",
                              "typeString": "struct ManyChainMultiSig.Signer storage ref"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3010,
                        "nodeType": "ExpressionStatement",
                        "src": "22167:34:8"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "expression": {
                                "id": 3011,
                                "name": "s_config",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2345,
                                "src": "22215:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Config_$2342_storage",
                                  "typeString": "struct ManyChainMultiSig.Config storage ref"
                                }
                              },
                              "id": 3014,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "22224:7:8",
                              "memberName": "signers",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2333,
                              "src": "22215:16:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Signer_$2324_storage_$dyn_storage",
                                "typeString": "struct ManyChainMultiSig.Signer storage ref[] storage ref"
                              }
                            },
                            "id": 3015,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "22232:3:8",
                            "memberName": "pop",
                            "nodeType": "MemberAccess",
                            "src": "22215:20:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypop_nonpayable$_t_array$_t_struct$_Signer_$2324_storage_$dyn_storage_ptr_$returns$__$attached_to$_t_array$_t_struct$_Signer_$2324_storage_$dyn_storage_ptr_$",
                              "typeString": "function (struct ManyChainMultiSig.Signer storage ref[] storage pointer)"
                            }
                          },
                          "id": 3016,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22215:22:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3017,
                        "nodeType": "ExpressionStatement",
                        "src": "22215:22:8"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2992,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2989,
                      "src": "22066:1:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2993,
                        "name": "oldSigners",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2984,
                        "src": "22070:10:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Signer_$2324_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct ManyChainMultiSig.Signer memory[] memory"
                        }
                      },
                      "id": 2994,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22081:6:8",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "22070:17:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22066:21:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3019,
                  "initializationExpression": {
                    "assignments": [
                      2989
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2989,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "22059:1:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 3019,
                        "src": "22051:9:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2988,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22051:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2991,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 2990,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22063:1:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "22051:13:8"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 2997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "22089:3:8",
                      "subExpression": {
                        "id": 2996,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2989,
                        "src": "22089:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2998,
                    "nodeType": "ExpressionStatement",
                    "src": "22089:3:8"
                  },
                  "nodeType": "ForStatement",
                  "src": "22046:202:8"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 3025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "expression": {
                              "id": 3021,
                              "name": "s_config",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2345,
                              "src": "22356:8:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Config_$2342_storage",
                                "typeString": "struct ManyChainMultiSig.Config storage ref"
                              }
                            },
                            "id": 3022,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "22365:7:8",
                            "memberName": "signers",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2333,
                            "src": "22356:16:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Signer_$2324_storage_$dyn_storage",
                              "typeString": "struct ManyChainMultiSig.Signer storage ref[] storage ref"
                            }
                          },
                          "id": 3023,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "22373:6:8",
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "22356:23:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 3024,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "22383:1:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "22356:28:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3020,
                      "name": "assert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -3,
                      "src": "22349:6:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_assert_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 3026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22349:36:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3027,
                  "nodeType": "ExpressionStatement",
                  "src": "22349:36:8"
                },
                {
                  "expression": {
                    "id": 3032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3028,
                        "name": "s_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2345,
                        "src": "22395:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Config_$2342_storage",
                          "typeString": "struct ManyChainMultiSig.Config storage ref"
                        }
                      },
                      "id": 3030,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "22404:12:8",
                      "memberName": "groupQuorums",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2337,
                      "src": "22395:21:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint8_$32_storage",
                        "typeString": "uint8[32] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3031,
                      "name": "groupQuorums",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2820,
                      "src": "22419:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint8_$32_calldata_ptr",
                        "typeString": "uint8[32] calldata"
                      }
                    },
                    "src": "22395:36:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint8_$32_storage",
                      "typeString": "uint8[32] storage ref"
                    }
                  },
                  "id": 3033,
                  "nodeType": "ExpressionStatement",
                  "src": "22395:36:8"
                },
                {
                  "expression": {
                    "id": 3038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 3034,
                        "name": "s_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2345,
                        "src": "22441:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Config_$2342_storage",
                          "typeString": "struct ManyChainMultiSig.Config storage ref"
                        }
                      },
                      "id": 3036,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberLocation": "22450:12:8",
                      "memberName": "groupParents",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2341,
                      "src": "22441:21:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint8_$32_storage",
                        "typeString": "uint8[32] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 3037,
                      "name": "groupParents",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2824,
                      "src": "22465:12:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint8_$32_calldata_ptr",
                        "typeString": "uint8[32] calldata"
                      }
                    },
                    "src": "22441:36:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint8_$32_storage",
                      "typeString": "uint8[32] storage ref"
                    }
                  },
                  "id": 3039,
                  "nodeType": "ExpressionStatement",
                  "src": "22441:36:8"
                },
                {
                  "assignments": [
                    3041
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3041,
                      "mutability": "mutable",
                      "name": "prevSigner",
                      "nameLocation": "22623:10:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 3143,
                      "src": "22615:18:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 3040,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "22615:7:8",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3046,
                  "initialValue": {
                    "arguments": [
                      {
                        "hexValue": "307830",
                        "id": 3044,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22644:3:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0x0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 3043,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "22636:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_address_$",
                        "typeString": "type(address)"
                      },
                      "typeName": {
                        "id": 3042,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "22636:7:8",
                        "typeDescriptions": {}
                      }
                    },
                    "id": 3045,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22636:12:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "22615:33:8"
                },
                {
                  "body": {
                    "id": 3106,
                    "nodeType": "Block",
                    "src": "22711:412:8",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 3062,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 3058,
                            "name": "prevSigner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3041,
                            "src": "22729:10:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 3059,
                              "name": "signerAddresses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2813,
                              "src": "22743:15:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 3061,
                            "indexExpression": {
                              "id": 3060,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3048,
                              "src": "22759:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "22743:18:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "22729:32:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 3067,
                        "nodeType": "IfStatement",
                        "src": "22725:120:8",
                        "trueBody": {
                          "id": 3066,
                          "nodeType": "Block",
                          "src": "22763:82:8",
                          "statements": [
                            {
                              "errorCall": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 3063,
                                  "name": "SignersAddressesMustBeStrictlyIncreasing",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3270,
                                  "src": "22788:40:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_error_pure$__$returns$__$",
                                    "typeString": "function () pure"
                                  }
                                },
                                "id": 3064,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "22788:42:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 3065,
                              "nodeType": "RevertStatement",
                              "src": "22781:49:8"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          3070
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3070,
                            "mutability": "mutable",
                            "name": "signer",
                            "nameLocation": "22872:6:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 3106,
                            "src": "22858:20:8",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                              "typeString": "struct ManyChainMultiSig.Signer"
                            },
                            "typeName": {
                              "id": 3069,
                              "nodeType": "UserDefinedTypeName",
                              "pathNode": {
                                "id": 3068,
                                "name": "Signer",
                                "nameLocations": [
                                  "22858:6:8"
                                ],
                                "nodeType": "IdentifierPath",
                                "referencedDeclaration": 2324,
                                "src": "22858:6:8"
                              },
                              "referencedDeclaration": 2324,
                              "src": "22858:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Signer_$2324_storage_ptr",
                                "typeString": "struct ManyChainMultiSig.Signer"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3083,
                        "initialValue": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 3072,
                                "name": "signerAddresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2813,
                                "src": "22911:15:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 3074,
                              "indexExpression": {
                                "id": 3073,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3048,
                                "src": "22927:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "22911:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 3077,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 3048,
                                  "src": "22944:1:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 3076,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "22938:5:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint8_$",
                                  "typeString": "type(uint8)"
                                },
                                "typeName": {
                                  "id": 3075,
                                  "name": "uint8",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "22938:5:8",
                                  "typeDescriptions": {}
                                }
                              },
                              "id": 3078,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "22938:8:8",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 3079,
                                "name": "signerGroups",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2816,
                                "src": "22955:12:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint8_$dyn_calldata_ptr",
                                  "typeString": "uint8[] calldata"
                                }
                              },
                              "id": 3081,
                              "indexExpression": {
                                "id": 3080,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3048,
                                "src": "22968:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "22955:15:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 3071,
                            "name": "Signer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2324,
                            "src": "22897:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_struct$_Signer_$2324_storage_ptr_$",
                              "typeString": "type(struct ManyChainMultiSig.Signer storage pointer)"
                            }
                          },
                          "id": 3082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "structConstructorCall",
                          "lValueRequested": false,
                          "nameLocations": [
                            "22905:4:8",
                            "22931:5:8",
                            "22948:5:8"
                          ],
                          "names": [
                            "addr",
                            "index",
                            "group"
                          ],
                          "nodeType": "FunctionCall",
                          "src": "22897:75:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                            "typeString": "struct ManyChainMultiSig.Signer memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "22858:114:8"
                      },
                      {
                        "expression": {
                          "id": 3090,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 3084,
                              "name": "s_signers",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2329,
                              "src": "22986:9:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Signer_$2324_storage_$",
                                "typeString": "mapping(address => struct ManyChainMultiSig.Signer storage ref)"
                              }
                            },
                            "id": 3088,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 3085,
                                "name": "signerAddresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2813,
                                "src": "22996:15:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 3087,
                              "indexExpression": {
                                "id": 3086,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3048,
                                "src": "23012:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "22996:18:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "22986:29:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Signer_$2324_storage",
                              "typeString": "struct ManyChainMultiSig.Signer storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 3089,
                            "name": "signer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3070,
                            "src": "23018:6:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                              "typeString": "struct ManyChainMultiSig.Signer memory"
                            }
                          },
                          "src": "22986:38:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Signer_$2324_storage",
                            "typeString": "struct ManyChainMultiSig.Signer storage ref"
                          }
                        },
                        "id": 3091,
                        "nodeType": "ExpressionStatement",
                        "src": "22986:38:8"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 3097,
                              "name": "signer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3070,
                              "src": "23060:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                                "typeString": "struct ManyChainMultiSig.Signer memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Signer_$2324_memory_ptr",
                                "typeString": "struct ManyChainMultiSig.Signer memory"
                              }
                            ],
                            "expression": {
                              "expression": {
                                "id": 3092,
                                "name": "s_config",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2345,
                                "src": "23038:8:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Config_$2342_storage",
                                  "typeString": "struct ManyChainMultiSig.Config storage ref"
                                }
                              },
                              "id": 3095,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "23047:7:8",
                              "memberName": "signers",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2333,
                              "src": "23038:16:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Signer_$2324_storage_$dyn_storage",
                                "typeString": "struct ManyChainMultiSig.Signer storage ref[] storage ref"
                              }
                            },
                            "id": 3096,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "23055:4:8",
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "src": "23038:21:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_array$_t_struct$_Signer_$2324_storage_$dyn_storage_ptr_$_t_struct$_Signer_$2324_storage_$returns$__$attached_to$_t_array$_t_struct$_Signer_$2324_storage_$dyn_storage_ptr_$",
                              "typeString": "function (struct ManyChainMultiSig.Signer storage ref[] storage pointer,struct ManyChainMultiSig.Signer storage ref)"
                            }
                          },
                          "id": 3098,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23038:29:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3099,
                        "nodeType": "ExpressionStatement",
                        "src": "23038:29:8"
                      },
                      {
                        "expression": {
                          "id": 3104,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3100,
                            "name": "prevSigner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3041,
                            "src": "23081:10:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "baseExpression": {
                              "id": 3101,
                              "name": "signerAddresses",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2813,
                              "src": "23094:15:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                "typeString": "address[] calldata"
                              }
                            },
                            "id": 3103,
                            "indexExpression": {
                              "id": 3102,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3048,
                              "src": "23110:1:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "23094:18:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "23081:31:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3105,
                        "nodeType": "ExpressionStatement",
                        "src": "23081:31:8"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 3054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 3051,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3048,
                      "src": "22678:1:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 3052,
                        "name": "signerAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2813,
                        "src": "22682:15:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 3053,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "22698:6:8",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "22682:22:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22678:26:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3107,
                  "initializationExpression": {
                    "assignments": [
                      3048
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 3048,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "22671:1:8",
                        "nodeType": "VariableDeclaration",
                        "scope": 3107,
                        "src": "22663:9:8",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 3047,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22663:7:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 3050,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 3049,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22675:1:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "22663:13:8"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 3056,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "22706:3:8",
                      "subExpression": {
                        "id": 3055,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3048,
                        "src": "22706:1:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 3057,
                    "nodeType": "ExpressionStatement",
                    "src": "22706:3:8"
                  },
                  "nodeType": "ForStatement",
                  "src": "22658:465:8"
                },
                {
                  "condition": {
                    "id": 3108,
                    "name": "clearRoot",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2826,
                    "src": "23137:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3137,
                  "nodeType": "IfStatement",
                  "src": "23133:553:8",
                  "trueBody": {
                    "id": 3136,
                    "nodeType": "Block",
                    "src": "23148:538:8",
                    "statements": [
                      {
                        "assignments": [
                          3110
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 3110,
                            "mutability": "mutable",
                            "name": "opCount",
                            "nameLocation": "23251:7:8",
                            "nodeType": "VariableDeclaration",
                            "scope": 3136,
                            "src": "23244:14:8",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint40",
                              "typeString": "uint40"
                            },
                            "typeName": {
                              "id": 3109,
                              "name": "uint40",
                              "nodeType": "ElementaryTypeName",
                              "src": "23244:6:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint40",
                                "typeString": "uint40"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 3113,
                        "initialValue": {
                          "expression": {
                            "id": 3111,
                            "name": "s_expiringRootAndOpCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2359,
                            "src": "23261:24:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
                              "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount storage ref"
                            }
                          },
                          "id": 3112,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "23286:7:8",
                          "memberName": "opCount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2355,
                          "src": "23261:32:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint40",
                            "typeString": "uint40"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "23244:49:8"
                      },
                      {
                        "expression": {
                          "id": 3120,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3114,
                            "name": "s_expiringRootAndOpCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2359,
                            "src": "23307:24:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
                              "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "hexValue": "30",
                                "id": 3116,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "23380:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              {
                                "hexValue": "30",
                                "id": 3117,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "23395:1:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              {
                                "id": 3118,
                                "name": "opCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3110,
                                "src": "23407:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint40",
                                  "typeString": "uint40"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                {
                                  "typeIdentifier": "t_uint40",
                                  "typeString": "uint40"
                                }
                              ],
                              "id": 3115,
                              "name": "ExpiringRootAndOpCount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2356,
                              "src": "23350:22:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_ExpiringRootAndOpCount_$2356_storage_ptr_$",
                                "typeString": "type(struct ManyChainMultiSig.ExpiringRootAndOpCount storage pointer)"
                              }
                            },
                            "id": 3119,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "nameLocations": [
                              "23374:4:8",
                              "23383:10:8",
                              "23398:7:8"
                            ],
                            "names": [
                              "root",
                              "validUntil",
                              "opCount"
                            ],
                            "nodeType": "FunctionCall",
                            "src": "23350:66:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                              "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount memory"
                            }
                          },
                          "src": "23307:109:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
                            "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount storage ref"
                          }
                        },
                        "id": 3121,
                        "nodeType": "ExpressionStatement",
                        "src": "23307:109:8"
                      },
                      {
                        "expression": {
                          "id": 3134,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 3122,
                            "name": "s_rootMetadata",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2373,
                            "src": "23430:14:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RootMetadata_$2370_storage",
                              "typeString": "struct ManyChainMultiSig.RootMetadata storage ref"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 3124,
                                  "name": "block",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -4,
                                  "src": "23487:5:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_block",
                                    "typeString": "block"
                                  }
                                },
                                "id": 3125,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "23493:7:8",
                                "memberName": "chainid",
                                "nodeType": "MemberAccess",
                                "src": "23487:13:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "arguments": [
                                  {
                                    "id": 3128,
                                    "name": "this",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -28,
                                    "src": "23536:4:8",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ManyChainMultiSig_$3318",
                                      "typeString": "contract ManyChainMultiSig"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ManyChainMultiSig_$3318",
                                      "typeString": "contract ManyChainMultiSig"
                                    }
                                  ],
                                  "id": 3127,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "23528:7:8",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": {
                                    "id": 3126,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "23528:7:8",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 3129,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "23528:13:8",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 3130,
                                "name": "opCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3110,
                                "src": "23571:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint40",
                                  "typeString": "uint40"
                                }
                              },
                              {
                                "id": 3131,
                                "name": "opCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3110,
                                "src": "23609:7:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint40",
                                  "typeString": "uint40"
                                }
                              },
                              {
                                "hexValue": "74727565",
                                "id": 3132,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "23656:4:8",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint40",
                                  "typeString": "uint40"
                                },
                                {
                                  "typeIdentifier": "t_uint40",
                                  "typeString": "uint40"
                                },
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "id": 3123,
                              "name": "RootMetadata",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2370,
                              "src": "23447:12:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_struct$_RootMetadata_$2370_storage_ptr_$",
                                "typeString": "type(struct ManyChainMultiSig.RootMetadata storage pointer)"
                              }
                            },
                            "id": 3133,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "structConstructorCall",
                            "lValueRequested": false,
                            "nameLocations": [
                              "23478:7:8",
                              "23518:8:8",
                              "23559:10:8",
                              "23596:11:8",
                              "23634:20:8"
                            ],
                            "names": [
                              "chainId",
                              "multiSig",
                              "preOpCount",
                              "postOpCount",
                              "overridePreviousRoot"
                            ],
                            "nodeType": "FunctionCall",
                            "src": "23447:228:8",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_RootMetadata_$2370_memory_ptr",
                              "typeString": "struct ManyChainMultiSig.RootMetadata memory"
                            }
                          },
                          "src": "23430:245:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_RootMetadata_$2370_storage",
                            "typeString": "struct ManyChainMultiSig.RootMetadata storage ref"
                          }
                        },
                        "id": 3135,
                        "nodeType": "ExpressionStatement",
                        "src": "23430:245:8"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 3139,
                        "name": "s_config",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2345,
                        "src": "23710:8:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Config_$2342_storage",
                          "typeString": "struct ManyChainMultiSig.Config storage ref"
                        }
                      },
                      {
                        "id": 3140,
                        "name": "clearRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2826,
                        "src": "23720:9:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Config_$2342_storage",
                          "typeString": "struct ManyChainMultiSig.Config storage ref"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 3138,
                      "name": "ConfigSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3238,
                      "src": "23700:9:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_struct$_Config_$2342_memory_ptr_$_t_bool_$returns$__$",
                        "typeString": "function (struct ManyChainMultiSig.Config memory,bool)"
                      }
                    },
                    "id": 3141,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23700:30:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 3142,
                  "nodeType": "EmitStatement",
                  "src": "23695:35:8"
                }
              ]
            },
            "documentation": {
              "id": 2810,
              "nodeType": "StructuredDocumentation",
              "src": "18480:1191:8",
              "text": "@notice sets a new s_config. If clearRoot is true, then it also invalidates\n s_expiringRootAndOpCount.root.\n @param signerAddresses holds the addresses of the active signers. The addresses must be in\n ascending order.\n @param signerGroups maps each signer to its group\n @param groupQuorums holds the required number of valid signatures in each group.\n A group i is called successful group if at least groupQuorum[i] distinct signers provide a\n valid signature.\n @param groupParents holds each group's parent. The groups must be arranged in a tree s.t.\n group 0 is the root of the tree and the i-th group's parent has index j less than i.\n Iff setRoot is called with a set of signatures that causes the root group to be successful,\n setRoot allows a root to be set.\n @param clearRoot, if set to true, invalidates the current root. This option is needed to\n invalidate the current root, so to prevent further ops from being executed. This\n might be used when the current root was signed under a loser group configuration or when\n some previous signers aren't trusted any more."
            },
            "functionSelector": "846c67ef",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 2829,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 2828,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "19915:9:8"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 31,
                  "src": "19915:9:8"
                },
                "nodeType": "ModifierInvocation",
                "src": "19915:9:8"
              }
            ],
            "name": "setConfig",
            "nameLocation": "19685:9:8",
            "parameters": {
              "id": 2827,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2813,
                  "mutability": "mutable",
                  "name": "signerAddresses",
                  "nameLocation": "19723:15:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3144,
                  "src": "19704:34:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2811,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "19704:7:8",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 2812,
                    "nodeType": "ArrayTypeName",
                    "src": "19704:9:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2816,
                  "mutability": "mutable",
                  "name": "signerGroups",
                  "nameLocation": "19765:12:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3144,
                  "src": "19748:29:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint8_$dyn_calldata_ptr",
                    "typeString": "uint8[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2814,
                      "name": "uint8",
                      "nodeType": "ElementaryTypeName",
                      "src": "19748:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 2815,
                    "nodeType": "ArrayTypeName",
                    "src": "19748:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint8_$dyn_storage_ptr",
                      "typeString": "uint8[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2820,
                  "mutability": "mutable",
                  "name": "groupQuorums",
                  "nameLocation": "19814:12:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3144,
                  "src": "19787:39:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint8_$32_calldata_ptr",
                    "typeString": "uint8[32]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2817,
                      "name": "uint8",
                      "nodeType": "ElementaryTypeName",
                      "src": "19787:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 2819,
                    "length": {
                      "id": 2818,
                      "name": "NUM_GROUPS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2314,
                      "src": "19793:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "19787:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint8_$32_storage_ptr",
                      "typeString": "uint8[32]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2824,
                  "mutability": "mutable",
                  "name": "groupParents",
                  "nameLocation": "19863:12:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3144,
                  "src": "19836:39:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint8_$32_calldata_ptr",
                    "typeString": "uint8[32]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2821,
                      "name": "uint8",
                      "nodeType": "ElementaryTypeName",
                      "src": "19836:5:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 2823,
                    "length": {
                      "id": 2822,
                      "name": "NUM_GROUPS",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2314,
                      "src": "19842:10:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "19836:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint8_$32_storage_ptr",
                      "typeString": "uint8[32]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2826,
                  "mutability": "mutable",
                  "name": "clearRoot",
                  "nameLocation": "19890:9:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3144,
                  "src": "19885:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2825,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "19885:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19694:211:8"
            },
            "returnParameters": {
              "id": 2830,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19925:0:8"
            },
            "scope": 3318,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 3174,
            "nodeType": "FunctionDefinition",
            "src": "23862:242:8",
            "nodes": [],
            "body": {
              "id": 3173,
              "nodeType": "Block",
              "src": "23949:155:8",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    3155,
                    3157
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3155,
                      "mutability": "mutable",
                      "name": "success",
                      "nameLocation": "23965:7:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 3173,
                      "src": "23960:12:8",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 3154,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "23960:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 3157,
                      "mutability": "mutable",
                      "name": "ret",
                      "nameLocation": "23987:3:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 3173,
                      "src": "23974:16:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 3156,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "23974:5:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3164,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 3162,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 3151,
                        "src": "24020:4:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_calldata_ptr",
                            "typeString": "bytes calldata"
                          }
                        ],
                        "expression": {
                          "id": 3158,
                          "name": "target",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3147,
                          "src": "23994:6:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 3159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "24001:4:8",
                        "memberName": "call",
                        "nodeType": "MemberAccess",
                        "src": "23994:11:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                          "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                        }
                      },
                      "id": 3161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "names": [
                        "value"
                      ],
                      "nodeType": "FunctionCallOptions",
                      "options": [
                        {
                          "id": 3160,
                          "name": "value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3149,
                          "src": "24013:5:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "src": "23994:25:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                        "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                      }
                    },
                    "id": 3163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23994:31:8",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                      "typeString": "tuple(bool,bytes memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23959:66:8"
                },
                {
                  "condition": {
                    "id": 3166,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "24039:8:8",
                    "subExpression": {
                      "id": 3165,
                      "name": "success",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3155,
                      "src": "24040:7:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 3172,
                  "nodeType": "IfStatement",
                  "src": "24035:63:8",
                  "trueBody": {
                    "id": 3171,
                    "nodeType": "Block",
                    "src": "24049:49:8",
                    "statements": [
                      {
                        "errorCall": {
                          "arguments": [
                            {
                              "id": 3168,
                              "name": "ret",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 3157,
                              "src": "24083:3:8",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 3167,
                            "name": "CallReverted",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 3308,
                            "src": "24070:12:8",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_error_pure$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (bytes memory) pure"
                            }
                          },
                          "id": 3169,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24070:17:8",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 3170,
                        "nodeType": "RevertStatement",
                        "src": "24063:24:8"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 3145,
              "nodeType": "StructuredDocumentation",
              "src": "23743:114:8",
              "text": "@notice Execute an op's call. Performs a raw call that always succeeds if the\n target isn't a contract."
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_execute",
            "nameLocation": "23871:8:8",
            "parameters": {
              "id": 3152,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3147,
                  "mutability": "mutable",
                  "name": "target",
                  "nameLocation": "23888:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3174,
                  "src": "23880:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3146,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23880:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3149,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "23904:5:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3174,
                  "src": "23896:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3148,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23896:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3151,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "23926:4:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3174,
                  "src": "23911:19:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3150,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "23911:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23879:52:8"
            },
            "returnParameters": {
              "id": 3153,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23949:0:8"
            },
            "scope": 3318,
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "id": 3183,
            "nodeType": "FunctionDefinition",
            "src": "24141:89:8",
            "nodes": [],
            "body": {
              "id": 3182,
              "nodeType": "Block",
              "src": "24198:32:8",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 3180,
                    "name": "s_config",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2345,
                    "src": "24215:8:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Config_$2342_storage",
                      "typeString": "struct ManyChainMultiSig.Config storage ref"
                    }
                  },
                  "functionReturnParameters": 3179,
                  "id": 3181,
                  "nodeType": "Return",
                  "src": "24208:15:8"
                }
              ]
            },
            "functionSelector": "c3f909d4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getConfig",
            "nameLocation": "24150:9:8",
            "parameters": {
              "id": 3175,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24159:2:8"
            },
            "returnParameters": {
              "id": 3179,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3178,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3183,
                  "src": "24183:13:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Config_$2342_memory_ptr",
                    "typeString": "struct ManyChainMultiSig.Config"
                  },
                  "typeName": {
                    "id": 3177,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3176,
                      "name": "Config",
                      "nameLocations": [
                        "24183:6:8"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2342,
                      "src": "24183:6:8"
                    },
                    "referencedDeclaration": 2342,
                    "src": "24183:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Config_$2342_storage_ptr",
                      "typeString": "struct ManyChainMultiSig.Config"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24182:15:8"
            },
            "scope": 3318,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 3192,
            "nodeType": "FunctionDefinition",
            "src": "24236:107:8",
            "nodes": [],
            "body": {
              "id": 3191,
              "nodeType": "Block",
              "src": "24287:56:8",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 3188,
                      "name": "s_expiringRootAndOpCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2359,
                      "src": "24304:24:8",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
                        "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount storage ref"
                      }
                    },
                    "id": 3189,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberLocation": "24329:7:8",
                    "memberName": "opCount",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 2355,
                    "src": "24304:32:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "functionReturnParameters": 3187,
                  "id": 3190,
                  "nodeType": "Return",
                  "src": "24297:39:8"
                }
              ]
            },
            "functionSelector": "627e8a3b",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getOpCount",
            "nameLocation": "24245:10:8",
            "parameters": {
              "id": 3184,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24255:2:8"
            },
            "returnParameters": {
              "id": 3187,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3186,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3192,
                  "src": "24279:6:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 3185,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "24279:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24278:8:8"
            },
            "scope": 3318,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 3211,
            "nodeType": "FunctionDefinition",
            "src": "24349:247:8",
            "nodes": [],
            "body": {
              "id": 3210,
              "nodeType": "Block",
              "src": "24422:174:8",
              "nodes": [],
              "statements": [
                {
                  "assignments": [
                    3201
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 3201,
                      "mutability": "mutable",
                      "name": "currentRootAndOpCount",
                      "nameLocation": "24462:21:8",
                      "nodeType": "VariableDeclaration",
                      "scope": 3210,
                      "src": "24432:51:8",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                        "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount"
                      },
                      "typeName": {
                        "id": 3200,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 3199,
                          "name": "ExpiringRootAndOpCount",
                          "nameLocations": [
                            "24432:22:8"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 2356,
                          "src": "24432:22:8"
                        },
                        "referencedDeclaration": 2356,
                        "src": "24432:22:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage_ptr",
                          "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 3203,
                  "initialValue": {
                    "id": 3202,
                    "name": "s_expiringRootAndOpCount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2359,
                    "src": "24486:24:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_storage",
                      "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24432:78:8"
                },
                {
                  "expression": {
                    "components": [
                      {
                        "expression": {
                          "id": 3204,
                          "name": "currentRootAndOpCount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "24528:21:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                            "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount memory"
                          }
                        },
                        "id": 3205,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "24550:4:8",
                        "memberName": "root",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2351,
                        "src": "24528:26:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 3206,
                          "name": "currentRootAndOpCount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 3201,
                          "src": "24556:21:8",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ExpiringRootAndOpCount_$2356_memory_ptr",
                            "typeString": "struct ManyChainMultiSig.ExpiringRootAndOpCount memory"
                          }
                        },
                        "id": 3207,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "24578:10:8",
                        "memberName": "validUntil",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2353,
                        "src": "24556:32:8",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "id": 3208,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "24527:62:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes32_$_t_uint32_$",
                      "typeString": "tuple(bytes32,uint32)"
                    }
                  },
                  "functionReturnParameters": 3198,
                  "id": 3209,
                  "nodeType": "Return",
                  "src": "24520:69:8"
                }
              ]
            },
            "functionSelector": "5ca1e165",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRoot",
            "nameLocation": "24358:7:8",
            "parameters": {
              "id": 3193,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24365:2:8"
            },
            "returnParameters": {
              "id": 3198,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3195,
                  "mutability": "mutable",
                  "name": "root",
                  "nameLocation": "24397:4:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3211,
                  "src": "24389:12:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3194,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "24389:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3197,
                  "mutability": "mutable",
                  "name": "validUntil",
                  "nameLocation": "24410:10:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3211,
                  "src": "24403:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 3196,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "24403:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24388:33:8"
            },
            "scope": 3318,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 3220,
            "nodeType": "FunctionDefinition",
            "src": "24602:107:8",
            "nodes": [],
            "body": {
              "id": 3219,
              "nodeType": "Block",
              "src": "24671:38:8",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "id": 3217,
                    "name": "s_rootMetadata",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2373,
                    "src": "24688:14:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RootMetadata_$2370_storage",
                      "typeString": "struct ManyChainMultiSig.RootMetadata storage ref"
                    }
                  },
                  "functionReturnParameters": 3216,
                  "id": 3218,
                  "nodeType": "Return",
                  "src": "24681:21:8"
                }
              ]
            },
            "functionSelector": "6b45fb3e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getRootMetadata",
            "nameLocation": "24611:15:8",
            "parameters": {
              "id": 3212,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24626:2:8"
            },
            "returnParameters": {
              "id": 3216,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3215,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 3220,
                  "src": "24650:19:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RootMetadata_$2370_memory_ptr",
                    "typeString": "struct ManyChainMultiSig.RootMetadata"
                  },
                  "typeName": {
                    "id": 3214,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3213,
                      "name": "RootMetadata",
                      "nameLocations": [
                        "24650:12:8"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2370,
                      "src": "24650:12:8"
                    },
                    "referencedDeclaration": 2370,
                    "src": "24650:12:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RootMetadata_$2370_storage_ptr",
                      "typeString": "struct ManyChainMultiSig.RootMetadata"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24649:21:8"
            },
            "scope": 3318,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 3230,
            "nodeType": "EventDefinition",
            "src": "24804:78:8",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 3221,
              "nodeType": "StructuredDocumentation",
              "src": "24756:43:8",
              "text": "@notice Emitted when a new root is set."
            },
            "eventSelector": "7ea643ae44677f24e0d6f40168893712daaf729b0a38fe7702d21cb544c84101",
            "name": "NewRoot",
            "nameLocation": "24810:7:8",
            "parameters": {
              "id": 3229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3223,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "root",
                  "nameLocation": "24834:4:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3230,
                  "src": "24818:20:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 3222,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "24818:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3225,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "validUntil",
                  "nameLocation": "24847:10:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3230,
                  "src": "24840:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 3224,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "24840:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3228,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "metadata",
                  "nameLocation": "24872:8:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3230,
                  "src": "24859:21:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_RootMetadata_$2370_memory_ptr",
                    "typeString": "struct ManyChainMultiSig.RootMetadata"
                  },
                  "typeName": {
                    "id": 3227,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3226,
                      "name": "RootMetadata",
                      "nameLocations": [
                        "24859:12:8"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2370,
                      "src": "24859:12:8"
                    },
                    "referencedDeclaration": 2370,
                    "src": "24859:12:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_RootMetadata_$2370_storage_ptr",
                      "typeString": "struct ManyChainMultiSig.RootMetadata"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24817:64:8"
            }
          },
          {
            "id": 3238,
            "nodeType": "EventDefinition",
            "src": "24938:51:8",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 3231,
              "nodeType": "StructuredDocumentation",
              "src": "24888:45:8",
              "text": "@notice Emitted when a new config is set."
            },
            "eventSelector": "0a4974ad206b9c736f9ab2feac1c9b1d043fe4ef377c70ae45659f2ef089f03e",
            "name": "ConfigSet",
            "nameLocation": "24944:9:8",
            "parameters": {
              "id": 3237,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3234,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "config",
                  "nameLocation": "24961:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3238,
                  "src": "24954:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Config_$2342_memory_ptr",
                    "typeString": "struct ManyChainMultiSig.Config"
                  },
                  "typeName": {
                    "id": 3233,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 3232,
                      "name": "Config",
                      "nameLocations": [
                        "24954:6:8"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 2342,
                      "src": "24954:6:8"
                    },
                    "referencedDeclaration": 2342,
                    "src": "24954:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Config_$2342_storage_ptr",
                      "typeString": "struct ManyChainMultiSig.Config"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3236,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "isRootCleared",
                  "nameLocation": "24974:13:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3238,
                  "src": "24969:18:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 3235,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24969:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24953:35:8"
            }
          },
          {
            "id": 3249,
            "nodeType": "EventDefinition",
            "src": "25058:78:8",
            "nodes": [],
            "anonymous": false,
            "documentation": {
              "id": 3239,
              "nodeType": "StructuredDocumentation",
              "src": "24995:58:8",
              "text": "@notice Emitted when an op gets successfully executed."
            },
            "eventSelector": "87d58fdd48be753fb9ef4ec8a5895086c401506da8b4d752abc90602c3e62d1d",
            "name": "OpExecuted",
            "nameLocation": "25064:10:8",
            "parameters": {
              "id": 3248,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3241,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nameLocation": "25090:5:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3249,
                  "src": "25075:20:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint40",
                    "typeString": "uint40"
                  },
                  "typeName": {
                    "id": 3240,
                    "name": "uint40",
                    "nodeType": "ElementaryTypeName",
                    "src": "25075:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint40",
                      "typeString": "uint40"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3243,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "25105:2:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3249,
                  "src": "25097:10:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 3242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "25097:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3245,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "25115:4:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3249,
                  "src": "25109:10:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3244,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "25109:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 3247,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "25129:5:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3249,
                  "src": "25121:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 3246,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25121:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "25074:61:8"
            }
          },
          {
            "id": 3252,
            "nodeType": "ErrorDefinition",
            "src": "25226:32:8",
            "nodes": [],
            "documentation": {
              "id": 3250,
              "nodeType": "StructuredDocumentation",
              "src": "25142:79:8",
              "text": "@notice Thrown when number of signers is 0 or greater than MAX_NUM_SIGNERS."
            },
            "errorSelector": "f0ec1ca4",
            "name": "OutOfBoundsNumOfSigners",
            "nameLocation": "25232:23:8",
            "parameters": {
              "id": 3251,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25255:2:8"
            }
          },
          {
            "id": 3255,
            "nodeType": "ErrorDefinition",
            "src": "25349:35:8",
            "nodes": [],
            "documentation": {
              "id": 3253,
              "nodeType": "StructuredDocumentation",
              "src": "25264:80:8",
              "text": "@notice Thrown when signerAddresses and signerGroups have different lengths."
            },
            "errorSelector": "f1f30530",
            "name": "SignerGroupsLengthMismatch",
            "nameLocation": "25355:26:8",
            "parameters": {
              "id": 3254,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25381:2:8"
            }
          },
          {
            "id": 3258,
            "nodeType": "ErrorDefinition",
            "src": "25480:25:8",
            "nodes": [],
            "documentation": {
              "id": 3256,
              "nodeType": "StructuredDocumentation",
              "src": "25390:85:8",
              "text": "@notice Thrown when number of some signer's group is greater than (NUM_GROUPS-1)."
            },
            "errorSelector": "b9ae8e52",
            "name": "OutOfBoundsGroup",
            "nameLocation": "25486:16:8",
            "parameters": {
              "id": 3257,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25502:2:8"
            }
          },
          {
            "id": 3261,
            "nodeType": "ErrorDefinition",
            "src": "25573:31:8",
            "nodes": [],
            "documentation": {
              "id": 3259,
              "nodeType": "StructuredDocumentation",
              "src": "25511:57:8",
              "text": "@notice Thrown when the group tree isn't well-formed."
            },
            "errorSelector": "ff063a26",
            "name": "GroupTreeNotWellFormed",
            "nameLocation": "25579:22:8",
            "parameters": {
              "id": 3260,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25601:2:8"
            }
          },
          {
            "id": 3264,
            "nodeType": "ErrorDefinition",
            "src": "25707:31:8",
            "nodes": [],
            "documentation": {
              "id": 3262,
              "nodeType": "StructuredDocumentation",
              "src": "25610:92:8",
              "text": "@notice Thrown when the quorum of some group is larger than the number of signers in it."
            },
            "errorSelector": "bb00136e",
            "name": "OutOfBoundsGroupQuorum",
            "nameLocation": "25713:22:8",
            "parameters": {
              "id": 3263,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25735:2:8"
            }
          },
          {
            "id": 3267,
            "nodeType": "ErrorDefinition",
            "src": "25808:30:8",
            "nodes": [],
            "documentation": {
              "id": 3265,
              "nodeType": "StructuredDocumentation",
              "src": "25744:59:8",
              "text": "@notice Thrown when a disabled group contains a signer."
            },
            "errorSelector": "8db4e75d",
            "name": "SignerInDisabledGroup",
            "nameLocation": "25814:21:8",
            "parameters": {
              "id": 3266,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25835:2:8"
            }
          },
          {
            "id": 3270,
            "nodeType": "ErrorDefinition",
            "src": "26009:49:8",
            "nodes": [],
            "documentation": {
              "id": 3268,
              "nodeType": "StructuredDocumentation",
              "src": "25844:160:8",
              "text": "@notice Thrown when the signers' addresses are not a strictly increasing monotone sequence.\n Prevents signers from including more than one signature."
            },
            "errorSelector": "4a36ec08",
            "name": "SignersAddressesMustBeStrictlyIncreasing",
            "nameLocation": "26015:40:8",
            "parameters": {
              "id": 3269,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26055:2:8"
            }
          },
          {
            "id": 3273,
            "nodeType": "ErrorDefinition",
            "src": "26137:22:8",
            "nodes": [],
            "documentation": {
              "id": 3271,
              "nodeType": "StructuredDocumentation",
              "src": "26064:68:8",
              "text": "@notice Thrown when the signature corresponds to invalid signer."
            },
            "errorSelector": "815e1d64",
            "name": "InvalidSigner",
            "nameLocation": "26143:13:8",
            "parameters": {
              "id": 3272,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26156:2:8"
            }
          },
          {
            "id": 3276,
            "nodeType": "ErrorDefinition",
            "src": "26292:28:8",
            "nodes": [],
            "documentation": {
              "id": 3274,
              "nodeType": "StructuredDocumentation",
              "src": "26165:122:8",
              "text": "@notice Thrown when there is no sufficient set of valid signatures provided to make the\n root group successful."
            },
            "errorSelector": "c2ee9b9e",
            "name": "InsufficientSigners",
            "nameLocation": "26298:19:8",
            "parameters": {
              "id": 3275,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26317:2:8"
            }
          },
          {
            "id": 3279,
            "nodeType": "ErrorDefinition",
            "src": "26411:21:8",
            "nodes": [],
            "documentation": {
              "id": 3277,
              "nodeType": "StructuredDocumentation",
              "src": "26326:80:8",
              "text": "@notice Thrown when attempt to set metadata or execute op for another chain."
            },
            "errorSelector": "5f87bc00",
            "name": "WrongChainId",
            "nameLocation": "26417:12:8",
            "parameters": {
              "id": 3278,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26429:2:8"
            }
          },
          {
            "id": 3282,
            "nodeType": "ErrorDefinition",
            "src": "26564:22:8",
            "nodes": [],
            "documentation": {
              "id": 3280,
              "nodeType": "StructuredDocumentation",
              "src": "26438:121:8",
              "text": "@notice Thrown when the multiSig address in metadata or op is\n incompatible with the address of this contract."
            },
            "errorSelector": "9a846015",
            "name": "WrongMultiSig",
            "nameLocation": "26570:13:8",
            "parameters": {
              "id": 3281,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26583:2:8"
            }
          },
          {
            "id": 3285,
            "nodeType": "ErrorDefinition",
            "src": "26673:25:8",
            "nodes": [],
            "documentation": {
              "id": 3283,
              "nodeType": "StructuredDocumentation",
              "src": "26592:76:8",
              "text": "@notice Thrown when the preOpCount <= postOpCount invariant is violated."
            },
            "errorSelector": "c61352f8",
            "name": "WrongPostOpCount",
            "nameLocation": "26679:16:8",
            "parameters": {
              "id": 3284,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26695:2:8"
            }
          },
          {
            "id": 3288,
            "nodeType": "ErrorDefinition",
            "src": "26860:19:8",
            "nodes": [],
            "documentation": {
              "id": 3286,
              "nodeType": "StructuredDocumentation",
              "src": "26704:151:8",
              "text": "@notice Thrown when attempting to set a new root while there are still pending ops\n from the previous root without explicitly overriding it."
            },
            "errorSelector": "3230825b",
            "name": "PendingOps",
            "nameLocation": "26866:10:8",
            "parameters": {
              "id": 3287,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26876:2:8"
            }
          },
          {
            "id": 3291,
            "nodeType": "ErrorDefinition",
            "src": "26978:24:8",
            "nodes": [],
            "documentation": {
              "id": 3289,
              "nodeType": "StructuredDocumentation",
              "src": "26885:88:8",
              "text": "@notice Thrown when preOpCount in metadata is incompatible with the current opCount."
            },
            "errorSelector": "a255a763",
            "name": "WrongPreOpCount",
            "nameLocation": "26984:15:8",
            "parameters": {
              "id": 3290,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26999:2:8"
            }
          },
          {
            "id": 3294,
            "nodeType": "ErrorDefinition",
            "src": "27082:30:8",
            "nodes": [],
            "documentation": {
              "id": 3292,
              "nodeType": "StructuredDocumentation",
              "src": "27008:69:8",
              "text": "@notice Thrown when the provided merkle proof cannot be verified."
            },
            "errorSelector": "2522a1c0",
            "name": "ProofCannotBeVerified",
            "nameLocation": "27088:21:8",
            "parameters": {
              "id": 3293,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27109:2:8"
            }
          },
          {
            "id": 3297,
            "nodeType": "ErrorDefinition",
            "src": "27233:20:8",
            "nodes": [],
            "documentation": {
              "id": 3295,
              "nodeType": "StructuredDocumentation",
              "src": "27118:110:8",
              "text": "@notice Thrown when attempt to execute an op after\n s_expiringRootAndOpCount.validUntil has passed."
            },
            "errorSelector": "9ba67430",
            "name": "RootExpired",
            "nameLocation": "27239:11:8",
            "parameters": {
              "id": 3296,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27250:2:8"
            }
          },
          {
            "id": 3300,
            "nodeType": "ErrorDefinition",
            "src": "27377:19:8",
            "nodes": [],
            "documentation": {
              "id": 3298,
              "nodeType": "StructuredDocumentation",
              "src": "27259:113:8",
              "text": "@notice Thrown when attempt to bypass the enforced ops' order in the merkle tree or\n re-execute an op."
            },
            "errorSelector": "d9c6386f",
            "name": "WrongNonce",
            "nameLocation": "27383:10:8",
            "parameters": {
              "id": 3299,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27393:2:8"
            }
          },
          {
            "id": 3303,
            "nodeType": "ErrorDefinition",
            "src": "27515:27:8",
            "nodes": [],
            "documentation": {
              "id": 3301,
              "nodeType": "StructuredDocumentation",
              "src": "27402:108:8",
              "text": "@notice Thrown when attempting to execute an op even though opCount equals\n metadata.postOpCount."
            },
            "errorSelector": "adb13318",
            "name": "PostOpCountReached",
            "nameLocation": "27521:18:8",
            "parameters": {
              "id": 3302,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27539:2:8"
            }
          },
          {
            "id": 3308,
            "nodeType": "ErrorDefinition",
            "src": "27619:32:8",
            "nodes": [],
            "documentation": {
              "id": 3304,
              "nodeType": "StructuredDocumentation",
              "src": "27548:66:8",
              "text": "@notice Thrown when the underlying call in _execute() reverts."
            },
            "errorSelector": "70de1b4b",
            "name": "CallReverted",
            "nameLocation": "27625:12:8",
            "parameters": {
              "id": 3307,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 3306,
                  "mutability": "mutable",
                  "name": "error",
                  "nameLocation": "27644:5:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 3308,
                  "src": "27638:11:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 3305,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "27638:5:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "27637:13:8"
            }
          },
          {
            "id": 3311,
            "nodeType": "ErrorDefinition",
            "src": "27730:35:8",
            "nodes": [],
            "documentation": {
              "id": 3309,
              "nodeType": "StructuredDocumentation",
              "src": "27657:68:8",
              "text": "@notice Thrown when attempt to set past validUntil for the root."
            },
            "errorSelector": "b057a452",
            "name": "ValidUntilHasAlreadyPassed",
            "nameLocation": "27736:26:8",
            "parameters": {
              "id": 3310,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27762:2:8"
            }
          },
          {
            "id": 3314,
            "nodeType": "ErrorDefinition",
            "src": "27844:22:8",
            "nodes": [],
            "documentation": {
              "id": 3312,
              "nodeType": "StructuredDocumentation",
              "src": "27771:68:8",
              "text": "@notice Thrown when setRoot() is called before setting a config."
            },
            "errorSelector": "aa6185ca",
            "name": "MissingConfig",
            "nameLocation": "27850:13:8",
            "parameters": {
              "id": 3313,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27863:2:8"
            }
          },
          {
            "id": 3317,
            "nodeType": "ErrorDefinition",
            "src": "27957:30:8",
            "nodes": [],
            "documentation": {
              "id": 3315,
              "nodeType": "StructuredDocumentation",
              "src": "27872:80:8",
              "text": "@notice Thrown when attempt to set the same (root, validUntil) in setRoot()."
            },
            "errorSelector": "48c2688b",
            "name": "SignedHashAlreadySeen",
            "nameLocation": "27963:21:8",
            "parameters": {
              "id": 3316,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27984:2:8"
            }
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 2306,
              "name": "Ownable2Step",
              "nameLocations": [
                "2885:12:8"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 195,
              "src": "2885:12:8"
            },
            "id": 2307,
            "nodeType": "InheritanceSpecifier",
            "src": "2885:12:8"
          }
        ],
        "canonicalName": "ManyChainMultiSig",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 2305,
          "nodeType": "StructuredDocumentation",
          "src": "874:1981:8",
          "text": "@notice This is a multi-sig contract that supports signing many transactions (called \"ops\" in\n the context of this contract to prevent confusion with transactions on the underlying chain)\n targeting many chains with a single set of signatures. Authorized ops along with some metadata\n are stored in a Merkle tree, which is generated offchain. Each op has an associated chain id,\n ManyChainMultiSig contract address and nonce. The nonce enables us to enforce the\n (per-ManyChainMultiSig contract instance) ordering of ops.\n At any time, this contract stores at most one Merkle root. In the typical case, all ops\n in the Merkle tree are expected to be executed before another root is set. Since the Merkle root\n itself reveals ~ no information about the tree's contents, we take two measures to improve\n transparency. First, we attach an expiration time to each Merkle root after which it cannot\n be used any more. Second, we embed metadata in the tree itself that has to be proven/revealed\n to the contract when a new root is set; the metadata contains the range of nonces (and thus\n number of ops) in the tree intended for the ManyChainMultiSig contract instance on which the\n root is being set.\n Once a root is registered, *anyone* is allowed to furnish proofs of op inclusion in the Merkle\n tree and execute the corresponding op. The contract enforces that ops are executed in the\n correct order and with the correct arguments. A notable exception to this is the gas limit of\n the call, which can be freely determined by the executor. We expect (transitive) callees to\n implement standard behavior of simply reverting if insufficient gas is provided. In particular,\n this means callees should not have non-reverting gas-dependent branches.\n Note: In the typical case, we expect the time from a root being set to all of the ops\n therein having been executed to be on the order of a couple of minutes."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          3318,
          195,
          112,
          217
        ],
        "name": "ManyChainMultiSig",
        "nameLocation": "2864:17:8",
        "scope": 3319,
        "usedErrors": [
          3252,
          3255,
          3258,
          3261,
          3264,
          3267,
          3270,
          3273,
          3276,
          3279,
          3282,
          3285,
          3288,
          3291,
          3294,
          3297,
          3300,
          3303,
          3308,
          3311,
          3314,
          3317
        ]
      }
    ],
    "license": "BUSL-1.1"
  },
  "id": 8
}