{
  "contractName": "KeepTokenGeyser",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_stakingToken",
          "type": "address"
        },
        {
          "internalType": "contract KeepToken",
          "name": "_distributionToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_maxUnlockSchedules",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_startBonus",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_bonusPeriodSec",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_initialSharesPerToken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_durationSec",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "oldDurationSec",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newDurationSec",
          "type": "uint256"
        }
      ],
      "name": "DurationSecUpdated",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldRewardDistribution",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newRewardDistribution",
          "type": "address"
        }
      ],
      "name": "RewardDistributionRoleTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "total",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "Staked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokensClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "durationSec",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "total",
          "type": "uint256"
        }
      ],
      "name": "TokensLocked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "total",
          "type": "uint256"
        }
      ],
      "name": "TokensUnlocked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "total",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "Unstaked",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "BONUS_DECIMALS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "bonusPeriodSec",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "durationSec",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getDistributionToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getStakingToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "durationSec",
          "type": "uint256"
        }
      ],
      "name": "lockTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "receiveApproval",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenToRescue",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "rescueFundsFromStakingPool",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "rewardDistribution",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_newDurationSec",
          "type": "uint256"
        }
      ],
      "name": "setDurationSec",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newRewardDistribution",
          "type": "address"
        }
      ],
      "name": "setRewardDistribution",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "stake",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "stakeFor",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "startBonus",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "supportsHistory",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalLocked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalLockedShares",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalStaked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "totalStakedFor",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalStakingShares",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalUnlocked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "unlockScheduleCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "unlockSchedules",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "initialLockedShares",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "unlockedShares",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lastUnlockTimestampSec",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "endAtSec",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "durationSec",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unlockTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "unstake",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "unstakeQuery",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "updateAccounting",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526000600555600060065560006007556000600855600060095542600a556000600b556000600c553480156200003857600080fd5b506040516200306f3803806200306f833981810160405260e08110156200005e57600080fd5b508051602082015160408301516060840151608085015160a086015160c0909601519495939492939192909190868686868686620000a46001600160e01b036200032016565b600080546001600160a01b0319166001600160a01b03928316178082556040519216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360648311156200012e5760405162461bcd60e51b8152600401808060200182810382526021815260200180620030036021913960400191505060405180910390fd5b816200016c5760405162461bcd60e51b81526004018080602001828103825260218152602001806200304e6021913960400191505060405180910390fd5b60008111620001ad5760405162461bcd60e51b815260040180806020018281038252602a81526020018062003024602a913960400191505060405180910390fd5b85604051620001bc9062000333565b6001600160a01b03909116815260405190819003602001906000f080158015620001ea573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039290921691909117905560405185906200021b9062000333565b6001600160a01b03909116815260405190819003602001906000f08015801562000249573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b039290921691909117905560405185906200027a9062000333565b6001600160a01b03909116815260405190819003602001906000f080158015620002a8573d6000803e3d6000fd5b50600380546001600160a01b0319166001600160a01b039290921691909117905560058390556006829055600b849055600c819055620002e762000324565b600480546001600160a01b0319166001600160a01b03929092169190911790555050506010939093555062000341975050505050505050565b3390565b6000546001600160a01b031690565b61073680620028cd83390190565b61257c80620003516000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f5780638f4ffcb1116100a2578063c8fd6ed011610071578063c8fd6ed0146105a8578063f2fde38b1461061d578063f968f49314610643578063fc0c546a1461064b576101f0565b80638f4ffcb1146105035780639f9106d114610590578063a779d08014610598578063c7ae2007146105a0576101f0565b806386805dd1116100de57806386805dd1146104b357806389158d8e146104d05780638da5cb5b146104f35780638f32d59b146104fb576101f0565b8063715018a6146104935780637c6aa6f41461049b578063817b1cd2146104a357806381c39bec146104ab576101f0565b8063494347e7116101875780635a72bbef116101565780635a72bbef146103f15780635c94bcb21461043b5780637033e4a61461048357806370c6a17e1461048b576101f0565b8063494347e7146103805780634b341aed146103bb5780634c2a178a146103e157806356891412146103e9576101f0565b8063101114cf116101c3578063101114cf146103325780631dc27fde1461035657806322c12b841461037057806338b45fde14610378576101f0565b80630611e1fd146101f55780630d68b761146102145780630e89439b1461023a5780630ef96356146102af575b600080fd5b6102126004803603602081101561020b57600080fd5b5035610653565b005b6102126004803603602081101561022a57600080fd5b50356001600160a01b031661071b565b6102126004803603604081101561025057600080fd5b81359190810190604081016020820135600160201b81111561027157600080fd5b82018360208201111561028357600080fd5b803590602001918460018302840111600160201b831117156102a457600080fd5b509092509050610811565b610212600480360360608110156102c557600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156102f457600080fd5b82018360208201111561030657600080fd5b803590602001918460018302840111600160201b8311171561032757600080fd5b509092509050610821565b61033a610879565b604080516001600160a01b039092168252519081900360200190f35b61035e610888565b60408051918252519081900360200190f35b61033a61088d565b61035e610a03565b610388610a09565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61035e600480360360208110156103d157600080fd5b50356001600160a01b0316610b15565b61035e610b5c565b61035e610b62565b6104276004803603606081101561040757600080fd5b506001600160a01b03813581169160208101359091169060400135610ba7565b604080519115158252519081900360200190f35b6104586004803603602081101561045157600080fd5b5035610c84565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b610427610cc2565b61035e610cc7565b610212610ccd565b61035e610d5e565b61035e610d64565b61035e610da9565b61035e600480360360208110156104c957600080fd5b5035610daf565b610212600480360360408110156104e657600080fd5b5080359060200135610dba565b61033a61113a565b610427611149565b6102126004803603608081101561051957600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b81111561055257600080fd5b82018360208201111561056457600080fd5b803590602001918460018302840111600160201b8311171561058557600080fd5b50909250905061116d565b61033a6111d7565b61035e61121c565b61035e611261565b610212600480360360408110156105be57600080fd5b81359190810190604081016020820135600160201b8111156105df57600080fd5b8201836020820111156105f157600080fd5b803590602001918460018302840111600160201b8311171561061257600080fd5b509092509050611267565b6102126004803603602081101561063357600080fd5b50356001600160a01b0316611270565b61035e6112c3565b61033a611457565b61065b611149565b61069a576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b600081116106d95760405162461bcd60e51b81526004018080602001828103825260288152602001806124f06028913960400191505060405180910390fd5b601054604080519182526020820183905280517f0bbad1f9a9c966e9a1483fb95cafe4ce711c97e92885db3b08fec5da54de2d479281900390910190a1601055565b610723611149565b610762576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b6001600160a01b0381166107a75760405162461bcd60e51b815260040180806020018281038252602b81526020018061249c602b913960400191505060405180910390fd5b600454604080516001600160a01b039283168152918316602083015280517f840b9fc77a9405c32398a96e7edbf3be477e284a1f66fe9482c82b359a4baf239281900390910190a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b61081c333385611466565b505050565b610829611149565b610868576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b610873338585611466565b50505050565b6004546001600160a01b031681565b600281565b60035460408051637e062a3560e11b815290516000926001600160a01b03169163fc0c546a916004808301926020929190829003018186803b1580156108d257600080fd5b505afa1580156108e6573d6000803e3d6000fd5b505050506040513d60208110156108fc57600080fd5b505160025460408051637e062a3560e11b815290516001600160a01b03938416939092169163fc0c546a91600480820192602092909190829003018186803b15801561094757600080fd5b505afa15801561095b573d6000803e3d6000fd5b505050506040513d602081101561097157600080fd5b50516001600160a01b03161461098357fe5b600260009054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109d157600080fd5b505afa1580156109e5573d6000803e3d6000fd5b505050506040513d60208110156109fb57600080fd5b505190505b90565b60055481565b600080600080600080610a1a6112c3565b506000610a44600854610a38600a544261180190919063ffffffff16565b9063ffffffff61184c16565b600954909150610a5a908263ffffffff6118a516565b60095542600a819055336000908152600d60205260408120805460028201549193610a8f92610a38919063ffffffff61180116565b6001830154909150610aa7908263ffffffff6118a516565b6001830155426002830155600954600090610ac3576000610ae5565b610ae5600954610ad98560010154610a3861121c565b9063ffffffff6118ff16565b9050610aef610b62565b610af761121c565b600190940154600954919c949b509950975095504294509092505050565b60008060085411610b27576000610b54565b6008546001600160a01b0383166000908152600d6020526040902054610b549190610ad990610a38610d64565b90505b919050565b60105481565b600354604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b1580156109d157600080fd5b6000610bb1611149565b610bf0576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b60015460408051631b32b81560e21b81526001600160a01b03878116600483015286811660248301526044820186905291519190921691636ccae0549160648083019260209291908290030181600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050506040513d6020811015610c7857600080fd5b505190505b9392505050565b600f8181548110610c9157fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909185565b600090565b60085481565b610cd5611149565b610d14576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60065481565b600154604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b1580156109d157600080fd5b60075481565b6000610b5482611941565b6004546001600160a01b03163314610e035760405162461bcd60e51b81526004018080602001828103825260258152602001806123246025913960400191505060405180910390fd5b600b54600f5410610e455760405162461bcd60e51b815260040180806020018281038252602d81526020018061246f602d913960400191505060405180910390fd5b610e4d610a09565b5050505050506000610e5d610b62565b90506000808211610e8157600c54610e7c90859063ffffffff61184c16565b610e9a565b610e9a82610ad98660075461184c90919063ffffffff16565b9050610ea4612101565b8181524260408201819052610ebf908563ffffffff6118a516565b6060820190815260808201858152600f805460018101825560009190915283517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80260059092029182015560208401517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80382015560408401517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80482015591517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac805830155517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80690910155600754610fb490836118a5565b60075560035460408051637e062a3560e11b815290516001600160a01b039092169163fc0c546a91600480820192602092909190829003018186803b158015610ffc57600080fd5b505afa158015611010573d6000803e3d6000fd5b505050506040513d602081101561102657600080fd5b5051600354604080516323b872dd60e01b81523360048201526001600160a01b03928316602482015260448101899052905191909216916323b872dd9160648083019260209291908290030181600087803b15801561108457600080fd5b505af1158015611098573d6000803e3d6000fd5b505050506040513d60208110156110ae57600080fd5b50516110eb5760405162461bcd60e51b815260040180806020018281038252602d815260200180612193602d913960400191505060405180910390fd5b7ff346961af4c52f314df1b45964746280fe409abb959d4a2458d58f79408b1fe88585611116610b62565b60408051938452602084019290925282820152519081900360600190a15050505050565b6000546001600160a01b031690565b600080546001600160a01b031661115e611e10565b6001600160a01b031614905090565b61117561088d565b6001600160a01b0316836001600160a01b0316146111c45760405162461bcd60e51b81526004018080602001828103825260298152602001806124c76029913960400191505060405180910390fd5b6111d084601054610dba565b5050505050565b60015460408051637e062a3560e11b815290516000926001600160a01b03169163fc0c546a916004808301926020929190829003018186803b1580156109d157600080fd5b600254604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b1580156109d157600080fd5b600f5490565b61087383611941565b611278611149565b6112b7576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b6112c081611e14565b50565b600080806112cf610b62565b9050600754600014156112e457809150611348565b6000805b600f548110156113155761130b6112fe82611eb4565b839063ffffffff6118a516565b91506001016112e8565b5060075461132d90610ad9838563ffffffff61184c16565b600754909350611343908263ffffffff61180116565b600755505b8115611451576003546002546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018690529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b505161140e5760405162461bcd60e51b815260040180806020018281038252602f8152602001806122cf602f913960400191505060405180910390fd5b7f2e444eb379b177e88ce0649c6110a3b01099f03e297127919dd5e3b63a761a9c82611438610b62565b6040805192835260208301919091528051918290030190a15b50905090565b60006114616111d7565b905090565b600081116114a55760405162461bcd60e51b81526004018080602001828103825260218152602001806123c36021913960400191505060405180910390fd5b6001600160a01b0382166114ea5760405162461bcd60e51b81526004018080602001828103825260288152602001806122846028913960400191505060405180910390fd5b6008541580611500575060006114fe610d64565b115b61153b5760405162461bcd60e51b815260040180806020018281038252604a815260200180612425604a913960600191505060405180910390fd5b6000806008541161155f57600c5461155a90839063ffffffff61184c16565b61157d565b61157d61156a610d64565b600854610ad9908563ffffffff61184c16565b9050600081116115be5760405162461bcd60e51b81526004018080602001828103825260268152602001806122fe6026913960400191505060405180910390fd5b6115c6610a09565b505050506001600160a01b0385166000908152600d6020526040902080549092506115f29150836118a5565b8155426002820155611602612130565b506040805180820182528381524260208083019182526001600160a01b0388166000908152600e82529384208054600181810183559186529190942083516002909202019081559051920191909155600854611664908463ffffffff6118a516565b60085560015460408051637e062a3560e11b815290516001600160a01b039092169163fc0c546a91600480820192602092909190829003018186803b1580156116ac57600080fd5b505afa1580156116c0573d6000803e3d6000fd5b505050506040513d60208110156116d657600080fd5b5051600154604080516323b872dd60e01b81526001600160a01b038a81166004830152928316602482015260448101889052905191909216916323b872dd9160648083019260209291908290030181600087803b15801561173657600080fd5b505af115801561174a573d6000803e3d6000fd5b505050506040513d602081101561176057600080fd5b505161179d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612395602e913960400191505060405180910390fd5b846001600160a01b03167fc65e53b88159e7d2c0fc12a0600072e28ae53ff73b4c1715369c30f160935142856117d288610b15565b6040805192835260208301919091526060828201819052600090830152519081900360a00190a2505050505050565b600061184383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f77565b90505b92915050565b60008261185b57506000611846565b8282028284828161186857fe5b04146118435760405162461bcd60e51b81526004018080602001828103825260218152602001806123e46021913960400191505060405180910390fd5b600082820183811015611843576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061184383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061200e565b600061194b610a09565b505050505050600082116119905760405162461bcd60e51b81526004018080602001828103825260238152602001806122ac6023913960400191505060405180910390fd5b8161199a33610b15565b10156119d75760405162461bcd60e51b815260040180806020018281038252603d815260200180612247603d913960400191505060405180910390fd5b60006119f76119e4610d64565b600854610ad9908663ffffffff61184c16565b905060008111611a385760405162461bcd60e51b81526004018080602001828103825260308152602001806121c06030913960400191505060405180910390fd5b336000908152600d60209081526040808320600e9092528220909183815b8115611b5b57835460009085906000198101908110611a7157fe5b906000526020600020906002020190506000611a9a82600101544261180190919063ffffffff16565b82549091506000908510611b08578254611aba908363ffffffff61184c16565b9050611ac7848284612073565b9350611ad9868263ffffffff6118a516565b8354909650611aef90869063ffffffff61180116565b8754909550611b0288600019830161214a565b50611b53565b611b18858363ffffffff61184c16565b9050611b25848284612073565b9350611b37868263ffffffff6118a516565b8354909650611b4c908663ffffffff61180116565b8355600094505b505050611a56565b6001850154611b70908463ffffffff61180116565b60018601558454611b87908763ffffffff61180116565b8555600954611b9c908463ffffffff61180116565b600955600854611bb2908763ffffffff61180116565b6008556001546040805163a9059cbb60e01b8152336004820152602481018b905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015611c0957600080fd5b505af1158015611c1d573d6000803e3d6000fd5b505050506040513d6020811015611c3357600080fd5b5051611c705760405162461bcd60e51b81526004018080602001828103825260308152602001806125186030913960400191505060405180910390fd5b6002546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015611cc457600080fd5b505af1158015611cd8573d6000803e3d6000fd5b505050506040513d6020811015611cee57600080fd5b5051611d2b5760405162461bcd60e51b81526004018080602001828103825260318152602001806122166031913960400191505060405180910390fd5b337faf01bfc8475df280aca00b578c4a948e6d95700f0db8c13365240f7f973c875489611d5783610b15565b6040805192835260208301919091526060828201819052600090830152519081900360a00190a260408051828152905133917f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e430919081900360200190a26008541580611dca57506000611dc8610d64565b115b611e055760405162461bcd60e51b815260040180806020018281038252604c815260200180612349604c913960600191505060405180910390fd5b979650505050505050565b3390565b6001600160a01b038116611e595760405162461bcd60e51b81526004018080602001828103825260268152602001806121f06026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600f8381548110611ec457fe5b906000526020600020906005020190508060000154816001015410611eed576000915050610b57565b60038101546000904210611f225760018201548254611f119163ffffffff61180116565b600383015460028401559050611f52565b611f498260040154610ad98460000154610a3886600201544261180190919063ffffffff16565b42600284015590505b6001820154611f67908263ffffffff6118a516565b6001909201919091559050919050565b600081848411156120065760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611fcb578181015183820152602001611fb3565b50505050905090810190601f168015611ff85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361205d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611fcb578181015183820152602001611fb3565b50600083858161206957fe5b0495945050505050565b600080612088600954610ad986610a3861121c565b905060065483106120ab576120a3858263ffffffff6118a516565b915050610c7d565b60006002600a0a905060006120ef82610ad985610a386120e0600654610ad98c610a386005548c61180190919063ffffffff16565b6005549063ffffffff6118a516565b9050611e05878263ffffffff6118a516565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b81548183558181111561081c5760008381526020902061081c91610a009160029182028101918502015b8082111561218e5760008082556001820155600201612174565b509056fe546f6b656e4765797365723a207472616e7366657220696e746f206c6f636b656420706f6f6c206661696c6564546f6b656e4765797365723a20556e61626c6520746f20756e7374616b6520616d6f756e74207468697320736d616c6c4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373546f6b656e4765797365723a207472616e73666572206f7574206f6620756e6c6f636b656420706f6f6c206661696c6564546f6b656e4765797365723a20756e7374616b6520616d6f756e742069732067726561746572207468616e20746f74616c2075736572207374616b6573546f6b656e4765797365723a2062656e6566696369617279206973207a65726f2061646472657373546f6b656e4765797365723a20756e7374616b6520616d6f756e74206973207a65726f546f6b656e4765797365723a207472616e73666572206f7574206f66206c6f636b656420706f6f6c206661696c6564546f6b656e4765797365723a205374616b6520616d6f756e7420697320746f6f20736d616c6c43616c6c6572206973206e6f74207468652072657761726420646973747269627574696f6e546f6b656e4765797365723a204572726f7220756e7374616b696e672e205374616b696e67207368617265732065786973742c20627574206e6f207374616b696e6720746f6b656e7320646f546f6b656e4765797365723a207472616e7366657220696e746f207374616b696e6720706f6f6c206661696c6564546f6b656e4765797365723a207374616b6520616d6f756e74206973207a65726f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572546f6b656e4765797365723a20496e76616c69642073746174652e205374616b696e67207368617265732065786973742c20627574206e6f207374616b696e6720746f6b656e7320646f546f6b656e4765797365723a2072656163686564206d6178696d756d20756e6c6f636b207363686564756c65734e65772072657761726420646973747269627574696f6e20697320746865207a65726f2061646472657373546f6b656e206973206e6f7420737570706f7274656420646973747269627574696f6e20746f6b656e4e6577206475726174696f6e2068617320746f2062652067726561746572207468616e207a65726f546f6b656e4765797365723a207472616e73666572206f7574206f66207374616b696e6720706f6f6c206661696c6564a265627a7a7231582000002549b141c1502e37f967dcece59539a90912e06f57667030752f9fa806e364736f6c63430005110032608060405234801561001057600080fd5b506040516107363803806107368339818101604052602081101561003357600080fd5b50516100466001600160e01b036100b316565b600080546001600160a01b0319166001600160a01b03928316178082556040519216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600180546001600160a01b0319166001600160a01b03929092169190911790556100b7565b3390565b610670806100c66000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063a9059cbb1161005b578063a9059cbb1461010d578063b69ef8a814610139578063f2fde38b14610153578063fc0c546a1461017957610088565b80636ccae0541461008d578063715018a6146100d75780638da5cb5b146100e15780638f32d59b14610105575b600080fd5b6100c3600480360360608110156100a357600080fd5b506001600160a01b03813581169160208101359091169060400135610181565b604080519115158252519081900360200190f35b6100df6102ab565b005b6100e961033c565b604080516001600160a01b039092168252519081900360200190f35b6100c361034b565b6100c36004803603604081101561012357600080fd5b506001600160a01b03813516906020013561036f565b610141610441565b60408051918252519081900360200190f35b6100df6004803603602081101561016957600080fd5b50356001600160a01b03166104bd565b6100e9610510565b600061018b61034b565b6101ca576040805162461bcd60e51b815260206004820181905260248201526000805160206105ea833981519152604482015290519081900360640190fd5b6001546001600160a01b03858116911614156102175760405162461bcd60e51b815260040180806020018281038252603281526020018061060a6032913960400191505060405180910390fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561027757600080fd5b505af115801561028b573d6000803e3d6000fd5b505050506040513d60208110156102a157600080fd5b5051949350505050565b6102b361034b565b6102f2576040805162461bcd60e51b815260206004820181905260248201526000805160206105ea833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b600080546001600160a01b031661036061051f565b6001600160a01b031614905090565b600061037961034b565b6103b8576040805162461bcd60e51b815260206004820181905260248201526000805160206105ea833981519152604482015290519081900360640190fd5b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561040e57600080fd5b505af1158015610422573d6000803e3d6000fd5b505050506040513d602081101561043857600080fd5b50519392505050565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561048c57600080fd5b505afa1580156104a0573d6000803e3d6000fd5b505050506040513d60208110156104b657600080fd5b5051905090565b6104c561034b565b610504576040805162461bcd60e51b815260206004820181905260248201526000805160206105ea833981519152604482015290519081900360640190fd5b61050d81610523565b50565b6001546001600160a01b031681565b3390565b6001600160a01b0381166105685760405162461bcd60e51b81526004018080602001828103825260268152602001806105c46026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572546f6b656e506f6f6c3a2043616e6e6f7420636c61696d20746f6b656e2068656c642062792074686520636f6e7472616374a265627a7a7231582036acc360bd862e0cf24e7723b0187a63821a2235b26da9a0ffa4ac6b0a82409d64736f6c63430005110032546f6b656e4765797365723a20737461727420626f6e757320746f6f2068696768546f6b656e4765797365723a20696e697469616c536861726573506572546f6b656e206973207a65726f546f6b656e4765797365723a20626f6e757320706572696f64206973207a65726f",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f5780638f4ffcb1116100a2578063c8fd6ed011610071578063c8fd6ed0146105a8578063f2fde38b1461061d578063f968f49314610643578063fc0c546a1461064b576101f0565b80638f4ffcb1146105035780639f9106d114610590578063a779d08014610598578063c7ae2007146105a0576101f0565b806386805dd1116100de57806386805dd1146104b357806389158d8e146104d05780638da5cb5b146104f35780638f32d59b146104fb576101f0565b8063715018a6146104935780637c6aa6f41461049b578063817b1cd2146104a357806381c39bec146104ab576101f0565b8063494347e7116101875780635a72bbef116101565780635a72bbef146103f15780635c94bcb21461043b5780637033e4a61461048357806370c6a17e1461048b576101f0565b8063494347e7146103805780634b341aed146103bb5780634c2a178a146103e157806356891412146103e9576101f0565b8063101114cf116101c3578063101114cf146103325780631dc27fde1461035657806322c12b841461037057806338b45fde14610378576101f0565b80630611e1fd146101f55780630d68b761146102145780630e89439b1461023a5780630ef96356146102af575b600080fd5b6102126004803603602081101561020b57600080fd5b5035610653565b005b6102126004803603602081101561022a57600080fd5b50356001600160a01b031661071b565b6102126004803603604081101561025057600080fd5b81359190810190604081016020820135600160201b81111561027157600080fd5b82018360208201111561028357600080fd5b803590602001918460018302840111600160201b831117156102a457600080fd5b509092509050610811565b610212600480360360608110156102c557600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156102f457600080fd5b82018360208201111561030657600080fd5b803590602001918460018302840111600160201b8311171561032757600080fd5b509092509050610821565b61033a610879565b604080516001600160a01b039092168252519081900360200190f35b61035e610888565b60408051918252519081900360200190f35b61033a61088d565b61035e610a03565b610388610a09565b604080519687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b61035e600480360360208110156103d157600080fd5b50356001600160a01b0316610b15565b61035e610b5c565b61035e610b62565b6104276004803603606081101561040757600080fd5b506001600160a01b03813581169160208101359091169060400135610ba7565b604080519115158252519081900360200190f35b6104586004803603602081101561045157600080fd5b5035610c84565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b610427610cc2565b61035e610cc7565b610212610ccd565b61035e610d5e565b61035e610d64565b61035e610da9565b61035e600480360360208110156104c957600080fd5b5035610daf565b610212600480360360408110156104e657600080fd5b5080359060200135610dba565b61033a61113a565b610427611149565b6102126004803603608081101561051957600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b81111561055257600080fd5b82018360208201111561056457600080fd5b803590602001918460018302840111600160201b8311171561058557600080fd5b50909250905061116d565b61033a6111d7565b61035e61121c565b61035e611261565b610212600480360360408110156105be57600080fd5b81359190810190604081016020820135600160201b8111156105df57600080fd5b8201836020820111156105f157600080fd5b803590602001918460018302840111600160201b8311171561061257600080fd5b509092509050611267565b6102126004803603602081101561063357600080fd5b50356001600160a01b0316611270565b61035e6112c3565b61033a611457565b61065b611149565b61069a576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b600081116106d95760405162461bcd60e51b81526004018080602001828103825260288152602001806124f06028913960400191505060405180910390fd5b601054604080519182526020820183905280517f0bbad1f9a9c966e9a1483fb95cafe4ce711c97e92885db3b08fec5da54de2d479281900390910190a1601055565b610723611149565b610762576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b6001600160a01b0381166107a75760405162461bcd60e51b815260040180806020018281038252602b81526020018061249c602b913960400191505060405180910390fd5b600454604080516001600160a01b039283168152918316602083015280517f840b9fc77a9405c32398a96e7edbf3be477e284a1f66fe9482c82b359a4baf239281900390910190a1600480546001600160a01b0319166001600160a01b0392909216919091179055565b61081c333385611466565b505050565b610829611149565b610868576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b610873338585611466565b50505050565b6004546001600160a01b031681565b600281565b60035460408051637e062a3560e11b815290516000926001600160a01b03169163fc0c546a916004808301926020929190829003018186803b1580156108d257600080fd5b505afa1580156108e6573d6000803e3d6000fd5b505050506040513d60208110156108fc57600080fd5b505160025460408051637e062a3560e11b815290516001600160a01b03938416939092169163fc0c546a91600480820192602092909190829003018186803b15801561094757600080fd5b505afa15801561095b573d6000803e3d6000fd5b505050506040513d602081101561097157600080fd5b50516001600160a01b03161461098357fe5b600260009054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109d157600080fd5b505afa1580156109e5573d6000803e3d6000fd5b505050506040513d60208110156109fb57600080fd5b505190505b90565b60055481565b600080600080600080610a1a6112c3565b506000610a44600854610a38600a544261180190919063ffffffff16565b9063ffffffff61184c16565b600954909150610a5a908263ffffffff6118a516565b60095542600a819055336000908152600d60205260408120805460028201549193610a8f92610a38919063ffffffff61180116565b6001830154909150610aa7908263ffffffff6118a516565b6001830155426002830155600954600090610ac3576000610ae5565b610ae5600954610ad98560010154610a3861121c565b9063ffffffff6118ff16565b9050610aef610b62565b610af761121c565b600190940154600954919c949b509950975095504294509092505050565b60008060085411610b27576000610b54565b6008546001600160a01b0383166000908152600d6020526040902054610b549190610ad990610a38610d64565b90505b919050565b60105481565b600354604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b1580156109d157600080fd5b6000610bb1611149565b610bf0576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b60015460408051631b32b81560e21b81526001600160a01b03878116600483015286811660248301526044820186905291519190921691636ccae0549160648083019260209291908290030181600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050506040513d6020811015610c7857600080fd5b505190505b9392505050565b600f8181548110610c9157fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909185565b600090565b60085481565b610cd5611149565b610d14576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60065481565b600154604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b1580156109d157600080fd5b60075481565b6000610b5482611941565b6004546001600160a01b03163314610e035760405162461bcd60e51b81526004018080602001828103825260258152602001806123246025913960400191505060405180910390fd5b600b54600f5410610e455760405162461bcd60e51b815260040180806020018281038252602d81526020018061246f602d913960400191505060405180910390fd5b610e4d610a09565b5050505050506000610e5d610b62565b90506000808211610e8157600c54610e7c90859063ffffffff61184c16565b610e9a565b610e9a82610ad98660075461184c90919063ffffffff16565b9050610ea4612101565b8181524260408201819052610ebf908563ffffffff6118a516565b6060820190815260808201858152600f805460018101825560009190915283517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80260059092029182015560208401517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80382015560408401517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80482015591517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac805830155517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80690910155600754610fb490836118a5565b60075560035460408051637e062a3560e11b815290516001600160a01b039092169163fc0c546a91600480820192602092909190829003018186803b158015610ffc57600080fd5b505afa158015611010573d6000803e3d6000fd5b505050506040513d602081101561102657600080fd5b5051600354604080516323b872dd60e01b81523360048201526001600160a01b03928316602482015260448101899052905191909216916323b872dd9160648083019260209291908290030181600087803b15801561108457600080fd5b505af1158015611098573d6000803e3d6000fd5b505050506040513d60208110156110ae57600080fd5b50516110eb5760405162461bcd60e51b815260040180806020018281038252602d815260200180612193602d913960400191505060405180910390fd5b7ff346961af4c52f314df1b45964746280fe409abb959d4a2458d58f79408b1fe88585611116610b62565b60408051938452602084019290925282820152519081900360600190a15050505050565b6000546001600160a01b031690565b600080546001600160a01b031661115e611e10565b6001600160a01b031614905090565b61117561088d565b6001600160a01b0316836001600160a01b0316146111c45760405162461bcd60e51b81526004018080602001828103825260298152602001806124c76029913960400191505060405180910390fd5b6111d084601054610dba565b5050505050565b60015460408051637e062a3560e11b815290516000926001600160a01b03169163fc0c546a916004808301926020929190829003018186803b1580156109d157600080fd5b600254604080516316d3df1560e31b815290516000926001600160a01b03169163b69ef8a8916004808301926020929190829003018186803b1580156109d157600080fd5b600f5490565b61087383611941565b611278611149565b6112b7576040805162461bcd60e51b81526020600482018190526024820152600080516020612405833981519152604482015290519081900360640190fd5b6112c081611e14565b50565b600080806112cf610b62565b9050600754600014156112e457809150611348565b6000805b600f548110156113155761130b6112fe82611eb4565b839063ffffffff6118a516565b91506001016112e8565b5060075461132d90610ad9838563ffffffff61184c16565b600754909350611343908263ffffffff61180116565b600755505b8115611451576003546002546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018690529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b505161140e5760405162461bcd60e51b815260040180806020018281038252602f8152602001806122cf602f913960400191505060405180910390fd5b7f2e444eb379b177e88ce0649c6110a3b01099f03e297127919dd5e3b63a761a9c82611438610b62565b6040805192835260208301919091528051918290030190a15b50905090565b60006114616111d7565b905090565b600081116114a55760405162461bcd60e51b81526004018080602001828103825260218152602001806123c36021913960400191505060405180910390fd5b6001600160a01b0382166114ea5760405162461bcd60e51b81526004018080602001828103825260288152602001806122846028913960400191505060405180910390fd5b6008541580611500575060006114fe610d64565b115b61153b5760405162461bcd60e51b815260040180806020018281038252604a815260200180612425604a913960600191505060405180910390fd5b6000806008541161155f57600c5461155a90839063ffffffff61184c16565b61157d565b61157d61156a610d64565b600854610ad9908563ffffffff61184c16565b9050600081116115be5760405162461bcd60e51b81526004018080602001828103825260268152602001806122fe6026913960400191505060405180910390fd5b6115c6610a09565b505050506001600160a01b0385166000908152600d6020526040902080549092506115f29150836118a5565b8155426002820155611602612130565b506040805180820182528381524260208083019182526001600160a01b0388166000908152600e82529384208054600181810183559186529190942083516002909202019081559051920191909155600854611664908463ffffffff6118a516565b60085560015460408051637e062a3560e11b815290516001600160a01b039092169163fc0c546a91600480820192602092909190829003018186803b1580156116ac57600080fd5b505afa1580156116c0573d6000803e3d6000fd5b505050506040513d60208110156116d657600080fd5b5051600154604080516323b872dd60e01b81526001600160a01b038a81166004830152928316602482015260448101889052905191909216916323b872dd9160648083019260209291908290030181600087803b15801561173657600080fd5b505af115801561174a573d6000803e3d6000fd5b505050506040513d602081101561176057600080fd5b505161179d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612395602e913960400191505060405180910390fd5b846001600160a01b03167fc65e53b88159e7d2c0fc12a0600072e28ae53ff73b4c1715369c30f160935142856117d288610b15565b6040805192835260208301919091526060828201819052600090830152519081900360a00190a2505050505050565b600061184383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611f77565b90505b92915050565b60008261185b57506000611846565b8282028284828161186857fe5b04146118435760405162461bcd60e51b81526004018080602001828103825260218152602001806123e46021913960400191505060405180910390fd5b600082820183811015611843576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061184383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061200e565b600061194b610a09565b505050505050600082116119905760405162461bcd60e51b81526004018080602001828103825260238152602001806122ac6023913960400191505060405180910390fd5b8161199a33610b15565b10156119d75760405162461bcd60e51b815260040180806020018281038252603d815260200180612247603d913960400191505060405180910390fd5b60006119f76119e4610d64565b600854610ad9908663ffffffff61184c16565b905060008111611a385760405162461bcd60e51b81526004018080602001828103825260308152602001806121c06030913960400191505060405180910390fd5b336000908152600d60209081526040808320600e9092528220909183815b8115611b5b57835460009085906000198101908110611a7157fe5b906000526020600020906002020190506000611a9a82600101544261180190919063ffffffff16565b82549091506000908510611b08578254611aba908363ffffffff61184c16565b9050611ac7848284612073565b9350611ad9868263ffffffff6118a516565b8354909650611aef90869063ffffffff61180116565b8754909550611b0288600019830161214a565b50611b53565b611b18858363ffffffff61184c16565b9050611b25848284612073565b9350611b37868263ffffffff6118a516565b8354909650611b4c908663ffffffff61180116565b8355600094505b505050611a56565b6001850154611b70908463ffffffff61180116565b60018601558454611b87908763ffffffff61180116565b8555600954611b9c908463ffffffff61180116565b600955600854611bb2908763ffffffff61180116565b6008556001546040805163a9059cbb60e01b8152336004820152602481018b905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015611c0957600080fd5b505af1158015611c1d573d6000803e3d6000fd5b505050506040513d6020811015611c3357600080fd5b5051611c705760405162461bcd60e51b81526004018080602001828103825260308152602001806125186030913960400191505060405180910390fd5b6002546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b158015611cc457600080fd5b505af1158015611cd8573d6000803e3d6000fd5b505050506040513d6020811015611cee57600080fd5b5051611d2b5760405162461bcd60e51b81526004018080602001828103825260318152602001806122166031913960400191505060405180910390fd5b337faf01bfc8475df280aca00b578c4a948e6d95700f0db8c13365240f7f973c875489611d5783610b15565b6040805192835260208301919091526060828201819052600090830152519081900360a00190a260408051828152905133917f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e430919081900360200190a26008541580611dca57506000611dc8610d64565b115b611e055760405162461bcd60e51b815260040180806020018281038252604c815260200180612349604c913960600191505060405180910390fd5b979650505050505050565b3390565b6001600160a01b038116611e595760405162461bcd60e51b81526004018080602001828103825260268152602001806121f06026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600f8381548110611ec457fe5b906000526020600020906005020190508060000154816001015410611eed576000915050610b57565b60038101546000904210611f225760018201548254611f119163ffffffff61180116565b600383015460028401559050611f52565b611f498260040154610ad98460000154610a3886600201544261180190919063ffffffff16565b42600284015590505b6001820154611f67908263ffffffff6118a516565b6001909201919091559050919050565b600081848411156120065760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611fcb578181015183820152602001611fb3565b50505050905090810190601f168015611ff85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000818361205d5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611fcb578181015183820152602001611fb3565b50600083858161206957fe5b0495945050505050565b600080612088600954610ad986610a3861121c565b905060065483106120ab576120a3858263ffffffff6118a516565b915050610c7d565b60006002600a0a905060006120ef82610ad985610a386120e0600654610ad98c610a386005548c61180190919063ffffffff16565b6005549063ffffffff6118a516565b9050611e05878263ffffffff6118a516565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b81548183558181111561081c5760008381526020902061081c91610a009160029182028101918502015b8082111561218e5760008082556001820155600201612174565b509056fe546f6b656e4765797365723a207472616e7366657220696e746f206c6f636b656420706f6f6c206661696c6564546f6b656e4765797365723a20556e61626c6520746f20756e7374616b6520616d6f756e74207468697320736d616c6c4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373546f6b656e4765797365723a207472616e73666572206f7574206f6620756e6c6f636b656420706f6f6c206661696c6564546f6b656e4765797365723a20756e7374616b6520616d6f756e742069732067726561746572207468616e20746f74616c2075736572207374616b6573546f6b656e4765797365723a2062656e6566696369617279206973207a65726f2061646472657373546f6b656e4765797365723a20756e7374616b6520616d6f756e74206973207a65726f546f6b656e4765797365723a207472616e73666572206f7574206f66206c6f636b656420706f6f6c206661696c6564546f6b656e4765797365723a205374616b6520616d6f756e7420697320746f6f20736d616c6c43616c6c6572206973206e6f74207468652072657761726420646973747269627574696f6e546f6b656e4765797365723a204572726f7220756e7374616b696e672e205374616b696e67207368617265732065786973742c20627574206e6f207374616b696e6720746f6b656e7320646f546f6b656e4765797365723a207472616e7366657220696e746f207374616b696e6720706f6f6c206661696c6564546f6b656e4765797365723a207374616b6520616d6f756e74206973207a65726f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572546f6b656e4765797365723a20496e76616c69642073746174652e205374616b696e67207368617265732065786973742c20627574206e6f207374616b696e6720746f6b656e7320646f546f6b656e4765797365723a2072656163686564206d6178696d756d20756e6c6f636b207363686564756c65734e65772072657761726420646973747269627574696f6e20697320746865207a65726f2061646472657373546f6b656e206973206e6f7420737570706f7274656420646973747269627574696f6e20746f6b656e4e6577206475726174696f6e2068617320746f2062652067726561746572207468616e207a65726f546f6b656e4765797365723a207472616e73666572206f7574206f66207374616b696e6720706f6f6c206661696c6564a265627a7a7231582000002549b141c1502e37f967dcece59539a90912e06f57667030752f9fa806e364736f6c63430005110032",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
