{
  "_format": "hh-sol-artifact-1",
  "contractName": "VestingRegistryLogic",
  "sourceName": "contracts/governance/Vesting/VestingRegistryLogic.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "AdminAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "AdminRemoved",
      "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": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "SOVTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "vesting",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cliff",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "vestingCreationType",
          "type": "uint256"
        }
      ],
      "name": "TeamVestingCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "vesting",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokensStaked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenOwner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "vesting",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "cliff",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "vestingCreationType",
          "type": "uint256"
        }
      ],
      "name": "VestingCreated",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "SOV",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        }
      ],
      "name": "addAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_tokenOwners",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_vestingCreationTypes",
          "type": "uint256[]"
        }
      ],
      "name": "addDeployedVestings",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "admins",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_vestingCreationType",
          "type": "uint256"
        }
      ],
      "name": "createTeamVesting",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        }
      ],
      "name": "createVesting",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_vestingCreationType",
          "type": "uint256"
        }
      ],
      "name": "createVestingAddr",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "feeSharingProxy",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_vestingCreationType",
          "type": "uint256"
        }
      ],
      "name": "getTeamVesting",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        }
      ],
      "name": "getVesting",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_duration",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_vestingCreationType",
          "type": "uint256"
        }
      ],
      "name": "getVestingAddr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vestingAddress",
          "type": "address"
        }
      ],
      "name": "getVestingDetails",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "cliff",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenOwner",
          "type": "address"
        }
      ],
      "name": "getVestingsOf",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "vestingType",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "vestingCreationType",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "vestingAddress",
              "type": "address"
            }
          ],
          "internalType": "struct VestingRegistryStorage.Vesting[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vestingFactory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_SOV",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_staking",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_feeSharingProxy",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_vestingOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_lockedSOV",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_vestingRegistries",
          "type": "address[]"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "isOwner",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isVesting",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vestingAddress",
          "type": "address"
        }
      ],
      "name": "isVestingAdress",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isVestingAddr",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "lockedSOV",
      "outputs": [
        {
          "internalType": "contract LockedSOV",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "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": "_admin",
          "type": "address"
        }
      ],
      "name": "removeAdmin",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vestingFactory",
          "type": "address"
        }
      ],
      "name": "setVestingFactory",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_vesting",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "stakeTokens",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "staking",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "transferSOV",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "vestingFactory",
      "outputs": [
        {
          "internalType": "contract IVestingFactory",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "vestingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "vestingRegistries",
      "outputs": [
        {
          "internalType": "contract IVestingRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "vestings",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "vestingType",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "vestingCreationType",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "vestingAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "vestingsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405260006100176001600160e01b0361007016565b6000805462010000600160b01b031916620100006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610074565b3390565b6126cb806100836000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638da5cb5b11610104578063c680c0b7116100a2578063efb9573311610071578063efb95733146103e7578063f2f46b3b14610407578063f2fde38b1461040f578063f60826ee14610422576101da565b8063c680c0b71461038e578063cc49ede7146103a1578063dbb049d1146103b4578063dfb9366d146103c7576101da565b8063b810c648116100de578063b810c6481461034d578063bd7b590814610360578063c0e0985214610368578063c36519d11461037b576101da565b80638da5cb5b1461031c5780638dedf009146103245780638f32d59b14610345576101da565b806342a82b4f1161017c57806379a83f5a1161014b57806379a83f5a146102b4578063821bee73146102c7578063842a49d5146102e9578063862e229d14610309576101da565b806342a82b4f1461027e5780634cf088d9146102915780636a26b57f1461029957806370480275146102a1576101da565b80631785f53c116101b85780631785f53c146102255780631f50932614610238578063377220fd1461024b578063429b62e51461025e576101da565b806302df0476146101df5780630665a06f1461020857806308dcb3601461021d575b600080fd5b6101f26101ed366004611d42565b61042a565b6040516101ff91906123be565b60405180910390f35b61021b610216366004611d42565b61048b565b005b6101f26104e6565b61021b610233366004611c14565b6104f5565b61021b610246366004611da3565b610574565b61021b610259366004611c14565b610616565b61027161026c366004611c14565b610646565b6040516101ff91906124b3565b61021b61028c366004611c50565b61065b565b6101f26108ca565b6101f26108d9565b61021b6102af366004611c14565b6108e8565b61021b6102c2366004611d08565b610961565b6102da6102d5366004611ea6565b610b0d565b6040516101ff939291906125eb565b6102fc6102f7366004611ea6565b610b37565b6040516101ff91906124c1565b61021b610317366004611da3565b610b5e565b6101f2610bed565b610337610332366004611c14565b610c02565b6040516101ff9291906125dd565b610271610cf6565b61021b61035b366004611e18565b610d20565b6101f2610e30565b610271610376366004611c14565b610e3f565b6101f2610389366004611d42565b610e54565b61021b61039c366004611d08565b610e5d565b6101f26103af366004611c14565b610f9d565b6102716103c2366004611c14565b6110bc565b6103da6103d5366004611d08565b6110da565b6040516101ff91906125cf565b6103fa6103f5366004611c14565b611108565b6040516101ff91906124a2565b6102fc611252565b61021b61041d366004611c14565b611261565b6102fc61128e565b60008060015b90506000868287878760405160200161044d959493929190612365565b60408051601f198184030181529181528151602092830120600090815260099092529020600201546001600160a01b0316925050505b949350505050565b610493610cf6565b806104ad57503360009081526001602052604090205460ff165b6104d25760405162461bcd60e51b81526004016104c99061254f565b60405180910390fd5b6104e0848484846000610574565b50505050565b6005546001600160a01b031681565b6104fd610cf6565b6105195760405162461bcd60e51b81526004016104c99061254f565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f906105699083906123be565b60405180910390a150565b61057c610cf6565b8061059657503360009081526001602052604090205460ff165b6105b25760405162461bcd60e51b81526004016104c99061254f565b60006105c386858560015b8661129d565b9050856001600160a01b03167fd6fcfd83804f6b6b63260c7b99eb10060bc1319dbc9177fb6defc7bd614017bf8286868987604051610606959493929190612456565b60405180910390a2505050505050565b61061e610cf6565b61063a5760405162461bcd60e51b81526004016104c99061254f565b6106438161154d565b50565b60016020526000908152604090205460ff1681565b610663610cf6565b61067f5760405162461bcd60e51b81526004016104c99061254f565b600054610100900460ff1680610698575060005460ff16155b6106b45760405162461bcd60e51b81526004016104c99061253f565b600054610100900460ff161580156106df576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0388166107055760405162461bcd60e51b81526004016104c9906125bf565b6001600160a01b03871661072b5760405162461bcd60e51b81526004016104c99061259f565b6001600160a01b0386166107515760405162461bcd60e51b81526004016104c99061257f565b6001600160a01b0385166107775760405162461bcd60e51b81526004016104c99061252f565b6001600160a01b03841661079d5760405162461bcd60e51b81526004016104c99061258f565b6107a68961154d565b600580546001600160a01b03199081166001600160a01b038b8116919091179092556006805482168a84161790556007805482168984161790556008805482168884161790556003805490911691861691909117905560005b828110156108ac57600084848381811061081557fe5b905060200201602061082a9190810190611c14565b6001600160a01b031614156108515760405162461bcd60e51b81526004016104c9906124cf565b600484848381811061085f57fe5b90506020020160206108749190810190611c14565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b0392909216919091179055016107ff565b5080156108bf576000805461ff00191690555b505050505050505050565b6006546001600160a01b031681565b6007546001600160a01b031681565b6108f0610cf6565b61090c5760405162461bcd60e51b81526004016104c99061254f565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339906105699083906123be565b610969610cf6565b8061098357503360009081526001602052604090205460ff165b61099f5760405162461bcd60e51b81526004016104c99061254f565b6001600160a01b0382166109c55760405162461bcd60e51b81526004016104c99061251f565b600081116109e55760405162461bcd60e51b81526004016104c99061250f565b60055460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390610a179085908590600401612434565b602060405180830381600087803b158015610a3157600080fd5b505af1158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a699190810190611e88565b50604051637547c7a360e01b81526001600160a01b03831690637547c7a390610a969084906004016125cf565b600060405180830381600087803b158015610ab057600080fd5b505af1158015610ac4573d6000803e3d6000fd5b50505050816001600160a01b03167fb539ca1e5c8d398ddf1c41c30166f33404941683be4683319b57669a93dad4ef82604051610b0191906125cf565b60405180910390a25050565b6009602052600090815260409020805460018201546002909201549091906001600160a01b031683565b60048181548110610b4457fe5b6000918252602090912001546001600160a01b0316905081565b610b66610cf6565b80610b8057503360009081526001602052604090205460ff165b610b9c5760405162461bcd60e51b81526004016104c99061254f565b6000610baa868585846105bd565b9050856001600160a01b03167f3791c6c90c276d011b4b885c0bfba0554342acf50a539baca1b06f070af25ff48286868987604051610606959493929190612456565b6000546201000090046001600160a01b031690565b6000806000839050806001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4357600080fd5b505afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c7b9190810190611ec4565b816001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cec9190810190611ec4565b9250925050915091565b600080546201000090046001600160a01b0316610d11611595565b6001600160a01b031614905090565b610d28610cf6565b80610d4257503360009081526001602052604090205460ff165b610d5e5760405162461bcd60e51b81526004016104c99061254f565b60005b83811015610e29576000858583818110610d7757fe5b9050602002016020610d8c9190810190611c14565b6001600160a01b03161415610db35760405162461bcd60e51b81526004016104c9906124df565b6000838383818110610dc157fe5b9050602002013511610de55760405162461bcd60e51b81526004016104c99061255f565b610e21858583818110610df457fe5b9050602002016020610e099190810190611c14565b848484818110610e1557fe5b90506020020135611599565b600101610d61565b5050505050565b6008546001600160a01b031681565b600b6020526000908152604090205460ff1681565b60008080610430565b610e65610cf6565b610e815760405162461bcd60e51b81526004016104c99061254f565b6001600160a01b038216610ea75760405162461bcd60e51b81526004016104c99061256f565b80610ec45760405162461bcd60e51b81526004016104c99061250f565b60055460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610ef69085908590600401612434565b602060405180830381600087803b158015610f1057600080fd5b505af1158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f489190810190611e88565b610f645760405162461bcd60e51b81526004016104c9906125af565b816001600160a01b03167fe1b0ada289bf82fb641c8c1e1c78f820fae44e8f845760725cdeb09167a289ad82604051610b0191906125cf565b60006110b682600360009054906101000a90046001600160a01b03166001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110299190810190611ec4565b600360009054906101000a90046001600160a01b03166001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110af9190810190611ec4565b600061042a565b92915050565b6001600160a01b03166000908152600b602052604090205460ff1690565b600a60205281600052604060002081815481106110f357fe5b90600052602060002001600091509150505481565b606080600a6000846001600160a01b03166001600160a01b0316815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561117a57602002820191906000526020600020905b815481526020019060010190808311611166575b50505050509050600081519050606082516040519080825280602002602001820160405280156111c457816020015b6111b1611b6a565b8152602001906001900390816111a95790505b50905060005b8281101561124957600960008583815181106111e257fe5b6020908102919091018101518252818101929092526040908101600020815160608101835281548152600182015493810193909352600201546001600160a01b031690820152825183908390811061123657fe5b60209081029190910101526001016111ca565b50949350505050565b6003546001600160a01b031681565b611269610cf6565b6112855760405162461bcd60e51b81526004016104c99061254f565b61064381611adb565b6002546001600160a01b031681565b600080600087858888876040516020016112bb959493929190612365565b60408051601f198184030181529181528151602092830120600081815260099093529120600201549091506001600160a01b031661152757846001141561139f57600254600554600654600754604051637d2fbb8f60e11b81526001600160a01b039485169463fa5f771e946113469490821693908216928f928f928f9291169084906004016123cc565b602060405180830381600087803b15801561136057600080fd5b505af1158015611374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113989190810190611c32565b9150611495565b600260009054906101000a90046001600160a01b03166001600160a01b031663546344f0600560009054906101000a90046001600160a01b0316600660009054906101000a90046001600160a01b03168b8b8b600760009054906101000a90046001600160a01b0316600860009054906101000a90046001600160a01b03166040518863ffffffff1660e01b815260040161144097969594939291906123cc565b602060405180830381600087803b15801561145a57600080fd5b505af115801561146e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114929190810190611c32565b91505b6040805160608101825286815260208082018781526001600160a01b038681168486018181526000888152600986528781209651875593516001808801919091559051600290960180546001600160a01b03191696841696909617909555908d168252600a835284822080548086018255908352838320018690558152600b90915291909120805460ff191690911790555b6000908152600960205260409020600201546001600160a01b0316979650505050505050565b6001600160a01b0381166115735760405162461bcd60e51b81526004016104c9906124ff565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6004546001906000908190815b81811015611ad2576000600482815481106115bd57fe5b60009182526020909120015460405163cc49ede760e01b81526001600160a01b039091169063cc49ede7906115f6908b906004016123be565b60206040518083038186803b15801561160e57600080fd5b505afa158015611622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116469190810190611c32565b90506001600160a01b038116156117fc5760008190508887826001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b15801561169757600080fd5b505afa1580156116ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116cf9190810190611ec4565b836001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561170857600080fd5b505afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117409190810190611ec4565b8b604051602001611755959493929190612365565b60408051808303601f1901815282825280516020918201206060840183528a84528184018c81526001600160a01b038781168686018181526000858152600987528781209851895593516001808a01919091559051600290980180546001600160a01b03191698841698909817909755908f168252600a845284822080548088018255908352848320018390558152600b909252919020805460ff19169092179091559450505b60006004838154811061180b57fe5b60009182526020909120015460405163c810a3e360e01b81526001600160a01b039091169063c810a3e390611844908c906004016123be565b60206040518083038186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118949190810190611c32565b90506001600160a01b03811615611ac85760008190508987826001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b1580156118e557600080fd5b505afa1580156118f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061191d9190810190611ec4565b836001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561195657600080fd5b505afa15801561196a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061198e9190810190611ec4565b8c6040516020016119a3959493929190612365565b6040516020818303038152906040528051906020012060001c955060405180606001604052808881526020018a8152602001836001600160a01b031681525060096000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050600a60008b6001600160a01b03166001600160a01b031681526020019081526020016000208690806001815401808255809150509060018203906000526020600020016000909192909190915055506001600b6000846001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550505b50506001016115a6565b50505050505050565b6001600160a01b038116611b015760405162461bcd60e51b81526004016104c9906124ef565b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b80356110b681612662565b80516110b681612662565b60008083601f840112611bbc57600080fd5b50813567ffffffffffffffff811115611bd457600080fd5b602083019150836020820283011115611bec57600080fd5b9250929050565b80516110b681612676565b80356110b68161267f565b80516110b68161267f565b600060208284031215611c2657600080fd5b60006104838484611b94565b600060208284031215611c4457600080fd5b60006104838484611b9f565b60008060008060008060008060e0898b031215611c6c57600080fd5b6000611c788b8b611b94565b9850506020611c898b828c01611b94565b9750506040611c9a8b828c01611b94565b9650506060611cab8b828c01611b94565b9550506080611cbc8b828c01611b94565b94505060a0611ccd8b828c01611b94565b93505060c089013567ffffffffffffffff811115611cea57600080fd5b611cf68b828c01611baa565b92509250509295985092959890939650565b60008060408385031215611d1b57600080fd5b6000611d278585611b94565b9250506020611d3885828601611bfe565b9150509250929050565b60008060008060808587031215611d5857600080fd5b6000611d648787611b94565b9450506020611d7587828801611bfe565b9350506040611d8687828801611bfe565b9250506060611d9787828801611bfe565b91505092959194509250565b600080600080600060a08688031215611dbb57600080fd5b6000611dc78888611b94565b9550506020611dd888828901611bfe565b9450506040611de988828901611bfe565b9350506060611dfa88828901611bfe565b9250506080611e0b88828901611bfe565b9150509295509295909350565b60008060008060408587031215611e2e57600080fd5b843567ffffffffffffffff811115611e4557600080fd5b611e5187828801611baa565b9450945050602085013567ffffffffffffffff811115611e7057600080fd5b611e7c87828801611baa565b95989497509550505050565b600060208284031215611e9a57600080fd5b60006104838484611bf3565b600060208284031215611eb857600080fd5b60006104838484611bfe565b600060208284031215611ed657600080fd5b60006104838484611c09565b6000611eee8383612314565b505060600190565b611eff81612626565b82525050565b611eff611f1182612626565b612650565b6000611f2182612619565b611f2b818561261d565b9350611f3683612613565b8060005b83811015611f64578151611f4e8882611ee2565b9750611f5983612613565b925050600101611f3a565b509495945050505050565b611eff81612631565b611eff81612645565b6000611f8e60208361261d565b7f56657374696e67207265676973747279206164647265737320696e76616c6964815260200192915050565b6000611fc7601f8361261d565b7f746f6b656e206f776e65722063616e6e6f742062652030206164647265737300815260200192915050565b600061200060268361261d565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000612048601e8361261d565b7f76657374696e67466163746f7279206164647265737320696e76616c69640000815260200192915050565b6000612081600e8361261d565b6d185b5bdd5b9d081a5b9d985b1a5960921b815260200192915050565b60006120ab60178361261d565b7f76657374696e67206164647265737320696e76616c6964000000000000000000815260200192915050565b60006120e4601c8361261d565b7f76657374696e674f776e6572206164647265737320696e76616c696400000000815260200192915050565b600061211d602e8361261d565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015260400192915050565b600061216d600c8361261d565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b6000612195602c8361261d565b7f76657374696e67206372656174696f6e2074797065206d75737420626520677281526b06561746572207468616e20360a41b602082015260400192915050565b60006121e360188361261d565b7f7265636569766572206164647265737320696e76616c69640000000000000000815260200192915050565b600061221c601f8361261d565b7f66656553686172696e6750726f7879206164647265737320696e76616c696400815260200192915050565b600061225560198361261d565b7f4c6f636b6564534f56206164647265737320696e76616c696400000000000000815260200192915050565b600061228e60178361261d565b7f7374616b696e67206164647265737320696e76616c6964000000000000000000815260200192915050565b60006122c7600f8361261d565b6e1d1c985b9cd9995c8819985a5b1959608a1b815260200192915050565b60006122f260138361261d565b7214d3d5881859191c995cdcc81a5b9d985b1a59606a1b815260200192915050565b80516060830190612325848261234b565b506020820151612338602085018261234b565b5060408201516104e06040850182611ef6565b611eff81612642565b611eff61236082612642565b612642565b60006123718288611f05565b6014820191506123818287612354565b6020820191506123918286612354565b6020820191506123a18285612354565b6020820191506123b18284612354565b5060200195945050505050565b602081016110b68284611ef6565b60e081016123da828a611ef6565b6123e76020830189611ef6565b6123f46040830188611ef6565b612401606083018761234b565b61240e608083018661234b565b61241b60a0830185611ef6565b61242860c0830184611ef6565b98975050505050505050565b604081016124428285611ef6565b61244f602083018461234b565b9392505050565b60a081016124648288611ef6565b612471602083018761234b565b61247e604083018661234b565b61248b606083018561234b565b612498608083018461234b565b9695505050505050565b6020808252810161244f8184611f16565b602081016110b68284611f6f565b602081016110b68284611f78565b602080825281016110b681611f81565b602080825281016110b681611fba565b602080825281016110b681611ff3565b602080825281016110b68161203b565b602080825281016110b681612074565b602080825281016110b68161209e565b602080825281016110b6816120d7565b602080825281016110b681612110565b602080825281016110b681612160565b602080825281016110b681612188565b602080825281016110b6816121d6565b602080825281016110b68161220f565b602080825281016110b681612248565b602080825281016110b681612281565b602080825281016110b6816122ba565b602080825281016110b6816122e5565b602081016110b6828461234b565b60408101612442828561234b565b606081016125f9828661234b565b612606602083018561234b565b6104836040830184611ef6565b60200190565b5190565b90815260200190565b60006110b682612636565b151590565b6001600160a01b031690565b90565b60006110b682612626565b60006110b68260006110b68260601b90565b61266b81612626565b811461064357600080fd5b61266b81612631565b61266b8161264256fea365627a7a72315820cc50a64b85be89778778cac83274f5609b4b2f01ff897b8d550f02d9b452c53d6c6578706572696d656e74616cf564736f6c63430005110040",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101da5760003560e01c80638da5cb5b11610104578063c680c0b7116100a2578063efb9573311610071578063efb95733146103e7578063f2f46b3b14610407578063f2fde38b1461040f578063f60826ee14610422576101da565b8063c680c0b71461038e578063cc49ede7146103a1578063dbb049d1146103b4578063dfb9366d146103c7576101da565b8063b810c648116100de578063b810c6481461034d578063bd7b590814610360578063c0e0985214610368578063c36519d11461037b576101da565b80638da5cb5b1461031c5780638dedf009146103245780638f32d59b14610345576101da565b806342a82b4f1161017c57806379a83f5a1161014b57806379a83f5a146102b4578063821bee73146102c7578063842a49d5146102e9578063862e229d14610309576101da565b806342a82b4f1461027e5780634cf088d9146102915780636a26b57f1461029957806370480275146102a1576101da565b80631785f53c116101b85780631785f53c146102255780631f50932614610238578063377220fd1461024b578063429b62e51461025e576101da565b806302df0476146101df5780630665a06f1461020857806308dcb3601461021d575b600080fd5b6101f26101ed366004611d42565b61042a565b6040516101ff91906123be565b60405180910390f35b61021b610216366004611d42565b61048b565b005b6101f26104e6565b61021b610233366004611c14565b6104f5565b61021b610246366004611da3565b610574565b61021b610259366004611c14565b610616565b61027161026c366004611c14565b610646565b6040516101ff91906124b3565b61021b61028c366004611c50565b61065b565b6101f26108ca565b6101f26108d9565b61021b6102af366004611c14565b6108e8565b61021b6102c2366004611d08565b610961565b6102da6102d5366004611ea6565b610b0d565b6040516101ff939291906125eb565b6102fc6102f7366004611ea6565b610b37565b6040516101ff91906124c1565b61021b610317366004611da3565b610b5e565b6101f2610bed565b610337610332366004611c14565b610c02565b6040516101ff9291906125dd565b610271610cf6565b61021b61035b366004611e18565b610d20565b6101f2610e30565b610271610376366004611c14565b610e3f565b6101f2610389366004611d42565b610e54565b61021b61039c366004611d08565b610e5d565b6101f26103af366004611c14565b610f9d565b6102716103c2366004611c14565b6110bc565b6103da6103d5366004611d08565b6110da565b6040516101ff91906125cf565b6103fa6103f5366004611c14565b611108565b6040516101ff91906124a2565b6102fc611252565b61021b61041d366004611c14565b611261565b6102fc61128e565b60008060015b90506000868287878760405160200161044d959493929190612365565b60408051601f198184030181529181528151602092830120600090815260099092529020600201546001600160a01b0316925050505b949350505050565b610493610cf6565b806104ad57503360009081526001602052604090205460ff165b6104d25760405162461bcd60e51b81526004016104c99061254f565b60405180910390fd5b6104e0848484846000610574565b50505050565b6005546001600160a01b031681565b6104fd610cf6565b6105195760405162461bcd60e51b81526004016104c99061254f565b6001600160a01b03811660009081526001602052604090819020805460ff19169055517fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f906105699083906123be565b60405180910390a150565b61057c610cf6565b8061059657503360009081526001602052604090205460ff165b6105b25760405162461bcd60e51b81526004016104c99061254f565b60006105c386858560015b8661129d565b9050856001600160a01b03167fd6fcfd83804f6b6b63260c7b99eb10060bc1319dbc9177fb6defc7bd614017bf8286868987604051610606959493929190612456565b60405180910390a2505050505050565b61061e610cf6565b61063a5760405162461bcd60e51b81526004016104c99061254f565b6106438161154d565b50565b60016020526000908152604090205460ff1681565b610663610cf6565b61067f5760405162461bcd60e51b81526004016104c99061254f565b600054610100900460ff1680610698575060005460ff16155b6106b45760405162461bcd60e51b81526004016104c99061253f565b600054610100900460ff161580156106df576000805460ff1961ff0019909116610100171660011790555b6001600160a01b0388166107055760405162461bcd60e51b81526004016104c9906125bf565b6001600160a01b03871661072b5760405162461bcd60e51b81526004016104c99061259f565b6001600160a01b0386166107515760405162461bcd60e51b81526004016104c99061257f565b6001600160a01b0385166107775760405162461bcd60e51b81526004016104c99061252f565b6001600160a01b03841661079d5760405162461bcd60e51b81526004016104c99061258f565b6107a68961154d565b600580546001600160a01b03199081166001600160a01b038b8116919091179092556006805482168a84161790556007805482168984161790556008805482168884161790556003805490911691861691909117905560005b828110156108ac57600084848381811061081557fe5b905060200201602061082a9190810190611c14565b6001600160a01b031614156108515760405162461bcd60e51b81526004016104c9906124cf565b600484848381811061085f57fe5b90506020020160206108749190810190611c14565b815460018082018455600093845260209093200180546001600160a01b0319166001600160a01b0392909216919091179055016107ff565b5080156108bf576000805461ff00191690555b505050505050505050565b6006546001600160a01b031681565b6007546001600160a01b031681565b6108f0610cf6565b61090c5760405162461bcd60e51b81526004016104c99061254f565b6001600160a01b038116600090815260016020819052604091829020805460ff19169091179055517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e339906105699083906123be565b610969610cf6565b8061098357503360009081526001602052604090205460ff165b61099f5760405162461bcd60e51b81526004016104c99061254f565b6001600160a01b0382166109c55760405162461bcd60e51b81526004016104c99061251f565b600081116109e55760405162461bcd60e51b81526004016104c99061250f565b60055460405163095ea7b360e01b81526001600160a01b039091169063095ea7b390610a179085908590600401612434565b602060405180830381600087803b158015610a3157600080fd5b505af1158015610a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a699190810190611e88565b50604051637547c7a360e01b81526001600160a01b03831690637547c7a390610a969084906004016125cf565b600060405180830381600087803b158015610ab057600080fd5b505af1158015610ac4573d6000803e3d6000fd5b50505050816001600160a01b03167fb539ca1e5c8d398ddf1c41c30166f33404941683be4683319b57669a93dad4ef82604051610b0191906125cf565b60405180910390a25050565b6009602052600090815260409020805460018201546002909201549091906001600160a01b031683565b60048181548110610b4457fe5b6000918252602090912001546001600160a01b0316905081565b610b66610cf6565b80610b8057503360009081526001602052604090205460ff165b610b9c5760405162461bcd60e51b81526004016104c99061254f565b6000610baa868585846105bd565b9050856001600160a01b03167f3791c6c90c276d011b4b885c0bfba0554342acf50a539baca1b06f070af25ff48286868987604051610606959493929190612456565b6000546201000090046001600160a01b031690565b6000806000839050806001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4357600080fd5b505afa158015610c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c7b9190810190611ec4565b816001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b158015610cb457600080fd5b505afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cec9190810190611ec4565b9250925050915091565b600080546201000090046001600160a01b0316610d11611595565b6001600160a01b031614905090565b610d28610cf6565b80610d4257503360009081526001602052604090205460ff165b610d5e5760405162461bcd60e51b81526004016104c99061254f565b60005b83811015610e29576000858583818110610d7757fe5b9050602002016020610d8c9190810190611c14565b6001600160a01b03161415610db35760405162461bcd60e51b81526004016104c9906124df565b6000838383818110610dc157fe5b9050602002013511610de55760405162461bcd60e51b81526004016104c99061255f565b610e21858583818110610df457fe5b9050602002016020610e099190810190611c14565b848484818110610e1557fe5b90506020020135611599565b600101610d61565b5050505050565b6008546001600160a01b031681565b600b6020526000908152604090205460ff1681565b60008080610430565b610e65610cf6565b610e815760405162461bcd60e51b81526004016104c99061254f565b6001600160a01b038216610ea75760405162461bcd60e51b81526004016104c99061256f565b80610ec45760405162461bcd60e51b81526004016104c99061250f565b60055460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610ef69085908590600401612434565b602060405180830381600087803b158015610f1057600080fd5b505af1158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f489190810190611e88565b610f645760405162461bcd60e51b81526004016104c9906125af565b816001600160a01b03167fe1b0ada289bf82fb641c8c1e1c78f820fae44e8f845760725cdeb09167a289ad82604051610b0191906125cf565b60006110b682600360009054906101000a90046001600160a01b03166001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b158015610ff157600080fd5b505afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110299190810190611ec4565b600360009054906101000a90046001600160a01b03166001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561107757600080fd5b505afa15801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110af9190810190611ec4565b600061042a565b92915050565b6001600160a01b03166000908152600b602052604090205460ff1690565b600a60205281600052604060002081815481106110f357fe5b90600052602060002001600091509150505481565b606080600a6000846001600160a01b03166001600160a01b0316815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561117a57602002820191906000526020600020905b815481526020019060010190808311611166575b50505050509050600081519050606082516040519080825280602002602001820160405280156111c457816020015b6111b1611b6a565b8152602001906001900390816111a95790505b50905060005b8281101561124957600960008583815181106111e257fe5b6020908102919091018101518252818101929092526040908101600020815160608101835281548152600182015493810193909352600201546001600160a01b031690820152825183908390811061123657fe5b60209081029190910101526001016111ca565b50949350505050565b6003546001600160a01b031681565b611269610cf6565b6112855760405162461bcd60e51b81526004016104c99061254f565b61064381611adb565b6002546001600160a01b031681565b600080600087858888876040516020016112bb959493929190612365565b60408051601f198184030181529181528151602092830120600081815260099093529120600201549091506001600160a01b031661152757846001141561139f57600254600554600654600754604051637d2fbb8f60e11b81526001600160a01b039485169463fa5f771e946113469490821693908216928f928f928f9291169084906004016123cc565b602060405180830381600087803b15801561136057600080fd5b505af1158015611374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113989190810190611c32565b9150611495565b600260009054906101000a90046001600160a01b03166001600160a01b031663546344f0600560009054906101000a90046001600160a01b0316600660009054906101000a90046001600160a01b03168b8b8b600760009054906101000a90046001600160a01b0316600860009054906101000a90046001600160a01b03166040518863ffffffff1660e01b815260040161144097969594939291906123cc565b602060405180830381600087803b15801561145a57600080fd5b505af115801561146e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114929190810190611c32565b91505b6040805160608101825286815260208082018781526001600160a01b038681168486018181526000888152600986528781209651875593516001808801919091559051600290960180546001600160a01b03191696841696909617909555908d168252600a835284822080548086018255908352838320018690558152600b90915291909120805460ff191690911790555b6000908152600960205260409020600201546001600160a01b0316979650505050505050565b6001600160a01b0381166115735760405162461bcd60e51b81526004016104c9906124ff565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6004546001906000908190815b81811015611ad2576000600482815481106115bd57fe5b60009182526020909120015460405163cc49ede760e01b81526001600160a01b039091169063cc49ede7906115f6908b906004016123be565b60206040518083038186803b15801561160e57600080fd5b505afa158015611622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116469190810190611c32565b90506001600160a01b038116156117fc5760008190508887826001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b15801561169757600080fd5b505afa1580156116ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116cf9190810190611ec4565b836001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561170857600080fd5b505afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117409190810190611ec4565b8b604051602001611755959493929190612365565b60408051808303601f1901815282825280516020918201206060840183528a84528184018c81526001600160a01b038781168686018181526000858152600987528781209851895593516001808a01919091559051600290980180546001600160a01b03191698841698909817909755908f168252600a845284822080548088018255908352848320018390558152600b909252919020805460ff19169092179091559450505b60006004838154811061180b57fe5b60009182526020909120015460405163c810a3e360e01b81526001600160a01b039091169063c810a3e390611844908c906004016123be565b60206040518083038186803b15801561185c57600080fd5b505afa158015611870573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118949190810190611c32565b90506001600160a01b03811615611ac85760008190508987826001600160a01b03166313d033c06040518163ffffffff1660e01b815260040160206040518083038186803b1580156118e557600080fd5b505afa1580156118f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061191d9190810190611ec4565b836001600160a01b0316630fb5a6b46040518163ffffffff1660e01b815260040160206040518083038186803b15801561195657600080fd5b505afa15801561196a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061198e9190810190611ec4565b8c6040516020016119a3959493929190612365565b6040516020818303038152906040528051906020012060001c955060405180606001604052808881526020018a8152602001836001600160a01b031681525060096000888152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050600a60008b6001600160a01b03166001600160a01b031681526020019081526020016000208690806001815401808255809150509060018203906000526020600020016000909192909190915055506001600b6000846001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550505b50506001016115a6565b50505050505050565b6001600160a01b038116611b015760405162461bcd60e51b81526004016104c9906124ef565b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b6040518060600160405280600081526020016000815260200160006001600160a01b031681525090565b80356110b681612662565b80516110b681612662565b60008083601f840112611bbc57600080fd5b50813567ffffffffffffffff811115611bd457600080fd5b602083019150836020820283011115611bec57600080fd5b9250929050565b80516110b681612676565b80356110b68161267f565b80516110b68161267f565b600060208284031215611c2657600080fd5b60006104838484611b94565b600060208284031215611c4457600080fd5b60006104838484611b9f565b60008060008060008060008060e0898b031215611c6c57600080fd5b6000611c788b8b611b94565b9850506020611c898b828c01611b94565b9750506040611c9a8b828c01611b94565b9650506060611cab8b828c01611b94565b9550506080611cbc8b828c01611b94565b94505060a0611ccd8b828c01611b94565b93505060c089013567ffffffffffffffff811115611cea57600080fd5b611cf68b828c01611baa565b92509250509295985092959890939650565b60008060408385031215611d1b57600080fd5b6000611d278585611b94565b9250506020611d3885828601611bfe565b9150509250929050565b60008060008060808587031215611d5857600080fd5b6000611d648787611b94565b9450506020611d7587828801611bfe565b9350506040611d8687828801611bfe565b9250506060611d9787828801611bfe565b91505092959194509250565b600080600080600060a08688031215611dbb57600080fd5b6000611dc78888611b94565b9550506020611dd888828901611bfe565b9450506040611de988828901611bfe565b9350506060611dfa88828901611bfe565b9250506080611e0b88828901611bfe565b9150509295509295909350565b60008060008060408587031215611e2e57600080fd5b843567ffffffffffffffff811115611e4557600080fd5b611e5187828801611baa565b9450945050602085013567ffffffffffffffff811115611e7057600080fd5b611e7c87828801611baa565b95989497509550505050565b600060208284031215611e9a57600080fd5b60006104838484611bf3565b600060208284031215611eb857600080fd5b60006104838484611bfe565b600060208284031215611ed657600080fd5b60006104838484611c09565b6000611eee8383612314565b505060600190565b611eff81612626565b82525050565b611eff611f1182612626565b612650565b6000611f2182612619565b611f2b818561261d565b9350611f3683612613565b8060005b83811015611f64578151611f4e8882611ee2565b9750611f5983612613565b925050600101611f3a565b509495945050505050565b611eff81612631565b611eff81612645565b6000611f8e60208361261d565b7f56657374696e67207265676973747279206164647265737320696e76616c6964815260200192915050565b6000611fc7601f8361261d565b7f746f6b656e206f776e65722063616e6e6f742062652030206164647265737300815260200192915050565b600061200060268361261d565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000612048601e8361261d565b7f76657374696e67466163746f7279206164647265737320696e76616c69640000815260200192915050565b6000612081600e8361261d565b6d185b5bdd5b9d081a5b9d985b1a5960921b815260200192915050565b60006120ab60178361261d565b7f76657374696e67206164647265737320696e76616c6964000000000000000000815260200192915050565b60006120e4601c8361261d565b7f76657374696e674f776e6572206164647265737320696e76616c696400000000815260200192915050565b600061211d602e8361261d565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b602082015260400192915050565b600061216d600c8361261d565b6b1d5b985d5d1a1bdc9a5e995960a21b815260200192915050565b6000612195602c8361261d565b7f76657374696e67206372656174696f6e2074797065206d75737420626520677281526b06561746572207468616e20360a41b602082015260400192915050565b60006121e360188361261d565b7f7265636569766572206164647265737320696e76616c69640000000000000000815260200192915050565b600061221c601f8361261d565b7f66656553686172696e6750726f7879206164647265737320696e76616c696400815260200192915050565b600061225560198361261d565b7f4c6f636b6564534f56206164647265737320696e76616c696400000000000000815260200192915050565b600061228e60178361261d565b7f7374616b696e67206164647265737320696e76616c6964000000000000000000815260200192915050565b60006122c7600f8361261d565b6e1d1c985b9cd9995c8819985a5b1959608a1b815260200192915050565b60006122f260138361261d565b7214d3d5881859191c995cdcc81a5b9d985b1a59606a1b815260200192915050565b80516060830190612325848261234b565b506020820151612338602085018261234b565b5060408201516104e06040850182611ef6565b611eff81612642565b611eff61236082612642565b612642565b60006123718288611f05565b6014820191506123818287612354565b6020820191506123918286612354565b6020820191506123a18285612354565b6020820191506123b18284612354565b5060200195945050505050565b602081016110b68284611ef6565b60e081016123da828a611ef6565b6123e76020830189611ef6565b6123f46040830188611ef6565b612401606083018761234b565b61240e608083018661234b565b61241b60a0830185611ef6565b61242860c0830184611ef6565b98975050505050505050565b604081016124428285611ef6565b61244f602083018461234b565b9392505050565b60a081016124648288611ef6565b612471602083018761234b565b61247e604083018661234b565b61248b606083018561234b565b612498608083018461234b565b9695505050505050565b6020808252810161244f8184611f16565b602081016110b68284611f6f565b602081016110b68284611f78565b602080825281016110b681611f81565b602080825281016110b681611fba565b602080825281016110b681611ff3565b602080825281016110b68161203b565b602080825281016110b681612074565b602080825281016110b68161209e565b602080825281016110b6816120d7565b602080825281016110b681612110565b602080825281016110b681612160565b602080825281016110b681612188565b602080825281016110b6816121d6565b602080825281016110b68161220f565b602080825281016110b681612248565b602080825281016110b681612281565b602080825281016110b6816122ba565b602080825281016110b6816122e5565b602081016110b6828461234b565b60408101612442828561234b565b606081016125f9828661234b565b612606602083018561234b565b6104836040830184611ef6565b60200190565b5190565b90815260200190565b60006110b682612636565b151590565b6001600160a01b031690565b90565b60006110b682612626565b60006110b68260006110b68260601b90565b61266b81612626565b811461064357600080fd5b61266b81612631565b61266b8161264256fea365627a7a72315820cc50a64b85be89778778cac83274f5609b4b2f01ff897b8d550f02d9b452c53d6c6578706572696d656e74616cf564736f6c63430005110040",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
