{
  "_format": "hh-sol-artifact-1",
  "contractName": "ProofLib",
  "sourceName": "contracts/V3/library/ProofLib.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ProofCall",
      "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": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT_TYPEHASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "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": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "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": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "proof",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "proofCall",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "hashList",
          "type": "bytes32[]"
        },
        {
          "internalType": "address[]",
          "name": "targetList",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "valueList",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes[]",
          "name": "dataList",
          "type": "bytes[]"
        }
      ],
      "name": "proofCallBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "hash",
          "type": "bytes32"
        }
      ],
      "name": "proofCheck",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "hashList",
          "type": "bytes32[]"
        }
      ],
      "name": "proofCheckBatch",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bool[]",
          "name": "",
          "type": "bool[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "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": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506119fe806100206000396000f3fe608060405234801561001057600080fd5b506004361061010c5760003560e01c80637c1a92881161009d5780637c1a9288146102285780638129fc1c1461024b5780638dccbb26146102535780639010d07c1461026657806391d1485414610291578063a217fddf146102a4578063bcfb013f146102ac578063ca15c873146102cf578063d547741f146102e2578063e14e914f146102f557600080fd5b806301ffc9a714610111578063248a9ca3146101395780632f2ff15d1461016a57806330adf81f1461017f57806334c76b25146101a65780633644e515146101d057806336568abe146101d9578063445c1b21146101ec57806354fd4d501461020e578063577bb49014610215575b600080fd5b61012461011f36600461129e565b610308565b60405190151581526020015b60405180910390f35b61015c6101473660046112c8565b60009081526065602052604090206001015490565b604051908152602001610130565b61017d6101783660046112fd565b610333565b005b61015c7f263f4ad03c504d7a69a33bf22be39c99e77fa632dd841225adaa2b970ceb938781565b6040805180820182526008815267283937b7b32634b160c11b602082015290516101309190611385565b61015c60c95481565b61017d6101e73660046112fd565b61035d565b6101ff6101fa36600461146c565b6103e0565b604051610130939291906114a8565b600161015c565b61017d61022336600461156e565b6104f6565b6101246102363660046112c8565b600090815260ca602052604090205460ff1690565b61017d610521565b61017d6102613660046115ce565b610746565b610279610274366004611677565b61099c565b6040516001600160a01b039091168152602001610130565b61012461029f3660046112fd565b6109bb565b61015c600081565b6101246102ba3660046112c8565b60ca6020526000908152604090205460ff1681565b61015c6102dd3660046112c8565b6109e6565b61017d6102f03660046112fd565b6109fd565b61017d610303366004611718565b610a22565b60006001600160e01b03198216635a05180f60e01b148061032d575061032d82610be7565b92915050565b60008281526065602052604090206001015461034e81610c1c565b6103588383610c26565b505050565b6001600160a01b03811633146103d25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6103dc8282610c48565b5050565b6000806060600080600086516001600160401b0381111561040357610403611398565b60405190808252806020026020018201604052801561042c578160200160208202803683370190505b50905060005b87518110156104e85760ca600089838151811061045157610451611813565b6020026020010151815260200190815260200160002060009054906101000a900460ff1682828151811061048757610487611813565b6020026020010190151590811515815250508181815181106104ab576104ab611813565b6020026020010151156104ca57836104c28161183f565b9450506104d8565b826104d48161183f565b9350505b6104e18161183f565b9050610432565b509196909550909350915050565b60008051602061197a83398151915261050e81610c1c565b61051a85858585610c6a565b5050505050565b600054610100900460ff16158080156105415750600054600160ff909116105b8061055b5750303b15801561055b575060005460ff166001145b6105be5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103c9565b6000805460ff1916600117905580156105e1576000805461ff0019166101001790555b6105ec600033610c26565b61060460008051602061197a83398151915233610c26565b61062e7fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f7033610c26565b6040805180820182526008815267283937b7b32634b160c11b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f8c0600138f7688af8114e57c1e564904bcee0a4f723786f811e2a27f9c46ac0c818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012060c9558015610743576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b4284101561078a5760405162461bcd60e51b8152602060048201526011602482015270141c9bdbd9931a588e8811561412549151607a1b60448201526064016103c9565b6001600160a01b03881633146107d65760405162461bcd60e51b8152602060048201526011602482015270283937b7b32634b11d1010b1b0b63632b960791b60448201526064016103c9565b60c9548551602080880191909120604080517f263f4ad03c504d7a69a33bf22be39c99e77fa632dd841225adaa2b970ceb93879381019390935282018c90526001600160a01b03808c1660608401528a16608083015260a0820189905260c082015260e0810186905260009190610100016040516020818303038152906040528051906020012060405160200161088492919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156108ef573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061093957506109397fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f70826109bb565b6109835760405162461bcd60e51b815260206004820152601b60248201527a50726f6f664c69623a20494e56414c49445f5349474e415455524560281b60448201526064016103c9565b61098f8b8a8a8a610c6a565b5050505050505050505050565b60008281526097602052604081206109b49083610dbc565b9392505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260976020526040812061032d90610dc8565b600082815260656020526040902060010154610a1881610c1c565b6103588383610c48565b60008051602061197a833981519152610a3a81610c1c565b8351855114610a975760405162461bcd60e51b8152602060048201526024808201527f686173684c6973742e6c656e677468203d3d207461726765744c6973742e6c656044820152630dccee8d60e31b60648201526084016103c9565b8251845114610af65760405162461bcd60e51b815260206004820152602560248201527f7461726765744c6973742e6c656e677468203d3d2076616c75654c6973742e6c6044820152640cadccee8d60db1b60648201526084016103c9565b8151835114610b535760405162461bcd60e51b815260206004820152602360248201527f76616c75654c6973742e6c656e677468203d3d20646174614c6973742e6c656e6044820152620cee8d60eb1b60648201526084016103c9565b60005b8551811015610bdf57610bcf868281518110610b7457610b74611813565b6020026020010151868381518110610b8e57610b8e611813565b6020026020010151868481518110610ba857610ba8611813565b6020026020010151868581518110610bc257610bc2611813565b60200260200101516104f6565b610bd88161183f565b9050610b56565b505050505050565b60006001600160e01b03198216637965db0b60e01b148061032d57506301ffc9a760e01b6001600160e01b031983161461032d565b6107438133610dd2565b610c308282610e2b565b60008281526097602052604090206103589082610eb1565b610c528282610ec6565b60008281526097602052604090206103589082610f2d565b600084815260ca602052604090205460ff1615610cc15760405162461bcd60e51b815260206004820152601560248201527450726f6f664c69623a20686173682065786973742160581b60448201526064016103c9565b60006040518060600160405280602f815260200161199a602f91399050600080856001600160a01b03168585604051610cfa919061185a565b60006040518083038185875af1925050503d8060008114610d37576040519150601f19603f3d011682016040523d82523d6000602084013e610d3c565b606091505b5091509150610d4c828285610f42565b50856001600160a01b031687336001600160a01b03167f304ea96f610c7599bef2b757a81ea2a6f1c1021ae7c080924abc58fc47b6df6a8888604051610d93929190611876565b60405180910390a45050506000938452505060ca6020525060409020805460ff19166001179055565b60006109b48383610f5b565b600061032d825490565b610ddc82826109bb565b6103dc57610de981610f85565b610df4836020610f97565b604051602001610e0592919061188f565b60408051601f198184030181529082905262461bcd60e51b82526103c991600401611385565b610e3582826109bb565b6103dc5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610e6d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006109b4836001600160a01b038416611132565b610ed082826109bb565b156103dc5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006109b4836001600160a01b038416611181565b60608315610f515750816109b4565b6109b48383611274565b6000826000018281548110610f7257610f72611813565b9060005260206000200154905092915050565b606061032d6001600160a01b03831660145b60606000610fa68360026118fe565b610fb190600261191d565b6001600160401b03811115610fc857610fc8611398565b6040519080825280601f01601f191660200182016040528015610ff2576020820181803683370190505b509050600360fc1b8160008151811061100d5761100d611813565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061103c5761103c611813565b60200101906001600160f81b031916908160001a90535060006110608460026118fe565b61106b90600161191d565b90505b60018111156110e3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061109f5761109f611813565b1a60f81b8282815181106110b5576110b5611813565b60200101906001600160f81b031916908160001a90535060049490941c936110dc81611935565b905061106e565b5083156109b45760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103c9565b60008181526001830160205260408120546111795750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561032d565b50600061032d565b6000818152600183016020526040812054801561126a5760006111a560018361194c565b85549091506000906111b99060019061194c565b905081811461121e5760008660000182815481106111d9576111d9611813565b90600052602060002001549050808760000184815481106111fc576111fc611813565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061122f5761122f611963565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061032d565b600091505061032d565b8151156112845781518083602001fd5b8060405162461bcd60e51b81526004016103c99190611385565b6000602082840312156112b057600080fd5b81356001600160e01b0319811681146109b457600080fd5b6000602082840312156112da57600080fd5b5035919050565b80356001600160a01b03811681146112f857600080fd5b919050565b6000806040838503121561131057600080fd5b82359150611320602084016112e1565b90509250929050565b60005b8381101561134457818101518382015260200161132c565b83811115611353576000848401525b50505050565b60008151808452611371816020860160208601611329565b601f01601f19169290920160200192915050565b6020815260006109b46020830184611359565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156113d6576113d6611398565b604052919050565b60006001600160401b038211156113f7576113f7611398565b5060051b60200190565b600082601f83011261141257600080fd5b81356020611427611422836113de565b6113ae565b82815260059290921b8401810191818101908684111561144657600080fd5b8286015b84811015611461578035835291830191830161144a565b509695505050505050565b60006020828403121561147e57600080fd5b81356001600160401b0381111561149457600080fd5b6114a084828501611401565b949350505050565b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b818110156114f15784511515835293830193918301916001016114d3565b509098975050505050505050565b600082601f83011261151057600080fd5b81356001600160401b0381111561152957611529611398565b61153c601f8201601f19166020016113ae565b81815284602083860101111561155157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561158457600080fd5b84359350611594602086016112e1565b92506040850135915060608501356001600160401b038111156115b657600080fd5b6115c2878288016114ff565b91505092959194509250565b60008060008060008060008060006101208a8c0312156115ed57600080fd5b893598506115fd60208b016112e1565b975061160b60408b016112e1565b965060608a0135955060808a01356001600160401b0381111561162d57600080fd5b6116398c828d016114ff565b95505060a08a0135935060c08a013560ff8116811461165757600080fd5b8093505060e08a013591506101008a013590509295985092959850929598565b6000806040838503121561168a57600080fd5b50508035926020909101359150565b600082601f8301126116aa57600080fd5b813560206116ba611422836113de565b82815260059290921b840181019181810190868411156116d957600080fd5b8286015b848110156114615780356001600160401b038111156116fc5760008081fd5b61170a8986838b01016114ff565b8452509183019183016116dd565b6000806000806080858703121561172e57600080fd5b84356001600160401b038082111561174557600080fd5b61175188838901611401565b955060209150818701358181111561176857600080fd5b8701601f8101891361177957600080fd5b8035611787611422826113de565b81815260059190911b8201840190848101908b8311156117a657600080fd5b928501925b828410156117cb576117bc846112e1565b825292850192908501906117ab565b975050505060408701359150808211156117e457600080fd5b6117f088838901611401565b9350606087013591508082111561180657600080fd5b506115c287828801611699565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561185357611853611829565b5060010190565b6000825161186c818460208701611329565b9190910192915050565b8281526040602082015260006114a06040830184611359565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516118c1816017850160208801611329565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516118f2816028840160208801611329565b01602801949350505050565b600081600019048311821515161561191857611918611829565b500290565b6000821982111561193057611930611829565b500190565b60008161194457611944611829565b506000190190565b60008282101561195e5761195e611829565b500390565b634e487b7160e01b600052603160045260246000fdfeb578029e2d92f40445892bc02211f3969b888767b1a5ae8106c4afb6a831bc9150726f6f664c69623a2066756e6374696f6e43616c6c20726576657274656420776974686f7574206d657373616765a26469706673582212204f698b8d053c092846f9bea29a6af0c11a1be4cbaa2a38c366153b2c9dd943ce64736f6c63430008080033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010c5760003560e01c80637c1a92881161009d5780637c1a9288146102285780638129fc1c1461024b5780638dccbb26146102535780639010d07c1461026657806391d1485414610291578063a217fddf146102a4578063bcfb013f146102ac578063ca15c873146102cf578063d547741f146102e2578063e14e914f146102f557600080fd5b806301ffc9a714610111578063248a9ca3146101395780632f2ff15d1461016a57806330adf81f1461017f57806334c76b25146101a65780633644e515146101d057806336568abe146101d9578063445c1b21146101ec57806354fd4d501461020e578063577bb49014610215575b600080fd5b61012461011f36600461129e565b610308565b60405190151581526020015b60405180910390f35b61015c6101473660046112c8565b60009081526065602052604090206001015490565b604051908152602001610130565b61017d6101783660046112fd565b610333565b005b61015c7f263f4ad03c504d7a69a33bf22be39c99e77fa632dd841225adaa2b970ceb938781565b6040805180820182526008815267283937b7b32634b160c11b602082015290516101309190611385565b61015c60c95481565b61017d6101e73660046112fd565b61035d565b6101ff6101fa36600461146c565b6103e0565b604051610130939291906114a8565b600161015c565b61017d61022336600461156e565b6104f6565b6101246102363660046112c8565b600090815260ca602052604090205460ff1690565b61017d610521565b61017d6102613660046115ce565b610746565b610279610274366004611677565b61099c565b6040516001600160a01b039091168152602001610130565b61012461029f3660046112fd565b6109bb565b61015c600081565b6101246102ba3660046112c8565b60ca6020526000908152604090205460ff1681565b61015c6102dd3660046112c8565b6109e6565b61017d6102f03660046112fd565b6109fd565b61017d610303366004611718565b610a22565b60006001600160e01b03198216635a05180f60e01b148061032d575061032d82610be7565b92915050565b60008281526065602052604090206001015461034e81610c1c565b6103588383610c26565b505050565b6001600160a01b03811633146103d25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6103dc8282610c48565b5050565b6000806060600080600086516001600160401b0381111561040357610403611398565b60405190808252806020026020018201604052801561042c578160200160208202803683370190505b50905060005b87518110156104e85760ca600089838151811061045157610451611813565b6020026020010151815260200190815260200160002060009054906101000a900460ff1682828151811061048757610487611813565b6020026020010190151590811515815250508181815181106104ab576104ab611813565b6020026020010151156104ca57836104c28161183f565b9450506104d8565b826104d48161183f565b9350505b6104e18161183f565b9050610432565b509196909550909350915050565b60008051602061197a83398151915261050e81610c1c565b61051a85858585610c6a565b5050505050565b600054610100900460ff16158080156105415750600054600160ff909116105b8061055b5750303b15801561055b575060005460ff166001145b6105be5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103c9565b6000805460ff1916600117905580156105e1576000805461ff0019166101001790555b6105ec600033610c26565b61060460008051602061197a83398151915233610c26565b61062e7fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f7033610c26565b6040805180820182526008815267283937b7b32634b160c11b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f8c0600138f7688af8114e57c1e564904bcee0a4f723786f811e2a27f9c46ac0c818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012060c9558015610743576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b4284101561078a5760405162461bcd60e51b8152602060048201526011602482015270141c9bdbd9931a588e8811561412549151607a1b60448201526064016103c9565b6001600160a01b03881633146107d65760405162461bcd60e51b8152602060048201526011602482015270283937b7b32634b11d1010b1b0b63632b960791b60448201526064016103c9565b60c9548551602080880191909120604080517f263f4ad03c504d7a69a33bf22be39c99e77fa632dd841225adaa2b970ceb93879381019390935282018c90526001600160a01b03808c1660608401528a16608083015260a0820189905260c082015260e0810186905260009190610100016040516020818303038152906040528051906020012060405160200161088492919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156108ef573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061093957506109397fe2f4eaae4a9751e85a3e4a7b9587827a877f29914755229b07a7b2da98285f70826109bb565b6109835760405162461bcd60e51b815260206004820152601b60248201527a50726f6f664c69623a20494e56414c49445f5349474e415455524560281b60448201526064016103c9565b61098f8b8a8a8a610c6a565b5050505050505050505050565b60008281526097602052604081206109b49083610dbc565b9392505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600081815260976020526040812061032d90610dc8565b600082815260656020526040902060010154610a1881610c1c565b6103588383610c48565b60008051602061197a833981519152610a3a81610c1c565b8351855114610a975760405162461bcd60e51b8152602060048201526024808201527f686173684c6973742e6c656e677468203d3d207461726765744c6973742e6c656044820152630dccee8d60e31b60648201526084016103c9565b8251845114610af65760405162461bcd60e51b815260206004820152602560248201527f7461726765744c6973742e6c656e677468203d3d2076616c75654c6973742e6c6044820152640cadccee8d60db1b60648201526084016103c9565b8151835114610b535760405162461bcd60e51b815260206004820152602360248201527f76616c75654c6973742e6c656e677468203d3d20646174614c6973742e6c656e6044820152620cee8d60eb1b60648201526084016103c9565b60005b8551811015610bdf57610bcf868281518110610b7457610b74611813565b6020026020010151868381518110610b8e57610b8e611813565b6020026020010151868481518110610ba857610ba8611813565b6020026020010151868581518110610bc257610bc2611813565b60200260200101516104f6565b610bd88161183f565b9050610b56565b505050505050565b60006001600160e01b03198216637965db0b60e01b148061032d57506301ffc9a760e01b6001600160e01b031983161461032d565b6107438133610dd2565b610c308282610e2b565b60008281526097602052604090206103589082610eb1565b610c528282610ec6565b60008281526097602052604090206103589082610f2d565b600084815260ca602052604090205460ff1615610cc15760405162461bcd60e51b815260206004820152601560248201527450726f6f664c69623a20686173682065786973742160581b60448201526064016103c9565b60006040518060600160405280602f815260200161199a602f91399050600080856001600160a01b03168585604051610cfa919061185a565b60006040518083038185875af1925050503d8060008114610d37576040519150601f19603f3d011682016040523d82523d6000602084013e610d3c565b606091505b5091509150610d4c828285610f42565b50856001600160a01b031687336001600160a01b03167f304ea96f610c7599bef2b757a81ea2a6f1c1021ae7c080924abc58fc47b6df6a8888604051610d93929190611876565b60405180910390a45050506000938452505060ca6020525060409020805460ff19166001179055565b60006109b48383610f5b565b600061032d825490565b610ddc82826109bb565b6103dc57610de981610f85565b610df4836020610f97565b604051602001610e0592919061188f565b60408051601f198184030181529082905262461bcd60e51b82526103c991600401611385565b610e3582826109bb565b6103dc5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610e6d3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006109b4836001600160a01b038416611132565b610ed082826109bb565b156103dc5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006109b4836001600160a01b038416611181565b60608315610f515750816109b4565b6109b48383611274565b6000826000018281548110610f7257610f72611813565b9060005260206000200154905092915050565b606061032d6001600160a01b03831660145b60606000610fa68360026118fe565b610fb190600261191d565b6001600160401b03811115610fc857610fc8611398565b6040519080825280601f01601f191660200182016040528015610ff2576020820181803683370190505b509050600360fc1b8160008151811061100d5761100d611813565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061103c5761103c611813565b60200101906001600160f81b031916908160001a90535060006110608460026118fe565b61106b90600161191d565b90505b60018111156110e3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061109f5761109f611813565b1a60f81b8282815181106110b5576110b5611813565b60200101906001600160f81b031916908160001a90535060049490941c936110dc81611935565b905061106e565b5083156109b45760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016103c9565b60008181526001830160205260408120546111795750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561032d565b50600061032d565b6000818152600183016020526040812054801561126a5760006111a560018361194c565b85549091506000906111b99060019061194c565b905081811461121e5760008660000182815481106111d9576111d9611813565b90600052602060002001549050808760000184815481106111fc576111fc611813565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061122f5761122f611963565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061032d565b600091505061032d565b8151156112845781518083602001fd5b8060405162461bcd60e51b81526004016103c99190611385565b6000602082840312156112b057600080fd5b81356001600160e01b0319811681146109b457600080fd5b6000602082840312156112da57600080fd5b5035919050565b80356001600160a01b03811681146112f857600080fd5b919050565b6000806040838503121561131057600080fd5b82359150611320602084016112e1565b90509250929050565b60005b8381101561134457818101518382015260200161132c565b83811115611353576000848401525b50505050565b60008151808452611371816020860160208601611329565b601f01601f19169290920160200192915050565b6020815260006109b46020830184611359565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156113d6576113d6611398565b604052919050565b60006001600160401b038211156113f7576113f7611398565b5060051b60200190565b600082601f83011261141257600080fd5b81356020611427611422836113de565b6113ae565b82815260059290921b8401810191818101908684111561144657600080fd5b8286015b84811015611461578035835291830191830161144a565b509695505050505050565b60006020828403121561147e57600080fd5b81356001600160401b0381111561149457600080fd5b6114a084828501611401565b949350505050565b6000606082018583526020858185015260606040850152818551808452608086019150828701935060005b818110156114f15784511515835293830193918301916001016114d3565b509098975050505050505050565b600082601f83011261151057600080fd5b81356001600160401b0381111561152957611529611398565b61153c601f8201601f19166020016113ae565b81815284602083860101111561155157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561158457600080fd5b84359350611594602086016112e1565b92506040850135915060608501356001600160401b038111156115b657600080fd5b6115c2878288016114ff565b91505092959194509250565b60008060008060008060008060006101208a8c0312156115ed57600080fd5b893598506115fd60208b016112e1565b975061160b60408b016112e1565b965060608a0135955060808a01356001600160401b0381111561162d57600080fd5b6116398c828d016114ff565b95505060a08a0135935060c08a013560ff8116811461165757600080fd5b8093505060e08a013591506101008a013590509295985092959850929598565b6000806040838503121561168a57600080fd5b50508035926020909101359150565b600082601f8301126116aa57600080fd5b813560206116ba611422836113de565b82815260059290921b840181019181810190868411156116d957600080fd5b8286015b848110156114615780356001600160401b038111156116fc5760008081fd5b61170a8986838b01016114ff565b8452509183019183016116dd565b6000806000806080858703121561172e57600080fd5b84356001600160401b038082111561174557600080fd5b61175188838901611401565b955060209150818701358181111561176857600080fd5b8701601f8101891361177957600080fd5b8035611787611422826113de565b81815260059190911b8201840190848101908b8311156117a657600080fd5b928501925b828410156117cb576117bc846112e1565b825292850192908501906117ab565b975050505060408701359150808211156117e457600080fd5b6117f088838901611401565b9350606087013591508082111561180657600080fd5b506115c287828801611699565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561185357611853611829565b5060010190565b6000825161186c818460208701611329565b9190910192915050565b8281526040602082015260006114a06040830184611359565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516118c1816017850160208801611329565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516118f2816028840160208801611329565b01602801949350505050565b600081600019048311821515161561191857611918611829565b500290565b6000821982111561193057611930611829565b500190565b60008161194457611944611829565b506000190190565b60008282101561195e5761195e611829565b500390565b634e487b7160e01b600052603160045260246000fdfeb578029e2d92f40445892bc02211f3969b888767b1a5ae8106c4afb6a831bc9150726f6f664c69623a2066756e6374696f6e43616c6c20726576657274656420776974686f7574206d657373616765a26469706673582212204f698b8d053c092846f9bea29a6af0c11a1be4cbaa2a38c366153b2c9dd943ce64736f6c63430008080033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
