{
  "_format": "hh-sol-artifact-1",
  "contractName": "SomaSwapFactory",
  "sourceName": "contracts/soma/SomaSwap/core/SomaSwapFactory.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "templateVersion",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "prevFeeTo",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newFeeTo",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "FeeToUpdated",
      "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": "token0",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token1",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "pair",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "PairCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "router",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RouterAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "router",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RouterRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "deployment",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "TemplateDeployed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CREATE_PAIR_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FACTORY",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FEE_SETTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "INIT_CODE_HASH",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MANAGE_ROUTER_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": [],
      "name": "TEMPLATE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "TEMPLATE_VERSION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "router",
          "type": "address"
        }
      ],
      "name": "addRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "allPairs",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "allPairsLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "createPair",
      "outputs": [
        {
          "internalType": "address",
          "name": "pair",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "deployed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "deployment",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "deploymentInfo",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "exists",
              "type": "bool"
            },
            {
              "internalType": "uint64",
              "name": "block",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "timestamp",
              "type": "uint64"
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "templateId",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "version",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "args",
              "type": "bytes"
            },
            {
              "internalType": "bytes[]",
              "name": "functionCalls",
              "type": "bytes[]"
            },
            {
              "internalType": "bool",
              "name": "cloned",
              "type": "bool"
            }
          ],
          "internalType": "struct ITemplateFactory.DeploymentInfo",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeTo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "getPair",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "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": "",
          "type": "address"
        }
      ],
      "name": "isRouter",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": [
        {
          "internalType": "address",
          "name": "router",
          "type": "address"
        }
      ],
      "name": "removeRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_feeTo",
          "type": "address"
        }
      ],
      "name": "setFeeTo",
      "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": "totalDeployments",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x61012060405273812dd6988ca35be1ba27095d90864298722f915a608052730f3dc00189dbcd1d0c574e48031270cae04c4adf610100523480156200004357600080fd5b50604051620020443803806200204483398101604081905262000066916200014e565b6b29b7b6b0a9bbb0b82830b4b960a11b60c081905260e0829052608051604051631de0a1b760e21b81526004810183905260248101849052606060448201526000606482015283916001600160a01b03169063778286dc90608401602060405180830381865afa158015620000df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010591906200014e565b60a05250506001805460ff191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15062000168565b6000602082840312156200016157600080fd5b5051919050565b60805160a05160c05160e05161010051611e4a620001fa60003960008181610342015281816105720152818161072e015281816107ca015281816108b001528181610a1801528181610ab40152610bb7015260008181610303015261154f0152600081816103d1015261152e015260006102b50152600081816102dc0152818161113b015261150c0152611e4a6000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637016b19811610104578063b5dbc295116100a2578063e934768311610071578063e9347683146104b4578063f3d7d282146104db578063f46901ed146104fe578063fb35b4e41461051157600080fd5b8063b5dbc29514610426578063c9c653961461044d578063ce3220f614610460578063e6a439051461048057600080fd5b806385bb3923116100de57806385bb3923146103b95780638bfd9174146103cc57806391d14854146103f3578063ac9650d81461040657600080fd5b80637016b1981461037757806376a71d4a1461038a5780638456cb59146103b157600080fd5b80632dd3100011610171578063574f2ba31161014b578063574f2ba31461032d5780635c975abb1461033557806363727fc21461033d5780636ae0b1541461036457600080fd5b80632dd31000146102d75780632e23efce146102fe5780633f4ba83a1461032557600080fd5b80631e3dd18b116101ad5780631e3dd18b14610267578063248a9ca31461027a57806324ca984e1461029b578063257671f5146102b057600080fd5b8063017e7e58146101d457806301ffc9a71461020957806306fdde031461022c575b600080fd5b6001546101ec9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61021c6102173660046116ef565b610519565b6040519015158152602001610200565b61025a6040518060400160405280600f81526020016e536f6d6153776170466163746f727960881b81525081565b6040516102009190611769565b6101ec61027536600461177c565b610544565b61028d61028836600461177c565b61056e565b604051908152602001610200565b6102ae6102a93660046117aa565b610660565b005b61028d7f000000000000000000000000000000000000000000000000000000000000000081565b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b61028d7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae61071d565b60045461028d565b61021c6108ac565b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae6103723660046117aa565b610945565b6101ec61038536600461177c565b6109d8565b61028d7fc5410203c442665c40348d46351e10b621f0e0871b5821003e16ba7c84b1670581565b6102ae610a07565b61021c6103c73660046117aa565b610b93565b61028d7f000000000000000000000000000000000000000000000000000000000000000081565b61021c6104013660046117c7565b610bb3565b6104196104143660046117f7565b610cb1565b60405161020091906118c1565b61028d7fde9ed34678caa25502745072eb134617e9ec4d003872632538ec1c1811f1fa4b81565b6101ec61045b3660046118d4565b610da6565b61047361046e3660046117aa565b6110d8565b6040516102009190611902565b6101ec61048e3660046118d4565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b61028d7f316a250c73aceb5d867cff741e65f35db9434a416341f1dae20770e33bb7a56a81565b61021c6104e93660046117aa565b60036020526000908152604090205460ff1681565b6102ae61050c3660046117aa565b6111aa565b60005461028d565b60006001600160e01b031982166302595ee560e11b148061053e575061053e82611264565b92915050565b6004818154811061055457600080fd5b6000918252602090912001546001600160a01b0316905081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906119cf565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b815260040161061f91815260200190565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053e91906119ec565b7fde9ed34678caa25502745072eb134617e9ec4d003872632538ec1c1811f1fa4b61068b8133610bb3565b6106b05760405162461bcd60e51b81526004016106a790611a05565b60405180910390fd5b6001600160a01b0382166000908152600360205260409020805460ff191660011790556106da3390565b6001600160a01b0316826001600160a01b03167fbc68405e644da2aaf25623ce2199da82c6dfd2e1de102b400eba6a091704d4f460405160405180910390a35050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae91906119cf565b6001600160a01b031614806108555750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084a91906119cf565b6001600160a01b0316145b6108a15760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106a7565b6108a9611289565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109309190611a7c565b8061094057505060015460ff1690565b905090565b7fde9ed34678caa25502745072eb134617e9ec4d003872632538ec1c1811f1fa4b6109708133610bb3565b61098c5760405162461bcd60e51b81526004016106a790611a05565b6001600160a01b038216600081815260036020526040808220805460ff19169055513392917fbee3e974bb6a6f44f20096ede047c191eef60322e65e4ee4bd3392230a8716d591a35050565b60008082815481106109ec576109ec611a97565b6000918252602090912001546001600160a01b031692915050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9891906119cf565b6001600160a01b03161480610b3f5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3491906119cf565b6001600160a01b0316145b610b8b5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106a7565b6108a96112db565b600030610b9f836110d8565b606001516001600160a01b03161492915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3791906119cf565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015610c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caa9190611a7c565b9392505050565b60608167ffffffffffffffff811115610ccc57610ccc611aad565b604051908082528060200260200182016040528015610cff57816020015b6060815260200190600190039081610cea5790505b50905060005b82811015610d9f57610d6f30858584818110610d2357610d23611a97565b9050602002810190610d359190611ac3565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131692505050565b828281518110610d8157610d81611a97565b60200260200101819052508080610d9790611b11565b915050610d05565b5092915050565b6000610db061133b565b7fc5410203c442665c40348d46351e10b621f0e0871b5821003e16ba7c84b16705610ddb8133610bb3565b610df75760405162461bcd60e51b81526004016106a790611a05565b826001600160a01b0316846001600160a01b031603610e645760405162461bcd60e51b8152602060048201526024808201527f536f6d6153776170466163746f72793a204944454e544943414c5f41444452456044820152635353455360e01b60648201526084016106a7565b600080846001600160a01b0316866001600160a01b031610610e87578486610e8a565b85855b90925090506001600160a01b038216610ee55760405162461bcd60e51b815260206004820152601d60248201527f536f6d6153776170466163746f72793a205a45524f5f4144445245535300000060448201526064016106a7565b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610f5a5760405162461bcd60e51b815260206004820152601c60248201527f536f6d6153776170466163746f72793a20504149525f4558495354530000000060448201526064016106a7565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b166034820152610fa29060480160405160208183030381529060405280519060200120611385565b60405163485cc95560e01b81526001600160a01b03848116600483015283811660248301529195509085169063485cc95590604401600060405180830381600087803b158015610ff157600080fd5b505af1158015611005573d6000803e3d6000fd5b505050506001600160a01b0382811660008181526002602081815260408084208787168086529083528185208054978c166001600160a01b031998891681179091559383528185208686528352818520805488168517905560048054600181018255958190527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9095018054909716841790965592548351928352908201527f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9910160405180910390a350505092915050565b604080516101208101825260008082526020820181905281830181905260608083018290526080830182905260a0830182905260c0830181905260e08301526101008201529051636719107b60e11b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ce3220f690602401600060405180830381865afa158015611182573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261053e9190810190611cb6565b7f316a250c73aceb5d867cff741e65f35db9434a416341f1dae20770e33bb7a56a6111d58133610bb3565b6111f15760405162461bcd60e51b81526004016106a790611a05565b6111f961133b565b60015460405133916001600160a01b038581169261010090920416907f6d4a22ade53c0449000b7b0ca741daec97d1abb6c1f1701bbaac8e6f61bed76890600090a450600180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006001600160e01b0319821663b55bd4f760e01b148061053e575061053e826113a0565b6112916113d5565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6112e361133b565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336112be565b6060610caa8383604051806060016040528060278152602001611e1760279139611420565b6113436108ac565b156113835760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a7565b565b600061053e60405180602001604052806000815250836114fd565b60006001600160e01b0319821663d86f1ca160e01b148061053e57506301ffc9a760e01b6001600160e01b031983161461053e565b6113dd6108ac565b6113835760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106a7565b60606001600160a01b0384163b6114885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016106a7565b600080856001600160a01b0316856040516114a39190611db6565b600060405180830381855af49150503d80600081146114de576040519150601f19603f3d011682016040523d82523d6000602084013e6114e3565b606091505b50915091506114f38282866115f3565b9695505050505050565b60006115756001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000868661162c565b600080546001810182558180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b038416908117909155604051929350339290917fbb335adc2c61b7badda271abf9381de878cc630d6d425e20cc1e58a3cad6f01591a392915050565b60608315611602575081610caa565b8251156116125782518084602001fd5b8160405162461bcd60e51b81526004016106a79190611769565b60006114f3868686868560405190808252806020026020018201604052801561166957816020015b60608152602001906001900390816116545790505b50876040516294d4bf60e51b81526000906001600160a01b0388169063129a97e0906116a19089908990899089908990600401611dd2565b6020604051808303816000875af11580156116c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e491906119cf565b979650505050505050565b60006020828403121561170157600080fd5b81356001600160e01b031981168114610caa57600080fd5b60005b8381101561173457818101518382015260200161171c565b50506000910152565b60008151808452611755816020860160208601611719565b601f01601f19169290920160200192915050565b602081526000610caa602083018461173d565b60006020828403121561178e57600080fd5b5035919050565b6001600160a01b03811681146108a957600080fd5b6000602082840312156117bc57600080fd5b8135610caa81611795565b600080604083850312156117da57600080fd5b8235915060208301356117ec81611795565b809150509250929050565b6000806020838503121561180a57600080fd5b823567ffffffffffffffff8082111561182257600080fd5b818501915085601f83011261183657600080fd5b81358181111561184557600080fd5b8660208260051b850101111561185a57600080fd5b60209290920196919550909350505050565b600081518084526020808501808196508360051b8101915082860160005b858110156118b45782840389526118a284835161173d565b9885019893509084019060010161188a565b5091979650505050505050565b602081526000610caa602083018461186c565b600080604083850312156118e757600080fd5b82356118f281611795565b915060208301356117ec81611795565b6020815261191560208201835115159052565b60006020830151611932604084018267ffffffffffffffff169052565b50604083015167ffffffffffffffff811660608401525060608301516001600160a01b038116608084015250608083015160a083015260a083015160c083015260c08301516101208060e085015261198e61014085018361173d565b915060e0850151610100601f1986850301818701526119ad848361186c565b96015115159190940152509192915050565b80516119ca81611795565b919050565b6000602082840312156119e157600080fd5b8151610caa81611795565b6000602082840312156119fe57600080fd5b5051919050565b60208082526041908201527f536f6d61416363657373436f6e74726f6c3a2063616c6c657220646f6573206e60408201527f6f7420686176652074686520617070726f70726961746520617574686f7269746060820152607960f81b608082015260a00190565b805180151581146119ca57600080fd5b600060208284031215611a8e57600080fd5b610caa82611a6c565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6000808335601e19843603018112611ada57600080fd5b83018035915067ffffffffffffffff821115611af557600080fd5b602001915036819003821315611b0a57600080fd5b9250929050565b600060018201611b3157634e487b7160e01b600052601160045260246000fd5b5060010190565b604051610120810167ffffffffffffffff81118282101715611b5c57611b5c611aad565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611b8b57611b8b611aad565b604052919050565b805167ffffffffffffffff811681146119ca57600080fd5b600082601f830112611bbc57600080fd5b815167ffffffffffffffff811115611bd657611bd6611aad565b611be9601f8201601f1916602001611b62565b818152846020838601011115611bfe57600080fd5b611c0f826020830160208701611719565b949350505050565b600082601f830112611c2857600080fd5b8151602067ffffffffffffffff80831115611c4557611c45611aad565b8260051b611c54838201611b62565b9384528581018301938381019088861115611c6e57600080fd5b84880192505b85831015611caa57825184811115611c8c5760008081fd5b611c9a8a87838c0101611bab565b8352509184019190840190611c74565b98975050505050505050565b600060208284031215611cc857600080fd5b815167ffffffffffffffff80821115611ce057600080fd5b908301906101208286031215611cf557600080fd5b611cfd611b38565b611d0683611a6c565b8152611d1460208401611b93565b6020820152611d2560408401611b93565b6040820152611d36606084016119bf565b60608201526080830151608082015260a083015160a082015260c083015182811115611d6157600080fd5b611d6d87828601611bab565b60c08301525060e083015182811115611d8557600080fd5b611d9187828601611c17565b60e0830152506101009150611da7828401611a6c565b91810191909152949350505050565b60008251611dc8818460208701611719565b9190910192915050565b85815284602082015260a060408201526000611df160a083018661173d565b8281036060840152611e03818661186c565b915050826080830152969550505050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637016b19811610104578063b5dbc295116100a2578063e934768311610071578063e9347683146104b4578063f3d7d282146104db578063f46901ed146104fe578063fb35b4e41461051157600080fd5b8063b5dbc29514610426578063c9c653961461044d578063ce3220f614610460578063e6a439051461048057600080fd5b806385bb3923116100de57806385bb3923146103b95780638bfd9174146103cc57806391d14854146103f3578063ac9650d81461040657600080fd5b80637016b1981461037757806376a71d4a1461038a5780638456cb59146103b157600080fd5b80632dd3100011610171578063574f2ba31161014b578063574f2ba31461032d5780635c975abb1461033557806363727fc21461033d5780636ae0b1541461036457600080fd5b80632dd31000146102d75780632e23efce146102fe5780633f4ba83a1461032557600080fd5b80631e3dd18b116101ad5780631e3dd18b14610267578063248a9ca31461027a57806324ca984e1461029b578063257671f5146102b057600080fd5b8063017e7e58146101d457806301ffc9a71461020957806306fdde031461022c575b600080fd5b6001546101ec9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61021c6102173660046116ef565b610519565b6040519015158152602001610200565b61025a6040518060400160405280600f81526020016e536f6d6153776170466163746f727960881b81525081565b6040516102009190611769565b6101ec61027536600461177c565b610544565b61028d61028836600461177c565b61056e565b604051908152602001610200565b6102ae6102a93660046117aa565b610660565b005b61028d7f000000000000000000000000000000000000000000000000000000000000000081565b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b61028d7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae61071d565b60045461028d565b61021c6108ac565b6101ec7f000000000000000000000000000000000000000000000000000000000000000081565b6102ae6103723660046117aa565b610945565b6101ec61038536600461177c565b6109d8565b61028d7fc5410203c442665c40348d46351e10b621f0e0871b5821003e16ba7c84b1670581565b6102ae610a07565b61021c6103c73660046117aa565b610b93565b61028d7f000000000000000000000000000000000000000000000000000000000000000081565b61021c6104013660046117c7565b610bb3565b6104196104143660046117f7565b610cb1565b60405161020091906118c1565b61028d7fde9ed34678caa25502745072eb134617e9ec4d003872632538ec1c1811f1fa4b81565b6101ec61045b3660046118d4565b610da6565b61047361046e3660046117aa565b6110d8565b6040516102009190611902565b6101ec61048e3660046118d4565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b61028d7f316a250c73aceb5d867cff741e65f35db9434a416341f1dae20770e33bb7a56a81565b61021c6104e93660046117aa565b60036020526000908152604090205460ff1681565b6102ae61050c3660046117aa565b6111aa565b60005461028d565b60006001600160e01b031982166302595ee560e11b148061053e575061053e82611264565b92915050565b6004818154811061055457600080fd5b6000918252602090912001546001600160a01b0316905081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f291906119cf565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b815260040161061f91815260200190565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053e91906119ec565b7fde9ed34678caa25502745072eb134617e9ec4d003872632538ec1c1811f1fa4b61068b8133610bb3565b6106b05760405162461bcd60e51b81526004016106a790611a05565b60405180910390fd5b6001600160a01b0382166000908152600360205260409020805460ff191660011790556106da3390565b6001600160a01b0316826001600160a01b03167fbc68405e644da2aaf25623ce2199da82c6dfd2e1de102b400eba6a091704d4f460405160405180910390a35050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ae91906119cf565b6001600160a01b031614806108555750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084a91906119cf565b6001600160a01b0316145b6108a15760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106a7565b6108a9611289565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109309190611a7c565b8061094057505060015460ff1690565b905090565b7fde9ed34678caa25502745072eb134617e9ec4d003872632538ec1c1811f1fa4b6109708133610bb3565b61098c5760405162461bcd60e51b81526004016106a790611a05565b6001600160a01b038216600081815260036020526040808220805460ff19169055513392917fbee3e974bb6a6f44f20096ede047c191eef60322e65e4ee4bd3392230a8716d591a35050565b60008082815481106109ec576109ec611a97565b6000918252602090912001546001600160a01b031692915050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9891906119cf565b6001600160a01b03161480610b3f5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3491906119cf565b6001600160a01b0316145b610b8b5760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016106a7565b6108a96112db565b600030610b9f836110d8565b606001516001600160a01b03161492915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3791906119cf565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa158015610c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610caa9190611a7c565b9392505050565b60608167ffffffffffffffff811115610ccc57610ccc611aad565b604051908082528060200260200182016040528015610cff57816020015b6060815260200190600190039081610cea5790505b50905060005b82811015610d9f57610d6f30858584818110610d2357610d23611a97565b9050602002810190610d359190611ac3565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061131692505050565b828281518110610d8157610d81611a97565b60200260200101819052508080610d9790611b11565b915050610d05565b5092915050565b6000610db061133b565b7fc5410203c442665c40348d46351e10b621f0e0871b5821003e16ba7c84b16705610ddb8133610bb3565b610df75760405162461bcd60e51b81526004016106a790611a05565b826001600160a01b0316846001600160a01b031603610e645760405162461bcd60e51b8152602060048201526024808201527f536f6d6153776170466163746f72793a204944454e544943414c5f41444452456044820152635353455360e01b60648201526084016106a7565b600080846001600160a01b0316866001600160a01b031610610e87578486610e8a565b85855b90925090506001600160a01b038216610ee55760405162461bcd60e51b815260206004820152601d60248201527f536f6d6153776170466163746f72793a205a45524f5f4144445245535300000060448201526064016106a7565b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610f5a5760405162461bcd60e51b815260206004820152601c60248201527f536f6d6153776170466163746f72793a20504149525f4558495354530000000060448201526064016106a7565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b166034820152610fa29060480160405160208183030381529060405280519060200120611385565b60405163485cc95560e01b81526001600160a01b03848116600483015283811660248301529195509085169063485cc95590604401600060405180830381600087803b158015610ff157600080fd5b505af1158015611005573d6000803e3d6000fd5b505050506001600160a01b0382811660008181526002602081815260408084208787168086529083528185208054978c166001600160a01b031998891681179091559383528185208686528352818520805488168517905560048054600181018255958190527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b9095018054909716841790965592548351928352908201527f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9910160405180910390a350505092915050565b604080516101208101825260008082526020820181905281830181905260608083018290526080830182905260a0830182905260c0830181905260e08301526101008201529051636719107b60e11b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ce3220f690602401600060405180830381865afa158015611182573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261053e9190810190611cb6565b7f316a250c73aceb5d867cff741e65f35db9434a416341f1dae20770e33bb7a56a6111d58133610bb3565b6111f15760405162461bcd60e51b81526004016106a790611a05565b6111f961133b565b60015460405133916001600160a01b038581169261010090920416907f6d4a22ade53c0449000b7b0ca741daec97d1abb6c1f1701bbaac8e6f61bed76890600090a450600180546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006001600160e01b0319821663b55bd4f760e01b148061053e575061053e826113a0565b6112916113d5565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6112e361133b565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336112be565b6060610caa8383604051806060016040528060278152602001611e1760279139611420565b6113436108ac565b156113835760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106a7565b565b600061053e60405180602001604052806000815250836114fd565b60006001600160e01b0319821663d86f1ca160e01b148061053e57506301ffc9a760e01b6001600160e01b031983161461053e565b6113dd6108ac565b6113835760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106a7565b60606001600160a01b0384163b6114885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016106a7565b600080856001600160a01b0316856040516114a39190611db6565b600060405180830381855af49150503d80600081146114de576040519150601f19603f3d011682016040523d82523d6000602084013e6114e3565b606091505b50915091506114f38282866115f3565b9695505050505050565b60006115756001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000868661162c565b600080546001810182558180527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b038416908117909155604051929350339290917fbb335adc2c61b7badda271abf9381de878cc630d6d425e20cc1e58a3cad6f01591a392915050565b60608315611602575081610caa565b8251156116125782518084602001fd5b8160405162461bcd60e51b81526004016106a79190611769565b60006114f3868686868560405190808252806020026020018201604052801561166957816020015b60608152602001906001900390816116545790505b50876040516294d4bf60e51b81526000906001600160a01b0388169063129a97e0906116a19089908990899089908990600401611dd2565b6020604051808303816000875af11580156116c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e491906119cf565b979650505050505050565b60006020828403121561170157600080fd5b81356001600160e01b031981168114610caa57600080fd5b60005b8381101561173457818101518382015260200161171c565b50506000910152565b60008151808452611755816020860160208601611719565b601f01601f19169290920160200192915050565b602081526000610caa602083018461173d565b60006020828403121561178e57600080fd5b5035919050565b6001600160a01b03811681146108a957600080fd5b6000602082840312156117bc57600080fd5b8135610caa81611795565b600080604083850312156117da57600080fd5b8235915060208301356117ec81611795565b809150509250929050565b6000806020838503121561180a57600080fd5b823567ffffffffffffffff8082111561182257600080fd5b818501915085601f83011261183657600080fd5b81358181111561184557600080fd5b8660208260051b850101111561185a57600080fd5b60209290920196919550909350505050565b600081518084526020808501808196508360051b8101915082860160005b858110156118b45782840389526118a284835161173d565b9885019893509084019060010161188a565b5091979650505050505050565b602081526000610caa602083018461186c565b600080604083850312156118e757600080fd5b82356118f281611795565b915060208301356117ec81611795565b6020815261191560208201835115159052565b60006020830151611932604084018267ffffffffffffffff169052565b50604083015167ffffffffffffffff811660608401525060608301516001600160a01b038116608084015250608083015160a083015260a083015160c083015260c08301516101208060e085015261198e61014085018361173d565b915060e0850151610100601f1986850301818701526119ad848361186c565b96015115159190940152509192915050565b80516119ca81611795565b919050565b6000602082840312156119e157600080fd5b8151610caa81611795565b6000602082840312156119fe57600080fd5b5051919050565b60208082526041908201527f536f6d61416363657373436f6e74726f6c3a2063616c6c657220646f6573206e60408201527f6f7420686176652074686520617070726f70726961746520617574686f7269746060820152607960f81b608082015260a00190565b805180151581146119ca57600080fd5b600060208284031215611a8e57600080fd5b610caa82611a6c565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6000808335601e19843603018112611ada57600080fd5b83018035915067ffffffffffffffff821115611af557600080fd5b602001915036819003821315611b0a57600080fd5b9250929050565b600060018201611b3157634e487b7160e01b600052601160045260246000fd5b5060010190565b604051610120810167ffffffffffffffff81118282101715611b5c57611b5c611aad565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611b8b57611b8b611aad565b604052919050565b805167ffffffffffffffff811681146119ca57600080fd5b600082601f830112611bbc57600080fd5b815167ffffffffffffffff811115611bd657611bd6611aad565b611be9601f8201601f1916602001611b62565b818152846020838601011115611bfe57600080fd5b611c0f826020830160208701611719565b949350505050565b600082601f830112611c2857600080fd5b8151602067ffffffffffffffff80831115611c4557611c45611aad565b8260051b611c54838201611b62565b9384528581018301938381019088861115611c6e57600080fd5b84880192505b85831015611caa57825184811115611c8c5760008081fd5b611c9a8a87838c0101611bab565b8352509184019190840190611c74565b98975050505050505050565b600060208284031215611cc857600080fd5b815167ffffffffffffffff80821115611ce057600080fd5b908301906101208286031215611cf557600080fd5b611cfd611b38565b611d0683611a6c565b8152611d1460208401611b93565b6020820152611d2560408401611b93565b6040820152611d36606084016119bf565b60608201526080830151608082015260a083015160a082015260c083015182811115611d6157600080fd5b611d6d87828601611bab565b60c08301525060e083015182811115611d8557600080fd5b611d9187828601611c17565b60e0830152506101009150611da7828401611a6c565b91810191909152949350505050565b60008251611dc8818460208701611719565b9190910192915050565b85815284602082015260a060408201526000611df160a083018661173d565b8281036060840152611e03818661186c565b915050826080830152969550505050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
