{
  "_format": "hh-sol-artifact-1",
  "contractName": "GoosebumpsRouterPairs",
  "sourceName": "contracts/GoosebumpsRouterPairs.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_aggregator",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "factory",
          "type": "address"
        }
      ],
      "name": "LogRemoveFactory",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "initHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "newFactory",
          "type": "bool"
        }
      ],
      "name": "LogSetFactory",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "aggregator",
          "type": "address"
        }
      ],
      "name": "LogSetFeeAggregator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lpFee",
          "type": "uint256"
        }
      ],
      "name": "LogSetLPFee",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "allFactories",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeAggregator",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveOut",
          "type": "uint256"
        }
      ],
      "name": "getAmountIn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "feePayed",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveOut",
          "type": "uint256"
        }
      ],
      "name": "getAmountIn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "feePayed",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveOut",
          "type": "uint256"
        }
      ],
      "name": "getAmountOut",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveOut",
          "type": "uint256"
        }
      ],
      "name": "getAmountOut",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_factories",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        }
      ],
      "name": "getAmountsIn",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_factories",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        }
      ],
      "name": "getAmountsOut",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "feeAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "getReserves",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "reserveA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveB",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        }
      ],
      "name": "hasFactory",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lpFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        }
      ],
      "name": "pairFor",
      "outputs": [
        {
          "internalType": "address",
          "name": "pair",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        }
      ],
      "name": "removeFactory",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "initHash",
          "type": "bytes32"
        }
      ],
      "name": "setFactory",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "aggregator",
          "type": "address"
        }
      ],
      "name": "setFeeAggregator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_lpFee",
          "type": "uint256"
        }
      ],
      "name": "setLPFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620024c1380380620024c183398101604081905262000034916200011c565b6200003f33620000cc565b6001600160a01b038116620000a65760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a205a45524f5f4144445260448201526245535360e81b606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b03929092169190911790556200014e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200012f57600080fd5b81516001600160a01b03811681146200014757600080fd5b9392505050565b612363806200015e6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80636d91c0e2116100cd5780638da5cb5b11610081578063bc6b022911610066578063bc6b0229146102e8578063e2e430d3146102fb578063f2fde38b1461030e57600080fd5b80638da5cb5b146102c457806395f65bb4146102d557600080fd5b8063750c136a116100b2578063750c136a1461027057806376a41c5c1461028357806381889f111461029657600080fd5b80636d91c0e21461023d578063715018a61461026857600080fd5b806336304e9111610124578063462918b311610109578063462918b3146101e65780634b37c73f146102075780634c44f7ba1461021a57600080fd5b806336304e91146101be5780634327e8b5146101d357600080fd5b8063031a2eca1461015657806315b358e01461016b578063160d4cc71461017e57806332749461146101ab575b600080fd5b61016961016436600461204d565b610321565b005b610169610179366004611f9b565b610477565b61019161018c366004611ff9565b6105ad565b604080519283526020830191909152015b60405180910390f35b6101916101b9366004611fb6565b610655565b6101c6610678565b6040516101a2919061219e565b6101916101e1366004612077565b610732565b6101f96101f43660046120b0565b6107d0565b6040516101a29291906121eb565b610169610215366004611f9b565b6108b1565b61022d610228366004611f9b565b6109a9565b60405190151581526020016101a2565b61025061024b366004611fb6565b6109bc565b6040516001600160a01b0390911681526020016101a2565b6101696109dc565b600154610250906001600160a01b031681565b610191610291366004612077565b6109f0565b6102b66102a4366004611f9b565b60046020526000908152604090205481565b6040519081526020016101a2565b6000546001600160a01b0316610250565b6101696102e336600461204d565b610aaa565b6101f96102f63660046120b0565b610b6f565b610191610309366004611ff9565b610c3f565b61016961031c366004611f9b565b610cf9565b610329610d89565b6001600160a01b0382166103905760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a205a45524f5f4144445260448201526245535360e81b60648201526084015b60405180910390fd5b6001600160a01b03821660009081526004602052604090205481141561041e5760405162461bcd60e51b815260206004820152602160248201527f476f6f736562756d7073526f7574657250616972733a2053414d455f56414c5560448201527f45000000000000000000000000000000000000000000000000000000000000006064820152608401610387565b6001600160a01b03821660008181526004602052604090819020839055517fdb13ff05bd86923b4297dc921026558f10dc63ea92ffde8a234bf9f37be201a59061046b9084815260200190565b60405180910390a25050565b61047f610d89565b6001600160a01b0381166104e15760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a205a45524f5f4144445260448201526245535360e81b6064820152608401610387565b6001546001600160a01b038281169116141561054b5760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a2053414d455f4144445260448201526245535360e81b6064820152608401610387565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f013b94b1c7b81f0bdf38396997f0161b38cd29f0243437d7ba68ff5d42ff24a490600090a250565b600080856106355760015460405163241cd1bb60e21b8152600481018790526001600160a01b039091169063907346ec90602401604080518083038186803b1580156105f857600080fd5b505afa15801561060c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610630919061217a565b955090505b6106498585856106448b610de3565b610e7e565b91509550959350505050565b60008061066c8561066587610fcd565b8686611056565b91509150935093915050565b60606000610686600261113f565b67ffffffffffffffff81111561069e5761069e612317565b6040519080825280602002602001820160405280156106c7578160200160208202803683370190505b50905060005b6106d7600261113f565b81101561072c5760006106eb600283611149565b5090508083838151811061070157610701612301565b6001600160a01b03909216602092830291909101909101525080610724816122ba565b9150506106cd565b50919050565b60015460405163241cd1bb60e21b81526004810185905260009182916001600160a01b039091169063907346ec90602401604080518083038186803b15801561077a57600080fd5b505afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b2919061217a565b955090506107c58585856106448a610de3565b915094509492505050565b6060600080600061081389898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061116792505050565b915091506108a0600160009054906101000a90046001600160a01b03168a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82528994508e935090918d918d9182918501908490808284376000920191909152508992506112a2915050565b9350935050505b9550959350505050565b6108b9610d89565b6001600160a01b03811661091b5760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a205a45524f5f4144445260448201526245535360e81b6064820152608401610387565b6109266002826114f8565b6109725760405162461bcd60e51b815260206004820181905260248201527f476f6f736562756d7073526f7574657250616972733a204e4f545f464f554e446044820152606401610387565b6040516001600160a01b038216907fa552a24a0391b8a41d2d357edaacaee3d6f4f5c587310ade2a1837fa736f68b490600090a250565b60006109b660028361150d565b92915050565b60006109d2846109cb86610fcd565b858561152f565b90505b9392505050565b6109e4610d89565b6109ee6000611623565b565b600080610a07858585610a028a610de3565b61168b565b6001546040517fa97a8dfe000000000000000000000000000000000000000000000000000000008152600481018390529193506001600160a01b03169063a97a8dfe90602401604080518083038186803b158015610a6457600080fd5b505afa158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c919061217a565b508091505094509492505050565b610ab2610d89565b6001600160a01b038216610b145760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a205a45524f5f4144445260448201526245535360e81b6064820152608401610387565b6000610b22600284846117d7565b6040805184815282151560208201529192506001600160a01b038516917f938c4d7b0579fa1aad1d6656a3817219430eda1dcf807fc4302b0b002ce8ef69910160405180910390a2505050565b60606000806000610bb289898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061116792505050565b915091506108a0600160009054906101000a90046001600160a01b03168a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82528994508e935090918d918d9182918501908490808284376000920191909152508992506117ed915050565b600080610c51858585610a028b610de3565b9150856108a7576001546040517fa97a8dfe000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b039091169063a97a8dfe90602401604080518083038186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec919061217a565b5090509550959350505050565b610d01610d89565b6001600160a01b038116610d7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610387565b610d8681611623565b50565b6000546001600160a01b031633146109ee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610387565b600081610def816109a9565b610e615760405162461bcd60e51b815260206004820152602660248201527f476f6f736562756d7073526f7574657250616972733a20494e56414c49445f4660448201527f4143544f525900000000000000000000000000000000000000000000000000006064820152608401610387565b50506001600160a01b031660009081526004602052604090205490565b6000808511610ef55760405162461bcd60e51b815260206004820152602c60248201527f476f6f736562756d70734c6962726172793a20494e53554646494349454e545f60448201527f494e5055545f414d4f554e5400000000000000000000000000000000000000006064820152608401610387565b600084118015610f055750600083115b610f775760405162461bcd60e51b815260206004820152602960248201527f476f6f736562756d70734c6962726172793a20494e53554646494349454e545f60448201527f4c495155494449545900000000000000000000000000000000000000000000006064820152608401610387565b610f838261271061228c565b610f8d908661226d565b94506000610f9b848761226d565b9050600086610fac8761271061226d565b610fb69190612233565b9050610fc2818361224b565b979650505050505050565b600081610fd9816109a9565b61104b5760405162461bcd60e51b815260206004820152602660248201527f476f6f736562756d7073526f7574657250616972733a20494e56414c49445f4660448201527f4143544f525900000000000000000000000000000000000000000000000000006064820152608401610387565b6109d5600284611a89565b60008060006110658585611a9e565b5090506000806110778989898961152f565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156110af57600080fd5b505afa1580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e7919061212a565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316876001600160a01b03161461112c57808261112f565b81815b909a909950975050505050505050565b60006109b6825490565b60008080806111588686611ba7565b909450925050505b9250929050565b6060806000835167ffffffffffffffff81111561118657611186612317565b6040519080825280602002602001820160405280156111af578160200160208202803683370190505b5090506000845167ffffffffffffffff8111156111ce576111ce612317565b6040519080825280602002602001820160405280156111f7578160200160208202803683370190505b50905060005b85518110156112975761122886828151811061121b5761121b612301565b6020026020010151610fcd565b83828151811061123a5761123a612301565b60200260200101818152505061126886828151811061125b5761125b612301565b6020026020010151610de3565b82828151811061127a5761127a612301565b60209081029190910101528061128f816122ba565b9150506111fd565b509094909350915050565b606060006002845110156112f85760405162461bcd60e51b815260206004820152601f60248201527f476f6f736562756d70734c6962726172793a20494e56414c49445f50415448006044820152606401610387565b835167ffffffffffffffff81111561131257611312612317565b60405190808252806020026020018201604052801561133b578160200160208202803683370190505b5060405163241cd1bb60e21b8152600481018790529092506001600160a01b0389169063907346ec90602401604080518083038186803b15801561137e57600080fd5b505afa158015611392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b6919061217a565b836000815181106113c9576113c9612301565b6020908102919091010152905060005b600185516113e7919061228c565b8110156114ec5760008061146d8a848151811061140657611406612301565b60200260200101518a858151811061142057611420612301565b602002602001015189868151811061143a5761143a612301565b60200260200101518a8760016114509190612233565b8151811061146057611460612301565b6020026020010151611056565b915091506114af85848151811061148657611486612301565b602002602001015183838987815181106114a2576114a2612301565b6020026020010151610e7e565b856114bb856001612233565b815181106114cb576114cb612301565b602002602001018181525050505080806114e4906122ba565b9150506113d9565b50965096945050505050565b60006109d5836001600160a01b038416611c5f565b6001600160a01b038116600090815260018301602052604081205415156109d5565b600080600061153e8585611a9e565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150879060480160405160208183030381529060405280519060200120876040516020016115e2939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120979650505050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008085116117025760405162461bcd60e51b815260206004820152602d60248201527f476f6f736562756d70734c6962726172793a20494e53554646494349454e545f60448201527f4f55545055545f414d4f554e54000000000000000000000000000000000000006064820152608401610387565b6000841180156117125750600083115b6117845760405162461bcd60e51b815260206004820152602960248201527f476f6f736562756d70734c6962726172793a20494e53554646494349454e545f60448201527f4c495155494449545900000000000000000000000000000000000000000000006064820152608401610387565b6000611790868661226d565b61179c9061271061226d565b905060006117ac8461271061228c565b6117b6888761228c565b6117c0919061226d565b90506117cc818361224b565b610fc2906001612233565b60006109d2846001600160a01b03851684611de6565b606060006002845110156118435760405162461bcd60e51b815260206004820152601f60248201527f476f6f736562756d70734c6962726172793a20494e56414c49445f50415448006044820152606401610387565b835167ffffffffffffffff81111561185d5761185d612317565b604051908082528060200260200182016040528015611886578160200160208202803683370190505b509150848260018451611899919061228c565b815181106118a9576118a9612301565b6020026020010181815250506000600185516118c5919061228c565b90505b80156119e1576000806119568a6118e060018661228c565b815181106118f0576118f0612301565b60200260200101518a600186611906919061228c565b8151811061191657611916612301565b60200260200101518960018761192c919061228c565b8151811061193c5761193c612301565b60200260200101518a878151811061146057611460612301565b915091506119a485848151811061196f5761196f612301565b6020026020010151838389600188611987919061228c565b8151811061199757611997612301565b602002602001015161168b565b856119b060018661228c565b815181106119c0576119c0612301565b602002602001018181525050505080806119d9906122a3565b9150506118c8565b50876001600160a01b031663a97a8dfe83600081518110611a0457611a04612301565b60200260200101516040518263ffffffff1660e01b8152600401611a2a91815260200190565b604080518083038186803b158015611a4157600080fd5b505afa158015611a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a79919061217a565b5080915050965096945050505050565b60006109d5836001600160a01b038416611e87565b600080826001600160a01b0316846001600160a01b03161415611b295760405162461bcd60e51b815260206004820152602660248201527f476f6f736562756d70734c6962726172793a204944454e544943414c5f41444460448201527f52455353455300000000000000000000000000000000000000000000000000006064820152608401610387565b826001600160a01b0316846001600160a01b031610611b49578284611b4c565b83835b90925090506001600160a01b0382166111605760405162461bcd60e51b815260206004820152601f60248201527f476f6f736562756d70734c6962726172793a205a45524f5f41444452455353006044820152606401610387565b815460009081908310611c225760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60448201527f64730000000000000000000000000000000000000000000000000000000000006064820152608401610387565b6000846000018481548110611c3957611c39612301565b906000526020600020906002020190508060000154816001015492509250509250929050565b60008181526001830160205260408120548015611ddc576000611c8360018361228c565b9050805b8554611c959060019061228c565b811015611d54578086600101600088600001846001611cb49190612233565b81548110611cc457611cc4612301565b60009182526020808320600290920290910154835282019290925260400190205585611cf1826001612233565b81548110611d0157611d01612301565b9060005260206000209060020201866000018281548110611d2457611d24612301565b60009182526020909120825460029092020190815560019182015491015580611d4c816122ba565b915050611c87565b5084548590611d659060019061228c565b81548110611d7557611d75612301565b600091825260208220600290910201818155600101558454859080611d9c57611d9c6122eb565b60008281526020808220600260001990940193840201828155600190810183905592909355868152878201909252604082209190915592506109b6915050565b60009150506109b6565b600082815260018401602052604081205480611e4b5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556109d5565b8285611e5860018461228c565b81548110611e6857611e68612301565b90600052602060002090600202016001018190555060009150506109d5565b600081815260018301602052604081205480611ee55760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610387565b83611ef160018361228c565b81548110611f0157611f01612301565b90600052602060002090600202016001015491505092915050565b80356001600160a01b0381168114611f3357600080fd5b919050565b60008083601f840112611f4a57600080fd5b50813567ffffffffffffffff811115611f6257600080fd5b6020830191508360208260051b850101111561116057600080fd5b80516dffffffffffffffffffffffffffff81168114611f3357600080fd5b600060208284031215611fad57600080fd5b6109d582611f1c565b600080600060608486031215611fcb57600080fd5b611fd484611f1c565b9250611fe260208501611f1c565b9150611ff060408501611f1c565b90509250925092565b600080600080600060a0868803121561201157600080fd5b61201a86611f1c565b94506020860135801515811461202f57600080fd5b94979496505050506040830135926060810135926080909101359150565b6000806040838503121561206057600080fd5b61206983611f1c565b946020939093013593505050565b6000806000806080858703121561208d57600080fd5b61209685611f1c565b966020860135965060408601359560600135945092505050565b6000806000806000606086880312156120c857600080fd5b853567ffffffffffffffff808211156120e057600080fd5b6120ec89838a01611f38565b909750955060208801359450604088013591508082111561210c57600080fd5b5061211988828901611f38565b969995985093965092949392505050565b60008060006060848603121561213f57600080fd5b61214884611f7d565b925061215660208501611f7d565b9150604084015163ffffffff8116811461216f57600080fd5b809150509250925092565b6000806040838503121561218d57600080fd5b505080516020909101519092909150565b6020808252825182820181905260009190848201906040850190845b818110156121df5783516001600160a01b0316835292840192918401916001016121ba565b50909695505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561222457815184529284019290840190600101612208565b50505092019290925292915050565b60008219821115612246576122466122d5565b500190565b60008261226857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612287576122876122d5565b500290565b60008282101561229e5761229e6122d5565b500390565b6000816122b2576122b26122d5565b506000190190565b60006000198214156122ce576122ce6122d5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212209b3b6c19763d70a70dee2b96f41393869c62a0fa2b5e09f340e8831289f755a164736f6c63430008070033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101515760003560e01c80636d91c0e2116100cd5780638da5cb5b11610081578063bc6b022911610066578063bc6b0229146102e8578063e2e430d3146102fb578063f2fde38b1461030e57600080fd5b80638da5cb5b146102c457806395f65bb4146102d557600080fd5b8063750c136a116100b2578063750c136a1461027057806376a41c5c1461028357806381889f111461029657600080fd5b80636d91c0e21461023d578063715018a61461026857600080fd5b806336304e9111610124578063462918b311610109578063462918b3146101e65780634b37c73f146102075780634c44f7ba1461021a57600080fd5b806336304e91146101be5780634327e8b5146101d357600080fd5b8063031a2eca1461015657806315b358e01461016b578063160d4cc71461017e57806332749461146101ab575b600080fd5b61016961016436600461204d565b610321565b005b610169610179366004611f9b565b610477565b61019161018c366004611ff9565b6105ad565b604080519283526020830191909152015b60405180910390f35b6101916101b9366004611fb6565b610655565b6101c6610678565b6040516101a2919061219e565b6101916101e1366004612077565b610732565b6101f96101f43660046120b0565b6107d0565b6040516101a29291906121eb565b610169610215366004611f9b565b6108b1565b61022d610228366004611f9b565b6109a9565b60405190151581526020016101a2565b61025061024b366004611fb6565b6109bc565b6040516001600160a01b0390911681526020016101a2565b6101696109dc565b600154610250906001600160a01b031681565b610191610291366004612077565b6109f0565b6102b66102a4366004611f9b565b60046020526000908152604090205481565b6040519081526020016101a2565b6000546001600160a01b0316610250565b6101696102e336600461204d565b610aaa565b6101f96102f63660046120b0565b610b6f565b610191610309366004611ff9565b610c3f565b61016961031c366004611f9b565b610cf9565b610329610d89565b6001600160a01b0382166103905760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a205a45524f5f4144445260448201526245535360e81b60648201526084015b60405180910390fd5b6001600160a01b03821660009081526004602052604090205481141561041e5760405162461bcd60e51b815260206004820152602160248201527f476f6f736562756d7073526f7574657250616972733a2053414d455f56414c5560448201527f45000000000000000000000000000000000000000000000000000000000000006064820152608401610387565b6001600160a01b03821660008181526004602052604090819020839055517fdb13ff05bd86923b4297dc921026558f10dc63ea92ffde8a234bf9f37be201a59061046b9084815260200190565b60405180910390a25050565b61047f610d89565b6001600160a01b0381166104e15760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a205a45524f5f4144445260448201526245535360e81b6064820152608401610387565b6001546001600160a01b038281169116141561054b5760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a2053414d455f4144445260448201526245535360e81b6064820152608401610387565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f013b94b1c7b81f0bdf38396997f0161b38cd29f0243437d7ba68ff5d42ff24a490600090a250565b600080856106355760015460405163241cd1bb60e21b8152600481018790526001600160a01b039091169063907346ec90602401604080518083038186803b1580156105f857600080fd5b505afa15801561060c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610630919061217a565b955090505b6106498585856106448b610de3565b610e7e565b91509550959350505050565b60008061066c8561066587610fcd565b8686611056565b91509150935093915050565b60606000610686600261113f565b67ffffffffffffffff81111561069e5761069e612317565b6040519080825280602002602001820160405280156106c7578160200160208202803683370190505b50905060005b6106d7600261113f565b81101561072c5760006106eb600283611149565b5090508083838151811061070157610701612301565b6001600160a01b03909216602092830291909101909101525080610724816122ba565b9150506106cd565b50919050565b60015460405163241cd1bb60e21b81526004810185905260009182916001600160a01b039091169063907346ec90602401604080518083038186803b15801561077a57600080fd5b505afa15801561078e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b2919061217a565b955090506107c58585856106448a610de3565b915094509492505050565b6060600080600061081389898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061116792505050565b915091506108a0600160009054906101000a90046001600160a01b03168a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82528994508e935090918d918d9182918501908490808284376000920191909152508992506112a2915050565b9350935050505b9550959350505050565b6108b9610d89565b6001600160a01b03811661091b5760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a205a45524f5f4144445260448201526245535360e81b6064820152608401610387565b6109266002826114f8565b6109725760405162461bcd60e51b815260206004820181905260248201527f476f6f736562756d7073526f7574657250616972733a204e4f545f464f554e446044820152606401610387565b6040516001600160a01b038216907fa552a24a0391b8a41d2d357edaacaee3d6f4f5c587310ade2a1837fa736f68b490600090a250565b60006109b660028361150d565b92915050565b60006109d2846109cb86610fcd565b858561152f565b90505b9392505050565b6109e4610d89565b6109ee6000611623565b565b600080610a07858585610a028a610de3565b61168b565b6001546040517fa97a8dfe000000000000000000000000000000000000000000000000000000008152600481018390529193506001600160a01b03169063a97a8dfe90602401604080518083038186803b158015610a6457600080fd5b505afa158015610a78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9c919061217a565b508091505094509492505050565b610ab2610d89565b6001600160a01b038216610b145760405162461bcd60e51b815260206004820152602360248201527f476f6f736562756d7073526f7574657250616972733a205a45524f5f4144445260448201526245535360e81b6064820152608401610387565b6000610b22600284846117d7565b6040805184815282151560208201529192506001600160a01b038516917f938c4d7b0579fa1aad1d6656a3817219430eda1dcf807fc4302b0b002ce8ef69910160405180910390a2505050565b60606000806000610bb289898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061116792505050565b915091506108a0600160009054906101000a90046001600160a01b03168a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808d0282810182019093528c82528994508e935090918d918d9182918501908490808284376000920191909152508992506117ed915050565b600080610c51858585610a028b610de3565b9150856108a7576001546040517fa97a8dfe000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b039091169063a97a8dfe90602401604080518083038186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec919061217a565b5090509550959350505050565b610d01610d89565b6001600160a01b038116610d7d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610387565b610d8681611623565b50565b6000546001600160a01b031633146109ee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610387565b600081610def816109a9565b610e615760405162461bcd60e51b815260206004820152602660248201527f476f6f736562756d7073526f7574657250616972733a20494e56414c49445f4660448201527f4143544f525900000000000000000000000000000000000000000000000000006064820152608401610387565b50506001600160a01b031660009081526004602052604090205490565b6000808511610ef55760405162461bcd60e51b815260206004820152602c60248201527f476f6f736562756d70734c6962726172793a20494e53554646494349454e545f60448201527f494e5055545f414d4f554e5400000000000000000000000000000000000000006064820152608401610387565b600084118015610f055750600083115b610f775760405162461bcd60e51b815260206004820152602960248201527f476f6f736562756d70734c6962726172793a20494e53554646494349454e545f60448201527f4c495155494449545900000000000000000000000000000000000000000000006064820152608401610387565b610f838261271061228c565b610f8d908661226d565b94506000610f9b848761226d565b9050600086610fac8761271061226d565b610fb69190612233565b9050610fc2818361224b565b979650505050505050565b600081610fd9816109a9565b61104b5760405162461bcd60e51b815260206004820152602660248201527f476f6f736562756d7073526f7574657250616972733a20494e56414c49445f4660448201527f4143544f525900000000000000000000000000000000000000000000000000006064820152608401610387565b6109d5600284611a89565b60008060006110658585611a9e565b5090506000806110778989898961152f565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156110af57600080fd5b505afa1580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e7919061212a565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150826001600160a01b0316876001600160a01b03161461112c57808261112f565b81815b909a909950975050505050505050565b60006109b6825490565b60008080806111588686611ba7565b909450925050505b9250929050565b6060806000835167ffffffffffffffff81111561118657611186612317565b6040519080825280602002602001820160405280156111af578160200160208202803683370190505b5090506000845167ffffffffffffffff8111156111ce576111ce612317565b6040519080825280602002602001820160405280156111f7578160200160208202803683370190505b50905060005b85518110156112975761122886828151811061121b5761121b612301565b6020026020010151610fcd565b83828151811061123a5761123a612301565b60200260200101818152505061126886828151811061125b5761125b612301565b6020026020010151610de3565b82828151811061127a5761127a612301565b60209081029190910101528061128f816122ba565b9150506111fd565b509094909350915050565b606060006002845110156112f85760405162461bcd60e51b815260206004820152601f60248201527f476f6f736562756d70734c6962726172793a20494e56414c49445f50415448006044820152606401610387565b835167ffffffffffffffff81111561131257611312612317565b60405190808252806020026020018201604052801561133b578160200160208202803683370190505b5060405163241cd1bb60e21b8152600481018790529092506001600160a01b0389169063907346ec90602401604080518083038186803b15801561137e57600080fd5b505afa158015611392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b6919061217a565b836000815181106113c9576113c9612301565b6020908102919091010152905060005b600185516113e7919061228c565b8110156114ec5760008061146d8a848151811061140657611406612301565b60200260200101518a858151811061142057611420612301565b602002602001015189868151811061143a5761143a612301565b60200260200101518a8760016114509190612233565b8151811061146057611460612301565b6020026020010151611056565b915091506114af85848151811061148657611486612301565b602002602001015183838987815181106114a2576114a2612301565b6020026020010151610e7e565b856114bb856001612233565b815181106114cb576114cb612301565b602002602001018181525050505080806114e4906122ba565b9150506113d9565b50965096945050505050565b60006109d5836001600160a01b038416611c5f565b6001600160a01b038116600090815260018301602052604081205415156109d5565b600080600061153e8585611a9e565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150879060480160405160208183030381529060405280519060200120876040516020016115e2939291907fff00000000000000000000000000000000000000000000000000000000000000815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120979650505050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008085116117025760405162461bcd60e51b815260206004820152602d60248201527f476f6f736562756d70734c6962726172793a20494e53554646494349454e545f60448201527f4f55545055545f414d4f554e54000000000000000000000000000000000000006064820152608401610387565b6000841180156117125750600083115b6117845760405162461bcd60e51b815260206004820152602960248201527f476f6f736562756d70734c6962726172793a20494e53554646494349454e545f60448201527f4c495155494449545900000000000000000000000000000000000000000000006064820152608401610387565b6000611790868661226d565b61179c9061271061226d565b905060006117ac8461271061228c565b6117b6888761228c565b6117c0919061226d565b90506117cc818361224b565b610fc2906001612233565b60006109d2846001600160a01b03851684611de6565b606060006002845110156118435760405162461bcd60e51b815260206004820152601f60248201527f476f6f736562756d70734c6962726172793a20494e56414c49445f50415448006044820152606401610387565b835167ffffffffffffffff81111561185d5761185d612317565b604051908082528060200260200182016040528015611886578160200160208202803683370190505b509150848260018451611899919061228c565b815181106118a9576118a9612301565b6020026020010181815250506000600185516118c5919061228c565b90505b80156119e1576000806119568a6118e060018661228c565b815181106118f0576118f0612301565b60200260200101518a600186611906919061228c565b8151811061191657611916612301565b60200260200101518960018761192c919061228c565b8151811061193c5761193c612301565b60200260200101518a878151811061146057611460612301565b915091506119a485848151811061196f5761196f612301565b6020026020010151838389600188611987919061228c565b8151811061199757611997612301565b602002602001015161168b565b856119b060018661228c565b815181106119c0576119c0612301565b602002602001018181525050505080806119d9906122a3565b9150506118c8565b50876001600160a01b031663a97a8dfe83600081518110611a0457611a04612301565b60200260200101516040518263ffffffff1660e01b8152600401611a2a91815260200190565b604080518083038186803b158015611a4157600080fd5b505afa158015611a55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a79919061217a565b5080915050965096945050505050565b60006109d5836001600160a01b038416611e87565b600080826001600160a01b0316846001600160a01b03161415611b295760405162461bcd60e51b815260206004820152602660248201527f476f6f736562756d70734c6962726172793a204944454e544943414c5f41444460448201527f52455353455300000000000000000000000000000000000000000000000000006064820152608401610387565b826001600160a01b0316846001600160a01b031610611b49578284611b4c565b83835b90925090506001600160a01b0382166111605760405162461bcd60e51b815260206004820152601f60248201527f476f6f736562756d70734c6962726172793a205a45524f5f41444452455353006044820152606401610387565b815460009081908310611c225760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e60448201527f64730000000000000000000000000000000000000000000000000000000000006064820152608401610387565b6000846000018481548110611c3957611c39612301565b906000526020600020906002020190508060000154816001015492509250509250929050565b60008181526001830160205260408120548015611ddc576000611c8360018361228c565b9050805b8554611c959060019061228c565b811015611d54578086600101600088600001846001611cb49190612233565b81548110611cc457611cc4612301565b60009182526020808320600290920290910154835282019290925260400190205585611cf1826001612233565b81548110611d0157611d01612301565b9060005260206000209060020201866000018281548110611d2457611d24612301565b60009182526020909120825460029092020190815560019182015491015580611d4c816122ba565b915050611c87565b5084548590611d659060019061228c565b81548110611d7557611d75612301565b600091825260208220600290910201818155600101558454859080611d9c57611d9c6122eb565b60008281526020808220600260001990940193840201828155600190810183905592909355868152878201909252604082209190915592506109b6915050565b60009150506109b6565b600082815260018401602052604081205480611e4b5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556109d5565b8285611e5860018461228c565b81548110611e6857611e68612301565b90600052602060002090600202016001018190555060009150506109d5565b600081815260018301602052604081205480611ee55760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610387565b83611ef160018361228c565b81548110611f0157611f01612301565b90600052602060002090600202016001015491505092915050565b80356001600160a01b0381168114611f3357600080fd5b919050565b60008083601f840112611f4a57600080fd5b50813567ffffffffffffffff811115611f6257600080fd5b6020830191508360208260051b850101111561116057600080fd5b80516dffffffffffffffffffffffffffff81168114611f3357600080fd5b600060208284031215611fad57600080fd5b6109d582611f1c565b600080600060608486031215611fcb57600080fd5b611fd484611f1c565b9250611fe260208501611f1c565b9150611ff060408501611f1c565b90509250925092565b600080600080600060a0868803121561201157600080fd5b61201a86611f1c565b94506020860135801515811461202f57600080fd5b94979496505050506040830135926060810135926080909101359150565b6000806040838503121561206057600080fd5b61206983611f1c565b946020939093013593505050565b6000806000806080858703121561208d57600080fd5b61209685611f1c565b966020860135965060408601359560600135945092505050565b6000806000806000606086880312156120c857600080fd5b853567ffffffffffffffff808211156120e057600080fd5b6120ec89838a01611f38565b909750955060208801359450604088013591508082111561210c57600080fd5b5061211988828901611f38565b969995985093965092949392505050565b60008060006060848603121561213f57600080fd5b61214884611f7d565b925061215660208501611f7d565b9150604084015163ffffffff8116811461216f57600080fd5b809150509250925092565b6000806040838503121561218d57600080fd5b505080516020909101519092909150565b6020808252825182820181905260009190848201906040850190845b818110156121df5783516001600160a01b0316835292840192918401916001016121ba565b50909695505050505050565b604080825283519082018190526000906020906060840190828701845b8281101561222457815184529284019290840190600101612208565b50505092019290925292915050565b60008219821115612246576122466122d5565b500190565b60008261226857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612287576122876122d5565b500290565b60008282101561229e5761229e6122d5565b500390565b6000816122b2576122b26122d5565b506000190190565b60006000198214156122ce576122ce6122d5565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212209b3b6c19763d70a70dee2b96f41393869c62a0fa2b5e09f340e8831289f755a164736f6c63430008070033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
