{
  "_format": "hh-sol-artifact-1",
  "contractName": "PendleGovernanceProxy",
  "sourceName": "contracts/offchain-helpers/PendleGovernanceProxy.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "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": "bytes4",
          "name": "selector",
          "type": "bytes4"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "access",
          "type": "bool"
        }
      ],
      "name": "ModifyScopedAccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "isAdmin",
          "type": "bool"
        }
      ],
      "name": "ModifySelectorAdmin",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes4[]",
          "name": "selectors",
          "type": "bytes4[]"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "SetAllowedSelectors",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GUARDIAN",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "name": "__deprecated_allowedSelectors",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "callData",
              "type": "bytes"
            }
          ],
          "internalType": "struct IPGovernanceProxy.Call[]",
          "name": "calls",
          "type": "tuple[]"
        }
      ],
      "name": "aggregate",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "callData",
              "type": "bytes"
            }
          ],
          "internalType": "struct IPGovernanceProxy.Call[]",
          "name": "calls",
          "type": "tuple[]"
        }
      ],
      "name": "aggregateWithScopedAccess",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "payable",
      "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": "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": "caller",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "hasScopedAccess",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isAllowed",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "governance",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        }
      ],
      "name": "isSelectorAdminOf",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isAdmin",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "targets",
          "type": "address[]"
        },
        {
          "internalType": "bytes4",
          "name": "selector",
          "type": "bytes4"
        },
        {
          "internalType": "bool[]",
          "name": "accesses",
          "type": "bool[]"
        }
      ],
      "name": "modifyScopedAccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        },
        {
          "internalType": "bytes4[]",
          "name": "selectors",
          "type": "bytes4[]"
        },
        {
          "internalType": "bool[]",
          "name": "isAdmins",
          "type": "bool[]"
        }
      ],
      "name": "modifySelectorAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "addrs",
          "type": "address[]"
        }
      ],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "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": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100dd565b5f54610100900460ff161561008c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146100db575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051611e3c6101115f395f8181610693015281816106d30152818161075a0152818161079a01526108110152611e3c5ff3fe6080604052600436106100f1575f3560e01c806301ffc9a7146100fc578063043532c7146101305780631acaa19814610169578063248a9ca3146101895780632d254dcd146101a85780632f2ff15d146101c957806336568abe146101e85780633659cfe6146102075780634f1ef2861461022657806352d1902d1461023957806354ba3ad71461024d57806360f6dac81461026c578063724c184c146102ab578063824850cf146102cb57806391d14854146103045780639755c6a714610323578063a217fddf14610342578063c45ce97214610355578063c4d66de814610368578063d547741f14610387575f5ffd5b366100f857005b5f5ffd5b348015610107575f5ffd5b5061011b610116366004611582565b6103a6565b60405190151581526020015b60405180910390f35b34801561013b575f5ffd5b5061015b61014a366004611582565b60976020525f908152604090205481565b604051908152602001610127565b61017c6101773660046115e2565b6103dc565b604051610127919061166d565b348015610194575f5ffd5b5061015b6101a33660046116d0565b61041e565b3480156101b3575f5ffd5b506101c76101c23660046117da565b610432565b005b3480156101d4575f5ffd5b506101c76101e33660046118bc565b6105ea565b3480156101f3575f5ffd5b506101c76102023660046118bc565b61060b565b348015610212575f5ffd5b506101c76102213660046118e6565b610689565b6101c76102343660046118ff565b610750565b348015610244575f5ffd5b5061015b610805565b348015610258575f5ffd5b506101c76102673660046119a2565b6108b1565b348015610277575f5ffd5b5061011b610286366004611a72565b609960209081525f938452604080852082529284528284209052825290205460ff1681565b3480156102b6575f5ffd5b5061015b5f516020611d805f395f51905f5281565b3480156102d6575f5ffd5b5061011b6102e5366004611ab2565b609860209081525f928352604080842090915290825290205460ff1681565b34801561030f575f5ffd5b5061011b61031e3660046118bc565b610a22565b34801561032e575f5ffd5b506101c761033d3660046115e2565b610a4c565b34801561034d575f5ffd5b5061015b5f81565b61017c6103633660046115e2565b610b19565b348015610373575f5ffd5b506101c76103823660046118e6565b610c13565b348015610392575f5ffd5b506101c76103a13660046118bc565b610d27565b5f6001600160e01b03198216637965db0b60e01b14806103d657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606103e85f33610a22565b61040d5760405162461bcd60e51b815260040161040490611ada565b60405180910390fd5b6104178383610d43565b9392505050565b5f9081526065602052604090206001015490565b80518351146104535760405162461bcd60e51b815260040161040490611afc565b61045d5f33610a22565b8061048b5750335f9081526098602090815260408083206001600160e01b03198616845290915290205460ff165b6104a75760405162461bcd60e51b815260040161040490611ada565b5f5b83518110156105e3578181815181106104c4576104c4611b30565b6020908102919091018101516001600160a01b0387165f9081526099835260408082206001600160e01b03198816835290935291822086519192909187908590811061051257610512611b30565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff02191690831515021790555083818151811061056157610561611b30565b60200260200101516001600160a01b0316836001600160e01b031916866001600160a01b03167f2ab8ce4c74e9b2b9e6f8be4877519c538c63eed5eeecdf69a06e78dedae57c758585815181106105ba576105ba611b30565b60200260200101516040516105d3911515815260200190565b60405180910390a46001016104a9565b5050505050565b6105f38261041e565b6105fc81610e7f565b6106068383610e89565b505050565b6001600160a01b038116331461067b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610404565b6106858282610f0e565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106d15760405162461bcd60e51b815260040161040490611b44565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610703610f74565b6001600160a01b0316146107295760405162461bcd60e51b815260040161040490611b7d565b61073281610f8f565b604080515f8082526020820190925261074d91839190610fb5565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107985760405162461bcd60e51b815260040161040490611b44565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107ca610f74565b6001600160a01b0316146107f05760405162461bcd60e51b815260040161040490611b7d565b6107f982610f8f565b61068582826001610fb5565b5f306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461089f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610404565b505f516020611dc05f395f51905f5290565b6108bb5f33610a22565b6108d75760405162461bcd60e51b815260040161040490611ada565b80518251146108f85760405162461bcd60e51b815260040161040490611afc565b5f5b8251811015610a1c5781818151811061091557610915611b30565b602002602001015160985f866001600160a01b03166001600160a01b031681526020019081526020015f205f85848151811061095357610953611b30565b60200260200101516001600160e01b0319166001600160e01b03191681526020019081526020015f205f6101000a81548160ff0219169083151502179055508281815181106109a4576109a4611b30565b60200260200101516001600160e01b031916846001600160a01b03167f81361fa49ca8106c5f24d0460a1c633a5c8f8ee480b54214c9f211138ca989c28484815181106109f3576109f3611b30565b6020026020010151604051610a0c911515815260200190565b60405180910390a36001016108fa565b50505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610a635f516020611d805f395f51905f5233610a22565b80610a735750610a735f33610a22565b610a8f5760405162461bcd60e51b815260040161040490611ada565b805f5b81811015610a1c57838382818110610aac57610aac611b30565b9050602002016020810190610ac191906118e6565b6001600160a01b0316638456cb596040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610af8575f5ffd5b505af1158015610b0a573d5f5f3e3d5ffd5b50505050806001019050610a92565b60605f5b82811015610c08575f848483818110610b3857610b38611b30565b9050602002810190610b4a9190611bb6565b610b58906040810190611bd4565b610b66916004915f91611c16565b610b6f91611c3d565b335f9081526099602090815260408083206001600160e01b0319851684529091528120919250868685818110610ba757610ba7611b30565b9050602002810190610bb99190611bb6565b610bc79060208101906118e6565b6001600160a01b0316815260208101919091526040015f205460ff16610bff5760405162461bcd60e51b815260040161040490611ada565b50600101610b1d565b506104178383610d43565b5f54610100900460ff1615808015610c3157505f54600160ff909116105b80610c515750610c403061111f565b158015610c5157505f5460ff166001145b610cb45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610404565b5f805460ff191660011790558015610cd5575f805461ff0019166101001790555b610cdf5f83610e89565b8015610685575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610d308261041e565b610d3981610e7f565b6106068383610f0e565b606081806001600160401b03811115610d5e57610d5e6116fd565b604051908082528060200260200182016040528015610d9157816020015b6060815260200190600190039081610d7c5790505b509150365f5b82811015610e7657858582818110610db157610db1611b30565b9050602002810190610dc39190611bb6565b91505f80610dd460208501856118e6565b6001600160a01b03166020850135610def6040870187611bd4565b604051610dfd929190611c75565b5f6040518083038185875af1925050503d805f8114610e37576040519150601f19603f3d011682016040523d82523d5f602084013e610e3c565b606091505b509150915081610e4e57805181602001fd5b80868481518110610e6157610e61611b30565b60209081029190910101525050600101610d97565b50505092915050565b61074d813361112e565b610e938282610a22565b610685575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610f188282610a22565b15610685575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f516020611dc05f395f51905f52546001600160a01b031690565b610f995f33610a22565b61074d5760405162461bcd60e51b815260040161040490611ada565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610fe85761060683611187565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611042575060408051601f3d908101601f1916820190925261103f91810190611c84565b60015b6110a55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610404565b5f516020611dc05f395f51905f5281146111135760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610404565b50610606838383611220565b6001600160a01b03163b151590565b6111388282610a22565b6106855761114581611244565b611150836020611256565b604051602001611161929190611c9b565b60408051601f198184030181529082905262461bcd60e51b825261040491600401611d09565b6111908161111f565b6111f25760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610404565b5f516020611dc05f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611229836113eb565b5f825111806112355750805b1561060657610a1c838361142a565b60606103d66001600160a01b03831660145b60605f611264836002611d2f565b61126f906002611d46565b6001600160401b03811115611286576112866116fd565b6040519080825280601f01601f1916602001820160405280156112b0576020820181803683370190505b509050600360fc1b815f815181106112ca576112ca611b30565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106112f8576112f8611b30565b60200101906001600160f81b03191690815f1a9053505f61131a846002611d2f565b611325906001611d46565b90505b600181111561139c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061135957611359611b30565b1a60f81b82828151811061136f5761136f611b30565b60200101906001600160f81b03191690815f1a90535060049490941c9361139581611d59565b9050611328565b5083156104175760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610404565b6113f481611187565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606104178383604051806060016040528060278152602001611de06027913960605f5f856001600160a01b0316856040516114669190611d6e565b5f60405180830381855af49150503d805f811461149e576040519150601f19603f3d011682016040523d82523d5f602084013e6114a3565b606091505b50915091506114b4868383876114be565b9695505050505050565b6060831561152a5782515f03611523576114d78561111f565b6115235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610404565b5081611534565b611534838361153c565b949350505050565b81511561154c5781518083602001fd5b8060405162461bcd60e51b81526004016104049190611d09565b80356001600160e01b03198116811461157d575f5ffd5b919050565b5f60208284031215611592575f5ffd5b61041782611566565b5f5f83601f8401126115ab575f5ffd5b5081356001600160401b038111156115c1575f5ffd5b6020830191508360208260051b85010111156115db575f5ffd5b9250929050565b5f5f602083850312156115f3575f5ffd5b82356001600160401b03811115611608575f5ffd5b6116148582860161159b565b90969095509350505050565b5f5b8381101561163a578181015183820152602001611622565b50505f910152565b5f8151808452611659816020860160208601611620565b601f01601f19169290920160200192915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156116c457603f198786030184526116af858351611642565b94506020938401939190910190600101611693565b50929695505050505050565b5f602082840312156116e0575f5ffd5b5035919050565b80356001600160a01b038116811461157d575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715611739576117396116fd565b604052919050565b5f6001600160401b03821115611759576117596116fd565b5060051b60200190565b5f82601f830112611772575f5ffd5b813561178561178082611741565b611711565b8082825260208201915060208360051b8601019250858311156117a6575f5ffd5b602085015b838110156117d057803580151581146117c2575f5ffd5b8352602092830192016117ab565b5095945050505050565b5f5f5f5f608085870312156117ed575f5ffd5b6117f6856116e7565b935060208501356001600160401b03811115611810575f5ffd5b8501601f81018713611820575f5ffd5b803561182e61178082611741565b8082825260208201915060208360051b85010192508983111561184f575f5ffd5b6020840193505b8284101561187857611867846116e7565b825260209384019390910190611856565b955061188a9250505060408601611566565b915060608501356001600160401b038111156118a4575f5ffd5b6118b087828801611763565b91505092959194509250565b5f5f604083850312156118cd575f5ffd5b823591506118dd602084016116e7565b90509250929050565b5f602082840312156118f6575f5ffd5b610417826116e7565b5f5f60408385031215611910575f5ffd5b611919836116e7565b915060208301356001600160401b03811115611933575f5ffd5b8301601f81018513611943575f5ffd5b80356001600160401b0381111561195c5761195c6116fd565b61196f601f8201601f1916602001611711565b818152866020838501011115611983575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f606084860312156119b4575f5ffd5b6119bd846116e7565b925060208401356001600160401b038111156119d7575f5ffd5b8401601f810186136119e7575f5ffd5b80356119f561178082611741565b8082825260208201915060208360051b850101925088831115611a16575f5ffd5b6020840193505b82841015611a3f57611a2e84611566565b825260209384019390910190611a1d565b945050505060408401356001600160401b03811115611a5c575f5ffd5b611a6886828701611763565b9150509250925092565b5f5f5f60608486031215611a84575f5ffd5b611a8d846116e7565b9250611a9b60208501611566565b9150611aa9604085016116e7565b90509250925092565b5f5f60408385031215611ac3575f5ffd5b611acc836116e7565b91506118dd60208401611566565b6020808252600890820152675047503a206e2f6160c01b604082015260600190565b6020808252601a90820152790a08ea0744082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d60331b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b6020808252602c908201525f516020611da05f395f51905f5260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201525f516020611da05f395f51905f5260408201526b6163746976652070726f787960a01b606082015260800190565b5f8235605e19833603018112611bca575f5ffd5b9190910192915050565b5f5f8335601e19843603018112611be9575f5ffd5b8301803591506001600160401b03821115611c02575f5ffd5b6020019150368190038213156115db575f5ffd5b5f5f85851115611c24575f5ffd5b83861115611c30575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015611c6e576001600160e01b0319600485900360031b81901b82161691505b5092915050565b818382375f9101908152919050565b5f60208284031215611c94575f5ffd5b5051919050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81525f8351611ccc816017850160208801611620565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611cfd816028840160208801611620565b01602801949350505050565b602081525f6104176020830184611642565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176103d6576103d6611d1b565b808201808211156103d6576103d6611d1b565b5f81611d6757611d67611d1b565b505f190190565b5f8251611bca81846020870161162056fe8b5b16d04624687fcf0d0228f19993c9157c1ed07b41d8d430fd9100eb099fe846756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e4970bd58f39412e08a63d27a0889045720662c8c3af0fb03ab0cc9c47b3807f64736f6c634300081e0033",
  "deployedBytecode": "0x6080604052600436106100f1575f3560e01c806301ffc9a7146100fc578063043532c7146101305780631acaa19814610169578063248a9ca3146101895780632d254dcd146101a85780632f2ff15d146101c957806336568abe146101e85780633659cfe6146102075780634f1ef2861461022657806352d1902d1461023957806354ba3ad71461024d57806360f6dac81461026c578063724c184c146102ab578063824850cf146102cb57806391d14854146103045780639755c6a714610323578063a217fddf14610342578063c45ce97214610355578063c4d66de814610368578063d547741f14610387575f5ffd5b366100f857005b5f5ffd5b348015610107575f5ffd5b5061011b610116366004611582565b6103a6565b60405190151581526020015b60405180910390f35b34801561013b575f5ffd5b5061015b61014a366004611582565b60976020525f908152604090205481565b604051908152602001610127565b61017c6101773660046115e2565b6103dc565b604051610127919061166d565b348015610194575f5ffd5b5061015b6101a33660046116d0565b61041e565b3480156101b3575f5ffd5b506101c76101c23660046117da565b610432565b005b3480156101d4575f5ffd5b506101c76101e33660046118bc565b6105ea565b3480156101f3575f5ffd5b506101c76102023660046118bc565b61060b565b348015610212575f5ffd5b506101c76102213660046118e6565b610689565b6101c76102343660046118ff565b610750565b348015610244575f5ffd5b5061015b610805565b348015610258575f5ffd5b506101c76102673660046119a2565b6108b1565b348015610277575f5ffd5b5061011b610286366004611a72565b609960209081525f938452604080852082529284528284209052825290205460ff1681565b3480156102b6575f5ffd5b5061015b5f516020611d805f395f51905f5281565b3480156102d6575f5ffd5b5061011b6102e5366004611ab2565b609860209081525f928352604080842090915290825290205460ff1681565b34801561030f575f5ffd5b5061011b61031e3660046118bc565b610a22565b34801561032e575f5ffd5b506101c761033d3660046115e2565b610a4c565b34801561034d575f5ffd5b5061015b5f81565b61017c6103633660046115e2565b610b19565b348015610373575f5ffd5b506101c76103823660046118e6565b610c13565b348015610392575f5ffd5b506101c76103a13660046118bc565b610d27565b5f6001600160e01b03198216637965db0b60e01b14806103d657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606103e85f33610a22565b61040d5760405162461bcd60e51b815260040161040490611ada565b60405180910390fd5b6104178383610d43565b9392505050565b5f9081526065602052604090206001015490565b80518351146104535760405162461bcd60e51b815260040161040490611afc565b61045d5f33610a22565b8061048b5750335f9081526098602090815260408083206001600160e01b03198616845290915290205460ff165b6104a75760405162461bcd60e51b815260040161040490611ada565b5f5b83518110156105e3578181815181106104c4576104c4611b30565b6020908102919091018101516001600160a01b0387165f9081526099835260408082206001600160e01b03198816835290935291822086519192909187908590811061051257610512611b30565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff02191690831515021790555083818151811061056157610561611b30565b60200260200101516001600160a01b0316836001600160e01b031916866001600160a01b03167f2ab8ce4c74e9b2b9e6f8be4877519c538c63eed5eeecdf69a06e78dedae57c758585815181106105ba576105ba611b30565b60200260200101516040516105d3911515815260200190565b60405180910390a46001016104a9565b5050505050565b6105f38261041e565b6105fc81610e7f565b6106068383610e89565b505050565b6001600160a01b038116331461067b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610404565b6106858282610f0e565b5050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106d15760405162461bcd60e51b815260040161040490611b44565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610703610f74565b6001600160a01b0316146107295760405162461bcd60e51b815260040161040490611b7d565b61073281610f8f565b604080515f8082526020820190925261074d91839190610fb5565b50565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107985760405162461bcd60e51b815260040161040490611b44565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107ca610f74565b6001600160a01b0316146107f05760405162461bcd60e51b815260040161040490611b7d565b6107f982610f8f565b61068582826001610fb5565b5f306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461089f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610404565b505f516020611dc05f395f51905f5290565b6108bb5f33610a22565b6108d75760405162461bcd60e51b815260040161040490611ada565b80518251146108f85760405162461bcd60e51b815260040161040490611afc565b5f5b8251811015610a1c5781818151811061091557610915611b30565b602002602001015160985f866001600160a01b03166001600160a01b031681526020019081526020015f205f85848151811061095357610953611b30565b60200260200101516001600160e01b0319166001600160e01b03191681526020019081526020015f205f6101000a81548160ff0219169083151502179055508281815181106109a4576109a4611b30565b60200260200101516001600160e01b031916846001600160a01b03167f81361fa49ca8106c5f24d0460a1c633a5c8f8ee480b54214c9f211138ca989c28484815181106109f3576109f3611b30565b6020026020010151604051610a0c911515815260200190565b60405180910390a36001016108fa565b50505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610a635f516020611d805f395f51905f5233610a22565b80610a735750610a735f33610a22565b610a8f5760405162461bcd60e51b815260040161040490611ada565b805f5b81811015610a1c57838382818110610aac57610aac611b30565b9050602002016020810190610ac191906118e6565b6001600160a01b0316638456cb596040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610af8575f5ffd5b505af1158015610b0a573d5f5f3e3d5ffd5b50505050806001019050610a92565b60605f5b82811015610c08575f848483818110610b3857610b38611b30565b9050602002810190610b4a9190611bb6565b610b58906040810190611bd4565b610b66916004915f91611c16565b610b6f91611c3d565b335f9081526099602090815260408083206001600160e01b0319851684529091528120919250868685818110610ba757610ba7611b30565b9050602002810190610bb99190611bb6565b610bc79060208101906118e6565b6001600160a01b0316815260208101919091526040015f205460ff16610bff5760405162461bcd60e51b815260040161040490611ada565b50600101610b1d565b506104178383610d43565b5f54610100900460ff1615808015610c3157505f54600160ff909116105b80610c515750610c403061111f565b158015610c5157505f5460ff166001145b610cb45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610404565b5f805460ff191660011790558015610cd5575f805461ff0019166101001790555b610cdf5f83610e89565b8015610685575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b610d308261041e565b610d3981610e7f565b6106068383610f0e565b606081806001600160401b03811115610d5e57610d5e6116fd565b604051908082528060200260200182016040528015610d9157816020015b6060815260200190600190039081610d7c5790505b509150365f5b82811015610e7657858582818110610db157610db1611b30565b9050602002810190610dc39190611bb6565b91505f80610dd460208501856118e6565b6001600160a01b03166020850135610def6040870187611bd4565b604051610dfd929190611c75565b5f6040518083038185875af1925050503d805f8114610e37576040519150601f19603f3d011682016040523d82523d5f602084013e610e3c565b606091505b509150915081610e4e57805181602001fd5b80868481518110610e6157610e61611b30565b60209081029190910101525050600101610d97565b50505092915050565b61074d813361112e565b610e938282610a22565b610685575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610eca3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610f188282610a22565b15610685575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f516020611dc05f395f51905f52546001600160a01b031690565b610f995f33610a22565b61074d5760405162461bcd60e51b815260040161040490611ada565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610fe85761060683611187565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611042575060408051601f3d908101601f1916820190925261103f91810190611c84565b60015b6110a55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610404565b5f516020611dc05f395f51905f5281146111135760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610404565b50610606838383611220565b6001600160a01b03163b151590565b6111388282610a22565b6106855761114581611244565b611150836020611256565b604051602001611161929190611c9b565b60408051601f198184030181529082905262461bcd60e51b825261040491600401611d09565b6111908161111f565b6111f25760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610404565b5f516020611dc05f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611229836113eb565b5f825111806112355750805b1561060657610a1c838361142a565b60606103d66001600160a01b03831660145b60605f611264836002611d2f565b61126f906002611d46565b6001600160401b03811115611286576112866116fd565b6040519080825280601f01601f1916602001820160405280156112b0576020820181803683370190505b509050600360fc1b815f815181106112ca576112ca611b30565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106112f8576112f8611b30565b60200101906001600160f81b03191690815f1a9053505f61131a846002611d2f565b611325906001611d46565b90505b600181111561139c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061135957611359611b30565b1a60f81b82828151811061136f5761136f611b30565b60200101906001600160f81b03191690815f1a90535060049490941c9361139581611d59565b9050611328565b5083156104175760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610404565b6113f481611187565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606104178383604051806060016040528060278152602001611de06027913960605f5f856001600160a01b0316856040516114669190611d6e565b5f60405180830381855af49150503d805f811461149e576040519150601f19603f3d011682016040523d82523d5f602084013e6114a3565b606091505b50915091506114b4868383876114be565b9695505050505050565b6060831561152a5782515f03611523576114d78561111f565b6115235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610404565b5081611534565b611534838361153c565b949350505050565b81511561154c5781518083602001fd5b8060405162461bcd60e51b81526004016104049190611d09565b80356001600160e01b03198116811461157d575f5ffd5b919050565b5f60208284031215611592575f5ffd5b61041782611566565b5f5f83601f8401126115ab575f5ffd5b5081356001600160401b038111156115c1575f5ffd5b6020830191508360208260051b85010111156115db575f5ffd5b9250929050565b5f5f602083850312156115f3575f5ffd5b82356001600160401b03811115611608575f5ffd5b6116148582860161159b565b90969095509350505050565b5f5b8381101561163a578181015183820152602001611622565b50505f910152565b5f8151808452611659816020860160208601611620565b601f01601f19169290920160200192915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156116c457603f198786030184526116af858351611642565b94506020938401939190910190600101611693565b50929695505050505050565b5f602082840312156116e0575f5ffd5b5035919050565b80356001600160a01b038116811461157d575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715611739576117396116fd565b604052919050565b5f6001600160401b03821115611759576117596116fd565b5060051b60200190565b5f82601f830112611772575f5ffd5b813561178561178082611741565b611711565b8082825260208201915060208360051b8601019250858311156117a6575f5ffd5b602085015b838110156117d057803580151581146117c2575f5ffd5b8352602092830192016117ab565b5095945050505050565b5f5f5f5f608085870312156117ed575f5ffd5b6117f6856116e7565b935060208501356001600160401b03811115611810575f5ffd5b8501601f81018713611820575f5ffd5b803561182e61178082611741565b8082825260208201915060208360051b85010192508983111561184f575f5ffd5b6020840193505b8284101561187857611867846116e7565b825260209384019390910190611856565b955061188a9250505060408601611566565b915060608501356001600160401b038111156118a4575f5ffd5b6118b087828801611763565b91505092959194509250565b5f5f604083850312156118cd575f5ffd5b823591506118dd602084016116e7565b90509250929050565b5f602082840312156118f6575f5ffd5b610417826116e7565b5f5f60408385031215611910575f5ffd5b611919836116e7565b915060208301356001600160401b03811115611933575f5ffd5b8301601f81018513611943575f5ffd5b80356001600160401b0381111561195c5761195c6116fd565b61196f601f8201601f1916602001611711565b818152866020838501011115611983575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f606084860312156119b4575f5ffd5b6119bd846116e7565b925060208401356001600160401b038111156119d7575f5ffd5b8401601f810186136119e7575f5ffd5b80356119f561178082611741565b8082825260208201915060208360051b850101925088831115611a16575f5ffd5b6020840193505b82841015611a3f57611a2e84611566565b825260209384019390910190611a1d565b945050505060408401356001600160401b03811115611a5c575f5ffd5b611a6886828701611763565b9150509250925092565b5f5f5f60608486031215611a84575f5ffd5b611a8d846116e7565b9250611a9b60208501611566565b9150611aa9604085016116e7565b90509250925092565b5f5f60408385031215611ac3575f5ffd5b611acc836116e7565b91506118dd60208401611566565b6020808252600890820152675047503a206e2f6160c01b604082015260600190565b6020808252601a90820152790a08ea0744082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d60331b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b6020808252602c908201525f516020611da05f395f51905f5260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201525f516020611da05f395f51905f5260408201526b6163746976652070726f787960a01b606082015260800190565b5f8235605e19833603018112611bca575f5ffd5b9190910192915050565b5f5f8335601e19843603018112611be9575f5ffd5b8301803591506001600160401b03821115611c02575f5ffd5b6020019150368190038213156115db575f5ffd5b5f5f85851115611c24575f5ffd5b83861115611c30575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015611c6e576001600160e01b0319600485900360031b81901b82161691505b5092915050565b818382375f9101908152919050565b5f60208284031215611c94575f5ffd5b5051919050565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b81525f8351611ccc816017850160208801611620565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611cfd816028840160208801611620565b01602801949350505050565b602081525f6104176020830184611642565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176103d6576103d6611d1b565b808201808211156103d6576103d6611d1b565b5f81611d6757611d67611d1b565b505f190190565b5f8251611bca81846020870161162056fe8b5b16d04624687fcf0d0228f19993c9157c1ed07b41d8d430fd9100eb099fe846756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e4970bd58f39412e08a63d27a0889045720662c8c3af0fb03ab0cc9c47b3807f64736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
