{
  "_format": "hh-sol-artifact-1",
  "contractName": "BaseV1Voter",
  "sourceName": "contracts/voter/BaseV1Voter.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_registry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_emissionController",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "weight",
          "type": "int256"
        }
      ],
      "name": "Abstained",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Attach",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "lp",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Deposit",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Detach",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "DistributeReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "creator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "bribe",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "pool",
          "type": "address"
        }
      ],
      "name": "GaugeCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reward",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "NotifyReward",
      "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": true,
          "internalType": "address",
          "name": "voter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "weight",
          "type": "int256"
        }
      ],
      "name": "Voted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "whitelister",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "value",
          "type": "bool"
        }
      ],
      "name": "Whitelisted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "lp",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "gauge",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdraw",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "attachTokenToGauge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "bribes",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_bribes",
          "type": "address[]"
        },
        {
          "internalType": "address[][]",
          "name": "_tokens",
          "type": "address[][]"
        },
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "claimBribes",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_gauges",
          "type": "address[]"
        },
        {
          "internalType": "address[][]",
          "name": "_tokens",
          "type": "address[][]"
        }
      ],
      "name": "claimRewards",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "claimable",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "detachTokenFromGauge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_gauges",
          "type": "address[]"
        }
      ],
      "name": "distribute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_gauge",
          "type": "address"
        }
      ],
      "name": "distribute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "finish",
          "type": "uint256"
        }
      ],
      "name": "distribute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "distribute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "distro",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "emissionController",
      "outputs": [
        {
          "internalType": "contract IEmissionController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "emitDeposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "emitWithdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "gauges",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isGauge",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "length",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "notifyRewardAmount",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "poke",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "poolForGauge",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "poolVote",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "pools",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_pool",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_bribefactory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_gaugefactory",
          "type": "address"
        }
      ],
      "name": "registerGauge",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "reset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "what",
          "type": "address"
        }
      ],
      "name": "toggleWhitelist",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalWeight",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_gauges",
          "type": "address[]"
        }
      ],
      "name": "updateFor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "end",
          "type": "uint256"
        }
      ],
      "name": "updateForRange",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_gauge",
          "type": "address"
        }
      ],
      "name": "updateGauge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "usedWeights",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_poolVote",
          "type": "address[]"
        },
        {
          "internalType": "int256[]",
          "name": "_weights",
          "type": "int256[]"
        }
      ],
      "name": "vote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "votes",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "weights",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "whitelist",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b506040516200350c3803806200350c8339810160408190526200003491620000f4565b6001600055620000443362000085565b606083901b6001600160601b031916608052600280546001600160a01b0319166001600160a01b0384161790556200007c8162000085565b5050506200013d565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b0381168114620000ef57600080fd5b919050565b60008060006060848603121562000109578283fd5b6200011484620000d7565b92506200012460208501620000d7565b91506200013460408501620000d7565b90509250925092565b60805160601c613340620001cc600039600081816103d901528181610687015281816107c301528181610aa101528181610b7c01528181610c9201528181610e73015281816110300152818161137a0152818161159801528181611639015281816116c701528181611a2001528181611e61015281816123120152818161277801526128ba01526133406000f3fe608060405234801561001057600080fd5b506004361061022d5760003560e01c806379e938241161013b578063aa79979b116100b8578063d560b0d71161007c578063d560b0d714610567578063e4fc6b6d14610317578063ea94ee441461057a578063f2fde38b1461058d578063fecdad60146105a057600080fd5b8063aa79979b146104ca578063ac4afa38146104ed578063af67c63814610500578063b9a09fd514610513578063d23254b41461053c57600080fd5b80639b6a9d72116100ff5780639b6a9d7214610448578063a61c713a1461045b578063a7cac8461461046e578063a86a366d1461048e578063a8c5d95a146104a157600080fd5b806379e93824146103b45780637b103999146103d45780638da5cb5b146103fb57806396c82e571461040c5780639b19251a1461041557600080fd5b806347b3c6ba116101c95780636dee20121161018d5780636dee2012146103605780636ecbe38a14610373578063715018a6146103865780637625391a1461038e5780637715ee75146103a157600080fd5b806347b3c6ba1461031757806353d786931461031f5780636138889b1461032757806363453ae11461033a578063698473e31461034d57600080fd5b806306d6a1b2146102325780631f7b6d321461027157806320b1cb6f14610283578063310bd74b1461029857806332145f90146102ab57806339393ac9146102be5780633c6b16ab146102d1578063402914f5146102e4578063411b1f7714610304575b600080fd5b61025b610240366004612c8a565b6006602052600090815260409020546001600160a01b031681565b6040516102689190612fdf565b60405180910390f35b6004545b604051908152602001610268565b610296610291366004612d4d565b6105b3565b005b6102966102a6366004612e36565b610685565b6102966102b9366004612e36565b6108b4565b6102966102cc366004612c8a565b610a2d565b6102966102df366004612e36565b610a9c565b6102756102f2366004612c8a565b60106020526000908152604090205481565b610296610312366004612e66565b610c5b565b610296610dbe565b610296610dcf565b610296610335366004612d13565b610dde565b610296610348366004612c8a565b610e30565b61029661035b366004612e66565b610e3c565b60025461025b906001600160a01b031681565b610296610381366004612c8a565b610f9f565b610296610fa8565b61029661039c366004612f42565b610fba565b6102966103af366004612dad565b61102e565b6102756103c2366004612e36565b600b6020526000908152604090205481565b61025b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031661025b565b61027560035481565b610438610423366004612c8a565b600d6020526000908152604090205460ff1681565b6040519015158152602001610268565b610296610456366004612f42565b611225565b610296610469366004612e95565b611299565b61027561047c366004612c8a565b60086020526000908152604090205481565b61025b61049c366004612f42565b611314565b61025b6104af366004612c8a565b6007602052600090815260409020546001600160a01b031681565b6104386104d8366004612c8a565b600c6020526000908152604090205460ff1681565b61025b6104fb366004612e36565b61134c565b61025b61050e366004612cc9565b611376565b61025b610521366004612c8a565b6005602052600090815260409020546001600160a01b031681565b61027561054a366004612e66565b600960209081526000928352604080842090915290825290205481565b610296610575366004612d13565b6118e8565b610296610588366004612e95565b611936565b61029661059b366004612c8a565b6119a8565b6102966105ae366004612ecc565b611a1e565b60005b8251811015610680578281815181106105df57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166331279d3d3384848151811061061657634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b815260040161063b929190612ff3565b600060405180830381600087803b15801561065557600080fd5b505af1158015610669573d6000803e3d6000fd5b5050505080806106789061327e565b9150506105b6565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106de57600080fd5b505afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107169190612cad565b6001600160a01b031663430c208133836040518363ffffffff1660e01b8152600401610743929190613017565b60206040518083038186803b15801561075b57600080fd5b505afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107939190612e16565b6107b85760405162461bcd60e51b81526004016107af90613053565b60405180910390fd5b6107c181611c19565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561081a57600080fd5b505afa15801561082e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108529190612cad565b6001600160a01b031663c1f0fb9f826040518263ffffffff1660e01b815260040161087f91815260200190565b600060405180830381600087803b15801561089957600080fd5b505af11580156108ad573d6000803e3d6000fd5b5050505050565b6000818152600a602090815260408083208054825181850281018501909352808352919290919083018282801561091457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108f6575b505050505090506000815190506000816001600160401b0381111561094957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610972578160200160208202803683370190505b50905060005b82811015610a1b576009600086815260200190815260200160002060008583815181106109b557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109fe57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610a138161327e565b915050610978565b50610a27848483611e4e565b50505050565b610a35612433565b6001600160a01b0381166000818152600d6020908152604091829020805460ff8082161560ff199092168217909255925192161515825233917fc8a125677224e7125b3579c5a10de1afe210f4c1c1d3c27be0f12b0c4a14c915910160405180910390a350565b610b387f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b158015610af857600080fd5b505afa158015610b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b309190612cad565b33308461248d565b600354600090610b5083670de0b6b3a7640000613209565b610b5a9190613172565b90508015610b7a5780600e6000828254610b74919061312c565b90915550505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd357600080fd5b505afa158015610be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0b9190612cad565b6001600160a01b0316336001600160a01b03167ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf5082684604051610c4f91815260200190565b60405180910390a35050565b336000908152600c602052604090205460ff16610c8a5760405162461bcd60e51b81526004016107af90613030565b8115610d81577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce957600080fd5b505afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d219190612cad565b6001600160a01b031663986b7d8a836040518263ffffffff1660e01b8152600401610d4e91815260200190565b600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907fae268d9aab12f3605f58efd74fd3801fa812b03fdb44317eb70f46dff0e19e2290602001610c4f565b600454610dcd90600090610fba565b565b600454610dcd90600090611225565b60005b8151811015610e2c57610e1a828281518110610e0d57634e487b7160e01b600052603260045260246000fd5b60200260200101516125f6565b80610e248161327e565b915050610de1565b5050565b610e39816125f6565b50565b336000908152600c602052604090205460ff16610e6b5760405162461bcd60e51b81526004016107af90613030565b8115610f62577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610eca57600080fd5b505afa158015610ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f029190612cad565b6001600160a01b031663fbd3a29d836040518263ffffffff1660e01b8152600401610f2f91815260200190565b600060405180830381600087803b158015610f4957600080fd5b505af1158015610f5d573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907f60940192810a6fb3bce3fd3e2e3a13fd6ccc7605e963fb87ee971aba829989bd90602001610c4f565b610e39816129e3565b610fb0612433565b610dcd6000612ac6565b815b818110156106805761101c6005600060048481548110610fec57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902054166125f6565b806110268161327e565b915050610fbc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf9190612cad565b6001600160a01b031663430c208133836040518363ffffffff1660e01b81526004016110ec929190613017565b60206040518083038186803b15801561110457600080fd5b505afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c9190612e16565b6111585760405162461bcd60e51b81526004016107af90613053565b60005b8351811015610a275783818151811061118457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663a7852afa838584815181106111bb57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016111e092919061307f565b600060405180830381600087803b1580156111fa57600080fd5b505af115801561120e573d6000803e3d6000fd5b50505050808061121d9061327e565b91505061115b565b815b8181101561068057611287600560006004848154811061125757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902054166129e3565b806112918161327e565b915050611227565b336000908152600c602052604090205460ff166112c85760405162461bcd60e51b81526004016107af90613030565b604080518481526020810183905233916001600160a01b038516917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a3505050565b600a602052816000526040600020818154811061133057600080fd5b6000918252602090912001546001600160a01b03169150829050565b6004818154811061135c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113d357600080fd5b505af11580156113e7573d6000803e3d6000fd5b505050506001600160a01b0384811660009081526005602052604090205416156114425760405162461bcd60e51b815260206004820152600c60248201526b67617567652065786973747360a01b60448201526064016107af565b6001600160a01b0384166000908152600d602052604090205460ff166114a15760405162461bcd60e51b81526020600482015260146024820152731c1bdbdb081b9bdd081dda1a5d195b1a5cdd195960621b60448201526064016107af565b6001600160a01b0383166000908152600d602052604090205460ff166115095760405162461bcd60e51b815260206004820152601d60248201527f627269626520666163746f7279206e6f742077686974656c697374656400000060448201526064016107af565b6001600160a01b0382166000908152600d602052604090205460ff166115715760405162461bcd60e51b815260206004820152601d60248201527f676175676520666163746f7279206e6f742077686974656c697374656400000060448201526064016107af565b604051631af469cb60e21b81526000906001600160a01b03851690636bd1a72c906115c0907f000000000000000000000000000000000000000000000000000000000000000090600401612fdf565b602060405180830381600087803b1580156115da57600080fd5b505af11580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116129190612cad565b604051630e24707d60e11b81526001600160a01b03878116600483015280831660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152919250600091851690631c48e0fa90606401602060405180830381600087803b15801561168b57600080fd5b505af115801561169f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c39190612cad565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b15801561171e57600080fd5b505afa158015611732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117569190612cad565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b8152600401611785929190613017565b602060405180830381600087803b15801561179f57600080fd5b505af11580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190612e16565b506001600160a01b03808216600081815260076020908152604080832080548689166001600160a01b031991821617909155948b16808452600583528184208054871686179055938352600682528083208054909516909317909355600c9092529020805460ff1916600117905561184e816129e3565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b03888116918217909255604051909184811691908416907f48d3c521fd0d5541640f58c6d6381eed7cb2e8c9df421ae165a4f4c2d221ee0d906118d7903390612fdf565b60405180910390a495945050505050565b60005b8151811015610e2c5761192482828151811061191757634e487b7160e01b600052603260045260246000fd5b60200260200101516129e3565b8061192e8161327e565b9150506118eb565b336000908152600c602052604090205460ff166119655760405162461bcd60e51b81526004016107af90613030565b604080518481526020810183905233916001600160a01b038516917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679101611307565b6119b0612433565b6001600160a01b038116611a155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107af565b610e3981612ac6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7757600080fd5b505afa158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaf9190612cad565b6001600160a01b031663430c208133876040518363ffffffff1660e01b8152600401611adc929190613017565b60206040518083038186803b158015611af457600080fd5b505afa158015611b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2c9190612e16565b611b6a5760405162461bcd60e51b815260206004820152600f60248201526e3737ba103a37b5b2b71037bbb732b960891b60448201526064016107af565b828114611bab5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964207765696768747360881b60448201526064016107af565b6108ad8585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250611e4e92505050565b6000818152600a6020526040812080549091805b82811015611e12576000848281548110611c5757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548883526009825260408084206001600160a01b03909216808552919092529120549091508015611dfd576001600160a01b03808316600090815260056020526040902054611cb391166129e3565b6001600160a01b03821660009081526008602052604081208054839290611cdb908490613228565b909155505060008781526009602090815260408083206001600160a01b038616845290915281208054839290611d12908490613228565b90915550506000811315611db6576001600160a01b038281166000908152600560209081526040808320548416835260079091529081902054905163278afc8b60e21b815260048101849052602481018a9052911690639e2bf22c90604401600060405180830381600087803b158015611d8b57600080fd5b505af1158015611d9f573d6000803e3d6000fd5b505050508084611daf91906130eb565b9350611dc3565b611dc08185613228565b93505b60408051888152602081018390527f6b3894ce60b9bbe9d93f1a4e6fc25b6b93cd8222e73ab6348d79c596f5b51de9910160405180910390a15b50508080611e0a9061327e565b915050611c2d565b508060036000828254611e259190613267565b90915550506000848152600b60209081526040808320839055600a9091528120610a2791612b18565b611e5783611c19565b60008251905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb857600080fd5b505afa158015611ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef09190612cad565b6001600160a01b031663e7e242d4866040518263ffffffff1660e01b8152600401611f1d91815260200190565b60206040518083038186803b158015611f3557600080fd5b505afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190612e4e565b90506000806000805b8581101561202a576000878281518110611fa057634e487b7160e01b600052603260045260246000fd5b602002602001015113611fe357868181518110611fcd57634e487b7160e01b600052603260045260246000fd5b6020026020010151611fde90613299565b61200c565b86818151811061200357634e487b7160e01b600052603260045260246000fd5b60200260200101515b61201690856130eb565b9350806120228161327e565b915050611f76565b5060005b8581101561230657600088828151811061205857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03808216600090815260058452604080822054909216808252600c909452205490925060ff16156122f157600086888b86815181106120ba57634e487b7160e01b600052603260045260246000fd5b60200260200101516120cc9190613186565b6120d69190613144565b60008d81526009602090815260408083206001600160a01b0388168452909152902054909150156121355760405162461bcd60e51b81526020600482015260096024820152680766f746573203d20360bc1b60448201526064016107af565b806121735760405162461bcd60e51b815260206004820152600e60248201526d0706f6f6c776569676874203d20360941b60448201526064016107af565b61217c826129e3565b60008c8152600a6020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b03881690811790915583526008909152812080548392906121d19084906130eb565b909155505060008c81526009602090815260408083206001600160a01b0387168452909152812080548392906122089084906130eb565b9091555050600081131561228f576001600160a01b038083166000908152600760205260409081902054905163f320772360e01b815260048101849052602481018f905291169063f320772390604401600060405180830381600087803b15801561227257600080fd5b505af1158015612286573d6000803e3d6000fd5b5050505061229b565b61229881613299565b90505b6122a581866130eb565b94506122b181876130eb565b604080518e81526020810184905291975033917f1263a2295e53acd6ef8f655b8afc11fa0f2cf11925be7aa1757d741ef32a926c910160405180910390a2505b505080806122fe9061327e565b91505061202e565b506000811315612401577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561236957600080fd5b505afa15801561237d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a19190612cad565b6001600160a01b031663fd4a77f1896040518263ffffffff1660e01b81526004016123ce91815260200190565b600060405180830381600087803b1580156123e857600080fd5b505af11580156123fc573d6000803e3d6000fd5b505050505b8160036000828254612413919061312c565b90915550506000978852600b602052604090972096909655505050505050565b6001546001600160a01b03163314610dcd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107af565b6000846001600160a01b03163b116124dc5760405162461bcd60e51b8152602060048201526012602482015271696e76616c696420746f6b656e20636f646560701b60448201526064016107af565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916125409190612fa6565b6000604051808303816000865af19150503d806000811461257d576040519150601f19603f3d011682016040523d82523d6000602084013e612582565b606091505b50915091508180156125ac5750805115806125ac5750808060200190518101906125ac9190612e16565b6125ee5760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b60448201526064016107af565b505050505050565b600260005414156126495760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107af565b6002600081905554604080516335155b0160e11b815290516001600160a01b0390921691636a2ab60291600480820192602092909190829003018186803b15801561269357600080fd5b505afa1580156126a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cb9190612e16565b1561273957600260009054906101000a90046001600160a01b03166001600160a01b031663161ad7066040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561272057600080fd5b505af1158015612734573d6000803e3d6000fd5b505050505b612742816129e3565b6001600160a01b03808216600081815260106020908152604091829020548251631ef0061b60e11b8152925190946399bcc052937f000000000000000000000000000000000000000000000000000000000000000090911692633de00c3692600480840193829003018186803b1580156127bb57600080fd5b505afa1580156127cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f39190612cad565b6040518263ffffffff1660e01b815260040161280f9190612fdf565b60206040518083038186803b15801561282757600080fd5b505afa15801561283b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285f9190612e4e565b811180156128795750600061287762093a8083613172565b115b156129da57600060106000846001600160a01b03166001600160a01b0316815260200190815260200160002081905550816001600160a01b031663b66503cf7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b15801561291157600080fd5b505afa158015612925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129499190612cad565b836040518363ffffffff1660e01b8152600401612967929190613017565b600060405180830381600087803b15801561298157600080fd5b505af1158015612995573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f4fa9693cae526341d334e2862ca2413b2e503f1266255f9e0869fb36e6d89b179060200160405180910390a35b50506001600055565b6001600160a01b0380821660009081526006602090815260408083205490931680835260089091529181205490811315612aa5576001600160a01b0383166000908152600f602052604081208054600e549182905591612a438383613267565b905080156125ee576000670de0b6b3a7640000612a608387613209565b612a6a9190613172565b6001600160a01b038816600090815260106020526040812080549293508392909190612a9790849061312c565b909155505050505050505050565b600e546001600160a01b0384166000908152600f6020526040902055505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5080546000825590600052602060002090810190610e3991905b80821115612b465760008155600101612b32565b5090565b60008083601f840112612b5b578182fd5b5081356001600160401b03811115612b71578182fd5b6020830191508360208260051b8501011115612b8c57600080fd5b9250929050565b600082601f830112612ba3578081fd5b81356020612bb8612bb3836130c8565b613098565b80838252828201915082860187848660051b8901011115612bd7578586fd5b855b85811015612bfe578135612bec816132f5565b84529284019290840190600101612bd9565b5090979650505050505050565b600082601f830112612c1b578081fd5b81356020612c2b612bb3836130c8565b80838252828201915082860187848660051b8901011115612c4a578586fd5b855b85811015612bfe5781356001600160401b03811115612c69578788fd5b612c778a87838c0101612b93565b8552509284019290840190600101612c4c565b600060208284031215612c9b578081fd5b8135612ca6816132f5565b9392505050565b600060208284031215612cbe578081fd5b8151612ca6816132f5565b600080600060608486031215612cdd578182fd5b8335612ce8816132f5565b92506020840135612cf8816132f5565b91506040840135612d08816132f5565b809150509250925092565b600060208284031215612d24578081fd5b81356001600160401b03811115612d39578182fd5b612d4584828501612b93565b949350505050565b60008060408385031215612d5f578182fd5b82356001600160401b0380821115612d75578384fd5b612d8186838701612b93565b93506020850135915080821115612d96578283fd5b50612da385828601612c0b565b9150509250929050565b600080600060608486031215612dc1578283fd5b83356001600160401b0380821115612dd7578485fd5b612de387838801612b93565b94506020860135915080821115612df8578384fd5b50612e0586828701612c0b565b925050604084013590509250925092565b600060208284031215612e27578081fd5b81518015158114612ca6578182fd5b600060208284031215612e47578081fd5b5035919050565b600060208284031215612e5f578081fd5b5051919050565b60008060408385031215612e78578182fd5b823591506020830135612e8a816132f5565b809150509250929050565b600080600060608486031215612ea9578283fd5b833592506020840135612ebb816132f5565b929592945050506040919091013590565b600080600080600060608688031215612ee3578081fd5b8535945060208601356001600160401b0380821115612f00578283fd5b612f0c89838a01612b4a565b90965094506040880135915080821115612f24578283fd5b50612f3188828901612b4a565b969995985093965092949392505050565b60008060408385031215612f54578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015612f9b5781516001600160a01b031687529582019590820190600101612f76565b509495945050505050565b60008251815b81811015612fc65760208186018101518583015201612fac565b81811115612fd45782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0383168152604060208201819052600090612d4590830184612f63565b6001600160a01b03929092168252602082015260400190565b6020808252600990820152686e6f7420676175676560b81b604082015260600190565b6020808252601290820152713737ba1030b8383937bb32b21037bbb732b960711b604082015260600190565b828152604060208201526000612d456040830184612f63565b604051601f8201601f191681016001600160401b03811182821017156130c0576130c06132df565b604052919050565b60006001600160401b038211156130e1576130e16132df565b5060051b60200190565b600080821280156001600160ff1b038490038513161561310d5761310d6132b3565b600160ff1b8390038412811615613126576131266132b3565b50500190565b6000821982111561313f5761313f6132b3565b500190565b600082613153576131536132c9565b600160ff1b82146000198414161561316d5761316d6132b3565b500590565b600082613181576131816132c9565b500490565b60006001600160ff1b03818413828413808216868404861116156131ac576131ac6132b3565b600160ff1b848712828116878305891216156131ca576131ca6132b3565b8587129250878205871284841616156131e5576131e56132b3565b878505871281841616156131fb576131fb6132b3565b505050929093029392505050565b6000816000190483118215151615613223576132236132b3565b500290565b60008083128015600160ff1b850184121615613246576132466132b3565b6001600160ff1b0384018313811615613261576132616132b3565b50500390565b600082821015613279576132796132b3565b500390565b6000600019821415613292576132926132b3565b5060010190565b6000600160ff1b8214156132af576132af6132b3565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e3957600080fdfea2646970667358221220d093a75fe2e8967922fae5143bdb97d2eae9296785468b5266b078bc3619d27d64736f6c63430008040033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061022d5760003560e01c806379e938241161013b578063aa79979b116100b8578063d560b0d71161007c578063d560b0d714610567578063e4fc6b6d14610317578063ea94ee441461057a578063f2fde38b1461058d578063fecdad60146105a057600080fd5b8063aa79979b146104ca578063ac4afa38146104ed578063af67c63814610500578063b9a09fd514610513578063d23254b41461053c57600080fd5b80639b6a9d72116100ff5780639b6a9d7214610448578063a61c713a1461045b578063a7cac8461461046e578063a86a366d1461048e578063a8c5d95a146104a157600080fd5b806379e93824146103b45780637b103999146103d45780638da5cb5b146103fb57806396c82e571461040c5780639b19251a1461041557600080fd5b806347b3c6ba116101c95780636dee20121161018d5780636dee2012146103605780636ecbe38a14610373578063715018a6146103865780637625391a1461038e5780637715ee75146103a157600080fd5b806347b3c6ba1461031757806353d786931461031f5780636138889b1461032757806363453ae11461033a578063698473e31461034d57600080fd5b806306d6a1b2146102325780631f7b6d321461027157806320b1cb6f14610283578063310bd74b1461029857806332145f90146102ab57806339393ac9146102be5780633c6b16ab146102d1578063402914f5146102e4578063411b1f7714610304575b600080fd5b61025b610240366004612c8a565b6006602052600090815260409020546001600160a01b031681565b6040516102689190612fdf565b60405180910390f35b6004545b604051908152602001610268565b610296610291366004612d4d565b6105b3565b005b6102966102a6366004612e36565b610685565b6102966102b9366004612e36565b6108b4565b6102966102cc366004612c8a565b610a2d565b6102966102df366004612e36565b610a9c565b6102756102f2366004612c8a565b60106020526000908152604090205481565b610296610312366004612e66565b610c5b565b610296610dbe565b610296610dcf565b610296610335366004612d13565b610dde565b610296610348366004612c8a565b610e30565b61029661035b366004612e66565b610e3c565b60025461025b906001600160a01b031681565b610296610381366004612c8a565b610f9f565b610296610fa8565b61029661039c366004612f42565b610fba565b6102966103af366004612dad565b61102e565b6102756103c2366004612e36565b600b6020526000908152604090205481565b61025b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031661025b565b61027560035481565b610438610423366004612c8a565b600d6020526000908152604090205460ff1681565b6040519015158152602001610268565b610296610456366004612f42565b611225565b610296610469366004612e95565b611299565b61027561047c366004612c8a565b60086020526000908152604090205481565b61025b61049c366004612f42565b611314565b61025b6104af366004612c8a565b6007602052600090815260409020546001600160a01b031681565b6104386104d8366004612c8a565b600c6020526000908152604090205460ff1681565b61025b6104fb366004612e36565b61134c565b61025b61050e366004612cc9565b611376565b61025b610521366004612c8a565b6005602052600090815260409020546001600160a01b031681565b61027561054a366004612e66565b600960209081526000928352604080842090915290825290205481565b610296610575366004612d13565b6118e8565b610296610588366004612e95565b611936565b61029661059b366004612c8a565b6119a8565b6102966105ae366004612ecc565b611a1e565b60005b8251811015610680578281815181106105df57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166331279d3d3384848151811061061657634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b815260040161063b929190612ff3565b600060405180830381600087803b15801561065557600080fd5b505af1158015610669573d6000803e3d6000fd5b5050505080806106789061327e565b9150506105b6565b505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106de57600080fd5b505afa1580156106f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107169190612cad565b6001600160a01b031663430c208133836040518363ffffffff1660e01b8152600401610743929190613017565b60206040518083038186803b15801561075b57600080fd5b505afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107939190612e16565b6107b85760405162461bcd60e51b81526004016107af90613053565b60405180910390fd5b6107c181611c19565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561081a57600080fd5b505afa15801561082e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108529190612cad565b6001600160a01b031663c1f0fb9f826040518263ffffffff1660e01b815260040161087f91815260200190565b600060405180830381600087803b15801561089957600080fd5b505af11580156108ad573d6000803e3d6000fd5b5050505050565b6000818152600a602090815260408083208054825181850281018501909352808352919290919083018282801561091457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108f6575b505050505090506000815190506000816001600160401b0381111561094957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610972578160200160208202803683370190505b50905060005b82811015610a1b576009600086815260200190815260200160002060008583815181106109b557634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109fe57634e487b7160e01b600052603260045260246000fd5b602090810291909101015280610a138161327e565b915050610978565b50610a27848483611e4e565b50505050565b610a35612433565b6001600160a01b0381166000818152600d6020908152604091829020805460ff8082161560ff199092168217909255925192161515825233917fc8a125677224e7125b3579c5a10de1afe210f4c1c1d3c27be0f12b0c4a14c915910160405180910390a350565b610b387f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b158015610af857600080fd5b505afa158015610b0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b309190612cad565b33308461248d565b600354600090610b5083670de0b6b3a7640000613209565b610b5a9190613172565b90508015610b7a5780600e6000828254610b74919061312c565b90915550505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd357600080fd5b505afa158015610be7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0b9190612cad565b6001600160a01b0316336001600160a01b03167ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf5082684604051610c4f91815260200190565b60405180910390a35050565b336000908152600c602052604090205460ff16610c8a5760405162461bcd60e51b81526004016107af90613030565b8115610d81577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ce957600080fd5b505afa158015610cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d219190612cad565b6001600160a01b031663986b7d8a836040518263ffffffff1660e01b8152600401610d4e91815260200190565b600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907fae268d9aab12f3605f58efd74fd3801fa812b03fdb44317eb70f46dff0e19e2290602001610c4f565b600454610dcd90600090610fba565b565b600454610dcd90600090611225565b60005b8151811015610e2c57610e1a828281518110610e0d57634e487b7160e01b600052603260045260246000fd5b60200260200101516125f6565b80610e248161327e565b915050610de1565b5050565b610e39816125f6565b50565b336000908152600c602052604090205460ff16610e6b5760405162461bcd60e51b81526004016107af90613030565b8115610f62577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610eca57600080fd5b505afa158015610ede573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f029190612cad565b6001600160a01b031663fbd3a29d836040518263ffffffff1660e01b8152600401610f2f91815260200190565b600060405180830381600087803b158015610f4957600080fd5b505af1158015610f5d573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907f60940192810a6fb3bce3fd3e2e3a13fd6ccc7605e963fb87ee971aba829989bd90602001610c4f565b610e39816129e3565b610fb0612433565b610dcd6000612ac6565b815b818110156106805761101c6005600060048481548110610fec57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902054166125f6565b806110268161327e565b915050610fbc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561108757600080fd5b505afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf9190612cad565b6001600160a01b031663430c208133836040518363ffffffff1660e01b81526004016110ec929190613017565b60206040518083038186803b15801561110457600080fd5b505afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c9190612e16565b6111585760405162461bcd60e51b81526004016107af90613053565b60005b8351811015610a275783818151811061118457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663a7852afa838584815181106111bb57634e487b7160e01b600052603260045260246000fd5b60200260200101516040518363ffffffff1660e01b81526004016111e092919061307f565b600060405180830381600087803b1580156111fa57600080fd5b505af115801561120e573d6000803e3d6000fd5b50505050808061121d9061327e565b91505061115b565b815b8181101561068057611287600560006004848154811061125757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b039081168452908301939093526040909101902054166129e3565b806112918161327e565b915050611227565b336000908152600c602052604090205460ff166112c85760405162461bcd60e51b81526004016107af90613030565b604080518481526020810183905233916001600160a01b038516917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a3505050565b600a602052816000526040600020818154811061133057600080fd5b6000918252602090912001546001600160a01b03169150829050565b6004818154811061135c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f9fa21236040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113d357600080fd5b505af11580156113e7573d6000803e3d6000fd5b505050506001600160a01b0384811660009081526005602052604090205416156114425760405162461bcd60e51b815260206004820152600c60248201526b67617567652065786973747360a01b60448201526064016107af565b6001600160a01b0384166000908152600d602052604090205460ff166114a15760405162461bcd60e51b81526020600482015260146024820152731c1bdbdb081b9bdd081dda1a5d195b1a5cdd195960621b60448201526064016107af565b6001600160a01b0383166000908152600d602052604090205460ff166115095760405162461bcd60e51b815260206004820152601d60248201527f627269626520666163746f7279206e6f742077686974656c697374656400000060448201526064016107af565b6001600160a01b0382166000908152600d602052604090205460ff166115715760405162461bcd60e51b815260206004820152601d60248201527f676175676520666163746f7279206e6f742077686974656c697374656400000060448201526064016107af565b604051631af469cb60e21b81526000906001600160a01b03851690636bd1a72c906115c0907f000000000000000000000000000000000000000000000000000000000000000090600401612fdf565b602060405180830381600087803b1580156115da57600080fd5b505af11580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116129190612cad565b604051630e24707d60e11b81526001600160a01b03878116600483015280831660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152919250600091851690631c48e0fa90606401602060405180830381600087803b15801561168b57600080fd5b505af115801561169f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c39190612cad565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b15801561171e57600080fd5b505afa158015611732573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117569190612cad565b6001600160a01b031663095ea7b3826000196040518363ffffffff1660e01b8152600401611785929190613017565b602060405180830381600087803b15801561179f57600080fd5b505af11580156117b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d79190612e16565b506001600160a01b03808216600081815260076020908152604080832080548689166001600160a01b031991821617909155948b16808452600583528184208054871686179055938352600682528083208054909516909317909355600c9092529020805460ff1916600117905561184e816129e3565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b03888116918217909255604051909184811691908416907f48d3c521fd0d5541640f58c6d6381eed7cb2e8c9df421ae165a4f4c2d221ee0d906118d7903390612fdf565b60405180910390a495945050505050565b60005b8151811015610e2c5761192482828151811061191757634e487b7160e01b600052603260045260246000fd5b60200260200101516129e3565b8061192e8161327e565b9150506118eb565b336000908152600c602052604090205460ff166119655760405162461bcd60e51b81526004016107af90613030565b604080518481526020810183905233916001600160a01b038516917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5679101611307565b6119b0612433565b6001600160a01b038116611a155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107af565b610e3981612ac6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611a7757600080fd5b505afa158015611a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aaf9190612cad565b6001600160a01b031663430c208133876040518363ffffffff1660e01b8152600401611adc929190613017565b60206040518083038186803b158015611af457600080fd5b505afa158015611b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2c9190612e16565b611b6a5760405162461bcd60e51b815260206004820152600f60248201526e3737ba103a37b5b2b71037bbb732b960891b60448201526064016107af565b828114611bab5760405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964207765696768747360881b60448201526064016107af565b6108ad8585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808902828101820190935288825290935088925087918291850190849080828437600092019190915250611e4e92505050565b6000818152600a6020526040812080549091805b82811015611e12576000848281548110611c5757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101548883526009825260408084206001600160a01b03909216808552919092529120549091508015611dfd576001600160a01b03808316600090815260056020526040902054611cb391166129e3565b6001600160a01b03821660009081526008602052604081208054839290611cdb908490613228565b909155505060008781526009602090815260408083206001600160a01b038616845290915281208054839290611d12908490613228565b90915550506000811315611db6576001600160a01b038281166000908152600560209081526040808320548416835260079091529081902054905163278afc8b60e21b815260048101849052602481018a9052911690639e2bf22c90604401600060405180830381600087803b158015611d8b57600080fd5b505af1158015611d9f573d6000803e3d6000fd5b505050508084611daf91906130eb565b9350611dc3565b611dc08185613228565b93505b60408051888152602081018390527f6b3894ce60b9bbe9d93f1a4e6fc25b6b93cd8222e73ab6348d79c596f5b51de9910160405180910390a15b50508080611e0a9061327e565b915050611c2d565b508060036000828254611e259190613267565b90915550506000848152600b60209081526040808320839055600a9091528120610a2791612b18565b611e5783611c19565b60008251905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb857600080fd5b505afa158015611ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef09190612cad565b6001600160a01b031663e7e242d4866040518263ffffffff1660e01b8152600401611f1d91815260200190565b60206040518083038186803b158015611f3557600080fd5b505afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190612e4e565b90506000806000805b8581101561202a576000878281518110611fa057634e487b7160e01b600052603260045260246000fd5b602002602001015113611fe357868181518110611fcd57634e487b7160e01b600052603260045260246000fd5b6020026020010151611fde90613299565b61200c565b86818151811061200357634e487b7160e01b600052603260045260246000fd5b60200260200101515b61201690856130eb565b9350806120228161327e565b915050611f76565b5060005b8581101561230657600088828151811061205857634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03808216600090815260058452604080822054909216808252600c909452205490925060ff16156122f157600086888b86815181106120ba57634e487b7160e01b600052603260045260246000fd5b60200260200101516120cc9190613186565b6120d69190613144565b60008d81526009602090815260408083206001600160a01b0388168452909152902054909150156121355760405162461bcd60e51b81526020600482015260096024820152680766f746573203d20360bc1b60448201526064016107af565b806121735760405162461bcd60e51b815260206004820152600e60248201526d0706f6f6c776569676874203d20360941b60448201526064016107af565b61217c826129e3565b60008c8152600a6020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b03881690811790915583526008909152812080548392906121d19084906130eb565b909155505060008c81526009602090815260408083206001600160a01b0387168452909152812080548392906122089084906130eb565b9091555050600081131561228f576001600160a01b038083166000908152600760205260409081902054905163f320772360e01b815260048101849052602481018f905291169063f320772390604401600060405180830381600087803b15801561227257600080fd5b505af1158015612286573d6000803e3d6000fd5b5050505061229b565b61229881613299565b90505b6122a581866130eb565b94506122b181876130eb565b604080518e81526020810184905291975033917f1263a2295e53acd6ef8f655b8afc11fa0f2cf11925be7aa1757d741ef32a926c910160405180910390a2505b505080806122fe9061327e565b91505061202e565b506000811315612401577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d7b96d4e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561236957600080fd5b505afa15801561237d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a19190612cad565b6001600160a01b031663fd4a77f1896040518263ffffffff1660e01b81526004016123ce91815260200190565b600060405180830381600087803b1580156123e857600080fd5b505af11580156123fc573d6000803e3d6000fd5b505050505b8160036000828254612413919061312c565b90915550506000978852600b602052604090972096909655505050505050565b6001546001600160a01b03163314610dcd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107af565b6000846001600160a01b03163b116124dc5760405162461bcd60e51b8152602060048201526012602482015271696e76616c696420746f6b656e20636f646560701b60448201526064016107af565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916125409190612fa6565b6000604051808303816000865af19150503d806000811461257d576040519150601f19603f3d011682016040523d82523d6000602084013e612582565b606091505b50915091508180156125ac5750805115806125ac5750808060200190518101906125ac9190612e16565b6125ee5760405162461bcd60e51b81526020600482015260136024820152721d1c985b9cd9995c919c9bdb4819985a5b1959606a1b60448201526064016107af565b505050505050565b600260005414156126495760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107af565b6002600081905554604080516335155b0160e11b815290516001600160a01b0390921691636a2ab60291600480820192602092909190829003018186803b15801561269357600080fd5b505afa1580156126a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126cb9190612e16565b1561273957600260009054906101000a90046001600160a01b03166001600160a01b031663161ad7066040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561272057600080fd5b505af1158015612734573d6000803e3d6000fd5b505050505b612742816129e3565b6001600160a01b03808216600081815260106020908152604091829020548251631ef0061b60e11b8152925190946399bcc052937f000000000000000000000000000000000000000000000000000000000000000090911692633de00c3692600480840193829003018186803b1580156127bb57600080fd5b505afa1580156127cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f39190612cad565b6040518263ffffffff1660e01b815260040161280f9190612fdf565b60206040518083038186803b15801561282757600080fd5b505afa15801561283b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285f9190612e4e565b811180156128795750600061287762093a8083613172565b115b156129da57600060106000846001600160a01b03166001600160a01b0316815260200190815260200160002081905550816001600160a01b031663b66503cf7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633de00c366040518163ffffffff1660e01b815260040160206040518083038186803b15801561291157600080fd5b505afa158015612925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129499190612cad565b836040518363ffffffff1660e01b8152600401612967929190613017565b600060405180830381600087803b15801561298157600080fd5b505af1158015612995573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f4fa9693cae526341d334e2862ca2413b2e503f1266255f9e0869fb36e6d89b179060200160405180910390a35b50506001600055565b6001600160a01b0380821660009081526006602090815260408083205490931680835260089091529181205490811315612aa5576001600160a01b0383166000908152600f602052604081208054600e549182905591612a438383613267565b905080156125ee576000670de0b6b3a7640000612a608387613209565b612a6a9190613172565b6001600160a01b038816600090815260106020526040812080549293508392909190612a9790849061312c565b909155505050505050505050565b600e546001600160a01b0384166000908152600f6020526040902055505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5080546000825590600052602060002090810190610e3991905b80821115612b465760008155600101612b32565b5090565b60008083601f840112612b5b578182fd5b5081356001600160401b03811115612b71578182fd5b6020830191508360208260051b8501011115612b8c57600080fd5b9250929050565b600082601f830112612ba3578081fd5b81356020612bb8612bb3836130c8565b613098565b80838252828201915082860187848660051b8901011115612bd7578586fd5b855b85811015612bfe578135612bec816132f5565b84529284019290840190600101612bd9565b5090979650505050505050565b600082601f830112612c1b578081fd5b81356020612c2b612bb3836130c8565b80838252828201915082860187848660051b8901011115612c4a578586fd5b855b85811015612bfe5781356001600160401b03811115612c69578788fd5b612c778a87838c0101612b93565b8552509284019290840190600101612c4c565b600060208284031215612c9b578081fd5b8135612ca6816132f5565b9392505050565b600060208284031215612cbe578081fd5b8151612ca6816132f5565b600080600060608486031215612cdd578182fd5b8335612ce8816132f5565b92506020840135612cf8816132f5565b91506040840135612d08816132f5565b809150509250925092565b600060208284031215612d24578081fd5b81356001600160401b03811115612d39578182fd5b612d4584828501612b93565b949350505050565b60008060408385031215612d5f578182fd5b82356001600160401b0380821115612d75578384fd5b612d8186838701612b93565b93506020850135915080821115612d96578283fd5b50612da385828601612c0b565b9150509250929050565b600080600060608486031215612dc1578283fd5b83356001600160401b0380821115612dd7578485fd5b612de387838801612b93565b94506020860135915080821115612df8578384fd5b50612e0586828701612c0b565b925050604084013590509250925092565b600060208284031215612e27578081fd5b81518015158114612ca6578182fd5b600060208284031215612e47578081fd5b5035919050565b600060208284031215612e5f578081fd5b5051919050565b60008060408385031215612e78578182fd5b823591506020830135612e8a816132f5565b809150509250929050565b600080600060608486031215612ea9578283fd5b833592506020840135612ebb816132f5565b929592945050506040919091013590565b600080600080600060608688031215612ee3578081fd5b8535945060208601356001600160401b0380821115612f00578283fd5b612f0c89838a01612b4a565b90965094506040880135915080821115612f24578283fd5b50612f3188828901612b4a565b969995985093965092949392505050565b60008060408385031215612f54578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015612f9b5781516001600160a01b031687529582019590820190600101612f76565b509495945050505050565b60008251815b81811015612fc65760208186018101518583015201612fac565b81811115612fd45782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0383168152604060208201819052600090612d4590830184612f63565b6001600160a01b03929092168252602082015260400190565b6020808252600990820152686e6f7420676175676560b81b604082015260600190565b6020808252601290820152713737ba1030b8383937bb32b21037bbb732b960711b604082015260600190565b828152604060208201526000612d456040830184612f63565b604051601f8201601f191681016001600160401b03811182821017156130c0576130c06132df565b604052919050565b60006001600160401b038211156130e1576130e16132df565b5060051b60200190565b600080821280156001600160ff1b038490038513161561310d5761310d6132b3565b600160ff1b8390038412811615613126576131266132b3565b50500190565b6000821982111561313f5761313f6132b3565b500190565b600082613153576131536132c9565b600160ff1b82146000198414161561316d5761316d6132b3565b500590565b600082613181576131816132c9565b500490565b60006001600160ff1b03818413828413808216868404861116156131ac576131ac6132b3565b600160ff1b848712828116878305891216156131ca576131ca6132b3565b8587129250878205871284841616156131e5576131e56132b3565b878505871281841616156131fb576131fb6132b3565b505050929093029392505050565b6000816000190483118215151615613223576132236132b3565b500290565b60008083128015600160ff1b850184121615613246576132466132b3565b6001600160ff1b0384018313811615613261576132616132b3565b50500390565b600082821015613279576132796132b3565b500390565b6000600019821415613292576132926132b3565b5060010190565b6000600160ff1b8214156132af576132af6132b3565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e3957600080fdfea2646970667358221220d093a75fe2e8967922fae5143bdb97d2eae9296785468b5266b078bc3619d27d64736f6c63430008040033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
