{
  "_format": "hh-sol-artifact-1",
  "contractName": "TestERC20Guard",
  "sourceName": "contracts/soma/SecurityTokens/extensions/tests/TestERC20Guard.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "prevPrivileges",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "newPrivileges",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RequiredPrivilegesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_PRIVILEGES",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GLOBAL_UPDATE_PRIVILEGES_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "LOCAL_UPDATE_PRIVILEGES_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SOMA",
      "outputs": [
        {
          "internalType": "contract ISOMA",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "canTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasPrivileges",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes[]",
          "name": "data",
          "type": "bytes[]"
        }
      ],
      "name": "multicall",
      "outputs": [
        {
          "internalType": "bytes[]",
          "name": "results",
          "type": "bytes[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "requiredPrivileges",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "newRequiredPrivileges",
          "type": "bytes32"
        }
      ],
      "name": "updateRequiredPrivileges",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "validateTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c0604052730f3dc00189dbcd1d0c574e48031270cae04c4adf6080526001600160401b0360a05234801561003357600080fd5b5060805160a051611da161009860003960006102990152600081816103070152818161051d01528181610706015281816107a2015281816108880152818161099201528181610b4801528181610be401528181610cc70152610f920152611da16000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80635c975abb116100f9578063a457c2d711610097578063c6946a1211610071578063c6946a12146103db578063dd62ed3e146103ee578063eec47d6014610401578063f37d11cc1461040b57600080fd5b8063a457c2d714610395578063a9059cbb146103a8578063ac9650d8146103bb57600080fd5b80638129fc1c116100d35780638129fc1c1461036a5780638456cb591461037257806391d148541461037a57806395d89b411461038d57600080fd5b80635c975abb146102fa57806363727fc21461030257806370a082311461034157600080fd5b8063248a9ca311610166578063313ce56711610140578063313ce567146102bb57806339509351146102ca5780633f4ba83a146102dd5780634b63885a146102e757600080fd5b8063248a9ca31461026e5780632772ce9d146102815780632a7a0c681461029457600080fd5b806318160ddd116101a257806318160ddd146102195780631e26571f1461022b578063227102a61461023457806323b872dd1461025b57600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d736600461193e565b61041e565b60405190151581526020015b60405180910390f35b6101f9610449565b6040516101e891906119b8565b6101dc6102143660046119e0565b6104db565b6035545b6040519081526020016101e8565b6101605461021d565b61021d7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb181565b6101dc610269366004611a0c565b6104f3565b61021d61027c366004611a4d565b610519565b6101dc61028f366004611a4d565b61060b565b61021d7f000000000000000000000000000000000000000000000000000000000000000081565b604051601281526020016101e8565b6101dc6102d83660046119e0565b6106d3565b6102e56106f5565b005b6101dc6102f5366004611a66565b610884565b6101dc61098e565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e8565b61021d61034f366004611a66565b6001600160a01b031660009081526033602052604090205490565b6102e5610a27565b6102e5610b37565b6101dc610388366004611a83565b610cc3565b6101f9610dba565b6101dc6103a33660046119e0565b610dc9565b6101dc6103b63660046119e0565b610e4f565b6103ce6103c9366004611ab3565b610e5d565b6040516101e89190611b28565b6102e56103e9366004611a0c565b610f52565b61021d6103fc366004611b8a565b610f62565b61021d61015f5481565b6101dc610419366004611a0c565b610f8d565b60006001600160e01b03198216633cdf447360e21b1480610443575061044382611137565b92915050565b60606036805461045890611bb8565b80601f016020809104026020016040519081016040528092919081815260200182805461048490611bb8565b80156104d15780601f106104a6576101008083540402835291602001916104d1565b820191906000526020600020905b8154815290600101906020018083116104b457829003601f168201915b5050505050905090565b6000336104e981858561115c565b5060019392505050565b600033610501858285611280565b61050c8585856112fa565b60019150505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059d9190611bf2565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b81526004016105ca91815260200190565b602060405180830381865afa1580156105e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104439190611c0f565b600061061b61015f546103883390565b8061064b575061064b7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb133610cc3565b6106c25760405162461bcd60e51b815260206004820152603860248201527f477561726461626c653a20796f7520646f206e6f74206861766520746865207260448201527f6571756972656420726f6c657320746f20646f2074686973000000000000000060648201526084015b60405180910390fd5b6106cb826114d3565b506001919050565b6000336104e98185856106e68383610f62565b6106f09190611c3e565b61115c565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107869190611bf2565b6001600160a01b0316148061082d5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108229190611bf2565b6001600160a01b0316145b6108795760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106b9565b610881611518565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109089190611bf2565b6001600160a01b031663253bd7b7836109216101605490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561096a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104439190611c51565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a129190611c51565b80610a2257505060655460ff1690565b905090565b600054610100900460ff1615808015610a475750600054600160ff909116105b80610a615750303b158015610a61575060005460ff166001145b610ac45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106b9565b6000805460ff191660011790558015610ae7576000805461ff0019166101001790555b610aef61156a565b8015610881576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc89190611bf2565b6001600160a01b03161480610c6f5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c649190611bf2565b6001600160a01b0316145b610cbb5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106b9565b6108816115a4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190611bf2565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015610d96573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105129190611c51565b60606037805461045890611bb8565b60003381610dd78286610f62565b905083811015610e375760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106b9565b610e44828686840361115c565b506001949350505050565b6000336104e98185856112fa565b60608167ffffffffffffffff811115610e7857610e78611c73565b604051908082528060200260200182016040528015610eab57816020015b6060815260200190600190039081610e965790505b50905060005b82811015610f4b57610f1b30858584818110610ecf57610ecf611c89565b9050602002810190610ee19190611c9f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115e192505050565b828281518110610f2d57610f2d611c89565b60200260200101819052508080610f4390611ced565b915050610eb1565b5092915050565b610f5d8383836116d5565b505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110129190611bf2565b905060006110206101605490565b90506001600160a01b03861615806110a4575060405163253bd7b760e01b81526001600160a01b0387811660048301526024820183905283169063253bd7b790604401602060405180830381865afa158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a49190611c51565b801561112d57506001600160a01b038516158061112d575060405163253bd7b760e01b81526001600160a01b0386811660048301526024820183905283169063253bd7b790604401602060405180830381865afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190611c51565b9695505050505050565b60006001600160e01b03198216630e46e23b60e31b148061044357506104438261172c565b6001600160a01b0383166111be5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b9565b6001600160a01b03821661121f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b9565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061128c8484610f62565b905060001981146112f457818110156112e75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106b9565b6112f4848484840361115c565b50505050565b6001600160a01b03831661135e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b9565b6001600160a01b0382166113c05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b9565b6113cb8383836116d5565b6001600160a01b038316600090815260336020526040902054818110156114435760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106b9565b6001600160a01b0380851660009081526033602052604080822085850390559185168152908120805484929061147a908490611c3e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114c691815260200190565b60405180910390a36112f4565b61016054604080519182526020820183905233917f53f0b6b34c97fd1733ccb4b21aea7549d7ad3a83e6316864417b8cc1a9a9a807910160405180910390a261016055565b611520611751565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61157261179c565b61157a61179c565b6115826117c3565b61158a61179c565b61159261179c565b61159a61179c565b6115a2611855565b565b6115ac611888565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861154d3390565b60606001600160a01b0383163b6116495760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016106b9565b600080846001600160a01b0316846040516116649190611d06565b600060405180830381855af49150503d806000811461169f576040519150601f19603f3d011682016040523d82523d6000602084013e6116a4565b606091505b50915091506116cc8282604051806060016040528060278152602001611d6e602791396118d0565b95945050505050565b6116e0838383610f8d565b610f5d5760405162461bcd60e51b815260206004820152601e60248201527f455243323047756172643a204d495353494e475f50524956494c45474553000060448201526064016106b9565b60006001600160e01b0319821663b55bd4f760e01b1480610443575061044382611909565b61175961098e565b6115a25760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106b9565b600054610100900460ff166115a25760405162461bcd60e51b81526004016106b990611d22565b600054610100900460ff166117ea5760405162461bcd60e51b81526004016106b990611d22565b6040516bffffffffffffffffffffffff193060601b1660208201527ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb1603482015260540160408051601f19818403018152919052805160209091012061015f556115a26000196114d3565b600054610100900460ff1661187c5760405162461bcd60e51b81526004016106b990611d22565b6065805460ff19169055565b61189061098e565b156115a25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106b9565b606083156118df575081610512565b8251156118ef5782518084602001fd5b8160405162461bcd60e51b81526004016106b991906119b8565b60006001600160e01b0319821663d86f1ca160e01b148061044357506301ffc9a760e01b6001600160e01b0319831614610443565b60006020828403121561195057600080fd5b81356001600160e01b03198116811461051257600080fd5b60005b8381101561198357818101518382015260200161196b565b50506000910152565b600081518084526119a4816020860160208601611968565b601f01601f19169290920160200192915050565b602081526000610512602083018461198c565b6001600160a01b038116811461088157600080fd5b600080604083850312156119f357600080fd5b82356119fe816119cb565b946020939093013593505050565b600080600060608486031215611a2157600080fd5b8335611a2c816119cb565b92506020840135611a3c816119cb565b929592945050506040919091013590565b600060208284031215611a5f57600080fd5b5035919050565b600060208284031215611a7857600080fd5b8135610512816119cb565b60008060408385031215611a9657600080fd5b823591506020830135611aa8816119cb565b809150509250929050565b60008060208385031215611ac657600080fd5b823567ffffffffffffffff80821115611ade57600080fd5b818501915085601f830112611af257600080fd5b813581811115611b0157600080fd5b8660208260051b8501011115611b1657600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611b7d57603f19888603018452611b6b85835161198c565b94509285019290850190600101611b4f565b5092979650505050505050565b60008060408385031215611b9d57600080fd5b8235611ba8816119cb565b91506020830135611aa8816119cb565b600181811c90821680611bcc57607f821691505b602082108103611bec57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611c0457600080fd5b8151610512816119cb565b600060208284031215611c2157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561044357610443611c28565b600060208284031215611c6357600080fd5b8151801515811461051257600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611cb657600080fd5b83018035915067ffffffffffffffff821115611cd157600080fd5b602001915036819003821315611ce657600080fd5b9250929050565b600060018201611cff57611cff611c28565b5060010190565b60008251611d18818460208701611968565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80635c975abb116100f9578063a457c2d711610097578063c6946a1211610071578063c6946a12146103db578063dd62ed3e146103ee578063eec47d6014610401578063f37d11cc1461040b57600080fd5b8063a457c2d714610395578063a9059cbb146103a8578063ac9650d8146103bb57600080fd5b80638129fc1c116100d35780638129fc1c1461036a5780638456cb591461037257806391d148541461037a57806395d89b411461038d57600080fd5b80635c975abb146102fa57806363727fc21461030257806370a082311461034157600080fd5b8063248a9ca311610166578063313ce56711610140578063313ce567146102bb57806339509351146102ca5780633f4ba83a146102dd5780634b63885a146102e757600080fd5b8063248a9ca31461026e5780632772ce9d146102815780632a7a0c681461029457600080fd5b806318160ddd116101a257806318160ddd146102195780631e26571f1461022b578063227102a61461023457806323b872dd1461025b57600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d736600461193e565b61041e565b60405190151581526020015b60405180910390f35b6101f9610449565b6040516101e891906119b8565b6101dc6102143660046119e0565b6104db565b6035545b6040519081526020016101e8565b6101605461021d565b61021d7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb181565b6101dc610269366004611a0c565b6104f3565b61021d61027c366004611a4d565b610519565b6101dc61028f366004611a4d565b61060b565b61021d7f000000000000000000000000000000000000000000000000000000000000000081565b604051601281526020016101e8565b6101dc6102d83660046119e0565b6106d3565b6102e56106f5565b005b6101dc6102f5366004611a66565b610884565b6101dc61098e565b6103297f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101e8565b61021d61034f366004611a66565b6001600160a01b031660009081526033602052604090205490565b6102e5610a27565b6102e5610b37565b6101dc610388366004611a83565b610cc3565b6101f9610dba565b6101dc6103a33660046119e0565b610dc9565b6101dc6103b63660046119e0565b610e4f565b6103ce6103c9366004611ab3565b610e5d565b6040516101e89190611b28565b6102e56103e9366004611a0c565b610f52565b61021d6103fc366004611b8a565b610f62565b61021d61015f5481565b6101dc610419366004611a0c565b610f8d565b60006001600160e01b03198216633cdf447360e21b1480610443575061044382611137565b92915050565b60606036805461045890611bb8565b80601f016020809104026020016040519081016040528092919081815260200182805461048490611bb8565b80156104d15780601f106104a6576101008083540402835291602001916104d1565b820191906000526020600020905b8154815290600101906020018083116104b457829003601f168201915b5050505050905090565b6000336104e981858561115c565b5060019392505050565b600033610501858285611280565b61050c8585856112fa565b60019150505b9392505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610579573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059d9190611bf2565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b81526004016105ca91815260200190565b602060405180830381865afa1580156105e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104439190611c0f565b600061061b61015f546103883390565b8061064b575061064b7ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb133610cc3565b6106c25760405162461bcd60e51b815260206004820152603860248201527f477561726461626c653a20796f7520646f206e6f74206861766520746865207260448201527f6571756972656420726f6c657320746f20646f2074686973000000000000000060648201526084015b60405180910390fd5b6106cb826114d3565b506001919050565b6000336104e98185856106e68383610f62565b6106f09190611c3e565b61115c565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107869190611bf2565b6001600160a01b0316148061082d5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108229190611bf2565b6001600160a01b0316145b6108795760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106b9565b610881611518565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109089190611bf2565b6001600160a01b031663253bd7b7836109216101605490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561096a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104439190611c51565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a129190611c51565b80610a2257505060655460ff1690565b905090565b600054610100900460ff1615808015610a475750600054600160ff909116105b80610a615750303b158015610a61575060005460ff166001145b610ac45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106b9565b6000805460ff191660011790558015610ae7576000805461ff0019166101001790555b610aef61156a565b8015610881576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ba4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc89190611bf2565b6001600160a01b03161480610c6f5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c649190611bf2565b6001600160a01b0316145b610cbb5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106b9565b6108816115a4565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190611bf2565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015610d96573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105129190611c51565b60606037805461045890611bb8565b60003381610dd78286610f62565b905083811015610e375760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106b9565b610e44828686840361115c565b506001949350505050565b6000336104e98185856112fa565b60608167ffffffffffffffff811115610e7857610e78611c73565b604051908082528060200260200182016040528015610eab57816020015b6060815260200190600190039081610e965790505b50905060005b82811015610f4b57610f1b30858584818110610ecf57610ecf611c89565b9050602002810190610ee19190611c9f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115e192505050565b828281518110610f2d57610f2d611c89565b60200260200101819052508080610f4390611ced565b915050610eb1565b5092915050565b610f5d8383836116d5565b505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ceab3b16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110129190611bf2565b905060006110206101605490565b90506001600160a01b03861615806110a4575060405163253bd7b760e01b81526001600160a01b0387811660048301526024820183905283169063253bd7b790604401602060405180830381865afa158015611080573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a49190611c51565b801561112d57506001600160a01b038516158061112d575060405163253bd7b760e01b81526001600160a01b0386811660048301526024820183905283169063253bd7b790604401602060405180830381865afa158015611109573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112d9190611c51565b9695505050505050565b60006001600160e01b03198216630e46e23b60e31b148061044357506104438261172c565b6001600160a01b0383166111be5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106b9565b6001600160a01b03821661121f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106b9565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061128c8484610f62565b905060001981146112f457818110156112e75760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106b9565b6112f4848484840361115c565b50505050565b6001600160a01b03831661135e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106b9565b6001600160a01b0382166113c05760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106b9565b6113cb8383836116d5565b6001600160a01b038316600090815260336020526040902054818110156114435760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106b9565b6001600160a01b0380851660009081526033602052604080822085850390559185168152908120805484929061147a908490611c3e565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114c691815260200190565b60405180910390a36112f4565b61016054604080519182526020820183905233917f53f0b6b34c97fd1733ccb4b21aea7549d7ad3a83e6316864417b8cc1a9a9a807910160405180910390a261016055565b611520611751565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b61157261179c565b61157a61179c565b6115826117c3565b61158a61179c565b61159261179c565b61159a61179c565b6115a2611855565b565b6115ac611888565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861154d3390565b60606001600160a01b0383163b6116495760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016106b9565b600080846001600160a01b0316846040516116649190611d06565b600060405180830381855af49150503d806000811461169f576040519150601f19603f3d011682016040523d82523d6000602084013e6116a4565b606091505b50915091506116cc8282604051806060016040528060278152602001611d6e602791396118d0565b95945050505050565b6116e0838383610f8d565b610f5d5760405162461bcd60e51b815260206004820152601e60248201527f455243323047756172643a204d495353494e475f50524956494c45474553000060448201526064016106b9565b60006001600160e01b0319821663b55bd4f760e01b1480610443575061044382611909565b61175961098e565b6115a25760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106b9565b600054610100900460ff166115a25760405162461bcd60e51b81526004016106b990611d22565b600054610100900460ff166117ea5760405162461bcd60e51b81526004016106b990611d22565b6040516bffffffffffffffffffffffff193060601b1660208201527ff28c151dcc22c5bfb460fbc387993d6c0d1c1245ca20aca5f3cbd33f33041eb1603482015260540160408051601f19818403018152919052805160209091012061015f556115a26000196114d3565b600054610100900460ff1661187c5760405162461bcd60e51b81526004016106b990611d22565b6065805460ff19169055565b61189061098e565b156115a25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106b9565b606083156118df575081610512565b8251156118ef5782518084602001fd5b8160405162461bcd60e51b81526004016106b991906119b8565b60006001600160e01b0319821663d86f1ca160e01b148061044357506301ffc9a760e01b6001600160e01b0319831614610443565b60006020828403121561195057600080fd5b81356001600160e01b03198116811461051257600080fd5b60005b8381101561198357818101518382015260200161196b565b50506000910152565b600081518084526119a4816020860160208601611968565b601f01601f19169290920160200192915050565b602081526000610512602083018461198c565b6001600160a01b038116811461088157600080fd5b600080604083850312156119f357600080fd5b82356119fe816119cb565b946020939093013593505050565b600080600060608486031215611a2157600080fd5b8335611a2c816119cb565b92506020840135611a3c816119cb565b929592945050506040919091013590565b600060208284031215611a5f57600080fd5b5035919050565b600060208284031215611a7857600080fd5b8135610512816119cb565b60008060408385031215611a9657600080fd5b823591506020830135611aa8816119cb565b809150509250929050565b60008060208385031215611ac657600080fd5b823567ffffffffffffffff80821115611ade57600080fd5b818501915085601f830112611af257600080fd5b813581811115611b0157600080fd5b8660208260051b8501011115611b1657600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611b7d57603f19888603018452611b6b85835161198c565b94509285019290850190600101611b4f565b5092979650505050505050565b60008060408385031215611b9d57600080fd5b8235611ba8816119cb565b91506020830135611aa8816119cb565b600181811c90821680611bcc57607f821691505b602082108103611bec57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215611c0457600080fd5b8151610512816119cb565b600060208284031215611c2157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561044357610443611c28565b600060208284031215611c6357600080fd5b8151801515811461051257600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611cb657600080fd5b83018035915067ffffffffffffffff821115611cd157600080fd5b602001915036819003821315611ce657600080fd5b9250929050565b600060018201611cff57611cff611c28565b5060010190565b60008251611d18818460208701611968565b9190910192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
