[ { "inputs": [ { "internalType": "address", "name": "token_addr", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "provider", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": true, "internalType": "uint256", "name": "locktime", "type": "uint256" }, { "indexed": false, "internalType": "enum ve.DepositType", "name": "deposit_type", "type": "uint8" }, { "indexed": false, "internalType": "uint256", "name": "ts", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "prevSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "supply", "type": "uint256" } ], "name": "Supply", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "provider", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ts", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "abstain", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_approved", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "attach", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "attachments", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_block", "type": "uint256" } ], "name": "balanceOfAtNFT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "balanceOfNFT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_t", "type": "uint256" } ], "name": "balanceOfNFTAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "block_number", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "checkpoint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "uint256", "name": "_lock_duration", "type": "uint256" } ], "name": "create_lock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "uint256", "name": "_lock_duration", "type": "uint256" }, { "internalType": "address", "name": "_to", "type": "address" } ], "name": "create_lock_for", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "deposit_for", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "detach", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "epoch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "get_last_user_slope", "outputs": [ { "internalType": "int128", "name": "", "type": "int128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "increase_amount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_lock_duration", "type": "uint256" } ], "name": "increase_unlock_time", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_spender", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "isApprovedOrOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "locked", "outputs": [ { "internalType": "int128", "name": "amount", "type": "int128" }, { "internalType": "uint256", "name": "end", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "locked__end", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_from", "type": "uint256" }, { "internalType": "uint256", "name": "_to", "type": "uint256" } ], "name": "merge", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "ownership_change", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "point_history", "outputs": [ { "internalType": "int128", "name": "bias", "type": "int128" }, { "internalType": "int128", "name": "slope", "type": "int128" }, { "internalType": "uint256", "name": "ts", "type": "uint256" }, { "internalType": "uint256", "name": "blk", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_operator", "type": "address" }, { "internalType": "bool", "name": "_approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_voter", "type": "address" } ], "name": "setVoter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "slope_changes", "outputs": [ { "internalType": "int128", "name": "", "type": "int128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "supply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "_interfaceID", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "uint256", "name": "_tokenIndex", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_block", "type": "uint256" } ], "name": "totalSupplyAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "t", "type": "uint256" } ], "name": "totalSupplyAtT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "user_point_epoch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "user_point_history", "outputs": [ { "internalType": "int128", "name": "bias", "type": "int128" }, { "internalType": "int128", "name": "slope", "type": "int128" }, { "internalType": "uint256", "name": "ts", "type": "uint256" }, { "internalType": "uint256", "name": "blk", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_idx", "type": "uint256" } ], "name": "user_point_history__ts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "voted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "voter", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "voting", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a06040526013805460ff191660011790553480156200001e57600080fd5b5060405162003d5e38038062003d5e833981016040819052620000419162000181565b6001600160a01b038116608052600a80546001600160a01b03191633179055437f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ee55427f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ed5560126020527f6afebfa21c417411ab7392a59bbb98ec35612153c5e8aeb3f64f4e016707b77a805460ff1990811660019081179092557fdf428ce7b59746cf2e618e63c6311d427105f2c3dc163ff0902907dea1728df58054821683179055635b5e139f60e01b60009081527fc0e00dda16840520b43384d85650edbbad8e5afcb041d20f42eb5aea304558cd80549092169092179055600b546040519091309160008051602062003d3e833981519152908290a4600b54604051600090309060008051602062003d3e833981519152908390a450620001b3565b6000602082840312156200019457600080fd5b81516001600160a01b0381168114620001ac57600080fd5b9392505050565b608051613b61620001dd6000396000818161087a01528181610bca01526127c10152613b616000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c80638c2c9baf1161019d578063c87b56dd116100e9578063e7e242d4116100a2578063f8a057631161007c578063f8a057631461083e578063fbd3a29d14610862578063fc0c546a14610875578063fd4a77f11461089c57600080fd5b8063e7e242d4146107dc578063e985e9c5146107ef578063ee99fe281461082b57600080fd5b8063c87b56dd14610732578063d1c2babb14610745578063d1febfb914610758578063d4e54c3b14610796578063e0514aba146107a9578063e441135c146107bc57600080fd5b8063a183af5211610156578063b45a3c0e11610130578063b45a3c0e146106bc578063b88d4fde14610704578063c1f0fb9f14610717578063c2c4c5c11461072a57600080fd5b8063a183af5214610683578063a22cb46514610696578063a4d855df146106a957600080fd5b80638c2c9baf1461061e5780638fbb38ff14610631578063900cf0cf1461065457806395d89b411461036a578063981b24d01461065d578063986b7d8a1461067057600080fd5b8063313ce5671161025c57806354fd4d50116102155780636f548837116101ef5780636f548837146105b557806370a08231146105d55780637116c60c146105e857806371197484146105fb57600080fd5b806354fd4d50146105555780636352211e1461057957806365fc3873146105a257600080fd5b8063313ce567146104c957806342842e0e146104e3578063430c2081146104f6578063461f711c1461050957806346c96aac1461052f5780634bc2a6571461054257600080fd5b80631376f3da116102c957806323b872dd116102a357806323b872dd1461046757806325a58b561461047a5780632e1a7d4d146104805780632f745c591461049357600080fd5b80631376f3da1461041157806318160ddd1461044c5780631c984bc31461045457600080fd5b806301ffc9a714610311578063047fc9aa1461035357806306fdde031461036a578063081812fc1461039b578063095ea7b3146103dc5780630d6a2033146103f1575b600080fd5b61033e61031f366004612ffc565b6001600160e01b03191660009081526012602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61035c60005481565b60405190815260200161034a565b61038e604051806040016040528060058152602001641d9953919560da1b81525081565b60405161034a9190613071565b6103c46103a9366004613084565b6000908152600d60205260409020546001600160a01b031690565b6040516001600160a01b03909116815260200161034a565b6103ef6103ea3660046130b9565b6108af565b005b61035c6103ff366004613084565b60086020526000908152604090205481565b61042461041f3660046130e3565b610998565b60408051600f95860b81529390940b602084015292820152606081019190915260800161034a565b61035c6109df565b61035c6104623660046130e3565b6109ef565b6103ef610475366004613105565b610a22565b4361035c565b6103ef61048e366004613084565b610a33565b61035c6104a13660046130b9565b6001600160a01b03919091166000908152600f60209081526040808320938352929052205490565b6104d1601281565b60405160ff909116815260200161034a565b6103ef6104f1366004613105565b610ced565b61033e6105043660046130b9565b610d08565b61051c610517366004613084565b610d1b565b604051600f9190910b815260200161034a565b600a546103c4906001600160a01b031681565b6103ef610550366004613141565b610d5e565b61038e604051806040016040528060058152602001640312e302e360dc1b81525081565b6103c4610587366004613084565b6000908152600c60205260409020546001600160a01b031690565b61035c6105b03660046130e3565b610d97565b61035c6105c3366004613084565b60026020526000908152604090205481565b61035c6105e3366004613141565b610dd9565b61035c6105f6366004613084565b610df7565b61051c610609366004613084565b600760205260009081526040902054600f0b81565b61035c61062c3660046130e3565b610e57565b61033e61063f366004613084565b60096020526000908152604090205460ff1681565b61035c60035481565b61035c61066b366004613084565b610e63565b6103ef61067e366004613084565b611005565b6103ef6106913660046130e3565b611049565b6103ef6106a436600461316a565b611148565b6103ef6106b73660046130e3565b6111cd565b6106ea6106ca366004613084565b60016020819052600091825260409091208054910154600f9190910b9082565b60408051600f9390930b835260208301919091520161034a565b6103ef6107123660046131b7565b6113af565b6103ef610725366004613084565b6114dc565b6103ef61150b565b61038e610740366004613084565b61154b565b6103ef6107533660046130e3565b6115f8565b610424610766366004613084565b600460205260009081526040902080546001820154600290920154600f82810b93600160801b909304900b919084565b61035c6107a4366004613293565b611763565b61035c6107b73660046130e3565b6117a6565b61035c6107ca366004613084565b60066020526000908152604090205481565b61035c6107ea366004613084565b6117b2565b61033e6107fd3660046132c8565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205460ff1690565b6103ef6108393660046130e3565b6117da565b61035c61084c366004613084565b6000908152600160208190526040909120015490565b6103ef610870366004613084565b6118ae565b6103c47f000000000000000000000000000000000000000000000000000000000000000081565b6103ef6108aa366004613084565b6118df565b6000818152600c60205260409020546001600160a01b0316806108d157600080fd5b806001600160a01b0316836001600160a01b031614156108f057600080fd5b6000828152600c60209081526040808320546001600160a01b0385811685526011845282852033808752945291909320549216149060ff1681806109315750805b61093a57600080fd5b6000848152600d602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918716917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050505050565b600560205281600052604060002081633b9aca0081106109b757600080fd5b6003020180546001820154600290920154600f82810b9550600160801b90920490910b925084565b60006109ea42610df7565b905090565b600082815260056020526040812082633b9aca008110610a1157610a116132fb565b600302016001015490505b92915050565b610a2e83838333611911565b505050565b60135460ff16600114610a4557600080fd5b6013805460ff19166002179055610a5c33826119d7565b610a6857610a68613311565b600081815260086020526040902054158015610a93575060008181526009602052604090205460ff16155b610ab85760405162461bcd60e51b8152600401610aaf90613327565b60405180910390fd5b60008181526001602081815260409283902083518085019094528054600f0b845290910154908201819052421015610b2b5760405162461bcd60e51b8152602060048201526016602482015275546865206c6f636b206469646e27742065787069726560501b6044820152606401610aaf565b805160408051808201825260008082526020808301828152878352600191829052938220925183546001600160801b0319166001600160801b039091161783559251919092015554600f9190910b90610b84828261335f565b600081905550610bae848460405180604001604052806000600f0b81526020016000815250611a3d565b60405163a9059cbb60e01b8152336004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190613376565b610c4b57610c4b613311565b610c548461205c565b60408051858152602081018490524281830152905133917f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca94919081900360600190a27f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c81610cc2848261335f565b6040805192835260208301919091520160405180910390a150506013805460ff191660011790555050565b610a2e838383604051806020016040528060008152506113af565b6000610d1483836119d7565b9392505050565b6000818152600660209081526040808320546005909252822081633b9aca008110610d4857610d486132fb565b6003020154600160801b9004600f0b9392505050565b600a546001600160a01b03163314610d7557600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b60135460009060ff16600114610dac57600080fd5b6013805460ff19166002179055610dc483833361211b565b90506013805460ff1916600117905592915050565b6001600160a01b0381166000908152600e6020526040812054610a1c565b600354600081815260046020908152604080832081516080810183528154600f81810b8352600160801b909104900b93810193909352600181015491830191909152600201546060820152909190610e4f818561226c565b949350505050565b6000610d14838361236e565b600043821115610e7557610e75613311565b6003546000610e848483612646565b600081815260046020908152604080832081516080810183528154600f81810b8352600160801b909104900b9381019390935260018101549183019190915260020154606082015291925083831015610f93576000600481610ee7866001613393565b8152602080820192909252604090810160002081516080810183528154600f81810b8352600160801b909104900b9381019390935260018101549183019190915260020154606080830182905285015191925014610f8d5782606001518160600151610f53919061335f565b83604001518260400151610f67919061335f565b6060850151610f76908a61335f565b610f8091906133ab565b610f8a91906133e0565b91505b50610fe2565b43826060015114610fe2576060820151610fad904361335f565b6040830151610fbc904261335f565b6060840151610fcb908961335f565b610fd591906133ab565b610fdf91906133e0565b90505b610ffb82828460400151610ff69190613393565b61226c565b9695505050505050565b600a546001600160a01b0316331461101c57600080fd5b6000818152600860205260409020546110379060019061335f565b60009182526008602052604090912055565b60135460ff1660011461105b57600080fd5b6013805460ff1916600217905561107233836119d7565b61107e5761107e613311565b60008281526001602081815260409283902083518085019094528054600f0b84529091015490820152816110b4576110b4613311565b60008160000151600f0b136111045760405162461bcd60e51b8152602060048201526016602482015275139bc8195e1a5cdd1a5b99c81b1bd8dac8199bdd5b9960521b6044820152606401610aaf565b428160200151116111275760405162461bcd60e51b8152600401610aaf906133f4565b611136838360008460026126d0565b50506013805460ff1916600117905550565b6001600160a01b03821633141561116157611161613311565b3360008181526011602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60135460ff166001146111df57600080fd5b6013805460ff191660021790556111f633836119d7565b61120257611202613311565b600082815260016020818152604080842081518083019092528054600f0b825290920154908201529062093a808061123a8542613393565b61124491906133e0565b61124e91906133ab565b9050428260200151116112925760405162461bcd60e51b815260206004820152600c60248201526b131bd8dac8195e1c1a5c995960a21b6044820152606401610aaf565b60008260000151600f0b136112dd5760405162461bcd60e51b8152602060048201526011602482015270139bdd1a1a5b99c81a5cc81b1bd8dad959607a1b6044820152606401610aaf565b816020015181116113305760405162461bcd60e51b815260206004820152601f60248201527f43616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e006044820152606401610aaf565b61133e630784ce0042613393565b81111561138d5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e67206c6f636b2063616e2062652034207965617273206d617800006044820152606401610aaf565b61139c846000838560036126d0565b50506013805460ff191660011790555050565b6113bb84848433611911565b823b156114d657604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906113f4903390889087908790600401613438565b6020604051808303816000875af192505050801561142f575060408051601f3d908101601f1916820190925261142c9181019061346b565b60015b6114d4573d80801561145d576040519150601f19603f3d011682016040523d82523d6000602084013e611462565b606091505b5080516114cc5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b6064820152608401610aaf565b805181602001fd5b505b50505050565b600a546001600160a01b031633146114f357600080fd5b6000908152600960205260409020805460ff19169055565b611549600060405180604001604052806000600f0b8152602001600081525060405180604001604052806000600f0b81526020016000815250611a3d565b565b6000818152600c60205260409020546060906001600160a01b03166115b25760405162461bcd60e51b815260206004820152601b60248201527f517565727920666f72206e6f6e6578697374656e7420746f6b656e00000000006044820152606401610aaf565b60008281526001602081815260409283902083518085019094528054600f0b84529091015490820152610d14836115e981426128d5565b60208401518451600f0b6129a7565b600082815260086020526040902054158015611623575060008281526009602052604090205460ff16155b61163f5760405162461bcd60e51b8152600401610aaf90613327565b8082141561164c57600080fd5b61165633836119d7565b61165f57600080fd5b61166933826119d7565b61167257600080fd5b6000828152600160208181526040808420815180830183528154600f90810b82529185015481850190815287875285855283872084518086019095528054840b855290950154938301849052805194519095929490910b9211156116da5782602001516116e0565b83602001515b604080518082018252600080825260208083018281528b83526001808352858420945185546001600160801b0319166001600160801b0390911617855590519301929092558251808401909352808352908201529091506117449087908690611a3d565b61174d8661205c565b61175b8583838660046126d0565b505050505050565b60135460009060ff1660011461177857600080fd5b6013805460ff1916600217905561179084848461211b565b90506013805460ff191660011790559392505050565b6000610d1483836128d5565b6000818152600260205260408120544314156117d057506000919050565b610a1c82426128d5565b60135460ff166001146117ec57600080fd5b6013805460ff1916600217905560008281526001602081815260409283902083518085019094528054600f0b845290910154908201528161182c57600080fd5b60008160000151600f0b1361187c5760405162461bcd60e51b8152602060048201526016602482015275139bc8195e1a5cdd1a5b99c81b1bd8dac8199bdd5b9960521b6044820152606401610aaf565b4281602001511161189f5760405162461bcd60e51b8152600401610aaf906133f4565b611136838360008460006126d0565b600a546001600160a01b031633146118c557600080fd5b600081815260086020526040902054611037906001613393565b600a546001600160a01b031633146118f657600080fd5b6000908152600960205260409020805460ff19166001179055565b60008281526008602052604090205415801561193c575060008281526009602052604090205460ff16155b6119585760405162461bcd60e51b8152600401610aaf90613327565b61196281836119d7565b61196b57600080fd5b6119758483612ade565b61197f8483612b45565b6119898383612bc6565b6000828152600260205260408082204390555183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450505050565b6000818152600c6020908152604080832054600d8352818420546001600160a01b039182168086526011855283862088841680885295529285205492938085149392909116149060ff168280611a2a5750815b80611a325750805b979650505050505050565b60408051608081018252600080825260208201819052918101829052606081019190915260408051608081018252600080825260208201819052918101829052606081019190915260035460009081908715611ba957428760200151118015611aad575060008760000151600f0b135b15611af2578651611ac390630784ce0090613488565b600f0b602080870191909152870151611add90429061335f565b8560200151611aec91906134c6565b600f0b85525b428660200151118015611b0c575060008660000151600f0b135b15611b51578551611b2290630784ce0090613488565b600f0b602080860191909152860151611b3c90429061335f565b8460200151611b4b91906134c6565b600f0b84525b602080880151600090815260078252604090205490870151600f9190910b935015611ba957866020015186602001511415611b8e57829150611ba9565b602080870151600090815260079091526040902054600f0b91505b604080516080810182526000808252602082015242918101919091524360608201528115611c1e575060008181526004602090815260409182902082516080810184528154600f81810b8352600160801b909104900b9281019290925260018101549282019290925260029091015460608201525b604081015181600042831015611c6b576040840151611c3d904261335f565b6060850151611c4c904361335f565b611c5e90670de0b6b3a76400006133ab565b611c6891906133e0565b90505b600062093a80611c7b81866133e0565b611c8591906133ab565b905060005b60ff811015611e0057611ca062093a8083613393565b9150600042831115611cb457429250611cc8565b50600082815260076020526040902054600f0b5b611cd2868461335f565b8760200151611ce191906134c6565b87518890611cf090839061355b565b600f0b905250602087018051829190611d0a9083906135ab565b600f90810b90915288516000910b12159050611d2557600087525b60008760200151600f0b1215611d3d57600060208801525b60408088018490528501519295508592670de0b6b3a764000090611d61908561335f565b611d6b90866133ab565b611d7591906133e0565b8560600151611d849190613393565b6060880152611d94600189613393565b975042831415611daa5750436060870152611e00565b6000888152600460209081526040918290208951918a01516001600160801b03908116600160801b029216919091178155908801516001820155606088015160029091015550611df9816135fa565b9050611c8a565b505060038590558b15611e8b5788602001518860200151611e21919061355b565b84602001818151611e3291906135ab565b600f0b90525088518851611e46919061355b565b84518590611e559083906135ab565b600f90810b90915260208601516000910b12159050611e7657600060208501525b60008460000151600f0b1215611e8b57600084525b6000858152600460209081526040918290208651918701516001600160801b03908116600160801b02921691909117815590850151600182015560608501516002909101558b1561204e57428b602001511115611f43576020890151611ef190886135ab565b96508a602001518a602001511415611f15576020880151611f12908861355b565b96505b60208b810151600090815260079091526040902080546001600160801b0319166001600160801b0389161790555b428a602001511115611f9e578a602001518a602001511115611f9e576020880151611f6e908761355b565b60208b810151600090815260079091526040902080546001600160801b0319166001600160801b03831617905595505b60008c815260066020526040812054611fb8906001613393565b905080600660008f815260200190815260200160002081905550428960400181815250504389606001818152505088600560008f815260200190815260200160002082633b9aca00811061200e5761200e6132fb565b825160208401516001600160801b03908116600160801b029116176003919091029190910190815560408201516001820155606090910151600290910155505b505050505050505050505050565b61206633826119d7565b6120b25760405162461bcd60e51b815260206004820181905260248201527f63616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665646044820152606401610aaf565b6000818152600c60205260408120546001600160a01b0316906120d590836108af565b6120df3383612b45565b60405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008062093a808061212d8642613393565b61213791906133e0565b61214191906133ab565b90506000851161215057600080fd5b4281116121ae5760405162461bcd60e51b815260206004820152602660248201527f43616e206f6e6c79206c6f636b20756e74696c2074696d6520696e207468652060448201526566757475726560d01b6064820152608401610aaf565b6121bc630784ce0042613393565b81111561220b5760405162461bcd60e51b815260206004820152601e60248201527f566f74696e67206c6f636b2063616e2062652034207965617273206d617800006044820152606401610aaf565b600b6000815461221a906135fa565b90915550600b5461222b8482612c5c565b5060008181526001602081815260409283902083518085019094528054600f0b845282015490830152612263918391899186916126d0565b95945050505050565b600080839050600062093a8080836040015161228891906133e0565b61229291906133ab565b905060005b60ff811015612346576122ad62093a8083613393565b91506000858311156122c1578592506122d5565b50600082815260076020526040902054600f0b5b60408401516122e4908461335f565b84602001516122f391906134c6565b8451859061230290839061355b565b600f0b905250828614156123165750612346565b808460200181815161232891906135ab565b600f0b905250506040830182905261233f816135fa565b9050612297565b5060008260000151600f0b121561235c57600082525b50516001600160801b03169392505050565b60004382111561238057612380613311565b600083815260066020526040812054815b6080811015612424578183106123a657612424565b600060026123b48486613393565b6123bf906001613393565b6123c991906133e0565b6000888152600560205260409020909150869082633b9aca0081106123f0576123f06132fb565b60030201600201541161240557809350612413565b61241060018261335f565b92505b5061241d816135fa565b9050612391565b50600085815260056020526040812083633b9aca008110612447576124476132fb565b604080516080810182526003928302939093018054600f81810b8652600160801b909104900b60208501526001810154918401919091526002015460608301525490915060006124978783612646565b600081815260046020908152604080832081516080810183528154600f81810b8352600160801b909104900b9381019390935260018101549183019190915260020154606082015291925080848410156125765760006004816124fb876001613393565b8152602080820192909252604090810160002081516080810183528154600f81810b8352600160801b909104900b93810193909352600181015491830191909152600201546060808301829052860151919250612558919061335f565b92508360400151816040015161256e919061335f565b91505061259a565b6060830151612585904361335f565b9150826040015142612597919061335f565b90505b604083015182156125d7578284606001518c6125b6919061335f565b6125c090846133ab565b6125ca91906133e0565b6125d49082613393565b90505b60408701516125e6908261335f565b87602001516125f591906134c6565b8751889061260490839061355b565b600f90810b90915288516000910b12905061263457505093516001600160801b03169650610a1c95505050505050565b60009950505050505050505050610a1c565b60008082815b60808110156126c657818310612661576126c6565b6000600261266f8486613393565b61267a906001613393565b61268491906133e0565b60008181526004602052604090206002015490915087106126a7578093506126b5565b6126b260018261335f565b92505b506126bf816135fa565b905061264c565b5090949350505050565b60005482906126df8682613393565b6000908155604080518082019091528181526020810191909152825160208085015190830152600f0b815282518790849061271b9083906135ab565b600f0b905250851561272f57602083018690525b6000888152600160208181526040909220855181546001600160801b0319166001600160801b039091161781559185015191015561276e888285611a3d565b3387158015906127905750600485600481111561278d5761278d613615565b14155b1561283a576040516323b872dd60e01b81526001600160a01b038281166004830152306024830152604482018a90527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af115801561280a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282e9190613376565b61283a5761283a613311565b8360200151816001600160a01b03167fff04ccafc360e16b67d682d17bd9503c4c6b9a131f6be6325762dc9ffc7de6248b8b894260405161287e949392919061362b565b60405180910390a37f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c836128b28a82613393565b6040805192835260208301919091520160405180910390a1505050505050505050565b600082815260066020526040812054806128f3576000915050610a1c565b600084815260056020526040812082633b9aca008110612915576129156132fb565b60408051608081018252600392909202929092018054600f81810b8452600160801b909104900b6020830152600181015492820183905260020154606082015291506129619085613669565b816020015161297091906134c6565b8151829061297f90839061355b565b600f90810b90915282516000910b1215905061299a57600081525b51600f0b9150610a1c9050565b606060405180610120016040528060fd81526020016139ef60fd91399050806129cf86612cbf565b6040516020016129e09291906136a8565b6040516020818303038152906040529050806129fb85612cbf565b604051602001612a0c929190613724565b604051602081830303815290604052905080612a2784612cbf565b604051602001612a389291906137a4565b604051602081830303815290604052905080612a5383612cbf565b604051602001612a64929190613825565b60405160208183030381529060405290506000612ab1612a8387612cbf565b612a8c84612dbd565b604051602001612a9d929190613880565b604051602081830303815290604052612dbd565b905080604051602001612ac49190613995565b604051602081830303815290604052915050949350505050565b6000818152600c60205260409020546001600160a01b03838116911614612b0757612b07613311565b6000818152600d60205260409020546001600160a01b031615612b41576000818152600d6020526040902080546001600160a01b03191690555b5050565b6000818152600c60205260409020546001600160a01b03838116911614612b6e57612b6e613311565b6000818152600c6020526040902080546001600160a01b0319169055612b948282612f23565b6001600160a01b0382166000908152600e60205260408120805460019290612bbd90849061335f565b90915550505050565b6000818152600c60205260409020546001600160a01b031615612beb57612beb613311565b6000818152600c6020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600e8084528285208054600f865284872081885286528487208890558787526010865293862093909355908452909152805460019290612bbd908490613393565b60006001600160a01b038316612c7457612c74613311565b612c7e8383612bc6565b60405182906001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a450600192915050565b606081612ce35750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612d0d5780612cf7816135fa565b9150612d069050600a836133e0565b9150612ce7565b60008167ffffffffffffffff811115612d2857612d286131a1565b6040519080825280601f01601f191660200182016040528015612d52576020820181803683370190505b5090505b8415610e4f57612d6760018361335f565b9150612d74600a866139da565b612d7f906030613393565b60f81b818381518110612d9457612d946132fb565b60200101906001600160f81b031916908160001a905350612db6600a866133e0565b9450612d56565b805160609080612ddd575050604080516020810190915260008152919050565b60006003612dec836002613393565b612df691906133e0565b612e019060046133ab565b90506000612e10826020613393565b67ffffffffffffffff811115612e2857612e286131a1565b6040519080825280601f01601f191660200182016040528015612e52576020820181803683370190505b5090506000604051806060016040528060408152602001613aec604091399050600181016020830160005b86811015612ede576003818a01810151603f601282901c8116860151600c83901c8216870151600684901c831688015192909316870151600891821b60ff94851601821b92841692909201901b91160160e01b835260049092019101612e7d565b506003860660018114612ef85760028114612f0957612f15565b613d3d60f01b600119830152612f15565b603d60f81b6000198301525b505050918152949350505050565b6001600160a01b0382166000908152600e6020526040812054612f489060019061335f565b60008381526010602052604090205490915080821415612f98576001600160a01b0384166000908152600f60209081526040808320858452825280832083905585835260109091528120556114d6565b6001600160a01b03939093166000908152600f602090815260408083209383529281528282208054868452848420819055835260109091528282209490945592839055908252812055565b6001600160e01b031981168114612ff957600080fd5b50565b60006020828403121561300e57600080fd5b8135610d1481612fe3565b60005b8381101561303457818101518382015260200161301c565b838111156114d65750506000910152565b6000815180845261305d816020860160208601613019565b601f01601f19169290920160200192915050565b602081526000610d146020830184613045565b60006020828403121561309657600080fd5b5035919050565b80356001600160a01b03811681146130b457600080fd5b919050565b600080604083850312156130cc57600080fd5b6130d58361309d565b946020939093013593505050565b600080604083850312156130f657600080fd5b50508035926020909101359150565b60008060006060848603121561311a57600080fd5b6131238461309d565b92506131316020850161309d565b9150604084013590509250925092565b60006020828403121561315357600080fd5b610d148261309d565b8015158114612ff957600080fd5b6000806040838503121561317d57600080fd5b6131868361309d565b915060208301356131968161315c565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080600080608085870312156131cd57600080fd5b6131d68561309d565b93506131e46020860161309d565b925060408501359150606085013567ffffffffffffffff8082111561320857600080fd5b818701915087601f83011261321c57600080fd5b81358181111561322e5761322e6131a1565b604051601f8201601f19908116603f01168101908382118183101715613256576132566131a1565b816040528281528a602084870101111561326f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806000606084860312156132a857600080fd5b83359250602084013591506132bf6040850161309d565b90509250925092565b600080604083850312156132db57600080fd5b6132e48361309d565b91506132f26020840161309d565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052600160045260246000fd5b602080825260089082015267185d1d1858da195960c21b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561337157613371613349565b500390565b60006020828403121561338857600080fd5b8151610d148161315c565b600082198211156133a6576133a6613349565b500190565b60008160001904831182151516156133c5576133c5613349565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826133ef576133ef6133ca565b500490565b60208082526024908201527f43616e6e6f742061646420746f2065787069726564206c6f636b2e20576974686040820152636472617760e01b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610ffb90830184613045565b60006020828403121561347d57600080fd5b8151610d1481612fe3565b600081600f0b83600f0b8061349f5761349f6133ca565b60016001607f1b03198214600019821416156134bd576134bd613349565b90059392505050565b600081600f0b83600f0b60016001607f1b036000821360008413838304851182821616156134f6576134f6613349565b60016001607f1b0319600085128281168783058712161561351957613519613349565b6000871292508582058712848416161561353557613535613349565b8585058712818416161561354b5761354b613349565b5050509290910295945050505050565b600081600f0b83600f0b600081128160016001607f1b03190183128115161561358657613586613349565b8160016001607f1b030183138116156135a1576135a1613349565b5090039392505050565b600081600f0b83600f0b600082128260016001607f1b03038213811516156135d5576135d5613349565b8260016001607f1b03190382128116156135f1576135f1613349565b50019392505050565b600060001982141561360e5761360e613349565b5060010190565b634e487b7160e01b600052602160045260246000fd5b84815260208101849052608081016005841061365757634e487b7160e01b600052602160045260246000fd5b60408201939093526060015292915050565b60008083128015600160ff1b85018412161561368757613687613349565b6001600160ff1b03840183138116156136a2576136a2613349565b50500390565b600083516136ba818460208801613019565b6503a37b5b2b7160d51b90830190815283516136dd816006840160208801613019565b7f3c2f746578743e3c7465787420783d2231302220793d2234302220636c61737360069290910191820152671e913130b9b2911f60c11b6026820152602e01949350505050565b60008351613736818460208801613019565b6903130b630b731b2a7b3160b51b908301908152835161375d81600a840160208801613019565b7f3c2f746578743e3c7465787420783d2231302220793d2236302220636c617373600a9290910191820152671e913130b9b2911f60c11b602a820152603201949350505050565b600083516137b6818460208801613019565b6a03637b1b5b2b22fb2b732160ad1b90830190815283516137de81600b840160208801613019565b7f3c2f746578743e3c7465787420783d2231302220793d2238302220636c617373600b9290910191820152671e913130b9b2911f60c11b602b820152603301949350505050565b60008351613837818460208801613019565b6503b30b63ab2960d51b908301908152835161385a816006840160208801613019565b6c1e17ba32bc3a1f1e17b9bb339f60991b60069290910191820152601301949350505050565b6f7b226e616d65223a20226c6f636b202360801b815282516000906138ac816010850160208801613019565b7f222c20226465736372697074696f6e223a2022536f6c69646c79206c6f636b736010918401918201527f2c2063616e206265207573656420746f20626f6f73742067617567652079696560308201527f6c64732c20766f7465206f6e20746f6b656e20656d697373696f6e2c20616e6460508201527f207265636569766520627269626573222c2022696d616765223a2022646174616070820152750e9a5b5859d94bdcdd99cade1b5b0ed8985cd94d8d0b60521b6090820152835161397a8160a6840160208801613019565b61227d60f01b60a6929091019182015260a801949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516139cd81601d850160208701613019565b91909101601d0192915050565b6000826139e9576139e96133ca565b50069056fe3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122054a0065363b67f6ea1c694436135be4e5e8eeb46ee4ebea62154b4435cd6095964736f6c634300080b0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000000ac0478017d3d38dc7f703fc1be0d10dad85fffb