{
  "_format": "hh-sol-artifact-1",
  "contractName": "TimelockController",
  "sourceName": "contracts/governance/TimelockController.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "minDelay",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "proposers",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "executors",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "delay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minDelay",
          "type": "uint256"
        }
      ],
      "name": "TimelockInsufficientDelay",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "targets",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "payloads",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "values",
          "type": "uint256"
        }
      ],
      "name": "TimelockInvalidOperationLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        }
      ],
      "name": "TimelockUnauthorizedCaller",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "predecessorId",
          "type": "bytes32"
        }
      ],
      "name": "TimelockUnexecutedPredecessor",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "operationId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "expectedStates",
          "type": "bytes32"
        }
      ],
      "name": "TimelockUnexpectedOperationState",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "CallExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "CallSalt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "predecessor",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "delay",
          "type": "uint256"
        }
      ],
      "name": "CallScheduled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "Cancelled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldDuration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newDuration",
          "type": "uint256"
        }
      ],
      "name": "MinDelayChange",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CANCELLER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "EXECUTOR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PROPOSER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "cancel",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "payload",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "predecessor",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "execute",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "payloads",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "predecessor",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "executeBatch",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMinDelay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "getOperationState",
      "outputs": [
        {
          "internalType": "enum TimelockController.OperationState",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "getTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "predecessor",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "hashOperation",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "payloads",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "predecessor",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        }
      ],
      "name": "hashOperationBatch",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "isOperation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "isOperationDone",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "isOperationPending",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "isOperationReady",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onTRC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes32",
          "name": "predecessor",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "delay",
          "type": "uint256"
        }
      ],
      "name": "schedule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "payloads",
          "type": "bytes[]"
        },
        {
          "internalType": "bytes32",
          "name": "predecessor",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "delay",
          "type": "uint256"
        }
      ],
      "name": "scheduleBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newDelay",
          "type": "uint256"
        }
      ],
      "name": "updateDelay",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60806040523461017057d361017057d261017057611ba18038038061002381610174565b92833981019060808183031261017057805160208201519091906001600160401b03811161017057836100579183016101ca565b604082015190936001600160401b0382116101705761007d6060916100849385016101ca565b92016101ad565b61008d3061025c565b506001600160a01b038116610160575b505f5b83518110156100ea576001906100c86001600160a01b036100c18388610234565b51166102d2565b506100e3828060a01b036100dc8388610234565b5116610365565b50016100a0565b50905f5b825181101561011d576001906101166001600160a01b0361010f8387610234565b51166103f8565b50016100ee565b7f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5604083806002558151905f82526020820152a1604051611675908161048c8239f35b6101699061025c565b505f61009d565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761019957604052565b634e487b7160e01b5f52604160045260245ffd5b516001600160a81b0381168103610170576001600160a01b031690565b9080601f83011215610170578151916001600160401b038311610199578260051b906020806101fa818501610174565b80968152019282010192831161017057602001905b82821061021c5750505090565b60208091610229846101ad565b81520191019061020f565b80518210156102485760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b0381165f9081525f80516020611b81833981519152602052604090205460ff166102cd576001600160a01b03165f8181525f80516020611b8183398151915260205260408120805460ff191660011790553391905f80516020611b018339815191528180a4600190565b505f90565b6001600160a01b0381165f9081525f80516020611b21833981519152602052604090205460ff166102cd576001600160a01b03165f8181525f80516020611b2183398151915260205260408120805460ff191660011790553391907fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1905f80516020611b018339815191529080a4600190565b6001600160a01b0381165f9081525f80516020611b61833981519152602052604090205460ff166102cd576001600160a01b03165f8181525f80516020611b6183398151915260205260408120805460ff191660011790553391907ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783905f80516020611b018339815191529080a4600190565b6001600160a01b0381165f9081525f80516020611b41833981519152602052604090205460ff166102cd576001600160a01b03165f8181525f80516020611b4183398151915260205260408120805460ff191660011790553391907fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63905f80516020611b018339815191529080a460019056fe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301d5062a14610c1a57806301ffc9a714610ba057806307bd026514610b5c578063134008d314610aa957806313bc9f2014610a81578063248a9ca314610a4d5780632ab0f52914610a255780632f2ff15d146109de57806331d50750146109b657806336568abe146109685780635175f87814610909578063584b153e146108d757806364d62353146108685780637958004c1461081b5780638065657f146107f25780638f2a0bb0146106635780638f61f4f51461061f57806391d14854146105cd578063a217fddf146105a9578063b08e51c014610565578063b1c5f42714610531578063bc197c8114610492578063c4d252f5146103aa578063d45c443514610376578063d547741f14610328578063e38335e5146101dc578063f23a6e611461017d5763f27a0c920361000e573461017957d361017957d2610179575f366003190112610179576020600254604051908152f35b5f80fd5b3461017957d361017957d26101795760a0366003190112610179576101a0610ccf565b506101a9610cee565b506084356001600160401b038111610179576101c9903690600401610de1565b5060405163f23a6e6160e01b8152602090f35b6101e536610e57565b5f80527fdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d70696020527f5ba6852781629bcdcd4bdaa6de76d786f1c64b16acdac474e55bebc0ea1579515492979196919593949260ff161561031a575b828214801590610310575b6102f55761026261026991888a888789888d611121565b968761143a565b5f5b81811061027b57610018876114e5565b8080887fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5888886102ec6102d38f986001998f828e6102c68f836102c1916102cc966110a8565b6110cc565b976110a8565b35956110e0565b906102e082828787611492565b60405194859485610f84565b0390a30161026b565b50869063ffb0321160e01b5f5260045260245260445260645ffd5b508782141561024b565b6103233361136c565b610240565b3461017957d361017957d261017957604036600319011261017957610018600435610351610cee565b9061037161036a825f525f602052600160405f20015490565b33906113f2565b61158b565b3461017957d361017957d2610179576020366003190112610179576004355f526001602052602060405f2054604051908152f35b3461017957d361017957d261017957602036600319011261017957335f9081527fc3ad33e20b0c56a223ad5104fff154aa010f8715b9c981fd38fdc60a4d1a52fb60205260409020546004359060ff161561045b5761040881610ff2565b1561044157805f5260016020525f60408120557fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb705f80a2005b635ead8eb560e01b5f52600452600460021760245260445ffd5b63e2517d3f60e01b5f52336004527ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78360245260445ffd5b3461017957d361017957d26101795760a0366003190112610179576104b5610ccf565b506104be610cee565b506044356001600160401b038111610179576104de903690600401610ec5565b506064356001600160401b038111610179576104fe903690600401610ec5565b506084356001600160401b0381116101795761051e903690600401610de1565b5060405163bc197c8160e01b8152602090f35b3461017957d361017957d261017957602061055d61054e36610e57565b96959095949194939293611121565b604051908152f35b3461017957d361017957d2610179575f3660031901126101795760206040517ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f7838152f35b3461017957d361017957d2610179575f3660031901126101795760206040515f8152f35b3461017957d361017957d2610179576040366003190112610179576105f0610cee565b6004355f525f60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461017957d361017957d2610179575f3660031901126101795760206040517fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc18152f35b3461017957d361017957d26101795760c0366003190112610179576004356001600160401b0381116101795761069d903690600401610e27565b906024356001600160401b038111610179576106bd903690600401610e27565b6044929192356001600160401b038111610179576106df903690600401610e27565b9390916064356084359560a435926106f6336112e6565b8089148015906107e8575b6107ce5761071588848489858a8f8e611121565b98610720858b611273565b895f5b8281106107605750898061073357005b60207f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038791604051908152a2005b806001927f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b6107c38f8c6107b68f928e6107af8f8f906107a96102c18f80979481956110a8565b996110a8565b35976110e0565b9060405196879687610f4c565b0390a3018a90610723565b908863ffb0321160e01b5f5260045260245260445260645ffd5b5081891415610701565b3461017957d361017957d261017957602061055d61080f36610d3a565b94939093929192611053565b3461017957d361017957d26101795760203660031901126101795761084160043561101b565b6040516004821015610854576020918152f35b634e487b7160e01b5f52602160045260245ffd5b3461017957d361017957d2610179576020366003190112610179576004353033036108c4577f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d560406002548151908152836020820152a1600255005b63e2850c5960e01b5f523360045260245ffd5b3461017957d361017957d26101795760203660031901126101795760206108ff600435610ff2565b6040519015158152f35b3461017957d361017957d26101795760803660031901126101795761092c610ccf565b50610935610cee565b506064356001600160401b03811161017957610955903690600401610de1565b50604051630a2ebf0f60e31b8152602090f35b3461017957d361017957d26101795760403660031901126101795761098b610cee565b336001600160a01b038216036109a7576100189060043561158b565b63334bd91960e11b5f5260045ffd5b3461017957d361017957d26101795760203660031901126101795760206108ff600435610fdb565b3461017957d361017957d261017957604036600319011261017957610018600435610a07610cee565b90610a2061036a825f525f602052600160405f20015490565b611503565b3461017957d361017957d26101795760203660031901126101795760206108ff600435610fc3565b3461017957d361017957d261017957602036600319011261017957602061055d6004355f525f602052600160405f20015490565b3461017957d361017957d26101795760203660031901126101795760206108ff600435610fab565b610018610b3a5f610b467fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b58610b31610ae036610d3a565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e638a9995979299949394528960205260408a208a805260205260ff60408b20541615610b4e575b8884848989611053565b9889978861143a565b6102e082828787611492565b0390a36114e5565b610b573361136c565b610b27565b3461017957d361017957d2610179575f3660031901126101795760206040517fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e638152f35b3461017957d361017957d26101795760203660031901126101795760043563ffffffff60e01b811680910361017957602090630271189760e51b8114908115610bef575b506040519015158152f35b637965db0b60e01b811491508115610c09575b5082610be4565b6301ffc9a760e01b14905082610c02565b3461017957d361017957d26101795760c036600319011261017957610c3d610ccf565b602435906044356001600160401b038111610179577f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca92610c835f923690600401610d0d565b94909160643594610cc56084359660a43590610c9e336112e6565b610cac89828c8a8989611053565b998a97610cb9848a611273565b60405196879687610f4c565b0390a38061073357005b6004356001600160a81b0381168103610179576001600160a01b031690565b6024356001600160a81b0381168103610179576001600160a01b031690565b9181601f84011215610179578235916001600160401b038311610179576020838186019501011161017957565b60a0600319820112610179576004356001600160a81b0381168103610179576001600160a01b03169160243591604435906001600160401b03821161017957610d8591600401610d0d565b90916064359060843590565b90601f801991011681019081106001600160401b03821117610db257604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b038111610db257601f01601f191660200190565b81601f8201121561017957803590610df882610dc6565b92610e066040519485610d91565b8284526020838301011161017957815f926020809301838601378301015290565b9181601f84011215610179578235916001600160401b038311610179576020808501948460051b01011161017957565b60a0600319820112610179576004356001600160401b0381116101795781610e8191600401610e27565b929092916024356001600160401b0381116101795781610ea391600401610e27565b92909291604435906001600160401b03821161017957610d8591600401610e27565b9080601f83011215610179578135916001600160401b038311610db2578260051b9060405193610ef86020840186610d91565b845260208085019282010192831161017957602001905b828210610f1c5750505090565b8135815260209182019101610f0f565b908060209392818452848401375f828201840152601f01601f1916010190565b929093610f7a926080959897969860018060a01b03168552602085015260a0604085015260a0840191610f2c565b9460608201520152565b610fa8949260609260018060a01b0316825260208201528160408201520191610f2c565b90565b610fb49061101b565b60048110156108545760021490565b610fcc9061101b565b60048110156108545760031490565b610fe49061101b565b600481101561085457151590565b610ffb9061101b565b60048110156108545760018114908115611013575090565b600291501490565b5f52600160205260405f205480155f1461103457505f90565b600181036110425750600390565b42101561104e57600190565b600290565b946110896110a294959293604051968795602087019960018060a01b03168a52604087015260a0606087015260c0860191610f2c565b91608084015260a083015203601f198101835282610d91565b51902090565b91908110156110b85760051b0190565b634e487b7160e01b5f52603260045260245ffd5b356001600160a81b03811681036101795790565b91908110156110b85760051b81013590601e19813603018212156101795701908135916001600160401b038311610179576020018236038113610179579190565b9693949190969592956040519660208801988060c08a0160a08c525260e0890192905f905b80821061123d57505050878203601f190160408901528082526001600160fb1b038111610179579087959394929160051b8092602083013701848103606086015260208101849052600584901b8101604090810194908201915f90889036829003601e1901905b8484106111d7575050505050506110a29450608084015260a083015203601f198101835282610d91565b91939597909294969850601f19601f198383030101875289358381121561017957840190602082359201916001600160401b038111610179578036038313610179576112296020928392600195610f2c565b9b0197019401918a989699979593916111ad565b91939091908435906001600160a81b0382168203610179576001600160a01b039091168152602090810194019160010190611146565b9061127d82610fdb565b6112ce576002548082106112b857504201908142116112a4575f52600160205260405f2055565b634e487b7160e01b5f52601160045260245ffd5b90635433660960e01b5f5260045260245260445ffd5b50635ead8eb560e01b5f52600452600160245260445ffd5b6001600160a01b0381165f9081527f3412d5605ac6cd444957cedb533e5dacad6378b4bc819ebe3652188a665066d5602052604090205460ff16156113285750565b63e2517d3f60e01b5f9081526001600160a01b03919091166004527fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1602452604490fd5b6001600160a01b0381165f9081527fdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d7069602052604090205460ff16156113ae5750565b63e2517d3f60e01b5f9081526001600160a01b03919091166004527fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63602452604490fd5b90815f525f60205260405f2060018060a01b0382165f5260205260ff60405f2054161561141d575050565b63e2517d3f60e01b5f5260018060a01b031660045260245260445ffd5b61144381610fab565b1561147b57508015158061146b575b6114595750565b63121534c360e31b5f5260045260245ffd5b5061147581610fc3565b15611452565b635ead8eb560e01b5f52600452600460245260445ffd5b6114da935f93928493826040519384928337810185815203925af13d156114dd573d906114be82610dc6565b916114cc6040519384610d91565b82523d5f602084013e61160b565b50565b60609061160b565b6114ee81610fab565b1561147b575f526001602052600160405f2055565b5f818152602081815260408083206001600160a01b038616845290915290205460ff16611585575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f818152602081815260408083206001600160a01b038616845290915290205460ff1615611585575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b156116135790565b80511561162257602081519101fd5b63d6bda27560e01b5f5260045ffdfea36474726f6e582212205f33ecc141d23d844ab2e4283894bef199cb7512a5cf8d8262db8d18ab305f106c6578706572696d656e74616cf564736f6c634300081a00412f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d3412d5605ac6cd444957cedb533e5dacad6378b4bc819ebe3652188a665066d5dae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d7069c3ad33e20b0c56a223ad5104fff154aa010f8715b9c981fd38fdc60a4d1a52fbad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5",
  "deployedBytecode": "0x6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301d5062a14610c1a57806301ffc9a714610ba057806307bd026514610b5c578063134008d314610aa957806313bc9f2014610a81578063248a9ca314610a4d5780632ab0f52914610a255780632f2ff15d146109de57806331d50750146109b657806336568abe146109685780635175f87814610909578063584b153e146108d757806364d62353146108685780637958004c1461081b5780638065657f146107f25780638f2a0bb0146106635780638f61f4f51461061f57806391d14854146105cd578063a217fddf146105a9578063b08e51c014610565578063b1c5f42714610531578063bc197c8114610492578063c4d252f5146103aa578063d45c443514610376578063d547741f14610328578063e38335e5146101dc578063f23a6e611461017d5763f27a0c920361000e573461017957d361017957d2610179575f366003190112610179576020600254604051908152f35b5f80fd5b3461017957d361017957d26101795760a0366003190112610179576101a0610ccf565b506101a9610cee565b506084356001600160401b038111610179576101c9903690600401610de1565b5060405163f23a6e6160e01b8152602090f35b6101e536610e57565b5f80527fdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d70696020527f5ba6852781629bcdcd4bdaa6de76d786f1c64b16acdac474e55bebc0ea1579515492979196919593949260ff161561031a575b828214801590610310575b6102f55761026261026991888a888789888d611121565b968761143a565b5f5b81811061027b57610018876114e5565b8080887fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5888886102ec6102d38f986001998f828e6102c68f836102c1916102cc966110a8565b6110cc565b976110a8565b35956110e0565b906102e082828787611492565b60405194859485610f84565b0390a30161026b565b50869063ffb0321160e01b5f5260045260245260445260645ffd5b508782141561024b565b6103233361136c565b610240565b3461017957d361017957d261017957604036600319011261017957610018600435610351610cee565b9061037161036a825f525f602052600160405f20015490565b33906113f2565b61158b565b3461017957d361017957d2610179576020366003190112610179576004355f526001602052602060405f2054604051908152f35b3461017957d361017957d261017957602036600319011261017957335f9081527fc3ad33e20b0c56a223ad5104fff154aa010f8715b9c981fd38fdc60a4d1a52fb60205260409020546004359060ff161561045b5761040881610ff2565b1561044157805f5260016020525f60408120557fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb705f80a2005b635ead8eb560e01b5f52600452600460021760245260445ffd5b63e2517d3f60e01b5f52336004527ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78360245260445ffd5b3461017957d361017957d26101795760a0366003190112610179576104b5610ccf565b506104be610cee565b506044356001600160401b038111610179576104de903690600401610ec5565b506064356001600160401b038111610179576104fe903690600401610ec5565b506084356001600160401b0381116101795761051e903690600401610de1565b5060405163bc197c8160e01b8152602090f35b3461017957d361017957d261017957602061055d61054e36610e57565b96959095949194939293611121565b604051908152f35b3461017957d361017957d2610179575f3660031901126101795760206040517ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f7838152f35b3461017957d361017957d2610179575f3660031901126101795760206040515f8152f35b3461017957d361017957d2610179576040366003190112610179576105f0610cee565b6004355f525f60205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461017957d361017957d2610179575f3660031901126101795760206040517fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc18152f35b3461017957d361017957d26101795760c0366003190112610179576004356001600160401b0381116101795761069d903690600401610e27565b906024356001600160401b038111610179576106bd903690600401610e27565b6044929192356001600160401b038111610179576106df903690600401610e27565b9390916064356084359560a435926106f6336112e6565b8089148015906107e8575b6107ce5761071588848489858a8f8e611121565b98610720858b611273565b895f5b8281106107605750898061073357005b60207f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038791604051908152a2005b806001927f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b6107c38f8c6107b68f928e6107af8f8f906107a96102c18f80979481956110a8565b996110a8565b35976110e0565b9060405196879687610f4c565b0390a3018a90610723565b908863ffb0321160e01b5f5260045260245260445260645ffd5b5081891415610701565b3461017957d361017957d261017957602061055d61080f36610d3a565b94939093929192611053565b3461017957d361017957d26101795760203660031901126101795761084160043561101b565b6040516004821015610854576020918152f35b634e487b7160e01b5f52602160045260245ffd5b3461017957d361017957d2610179576020366003190112610179576004353033036108c4577f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d560406002548151908152836020820152a1600255005b63e2850c5960e01b5f523360045260245ffd5b3461017957d361017957d26101795760203660031901126101795760206108ff600435610ff2565b6040519015158152f35b3461017957d361017957d26101795760803660031901126101795761092c610ccf565b50610935610cee565b506064356001600160401b03811161017957610955903690600401610de1565b50604051630a2ebf0f60e31b8152602090f35b3461017957d361017957d26101795760403660031901126101795761098b610cee565b336001600160a01b038216036109a7576100189060043561158b565b63334bd91960e11b5f5260045ffd5b3461017957d361017957d26101795760203660031901126101795760206108ff600435610fdb565b3461017957d361017957d261017957604036600319011261017957610018600435610a07610cee565b90610a2061036a825f525f602052600160405f20015490565b611503565b3461017957d361017957d26101795760203660031901126101795760206108ff600435610fc3565b3461017957d361017957d261017957602036600319011261017957602061055d6004355f525f602052600160405f20015490565b3461017957d361017957d26101795760203660031901126101795760206108ff600435610fab565b610018610b3a5f610b467fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b58610b31610ae036610d3a565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e638a9995979299949394528960205260408a208a805260205260ff60408b20541615610b4e575b8884848989611053565b9889978861143a565b6102e082828787611492565b0390a36114e5565b610b573361136c565b610b27565b3461017957d361017957d2610179575f3660031901126101795760206040517fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e638152f35b3461017957d361017957d26101795760203660031901126101795760043563ffffffff60e01b811680910361017957602090630271189760e51b8114908115610bef575b506040519015158152f35b637965db0b60e01b811491508115610c09575b5082610be4565b6301ffc9a760e01b14905082610c02565b3461017957d361017957d26101795760c036600319011261017957610c3d610ccf565b602435906044356001600160401b038111610179577f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca92610c835f923690600401610d0d565b94909160643594610cc56084359660a43590610c9e336112e6565b610cac89828c8a8989611053565b998a97610cb9848a611273565b60405196879687610f4c565b0390a38061073357005b6004356001600160a81b0381168103610179576001600160a01b031690565b6024356001600160a81b0381168103610179576001600160a01b031690565b9181601f84011215610179578235916001600160401b038311610179576020838186019501011161017957565b60a0600319820112610179576004356001600160a81b0381168103610179576001600160a01b03169160243591604435906001600160401b03821161017957610d8591600401610d0d565b90916064359060843590565b90601f801991011681019081106001600160401b03821117610db257604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b038111610db257601f01601f191660200190565b81601f8201121561017957803590610df882610dc6565b92610e066040519485610d91565b8284526020838301011161017957815f926020809301838601378301015290565b9181601f84011215610179578235916001600160401b038311610179576020808501948460051b01011161017957565b60a0600319820112610179576004356001600160401b0381116101795781610e8191600401610e27565b929092916024356001600160401b0381116101795781610ea391600401610e27565b92909291604435906001600160401b03821161017957610d8591600401610e27565b9080601f83011215610179578135916001600160401b038311610db2578260051b9060405193610ef86020840186610d91565b845260208085019282010192831161017957602001905b828210610f1c5750505090565b8135815260209182019101610f0f565b908060209392818452848401375f828201840152601f01601f1916010190565b929093610f7a926080959897969860018060a01b03168552602085015260a0604085015260a0840191610f2c565b9460608201520152565b610fa8949260609260018060a01b0316825260208201528160408201520191610f2c565b90565b610fb49061101b565b60048110156108545760021490565b610fcc9061101b565b60048110156108545760031490565b610fe49061101b565b600481101561085457151590565b610ffb9061101b565b60048110156108545760018114908115611013575090565b600291501490565b5f52600160205260405f205480155f1461103457505f90565b600181036110425750600390565b42101561104e57600190565b600290565b946110896110a294959293604051968795602087019960018060a01b03168a52604087015260a0606087015260c0860191610f2c565b91608084015260a083015203601f198101835282610d91565b51902090565b91908110156110b85760051b0190565b634e487b7160e01b5f52603260045260245ffd5b356001600160a81b03811681036101795790565b91908110156110b85760051b81013590601e19813603018212156101795701908135916001600160401b038311610179576020018236038113610179579190565b9693949190969592956040519660208801988060c08a0160a08c525260e0890192905f905b80821061123d57505050878203601f190160408901528082526001600160fb1b038111610179579087959394929160051b8092602083013701848103606086015260208101849052600584901b8101604090810194908201915f90889036829003601e1901905b8484106111d7575050505050506110a29450608084015260a083015203601f198101835282610d91565b91939597909294969850601f19601f198383030101875289358381121561017957840190602082359201916001600160401b038111610179578036038313610179576112296020928392600195610f2c565b9b0197019401918a989699979593916111ad565b91939091908435906001600160a81b0382168203610179576001600160a01b039091168152602090810194019160010190611146565b9061127d82610fdb565b6112ce576002548082106112b857504201908142116112a4575f52600160205260405f2055565b634e487b7160e01b5f52601160045260245ffd5b90635433660960e01b5f5260045260245260445ffd5b50635ead8eb560e01b5f52600452600160245260445ffd5b6001600160a01b0381165f9081527f3412d5605ac6cd444957cedb533e5dacad6378b4bc819ebe3652188a665066d5602052604090205460ff16156113285750565b63e2517d3f60e01b5f9081526001600160a01b03919091166004527fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1602452604490fd5b6001600160a01b0381165f9081527fdae2aa361dfd1ca020a396615627d436107c35eff9fe7738a3512819782d7069602052604090205460ff16156113ae5750565b63e2517d3f60e01b5f9081526001600160a01b03919091166004527fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63602452604490fd5b90815f525f60205260405f2060018060a01b0382165f5260205260ff60405f2054161561141d575050565b63e2517d3f60e01b5f5260018060a01b031660045260245260445ffd5b61144381610fab565b1561147b57508015158061146b575b6114595750565b63121534c360e31b5f5260045260245ffd5b5061147581610fc3565b15611452565b635ead8eb560e01b5f52600452600460245260445ffd5b6114da935f93928493826040519384928337810185815203925af13d156114dd573d906114be82610dc6565b916114cc6040519384610d91565b82523d5f602084013e61160b565b50565b60609061160b565b6114ee81610fab565b1561147b575f526001602052600160405f2055565b5f818152602081815260408083206001600160a01b038616845290915290205460ff16611585575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50505f90565b5f818152602081815260408083206001600160a01b038616845290915290205460ff1615611585575f818152602081815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b156116135790565b80511561162257602081519101fd5b63d6bda27560e01b5f5260045ffdfea36474726f6e582212205f33ecc141d23d844ab2e4283894bef199cb7512a5cf8d8262db8d18ab305f106c6578706572696d656e74616cf564736f6c634300081a0041",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
