{
  "contractName": "OwnTheGridBoardV2",
  "version": 2,
  "compiler": "0.8.24+commit.e11b9ed9.Emscripten.clang",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "acceptedToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "initialModerator",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "moderator",
          "type": "address"
        }
      ],
      "name": "ModeratorUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "nextOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "count",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalLockedAmount",
          "type": "uint256"
        }
      ],
      "name": "SlotBatchReserved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "slotId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "hidden",
          "type": "bool"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "reasonHash",
          "type": "bytes32"
        }
      ],
      "name": "SlotHidden",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "slotId",
          "type": "uint16"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "SlotMetadataUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "slotId",
          "type": "uint16"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "unlockedAmount",
          "type": "uint256"
        }
      ],
      "name": "SlotReleased",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint16",
          "name": "slotId",
          "type": "uint16"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "lockedAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "expiresAt",
          "type": "uint64"
        }
      ],
      "name": "SlotReserved",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BASE_LOCK",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "CURVE_MULTIPLIER_WAD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TERM",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_BATCH",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_BOARD_LOCK",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SLOT_COUNT",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "WAD",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16[]",
          "name": "slotIds",
          "type": "uint16[]"
        }
      ],
      "name": "clearExpiredBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "slotId",
          "type": "uint16"
        }
      ],
      "name": "getSlot",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint72",
              "name": "colors",
              "type": "uint72"
            },
            {
              "internalType": "bool",
              "name": "hidden",
              "type": "bool"
            },
            {
              "internalType": "uint128",
              "name": "lockedAmount",
              "type": "uint128"
            },
            {
              "internalType": "uint64",
              "name": "expiresAt",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "reservedAtBlock",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "updatedAtBlock",
              "type": "uint64"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "url",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "message",
              "type": "string"
            }
          ],
          "internalType": "struct OwnTheGridBoardV2.Slot",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "start",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "count",
          "type": "uint16"
        }
      ],
      "name": "getSlots",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "uint72",
              "name": "colors",
              "type": "uint72"
            },
            {
              "internalType": "bool",
              "name": "hidden",
              "type": "bool"
            },
            {
              "internalType": "uint128",
              "name": "lockedAmount",
              "type": "uint128"
            },
            {
              "internalType": "uint64",
              "name": "expiresAt",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "reservedAtBlock",
              "type": "uint64"
            },
            {
              "internalType": "uint64",
              "name": "updatedAtBlock",
              "type": "uint64"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "url",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "message",
              "type": "string"
            }
          ],
          "internalType": "struct OwnTheGridBoardV2.Slot[]",
          "name": "result",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "slotId",
          "type": "uint16"
        },
        {
          "internalType": "bool",
          "name": "hidden",
          "type": "bool"
        },
        {
          "internalType": "bytes32",
          "name": "reasonHash",
          "type": "bytes32"
        }
      ],
      "name": "hideSlot",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "slotId",
          "type": "uint16"
        }
      ],
      "name": "isAvailable",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "moderator",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nextRequiredLock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "occupiedCount",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "pendingWithdrawals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16[]",
          "name": "slotIds",
          "type": "uint16[]"
        }
      ],
      "name": "quoteReserve",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "totalAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "slotId",
          "type": "uint16"
        }
      ],
      "name": "release",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "rank",
          "type": "uint256"
        }
      ],
      "name": "requiredLockForRank",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "slotId",
          "type": "uint16"
        },
        {
          "components": [
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "url",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "message",
              "type": "string"
            },
            {
              "internalType": "uint24",
              "name": "backgroundColor",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "accentColor",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "textColor",
              "type": "uint24"
            }
          ],
          "internalType": "struct OwnTheGridBoardV2.TileData",
          "name": "data",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "maxAmount",
          "type": "uint256"
        }
      ],
      "name": "reserve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16[]",
          "name": "slotIds",
          "type": "uint16[]"
        },
        {
          "components": [
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "url",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "message",
              "type": "string"
            },
            {
              "internalType": "uint24",
              "name": "backgroundColor",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "accentColor",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "textColor",
              "type": "uint24"
            }
          ],
          "internalType": "struct OwnTheGridBoardV2.TileData[]",
          "name": "data",
          "type": "tuple[]"
        },
        {
          "internalType": "uint256",
          "name": "maxAmount",
          "type": "uint256"
        }
      ],
      "name": "reserveBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "nextModerator",
          "type": "address"
        }
      ],
      "name": "setModerator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IERC20BoardV2",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalLocked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "nextOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "slotId",
          "type": "uint16"
        },
        {
          "components": [
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "url",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "message",
              "type": "string"
            },
            {
              "internalType": "uint24",
              "name": "backgroundColor",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "accentColor",
              "type": "uint24"
            },
            {
              "internalType": "uint24",
              "name": "textColor",
              "type": "uint24"
            }
          ],
          "internalType": "struct OwnTheGridBoardV2.TileData",
          "name": "data",
          "type": "tuple"
        }
      ],
      "name": "updateMetadata",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b50604051620032da380380620032da83398101604081905262000034916200015f565b6000826001600160a01b03163b11620000845760405162461bcd60e51b815260206004820152600e60248201526d1d1bdad95b881c995c5d5a5c995960921b604482015260640160405180910390fd5b6001600160a01b03808316608052600080546001600160a01b03191633179055811615620000b35780620000b5565b335b600180546001600160a01b0319166001600160a01b039290921691909117905560405133906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001546040516001600160a01b03909116907f74ad00f42c7567187f818b7401d2b03eae8dc59f390e590b0bbdf9048c53d25490600090a2505062000197565b80516001600160a01b03811681146200015a57600080fd5b919050565b600080604083850312156200017357600080fd5b6200017e8362000142565b91506200018e6020840162000142565b90509250929050565b608051613104620001d6600039600081816104370152818161087801528181611a6c015281816122c20152818161235a015261240a01526131046000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806375bba18911610104578063ae0200fc116100a2578063f313967d11610071578063f313967d146103ec578063f3f43703146103ff578063fbe6ae631461041f578063fc0c546a1461043257600080fd5b8063ae0200fc146103a6578063b884b2d8146103b5578063b8c4db2b146103c6578063f2fde38b146103d957600080fd5b80638da5cb5b116100de5780638da5cb5b146103615780639334ce5414610374578063950bff9f1461039657806398aae2541461039e57600080fd5b806375bba1891461030d57806382a8b13a14610320578063862b35f01461034157600080fd5b80634e37070b11610171578063568914121161014b57806356891412146102c3578063697586aa146102cc5780636a146024146102de5780636ef2953e146102ed57600080fd5b80634e37070b1461028b5780634eef2707146102a757806354fd4d50146102bc57600080fd5b80633ccfd60b116101ad5780633ccfd60b1461022c5780633d85c5b114610234578063440a6d2b1461025557806348b691fa1461027857600080fd5b806327986b4e146101d457806335d38908146101e957806338743904146101fc575b600080fd5b6101e76101e23660046128b0565b610459565b005b6101e76101f7366004612923565b61074a565b60015461020f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101e76107bb565b610247610242366004612964565b61090e565b604051908152602001610223565b610268610263366004612994565b6109a4565b6040519015158152602001610223565b6101e76102863660046129c4565b610a20565b61029461019081565b60405161ffff9091168152602001610223565b60015461029490600160a01b900461ffff1681565b6002610247565b61024760025481565b6102476a52b7d2dcc80cd2e400000081565b610247670de0b6b3a764000081565b6103006102fb366004612a03565b610b5c565b6040516102239190612b83565b6101e761031b366004612be7565b610ed0565b61033361032e366004612923565b610f83565b604051610223929190612c10565b61035461034f366004612994565b611074565b6040516102239190612c5d565b60005461020f906001600160a01b031681565b61037e62278d0081565b6040516001600160401b039091168152602001610223565b610294602881565b610247611305565b610247670df876d1670ebb5881565b610247690a968163f0a57b40000081565b6101e76103d4366004612c82565b611346565b6101e76103e7366004612be7565b6114c9565b6101e76103fa366004612cd8565b6115b1565b61024761040d366004612be7565b60046020526000908152604090205481565b6101e761042d366004612994565b6116e7565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b60055460ff16156104855760405162461bcd60e51b815260040161047c90612d25565b60405180910390fd5b6005805460ff1916600117905561049c8585611b29565b8184146104dd5760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b604482015260640161047c565b60005b848110156105b2576105148484838181106104fd576104fd612d48565b905060200281019061050f9190612d5e565b611c7c565b61054386868381811061052957610529612d48565b905060200201602081019061053e9190612994565b61209a565b600060038188888581811061055a5761055a612d48565b905060200201602081019061056f9190612994565b61ffff1681526020810191909152604001600020546001600160a01b0316146105aa5760405162461bcd60e51b815260040161047c90612d7e565b6001016104e0565b5060015460009081906105d090600160a01b900461ffff1687612133565b91509150828111156106145760405162461bcd60e51b815260206004820152600d60248201526c1c1c9a58d94818da185b99d959609a1b604482015260640161047c565b61061d81612242565b610626816122aa565b60005b868110156106a65761069e88888381811061064657610646612d48565b905060200201602081019061065b9190612994565b87878481811061066d5761066d612d48565b905060200281019061067f9190612d5e565b85848151811061069157610691612d48565b60200260200101516124ca565b600101610629565b50600180548791906014906106c7908490600160a01b900461ffff16612db8565b92506101000a81548161ffff021916908361ffff16021790555080600260008282546106f39190612dd3565b90915550506040805161ffff881681526020810183905233917febaef8c9e3ba75c4e43a37324731cf2c1a54ffc33b6043dd959a6d45eb487795910160405180910390a250506005805460ff191690555050505050565b60055460ff161561076d5760405162461bcd60e51b815260040161047c90612d25565b6005805460ff191660011790556107848282611b29565b60005b818110156107ac576107a483838381811061052957610529612d48565b600101610787565b50506005805460ff1916905550565b60055460ff16156107de5760405162461bcd60e51b815260040161047c90612d25565b6005805460ff19166001179055336000908152600460205260409020548061083e5760405162461bcd60e51b81526020600482015260136024820152726e6f7468696e6720746f20776974686472617760681b604482015260640161047c565b33600081815260046020819052604080832092909255905163a9059cbb60e01b815290810191909152602481018290526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156108c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e59190612de6565b6109015760405162461bcd60e51b815260040161047c90612e03565b506005805460ff19169055565b6000808211801561092157506101908211155b6109585760405162461bcd60e51b81526020600482015260086024820152676261642072616e6b60c01b604482015260640161047c565b50690a968163f0a57b40000060015b8281101561099e57670de0b6b3a764000061098a670df876d1670ebb5884612e2c565b6109949190612e43565b9150600101610967565b50919050565b600061019061ffff8316106109cb5760405162461bcd60e51b815260040161047c90612e65565b61ffff82166000908152600360205260409020546001600160a01b03161580610a1a575061ffff8216600090815260036020526040902060010154600160801b90046001600160401b03164210155b92915050565b6000546001600160a01b0316331480610a4357506001546001600160a01b031633145b610a7f5760405162461bcd60e51b815260206004820152600d60248201526c3737ba1036b7b232b930ba37b960991b604482015260640161047c565b61019061ffff8416108015610aaf575061ffff83166000908152600360205260409020546001600160a01b031615155b610ae85760405162461bcd60e51b815260206004820152600a602482015269195b5c1d1e481cdb1bdd60b21b604482015260640161047c565b61ffff8316600081815260036020526040908190208054851515600160e81b0260ff60e81b19909116179055517fea8cf15425ae681272f6ed8197465e04a6eab8f1b3d19f1f4db16f6560da9f6c90610b4f90859085909115158252602082015260400190565b60405180910390a2505050565b606060008261ffff16118015610b775750602861ffff831611155b8015610b955750610190610b9261ffff848116908616612dd3565b11155b610bcc5760405162461bcd60e51b8152602060048201526008602482015267626164207061676560c01b604482015260640161047c565b8161ffff166001600160401b03811115610be857610be8612e87565b604051908082528060200260200182016040528015610c2157816020015b610c0e6127c8565b815260200190600190039081610c065790505b50905060005b8261ffff168161ffff161015610ec95760036000610c458387612db8565b61ffff168152602080820192909252604090810160002081516101408101835281546001600160a01b0381168252600160a01b810468ffffffffffffffffff1694820194909452600160e81b90930460ff1615159183019190915260018101546001600160801b0381166060840152600160801b81046001600160401b039081166080850152600160c01b909104811660a084015260028201541660c083015260038101805460e084019190610cfa90612e9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2690612e9d565b8015610d735780601f10610d4857610100808354040283529160200191610d73565b820191906000526020600020905b815481529060010190602001808311610d5657829003601f168201915b50505050508152602001600482018054610d8c90612e9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610db890612e9d565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b50505050508152602001600582018054610e1e90612e9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4a90612e9d565b8015610e975780601f10610e6c57610100808354040283529160200191610e97565b820191906000526020600020905b815481529060010190602001808311610e7a57829003601f168201915b505050505081525050828261ffff1681518110610eb657610eb6612d48565b6020908102919091010152600101610c27565b5092915050565b6000546001600160a01b03163314610f165760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015260640161047c565b6001600160a01b03811615610f2b5780610f38565b6000546001600160a01b03165b600180546001600160a01b0319166001600160a01b039290921691821790556040517f74ad00f42c7567187f818b7401d2b03eae8dc59f390e590b0bbdf9048c53d25490600090a250565b60606000610f918484611b29565b600154600160a01b900461ffff1660005b8481101561105c57600060036000888885818110610fc257610fc2612d48565b9050602002016020810190610fd79190612994565b61ffff1661ffff168152602001908152602001600020905061101987878481811061100457611004612d48565b90506020020160208101906102639190612994565b6110355760405162461bcd60e51b815260040161047c90612d7e565b80546001600160a01b031615611053578261104f81612ed1565b9350505b50600101610fa2565b506110678185612133565b92509250505b9250929050565b61107c6127c8565b61019061ffff8316106110a15760405162461bcd60e51b815260040161047c90612e65565b61ffff821660009081526003602081815260409283902083516101408101855281546001600160a01b0381168252600160a01b810468ffffffffffffffffff1693820193909352600160e81b90920460ff1615159382019390935260018301546001600160801b0381166060830152600160801b81046001600160401b039081166080840152600160c01b909104811660a083015260028401541660c0820152908201805491929160e08401919061115890612e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461118490612e9d565b80156111d15780601f106111a6576101008083540402835291602001916111d1565b820191906000526020600020905b8154815290600101906020018083116111b457829003601f168201915b505050505081526020016004820180546111ea90612e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461121690612e9d565b80156112635780601f1061123857610100808354040283529160200191611263565b820191906000526020600020905b81548152906001019060200180831161124657829003601f168201915b5050505050815260200160058201805461127c90612e9d565b80601f01602080910402602001604051908101604052809291908181526020018280546112a890612e9d565b80156112f55780601f106112ca576101008083540402835291602001916112f5565b820191906000526020600020905b8154815290600101906020018083116112d857829003601f168201915b5050505050815250509050919050565b600154600090600160a01b900461ffff1661019014611340576001805461133b9161024291600160a01b900461ffff1690612dd3565b905090565b50600090565b60055460ff16156113695760405162461bcd60e51b815260040161047c90612d25565b6005805460ff1916600117905561019061ffff84161061139b5760405162461bcd60e51b815260040161047c90612e65565b6113a482611c7c565b6113ad8361209a565b61ffff83166000908152600360205260409020546001600160a01b0316156113e75760405162461bcd60e51b815260040161047c90612d7e565b600061140d600160149054906101000a900461ffff1661ffff1660016102429190612dd3565b90508181111561144f5760405162461bcd60e51b815260206004820152600d60248201526c1c1c9a58d94818da185b99d959609a1b604482015260640161047c565b61145881612242565b611461816122aa565b61146c8484836124ca565b60018054600160a01b900461ffff1690601461148783612ee8565b91906101000a81548161ffff021916908361ffff1602179055505080600260008282546114b49190612dd3565b90915550506005805460ff1916905550505050565b6000546001600160a01b0316331461150f5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015260640161047c565b6001600160a01b0381166115565760405162461bcd60e51b815260206004820152600e60248201526d1bdddb995c881c995c5d5a5c995960921b604482015260640161047c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61019061ffff8316106115d65760405162461bcd60e51b815260040161047c90612e65565b6115df81611c7c565b61ffff8216600090815260036020526040902080546001600160a01b0316331461163c5760405162461bcd60e51b815260206004820152600e60248201526d3737ba1039b637ba1037bbb732b960911b604482015260640161047c565b6001810154600160801b90046001600160401b031642106116895760405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015260640161047c565b61169381836125f4565b60028101805467ffffffffffffffff1916436001600160401b0316179055604051339061ffff8516907f28db8e6c98352b3150d654574a340aabc9045e8158537e4ae709a5e3f040ae7b90600090a3505050565b60055460ff161561170a5760405162461bcd60e51b815260040161047c90612d25565b6005805460ff1916600117905561019061ffff82161061173c5760405162461bcd60e51b815260040161047c90612e65565b61ffff8116600090815260036020818152604080842081516101408101835281546001600160a01b0381168252600160a01b810468ffffffffffffffffff1694820194909452600160e81b90930460ff1615159183019190915260018101546001600160801b0381166060840152600160801b81046001600160401b039081166080850152600160c01b909104811660a084015260028201541660c0830152918201805491929160e0840191906117f290612e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461181e90612e9d565b801561186b5780601f106118405761010080835404028352916020019161186b565b820191906000526020600020905b81548152906001019060200180831161184e57829003601f168201915b5050505050815260200160048201805461188490612e9d565b80601f01602080910402602001604051908101604052809291908181526020018280546118b090612e9d565b80156118fd5780601f106118d2576101008083540402835291602001916118fd565b820191906000526020600020905b8154815290600101906020018083116118e057829003601f168201915b5050505050815260200160058201805461191690612e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461194290612e9d565b801561198f5780601f106119645761010080835404028352916020019161198f565b820191906000526020600020905b81548152906001019060200180831161197257829003601f168201915b5050509190925250508151919250506001600160a01b031633146119e65760405162461bcd60e51b815260206004820152600e60248201526d3737ba1039b637ba1037bbb732b960911b604482015260640161047c565b80608001516001600160401b0316421015611a325760405162461bcd60e51b815260206004820152600c60248201526b1cdd1a5b1b081b1bd8dad95960a21b604482015260640161047c565b611a4e82826000015183606001516001600160801b03166126c9565b8051606082015160405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a9059cbb92611abc926004016001600160a01b039290921682526001600160801b0316602082015260400190565b6020604051808303816000875af1158015611adb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aff9190612de6565b611b1b5760405162461bcd60e51b815260040161047c90612e03565b50506005805460ff19169055565b8015801590611b39575060288111155b611b715760405162461bcd60e51b81526020600482015260096024820152680c4c2c840c4c2e8c6d60bb1b604482015260640161047c565b60005b81811015611c7757610190838383818110611b9157611b91612d48565b9050602002016020810190611ba69190612994565b61ffff1610611bc75760405162461bcd60e51b815260040161047c90612e65565b60005b81811015611c6e57838383818110611be457611be4612d48565b9050602002016020810190611bf99190612994565b61ffff16848483818110611c0f57611c0f612d48565b9050602002016020810190611c249190612994565b61ffff1603611c665760405162461bcd60e51b815260206004820152600e60248201526d191d5c1b1a58d85d19481cdb1bdd60921b604482015260640161047c565b600101611bca565b50600101611b74565b505050565b366000611c898380612f09565b90925090508015801590611c9e575060608111155b611cd55760405162461bcd60e51b8152602060048201526008602482015267626164206e616d6560c01b604482015260640161047c565b6000805b82811015611d18576020848483818110611cf557611cf5612d48565b9050013560f81c60f81b60f81c60ff161115611d1057600191505b600101611cd9565b5080611d515760405162461bcd60e51b8152602060048201526008602482015267626164206e616d6560c01b604482015260640161047c565b366000611d616020870187612f09565b90925090508015801590611d7757506101008111155b611dad5760405162461bcd60e51b8152602060048201526007602482015266189859081d5c9b60ca1b604482015260640161047c565b600060078210801590611de9575082826000818110611dce57611dce612d48565b9050013560f81c60f81b6001600160f81b031916600d60fb1b145b8015611e1e575082826001818110611e0357611e03612d48565b9050013560f81c60f81b6001600160f81b031916601d60fa1b145b8015611e53575082826002818110611e3857611e38612d48565b9050013560f81c60f81b6001600160f81b031916601d60fa1b145b8015611e88575082826003818110611e6d57611e6d612d48565b9050013560f81c60f81b6001600160f81b031916600760fc1b145b8015612005575082826004818110611ea257611ea2612d48565b9050013560f81c60f81b6001600160f81b031916601d60f91b148015611ef1575082826005818110611ed657611ed6612d48565b9050013560f81c60f81b6001600160f81b031916602f60f81b145b8015611f26575082826006818110611f0b57611f0b612d48565b9050013560f81c60f81b6001600160f81b031916602f60f81b145b80612005575060088210801590611f66575082826004818110611f4b57611f4b612d48565b9050013560f81c60f81b6001600160f81b031916607360f81b145b8015611f9b575082826005818110611f8057611f80612d48565b9050013560f81c60f81b6001600160f81b031916601d60f91b145b8015611fd0575082826006818110611fb557611fb5612d48565b9050013560f81c60f81b6001600160f81b031916602f60f81b145b8015612005575082826007818110611fea57611fea612d48565b9050013560f81c60f81b6001600160f81b031916602f60f81b145b90508061203e5760405162461bcd60e51b8152602060048201526007602482015266189859081d5c9b60ca1b604482015260640161047c565b61015061204e6040890189612f09565b905011156120915760405162461bcd60e51b815260206004820152601060248201526f6d65737361676520746f6f206c6f6e6760801b604482015260640161047c565b50505050505050565b61ffff8116600090815260036020526040902080546001600160a01b0316158015906120da57506001810154600160801b90046001600160401b03164210155b1561212f57805460018201546001600160a01b039091166000818152600460205260408120805492936001600160801b03169283929061211b908490612dd3565b9091555061212c90508483836126c9565b50505b5050565b606060006101906121448486612dd3565b111561217f5760405162461bcd60e51b815260206004820152600a602482015269189bd85c9908199d5b1b60b21b604482015260640161047c565b826001600160401b0381111561219757612197612e87565b6040519080825280602002602001820160405280156121c0578160200160208202803683370190505b50915060006121d3610242866001612dd3565b905060005b8481101561223957818482815181106121f3576121f3612d48565b60209081029190910101526122088284612dd3565b9250670de0b6b3a7640000612225670df876d1670ebb5884612e2c565b61222f9190612e43565b91506001016121d8565b50509250929050565b61225f6a52b7d2dcc80cd2e4000000670de0b6b3a7640000612dd3565b8160025461226d9190612dd3565b11156122a75760405162461bcd60e51b81526020600482015260096024820152680626f617264206361760bc1b604482015260640161047c565b50565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123359190612f4f565b6040516323b872dd60e01b8152336004820152306024820152604481018490529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cf9190612de6565b6123eb5760405162461bcd60e51b815260040161047c90612e03565b6123f58282612dd3565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247d9190612f4f565b1461212f5760405162461bcd60e51b815260206004820152601860248201527f756e737570706f72746564207472616e73666572206665650000000000000000604482015260640161047c565b61ffff8316600090815260036020526040902080547fffff00ffffffffffffffffff0000000000000000000000000000000000000000163360ff60e81b19161781556001810180546fffffffffffffffffffffffffffffffff19166001600160801b03841617905561253f62278d0042612dd3565b6001820180546001600160801b0316600160801b6001600160401b03938416026001600160c01b031617600160c01b439390931692830217905560028201805467ffffffffffffffff1916909117905561259981846125f4565b600181015460408051848152600160801b9092046001600160401b03166020830152339161ffff8716917f996dc7dea540e13628337096337f8d9cdc0802a647e25801cb4c2bfc52c979b9910160405180910390a350505050565b6125fe8180612f09565b600384019161260e919083612fb8565b5061261c6020820182612f09565b600484019161262c919083612fb8565b5061263a6040820182612f09565b600584019161264a919083612fb8565b5061265b60c0820160a08301613078565b62ffffff16601861267260a0840160808501613078565b62ffffff16901b603061268b6080850160608601613078565b855462ffffff9190911690911b919091179190911768ffffffffffffffffff16600160a01b0268ffffffffffffffffff60a01b199091161790915550565b61ffff83166000908152600360208190526040822080546001600160f01b03191681556001810183905560028101805467ffffffffffffffff1916905591906127149083018261281e565b61272260048301600061281e565b61273060058301600061281e565b505060018054600160a01b900461ffff1690601461274d8361309d565b91906101000a81548161ffff021916908361ffff16021790555050806002600082825461277a91906130bb565b90915550506040518181526001600160a01b0383169061ffff8516907f4bf7bd7a3c7a3b7fb528fb7b8d7ead8fa2244a2e8a10a1f2e2c328889352af869060200160405180910390a3505050565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915290565b50805461282a90612e9d565b6000825580601f1061283a575050565b601f0160209004906000526020600020908101906122a791905b808211156128685760008155600101612854565b5090565b60008083601f84011261287e57600080fd5b5081356001600160401b0381111561289557600080fd5b6020830191508360208260051b850101111561106d57600080fd5b6000806000806000606086880312156128c857600080fd5b85356001600160401b03808211156128df57600080fd5b6128eb89838a0161286c565b9097509550602088013591508082111561290457600080fd5b506129118882890161286c565b96999598509660400135949350505050565b6000806020838503121561293657600080fd5b82356001600160401b0381111561294c57600080fd5b6129588582860161286c565b90969095509350505050565b60006020828403121561297657600080fd5b5035919050565b803561ffff8116811461298f57600080fd5b919050565b6000602082840312156129a657600080fd5b6129af8261297d565b9392505050565b80151581146122a757600080fd5b6000806000606084860312156129d957600080fd5b6129e28461297d565b925060208401356129f2816129b6565b929592945050506040919091013590565b60008060408385031215612a1657600080fd5b612a1f8361297d565b9150612a2d6020840161297d565b90509250929050565b6000815180845260005b81811015612a5c57602081850181015186830182015201612a40565b506000602082860101526020601f19601f83011685010191505092915050565b80516001600160a01b0316825260006101406020830151612aaa602086018268ffffffffffffffffff169052565b506040830151612abe604086018215159052565b506060830151612ad960608601826001600160801b03169052565b506080830151612af460808601826001600160401b03169052565b5060a0830151612b0f60a08601826001600160401b03169052565b5060c0830151612b2a60c08601826001600160401b03169052565b5060e08301518160e0860152612b4282860182612a36565b9150506101008084015185830382870152612b5d8382612a36565b925050506101208084015185830382870152612b798382612a36565b9695505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612bda57603f19888603018452612bc8858351612a7c565b94509285019290850190600101612bac565b5092979650505050505050565b600060208284031215612bf957600080fd5b81356001600160a01b03811681146129af57600080fd5b604080825283519082018190526000906020906060840190828701845b82811015612c4957815184529284019290840190600101612c2d565b505050602093909301939093525092915050565b6020815260006129af6020830184612a7c565b600060c0828403121561099e57600080fd5b600080600060608486031215612c9757600080fd5b612ca08461297d565b925060208401356001600160401b03811115612cbb57600080fd5b612cc786828701612c70565b925050604084013590509250925092565b60008060408385031215612ceb57600080fd5b612cf48361297d565b915060208301356001600160401b03811115612d0f57600080fd5b612d1b85828601612c70565b9150509250929050565b6020808252600990820152681c99595b9d1c985b9d60ba1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000823560be19833603018112612d7457600080fd5b9190910192915050565b6020808252600a908201526939b637ba103a30b5b2b760b11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff818116838216019080821115610ec957610ec9612da2565b80820180821115610a1a57610a1a612da2565b600060208284031215612df857600080fd5b81516129af816129b6565b6020808252600f908201526e1d1c985b9cd9995c8819985a5b1959608a1b604082015260600190565b8082028115828204841417610a1a57610a1a612da2565b600082612e6057634e487b7160e01b600052601260045260246000fd5b500490565b602080825260089082015267189859081cdb1bdd60c21b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612eb157607f821691505b60208210810361099e57634e487b7160e01b600052602260045260246000fd5b600081612ee057612ee0612da2565b506000190190565b600061ffff808316818103612eff57612eff612da2565b6001019392505050565b6000808335601e19843603018112612f2057600080fd5b8301803591506001600160401b03821115612f3a57600080fd5b60200191503681900382131561106d57600080fd5b600060208284031215612f6157600080fd5b5051919050565b601f821115611c77576000816000526020600020601f850160051c81016020861015612f915750805b601f850160051c820191505b81811015612fb057828155600101612f9d565b505050505050565b6001600160401b03831115612fcf57612fcf612e87565b612fe383612fdd8354612e9d565b83612f68565b6000601f8411600181146130175760008515612fff5750838201355b600019600387901b1c1916600186901b178355613071565b600083815260209020601f19861690835b828110156130485786850135825560209485019460019092019101613028565b50868210156130655760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006020828403121561308a57600080fd5b813562ffffff811681146129af57600080fd5b600061ffff8216806130b1576130b1612da2565b6000190192915050565b81810381811115610a1a57610a1a612da256fea2646970667358221220fd9989ba0118a18455e745d338447d627c74da8b3f6ac4db1070f5f626c2e10a64736f6c63430008180033",
  "runtimeBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806375bba18911610104578063ae0200fc116100a2578063f313967d11610071578063f313967d146103ec578063f3f43703146103ff578063fbe6ae631461041f578063fc0c546a1461043257600080fd5b8063ae0200fc146103a6578063b884b2d8146103b5578063b8c4db2b146103c6578063f2fde38b146103d957600080fd5b80638da5cb5b116100de5780638da5cb5b146103615780639334ce5414610374578063950bff9f1461039657806398aae2541461039e57600080fd5b806375bba1891461030d57806382a8b13a14610320578063862b35f01461034157600080fd5b80634e37070b11610171578063568914121161014b57806356891412146102c3578063697586aa146102cc5780636a146024146102de5780636ef2953e146102ed57600080fd5b80634e37070b1461028b5780634eef2707146102a757806354fd4d50146102bc57600080fd5b80633ccfd60b116101ad5780633ccfd60b1461022c5780633d85c5b114610234578063440a6d2b1461025557806348b691fa1461027857600080fd5b806327986b4e146101d457806335d38908146101e957806338743904146101fc575b600080fd5b6101e76101e23660046128b0565b610459565b005b6101e76101f7366004612923565b61074a565b60015461020f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101e76107bb565b610247610242366004612964565b61090e565b604051908152602001610223565b610268610263366004612994565b6109a4565b6040519015158152602001610223565b6101e76102863660046129c4565b610a20565b61029461019081565b60405161ffff9091168152602001610223565b60015461029490600160a01b900461ffff1681565b6002610247565b61024760025481565b6102476a52b7d2dcc80cd2e400000081565b610247670de0b6b3a764000081565b6103006102fb366004612a03565b610b5c565b6040516102239190612b83565b6101e761031b366004612be7565b610ed0565b61033361032e366004612923565b610f83565b604051610223929190612c10565b61035461034f366004612994565b611074565b6040516102239190612c5d565b60005461020f906001600160a01b031681565b61037e62278d0081565b6040516001600160401b039091168152602001610223565b610294602881565b610247611305565b610247670df876d1670ebb5881565b610247690a968163f0a57b40000081565b6101e76103d4366004612c82565b611346565b6101e76103e7366004612be7565b6114c9565b6101e76103fa366004612cd8565b6115b1565b61024761040d366004612be7565b60046020526000908152604090205481565b6101e761042d366004612994565b6116e7565b61020f7f000000000000000000000000000000000000000000000000000000000000000081565b60055460ff16156104855760405162461bcd60e51b815260040161047c90612d25565b60405180910390fd5b6005805460ff1916600117905561049c8585611b29565b8184146104dd5760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b604482015260640161047c565b60005b848110156105b2576105148484838181106104fd576104fd612d48565b905060200281019061050f9190612d5e565b611c7c565b61054386868381811061052957610529612d48565b905060200201602081019061053e9190612994565b61209a565b600060038188888581811061055a5761055a612d48565b905060200201602081019061056f9190612994565b61ffff1681526020810191909152604001600020546001600160a01b0316146105aa5760405162461bcd60e51b815260040161047c90612d7e565b6001016104e0565b5060015460009081906105d090600160a01b900461ffff1687612133565b91509150828111156106145760405162461bcd60e51b815260206004820152600d60248201526c1c1c9a58d94818da185b99d959609a1b604482015260640161047c565b61061d81612242565b610626816122aa565b60005b868110156106a65761069e88888381811061064657610646612d48565b905060200201602081019061065b9190612994565b87878481811061066d5761066d612d48565b905060200281019061067f9190612d5e565b85848151811061069157610691612d48565b60200260200101516124ca565b600101610629565b50600180548791906014906106c7908490600160a01b900461ffff16612db8565b92506101000a81548161ffff021916908361ffff16021790555080600260008282546106f39190612dd3565b90915550506040805161ffff881681526020810183905233917febaef8c9e3ba75c4e43a37324731cf2c1a54ffc33b6043dd959a6d45eb487795910160405180910390a250506005805460ff191690555050505050565b60055460ff161561076d5760405162461bcd60e51b815260040161047c90612d25565b6005805460ff191660011790556107848282611b29565b60005b818110156107ac576107a483838381811061052957610529612d48565b600101610787565b50506005805460ff1916905550565b60055460ff16156107de5760405162461bcd60e51b815260040161047c90612d25565b6005805460ff19166001179055336000908152600460205260409020548061083e5760405162461bcd60e51b81526020600482015260136024820152726e6f7468696e6720746f20776974686472617760681b604482015260640161047c565b33600081815260046020819052604080832092909255905163a9059cbb60e01b815290810191909152602481018290526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156108c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e59190612de6565b6109015760405162461bcd60e51b815260040161047c90612e03565b506005805460ff19169055565b6000808211801561092157506101908211155b6109585760405162461bcd60e51b81526020600482015260086024820152676261642072616e6b60c01b604482015260640161047c565b50690a968163f0a57b40000060015b8281101561099e57670de0b6b3a764000061098a670df876d1670ebb5884612e2c565b6109949190612e43565b9150600101610967565b50919050565b600061019061ffff8316106109cb5760405162461bcd60e51b815260040161047c90612e65565b61ffff82166000908152600360205260409020546001600160a01b03161580610a1a575061ffff8216600090815260036020526040902060010154600160801b90046001600160401b03164210155b92915050565b6000546001600160a01b0316331480610a4357506001546001600160a01b031633145b610a7f5760405162461bcd60e51b815260206004820152600d60248201526c3737ba1036b7b232b930ba37b960991b604482015260640161047c565b61019061ffff8416108015610aaf575061ffff83166000908152600360205260409020546001600160a01b031615155b610ae85760405162461bcd60e51b815260206004820152600a602482015269195b5c1d1e481cdb1bdd60b21b604482015260640161047c565b61ffff8316600081815260036020526040908190208054851515600160e81b0260ff60e81b19909116179055517fea8cf15425ae681272f6ed8197465e04a6eab8f1b3d19f1f4db16f6560da9f6c90610b4f90859085909115158252602082015260400190565b60405180910390a2505050565b606060008261ffff16118015610b775750602861ffff831611155b8015610b955750610190610b9261ffff848116908616612dd3565b11155b610bcc5760405162461bcd60e51b8152602060048201526008602482015267626164207061676560c01b604482015260640161047c565b8161ffff166001600160401b03811115610be857610be8612e87565b604051908082528060200260200182016040528015610c2157816020015b610c0e6127c8565b815260200190600190039081610c065790505b50905060005b8261ffff168161ffff161015610ec95760036000610c458387612db8565b61ffff168152602080820192909252604090810160002081516101408101835281546001600160a01b0381168252600160a01b810468ffffffffffffffffff1694820194909452600160e81b90930460ff1615159183019190915260018101546001600160801b0381166060840152600160801b81046001600160401b039081166080850152600160c01b909104811660a084015260028201541660c083015260038101805460e084019190610cfa90612e9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2690612e9d565b8015610d735780601f10610d4857610100808354040283529160200191610d73565b820191906000526020600020905b815481529060010190602001808311610d5657829003601f168201915b50505050508152602001600482018054610d8c90612e9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610db890612e9d565b8015610e055780601f10610dda57610100808354040283529160200191610e05565b820191906000526020600020905b815481529060010190602001808311610de857829003601f168201915b50505050508152602001600582018054610e1e90612e9d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4a90612e9d565b8015610e975780601f10610e6c57610100808354040283529160200191610e97565b820191906000526020600020905b815481529060010190602001808311610e7a57829003601f168201915b505050505081525050828261ffff1681518110610eb657610eb6612d48565b6020908102919091010152600101610c27565b5092915050565b6000546001600160a01b03163314610f165760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015260640161047c565b6001600160a01b03811615610f2b5780610f38565b6000546001600160a01b03165b600180546001600160a01b0319166001600160a01b039290921691821790556040517f74ad00f42c7567187f818b7401d2b03eae8dc59f390e590b0bbdf9048c53d25490600090a250565b60606000610f918484611b29565b600154600160a01b900461ffff1660005b8481101561105c57600060036000888885818110610fc257610fc2612d48565b9050602002016020810190610fd79190612994565b61ffff1661ffff168152602001908152602001600020905061101987878481811061100457611004612d48565b90506020020160208101906102639190612994565b6110355760405162461bcd60e51b815260040161047c90612d7e565b80546001600160a01b031615611053578261104f81612ed1565b9350505b50600101610fa2565b506110678185612133565b92509250505b9250929050565b61107c6127c8565b61019061ffff8316106110a15760405162461bcd60e51b815260040161047c90612e65565b61ffff821660009081526003602081815260409283902083516101408101855281546001600160a01b0381168252600160a01b810468ffffffffffffffffff1693820193909352600160e81b90920460ff1615159382019390935260018301546001600160801b0381166060830152600160801b81046001600160401b039081166080840152600160c01b909104811660a083015260028401541660c0820152908201805491929160e08401919061115890612e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461118490612e9d565b80156111d15780601f106111a6576101008083540402835291602001916111d1565b820191906000526020600020905b8154815290600101906020018083116111b457829003601f168201915b505050505081526020016004820180546111ea90612e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461121690612e9d565b80156112635780601f1061123857610100808354040283529160200191611263565b820191906000526020600020905b81548152906001019060200180831161124657829003601f168201915b5050505050815260200160058201805461127c90612e9d565b80601f01602080910402602001604051908101604052809291908181526020018280546112a890612e9d565b80156112f55780601f106112ca576101008083540402835291602001916112f5565b820191906000526020600020905b8154815290600101906020018083116112d857829003601f168201915b5050505050815250509050919050565b600154600090600160a01b900461ffff1661019014611340576001805461133b9161024291600160a01b900461ffff1690612dd3565b905090565b50600090565b60055460ff16156113695760405162461bcd60e51b815260040161047c90612d25565b6005805460ff1916600117905561019061ffff84161061139b5760405162461bcd60e51b815260040161047c90612e65565b6113a482611c7c565b6113ad8361209a565b61ffff83166000908152600360205260409020546001600160a01b0316156113e75760405162461bcd60e51b815260040161047c90612d7e565b600061140d600160149054906101000a900461ffff1661ffff1660016102429190612dd3565b90508181111561144f5760405162461bcd60e51b815260206004820152600d60248201526c1c1c9a58d94818da185b99d959609a1b604482015260640161047c565b61145881612242565b611461816122aa565b61146c8484836124ca565b60018054600160a01b900461ffff1690601461148783612ee8565b91906101000a81548161ffff021916908361ffff1602179055505080600260008282546114b49190612dd3565b90915550506005805460ff1916905550505050565b6000546001600160a01b0316331461150f5760405162461bcd60e51b81526020600482015260096024820152683737ba1037bbb732b960b91b604482015260640161047c565b6001600160a01b0381166115565760405162461bcd60e51b815260206004820152600e60248201526d1bdddb995c881c995c5d5a5c995960921b604482015260640161047c565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b61019061ffff8316106115d65760405162461bcd60e51b815260040161047c90612e65565b6115df81611c7c565b61ffff8216600090815260036020526040902080546001600160a01b0316331461163c5760405162461bcd60e51b815260206004820152600e60248201526d3737ba1039b637ba1037bbb732b960911b604482015260640161047c565b6001810154600160801b90046001600160401b031642106116895760405162461bcd60e51b8152602060048201526007602482015266195e1c1a5c995960ca1b604482015260640161047c565b61169381836125f4565b60028101805467ffffffffffffffff1916436001600160401b0316179055604051339061ffff8516907f28db8e6c98352b3150d654574a340aabc9045e8158537e4ae709a5e3f040ae7b90600090a3505050565b60055460ff161561170a5760405162461bcd60e51b815260040161047c90612d25565b6005805460ff1916600117905561019061ffff82161061173c5760405162461bcd60e51b815260040161047c90612e65565b61ffff8116600090815260036020818152604080842081516101408101835281546001600160a01b0381168252600160a01b810468ffffffffffffffffff1694820194909452600160e81b90930460ff1615159183019190915260018101546001600160801b0381166060840152600160801b81046001600160401b039081166080850152600160c01b909104811660a084015260028201541660c0830152918201805491929160e0840191906117f290612e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461181e90612e9d565b801561186b5780601f106118405761010080835404028352916020019161186b565b820191906000526020600020905b81548152906001019060200180831161184e57829003601f168201915b5050505050815260200160048201805461188490612e9d565b80601f01602080910402602001604051908101604052809291908181526020018280546118b090612e9d565b80156118fd5780601f106118d2576101008083540402835291602001916118fd565b820191906000526020600020905b8154815290600101906020018083116118e057829003601f168201915b5050505050815260200160058201805461191690612e9d565b80601f016020809104026020016040519081016040528092919081815260200182805461194290612e9d565b801561198f5780601f106119645761010080835404028352916020019161198f565b820191906000526020600020905b81548152906001019060200180831161197257829003601f168201915b5050509190925250508151919250506001600160a01b031633146119e65760405162461bcd60e51b815260206004820152600e60248201526d3737ba1039b637ba1037bbb732b960911b604482015260640161047c565b80608001516001600160401b0316421015611a325760405162461bcd60e51b815260206004820152600c60248201526b1cdd1a5b1b081b1bd8dad95960a21b604482015260640161047c565b611a4e82826000015183606001516001600160801b03166126c9565b8051606082015160405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a9059cbb92611abc926004016001600160a01b039290921682526001600160801b0316602082015260400190565b6020604051808303816000875af1158015611adb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aff9190612de6565b611b1b5760405162461bcd60e51b815260040161047c90612e03565b50506005805460ff19169055565b8015801590611b39575060288111155b611b715760405162461bcd60e51b81526020600482015260096024820152680c4c2c840c4c2e8c6d60bb1b604482015260640161047c565b60005b81811015611c7757610190838383818110611b9157611b91612d48565b9050602002016020810190611ba69190612994565b61ffff1610611bc75760405162461bcd60e51b815260040161047c90612e65565b60005b81811015611c6e57838383818110611be457611be4612d48565b9050602002016020810190611bf99190612994565b61ffff16848483818110611c0f57611c0f612d48565b9050602002016020810190611c249190612994565b61ffff1603611c665760405162461bcd60e51b815260206004820152600e60248201526d191d5c1b1a58d85d19481cdb1bdd60921b604482015260640161047c565b600101611bca565b50600101611b74565b505050565b366000611c898380612f09565b90925090508015801590611c9e575060608111155b611cd55760405162461bcd60e51b8152602060048201526008602482015267626164206e616d6560c01b604482015260640161047c565b6000805b82811015611d18576020848483818110611cf557611cf5612d48565b9050013560f81c60f81b60f81c60ff161115611d1057600191505b600101611cd9565b5080611d515760405162461bcd60e51b8152602060048201526008602482015267626164206e616d6560c01b604482015260640161047c565b366000611d616020870187612f09565b90925090508015801590611d7757506101008111155b611dad5760405162461bcd60e51b8152602060048201526007602482015266189859081d5c9b60ca1b604482015260640161047c565b600060078210801590611de9575082826000818110611dce57611dce612d48565b9050013560f81c60f81b6001600160f81b031916600d60fb1b145b8015611e1e575082826001818110611e0357611e03612d48565b9050013560f81c60f81b6001600160f81b031916601d60fa1b145b8015611e53575082826002818110611e3857611e38612d48565b9050013560f81c60f81b6001600160f81b031916601d60fa1b145b8015611e88575082826003818110611e6d57611e6d612d48565b9050013560f81c60f81b6001600160f81b031916600760fc1b145b8015612005575082826004818110611ea257611ea2612d48565b9050013560f81c60f81b6001600160f81b031916601d60f91b148015611ef1575082826005818110611ed657611ed6612d48565b9050013560f81c60f81b6001600160f81b031916602f60f81b145b8015611f26575082826006818110611f0b57611f0b612d48565b9050013560f81c60f81b6001600160f81b031916602f60f81b145b80612005575060088210801590611f66575082826004818110611f4b57611f4b612d48565b9050013560f81c60f81b6001600160f81b031916607360f81b145b8015611f9b575082826005818110611f8057611f80612d48565b9050013560f81c60f81b6001600160f81b031916601d60f91b145b8015611fd0575082826006818110611fb557611fb5612d48565b9050013560f81c60f81b6001600160f81b031916602f60f81b145b8015612005575082826007818110611fea57611fea612d48565b9050013560f81c60f81b6001600160f81b031916602f60f81b145b90508061203e5760405162461bcd60e51b8152602060048201526007602482015266189859081d5c9b60ca1b604482015260640161047c565b61015061204e6040890189612f09565b905011156120915760405162461bcd60e51b815260206004820152601060248201526f6d65737361676520746f6f206c6f6e6760801b604482015260640161047c565b50505050505050565b61ffff8116600090815260036020526040902080546001600160a01b0316158015906120da57506001810154600160801b90046001600160401b03164210155b1561212f57805460018201546001600160a01b039091166000818152600460205260408120805492936001600160801b03169283929061211b908490612dd3565b9091555061212c90508483836126c9565b50505b5050565b606060006101906121448486612dd3565b111561217f5760405162461bcd60e51b815260206004820152600a602482015269189bd85c9908199d5b1b60b21b604482015260640161047c565b826001600160401b0381111561219757612197612e87565b6040519080825280602002602001820160405280156121c0578160200160208202803683370190505b50915060006121d3610242866001612dd3565b905060005b8481101561223957818482815181106121f3576121f3612d48565b60209081029190910101526122088284612dd3565b9250670de0b6b3a7640000612225670df876d1670ebb5884612e2c565b61222f9190612e43565b91506001016121d8565b50509250929050565b61225f6a52b7d2dcc80cd2e4000000670de0b6b3a7640000612dd3565b8160025461226d9190612dd3565b11156122a75760405162461bcd60e51b81526020600482015260096024820152680626f617264206361760bc1b604482015260640161047c565b50565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612311573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123359190612f4f565b6040516323b872dd60e01b8152336004820152306024820152604481018490529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cf9190612de6565b6123eb5760405162461bcd60e51b815260040161047c90612e03565b6123f58282612dd3565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247d9190612f4f565b1461212f5760405162461bcd60e51b815260206004820152601860248201527f756e737570706f72746564207472616e73666572206665650000000000000000604482015260640161047c565b61ffff8316600090815260036020526040902080547fffff00ffffffffffffffffff0000000000000000000000000000000000000000163360ff60e81b19161781556001810180546fffffffffffffffffffffffffffffffff19166001600160801b03841617905561253f62278d0042612dd3565b6001820180546001600160801b0316600160801b6001600160401b03938416026001600160c01b031617600160c01b439390931692830217905560028201805467ffffffffffffffff1916909117905561259981846125f4565b600181015460408051848152600160801b9092046001600160401b03166020830152339161ffff8716917f996dc7dea540e13628337096337f8d9cdc0802a647e25801cb4c2bfc52c979b9910160405180910390a350505050565b6125fe8180612f09565b600384019161260e919083612fb8565b5061261c6020820182612f09565b600484019161262c919083612fb8565b5061263a6040820182612f09565b600584019161264a919083612fb8565b5061265b60c0820160a08301613078565b62ffffff16601861267260a0840160808501613078565b62ffffff16901b603061268b6080850160608601613078565b855462ffffff9190911690911b919091179190911768ffffffffffffffffff16600160a01b0268ffffffffffffffffff60a01b199091161790915550565b61ffff83166000908152600360208190526040822080546001600160f01b03191681556001810183905560028101805467ffffffffffffffff1916905591906127149083018261281e565b61272260048301600061281e565b61273060058301600061281e565b505060018054600160a01b900461ffff1690601461274d8361309d565b91906101000a81548161ffff021916908361ffff16021790555050806002600082825461277a91906130bb565b90915550506040518181526001600160a01b0383169061ffff8516907f4bf7bd7a3c7a3b7fb528fb7b8d7ead8fa2244a2e8a10a1f2e2c328889352af869060200160405180910390a3505050565b604080516101408101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082019290925260e08101829052610100810182905261012081019190915290565b50805461282a90612e9d565b6000825580601f1061283a575050565b601f0160209004906000526020600020908101906122a791905b808211156128685760008155600101612854565b5090565b60008083601f84011261287e57600080fd5b5081356001600160401b0381111561289557600080fd5b6020830191508360208260051b850101111561106d57600080fd5b6000806000806000606086880312156128c857600080fd5b85356001600160401b03808211156128df57600080fd5b6128eb89838a0161286c565b9097509550602088013591508082111561290457600080fd5b506129118882890161286c565b96999598509660400135949350505050565b6000806020838503121561293657600080fd5b82356001600160401b0381111561294c57600080fd5b6129588582860161286c565b90969095509350505050565b60006020828403121561297657600080fd5b5035919050565b803561ffff8116811461298f57600080fd5b919050565b6000602082840312156129a657600080fd5b6129af8261297d565b9392505050565b80151581146122a757600080fd5b6000806000606084860312156129d957600080fd5b6129e28461297d565b925060208401356129f2816129b6565b929592945050506040919091013590565b60008060408385031215612a1657600080fd5b612a1f8361297d565b9150612a2d6020840161297d565b90509250929050565b6000815180845260005b81811015612a5c57602081850181015186830182015201612a40565b506000602082860101526020601f19601f83011685010191505092915050565b80516001600160a01b0316825260006101406020830151612aaa602086018268ffffffffffffffffff169052565b506040830151612abe604086018215159052565b506060830151612ad960608601826001600160801b03169052565b506080830151612af460808601826001600160401b03169052565b5060a0830151612b0f60a08601826001600160401b03169052565b5060c0830151612b2a60c08601826001600160401b03169052565b5060e08301518160e0860152612b4282860182612a36565b9150506101008084015185830382870152612b5d8382612a36565b925050506101208084015185830382870152612b798382612a36565b9695505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612bda57603f19888603018452612bc8858351612a7c565b94509285019290850190600101612bac565b5092979650505050505050565b600060208284031215612bf957600080fd5b81356001600160a01b03811681146129af57600080fd5b604080825283519082018190526000906020906060840190828701845b82811015612c4957815184529284019290840190600101612c2d565b505050602093909301939093525092915050565b6020815260006129af6020830184612a7c565b600060c0828403121561099e57600080fd5b600080600060608486031215612c9757600080fd5b612ca08461297d565b925060208401356001600160401b03811115612cbb57600080fd5b612cc786828701612c70565b925050604084013590509250925092565b60008060408385031215612ceb57600080fd5b612cf48361297d565b915060208301356001600160401b03811115612d0f57600080fd5b612d1b85828601612c70565b9150509250929050565b6020808252600990820152681c99595b9d1c985b9d60ba1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000823560be19833603018112612d7457600080fd5b9190910192915050565b6020808252600a908201526939b637ba103a30b5b2b760b11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff818116838216019080821115610ec957610ec9612da2565b80820180821115610a1a57610a1a612da2565b600060208284031215612df857600080fd5b81516129af816129b6565b6020808252600f908201526e1d1c985b9cd9995c8819985a5b1959608a1b604082015260600190565b8082028115828204841417610a1a57610a1a612da2565b600082612e6057634e487b7160e01b600052601260045260246000fd5b500490565b602080825260089082015267189859081cdb1bdd60c21b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680612eb157607f821691505b60208210810361099e57634e487b7160e01b600052602260045260246000fd5b600081612ee057612ee0612da2565b506000190190565b600061ffff808316818103612eff57612eff612da2565b6001019392505050565b6000808335601e19843603018112612f2057600080fd5b8301803591506001600160401b03821115612f3a57600080fd5b60200191503681900382131561106d57600080fd5b600060208284031215612f6157600080fd5b5051919050565b601f821115611c77576000816000526020600020601f850160051c81016020861015612f915750805b601f850160051c820191505b81811015612fb057828155600101612f9d565b505050505050565b6001600160401b03831115612fcf57612fcf612e87565b612fe383612fdd8354612e9d565b83612f68565b6000601f8411600181146130175760008515612fff5750838201355b600019600387901b1c1916600186901b178355613071565b600083815260209020601f19861690835b828110156130485786850135825560209485019460019092019101613028565b50868210156130655760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60006020828403121561308a57600080fd5b813562ffffff811681146129af57600080fd5b600061ffff8216806130b1576130b1612da2565b6000190192915050565b81810381811115610a1a57610a1a612da256fea2646970667358221220fd9989ba0118a18455e745d338447d627c74da8b3f6ac4db1070f5f626c2e10a64736f6c63430008180033",
  "immutableReferences": {
    "405": [
      {
        "length": 32,
        "start": 1079
      },
      {
        "length": 32,
        "start": 2168
      },
      {
        "length": 32,
        "start": 6764
      },
      {
        "length": 32,
        "start": 8898
      },
      {
        "length": 32,
        "start": 9050
      },
      {
        "length": 32,
        "start": 9226
      }
    ]
  },
  "selectors": {
    "BASE_LOCK": "0xb884b2d8",
    "CURVE_MULTIPLIER_WAD": "0xae0200fc",
    "DEFAULT_TERM": "0x9334ce54",
    "MAX_BATCH": "0x950bff9f",
    "MAX_BOARD_LOCK": "0x697586aa",
    "SLOT_COUNT": "0x4e37070b",
    "WAD": "0x6a146024",
    "clearExpiredBatch": "0x35d38908",
    "getSlot": "0x862b35f0",
    "getSlots": "0x6ef2953e",
    "hideSlot": "0x48b691fa",
    "isAvailable": "0x440a6d2b",
    "moderator": "0x38743904",
    "nextRequiredLock": "0x98aae254",
    "occupiedCount": "0x4eef2707",
    "owner": "0x8da5cb5b",
    "pendingWithdrawals": "0xf3f43703",
    "quoteReserve": "0x82a8b13a",
    "release": "0xfbe6ae63",
    "requiredLockForRank": "0x3d85c5b1",
    "reserve": "0xb8c4db2b",
    "reserveBatch": "0x27986b4e",
    "setModerator": "0x75bba189",
    "token": "0xfc0c546a",
    "totalLocked": "0x56891412",
    "transferOwnership": "0xf2fde38b",
    "updateMetadata": "0xf313967d",
    "version": "0x54fd4d50",
    "withdraw": "0x3ccfd60b"
  },
  "eventTopics": {
    "ModeratorUpdated": "0x74ad00f42c7567187f818b7401d2b03eae8dc59f390e590b0bbdf9048c53d254",
    "OwnershipTransferred": "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
    "SlotBatchReserved": "0xebaef8c9e3ba75c4e43a37324731cf2c1a54ffc33b6043dd959a6d45eb487795",
    "SlotHidden": "0xea8cf15425ae681272f6ed8197465e04a6eab8f1b3d19f1f4db16f6560da9f6c",
    "SlotMetadataUpdated": "0x28db8e6c98352b3150d654574a340aabc9045e8158537e4ae709a5e3f040ae7b",
    "SlotReleased": "0x4bf7bd7a3c7a3b7fb528fb7b8d7ead8fa2244a2e8a10a1f2e2c328889352af86",
    "SlotReserved": "0x996dc7dea540e13628337096337f8d9cdc0802a647e25801cb4c2bfc52c979b9"
  }
}
