0 txs
0 calls
constructor
constructor((address treasuryWalletAddress, address addressToSendBoughtPhunksTo, address phunkContractAddress, address wethContractAddress, address chainlinkTokenAddress, address appraisalOracleAddress, address phunkERC20Address, address sushiSwapPhunkERC20WethPoolAddress, address priceAppraisalSignerAddress) _addressRegistry, (uint256 costOfOracleInJuels, bytes32 priceEstimationJobId, uint256 minPctOfNFTxSpotPriceToPay, uint256 minAmountOfPhunkInSushiPoolForValidSpotPrice, uint256 pctOfOraclePriceEstimateToPay, uint8 status) _contractConfig)
functions
addressRegistry
viewfunction addressRegistry() view returns (address treasuryWalletAddress, address addressToSendBoughtPhunksTo, address phunkContractAddress, address wethContractAddress, address chainlinkTokenAddress, address appraisalOracleAddress, address phunkERC20Address, address sushiSwapPhunkERC20WethPoolAddress, address priceAppraisalSignerAddress)
contractConfig
viewfunction contractConfig() view returns (uint256 costOfOracleInJuels, bytes32 priceEstimationJobId, uint256 minPctOfNFTxSpotPriceToPay, uint256 minAmountOfPhunkInSushiPoolForValidSpotPrice, uint256 pctOfOraclePriceEstimateToPay, uint8 status)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getCurrentMinimumValidPrice
viewfunction getCurrentMinimumValidPrice() view returns (uint256, bool)
getOffers
viewfunction getOffers(uint256 limit, uint256 offset) view returns (tuple[])
getPhunkERC20BalanceInSushiPool
viewfunction getPhunkERC20BalanceInSushiPool() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStartOfCurrentWeek
viewfunction getStartOfCurrentWeek() view returns (uint256)
getStartOfWeek
purefunction getStartOfWeek(uint256 currentTime) pure returns (uint256)
getWethBalanceInSushiPool
viewfunction getWethBalanceInSushiPool() view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
hwonderAddress
viewfunction hwonderAddress() view returns (address)
middleAddress
viewfunction middleAddress() view returns (address)
offers
viewfunction offers(uint256) view returns (uint8 status, uint8 cancellationReason, uint16 phunkId, uint64 offerValidUntil, bool enoughPhunkInSushiPoolForValidSpotPrice, address seller, uint256 minSalePrice, uint256 oraclePriceEstimate, bytes32 appraisalRequestId, uint256 minAppraisalConsideredValid, uint256 priceFlywheelIsWillingToPay)
priceRequestIdToOffer
viewfunction priceRequestIdToOffer(bytes32) view returns (uint8 status, uint8 cancellationReason, uint16 phunkId, uint64 offerValidUntil, bool enoughPhunkInSushiPoolForValidSpotPrice, address seller, uint256 minSalePrice, uint256 oraclePriceEstimate, bytes32 appraisalRequestId, uint256 minAppraisalConsideredValid, uint256 priceFlywheelIsWillingToPay)
startOfWeekToWeeklyAllowanceMapping
viewfunction startOfWeekToWeeklyAllowanceMapping(uint256) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TESTER_ROLE
viewfunction TESTER_ROLE() view returns (bytes32)
timestampIsAStartOfWeek
purefunction timestampIsAStartOfWeek(uint256 timestamp) pure returns (bool)
buyPhunkUsingOracleAppraisal
nonpayablefunction buyPhunkUsingOracleAppraisal(bytes32 requestId, uint256 estimate)
depositEthWithWeeklySpendingLimits
payablefunction depositEthWithWeeklySpendingLimits(uint256[] weekStarts, uint256[] weeklyLimits) payable
failsafeWithdraw
nonpayablefunction failsafeWithdraw(uint256 amount)
grantAdminRole
nonpayablefunction grantAdminRole(address[] users)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
grantTesterRole
nonpayablefunction grantTesterRole(address[] users)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeAdminRole
nonpayablefunction revokeAdminRole(address[] users)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
revokeTesterRole
nonpayablefunction revokeTesterRole(address[] users)
sellPhunkWithSignature
nonpayablefunction sellPhunkWithSignature(bytes signature, uint16 phunkId, uint256 phunkPrice, uint256 offerValidUntil)
setAddressRegistry
nonpayablefunction setAddressRegistry(tuple _addressRegistry)
setContractConfig
nonpayablefunction setContractConfig(tuple _contractConfig)
tryToSellPhunkWithOracle
nonpayablefunction tryToSellPhunkWithOracle(uint16 phunkId, uint256 minSalePrice, uint64 offerValidDuration)
withdrawEthFromWeeklySpendingLimits
nonpayablefunction withdrawEthFromWeeklySpendingLimits(uint256[] weekStarts, uint256[] amounts)
events
AddressRegistryUpdated
event AddressRegistryUpdated((address treasuryWalletAddress, address addressToSendBoughtPhunksTo, address phunkContractAddress, address wethContractAddress, address chainlinkTokenAddress, address appraisalOracleAddress, address phunkERC20Address, address sushiSwapPhunkERC20WethPoolAddress, address priceAppraisalSignerAddress) newRegistry)
ChainlinkCancelled
event ChainlinkCancelled(bytes32 indexed id)
ChainlinkFulfilled
event ChainlinkFulfilled(bytes32 indexed id)
ChainlinkRequested
event ChainlinkRequested(bytes32 indexed id)
ContractConfigUpdated
event ContractConfigUpdated((uint256 costOfOracleInJuels, bytes32 priceEstimationJobId, uint256 minPctOfNFTxSpotPriceToPay, uint256 minAmountOfPhunkInSushiPoolForValidSpotPrice, uint256 pctOfOraclePriceEstimateToPay, uint8 status) newConfig)
EthDeposited
event EthDeposited(uint256[] weekStarts, uint256[] weeklyLimits)
EthWithdrawn
event EthWithdrawn(uint256[] weekStarts, uint256[] amounts)
FailsafeWithdrawal
event FailsafeWithdrawal(uint256 amount)
PhunkOfferedForSale
event PhunkOfferedForSale((uint8 status, uint8 cancellationReason, uint16 phunkId, uint64 offerValidUntil, bool enoughPhunkInSushiPoolForValidSpotPrice, address seller, uint256 minSalePrice, uint256 oraclePriceEstimate, bytes32 appraisalRequestId, uint256 minAppraisalConsideredValid, uint256 priceFlywheelIsWillingToPay) offer, uint256 indexed phunkId, uint256 minSalePrice, address indexed seller)
PhunkSoldViaSignature
event PhunkSoldViaSignature((uint8 status, uint8 cancellationReason, uint16 phunkId, uint64 offerValidUntil, bool enoughPhunkInSushiPoolForValidSpotPrice, address seller, uint256 minSalePrice, uint256 oraclePriceEstimate, bytes32 appraisalRequestId, uint256 minAppraisalConsideredValid, uint256 priceFlywheelIsWillingToPay) offer, uint256 indexed phunkId, uint256 minSalePrice, address indexed seller)
PriceEstimateCancelled
event PriceEstimateCancelled((uint8 status, uint8 cancellationReason, uint16 phunkId, uint64 offerValidUntil, bool enoughPhunkInSushiPoolForValidSpotPrice, address seller, uint256 minSalePrice, uint256 oraclePriceEstimate, bytes32 appraisalRequestId, uint256 minAppraisalConsideredValid, uint256 priceFlywheelIsWillingToPay) offer, bytes32 indexed requestId, uint256 priceToPay, uint256 minAppraisalConsideredValid)
PriceEstimateFulfilled
event PriceEstimateFulfilled((uint8 status, uint8 cancellationReason, uint16 phunkId, uint64 offerValidUntil, bool enoughPhunkInSushiPoolForValidSpotPrice, address seller, uint256 minSalePrice, uint256 oraclePriceEstimate, bytes32 appraisalRequestId, uint256 minAppraisalConsideredValid, uint256 priceFlywheelIsWillingToPay) offer, bytes32 indexed requestId, uint256 priceToPay, uint256 minAppraisalConsideredValid)
PriceEstimateRequested
event PriceEstimateRequested(uint256 indexed phunkId, bytes32 indexed requestId)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
errors
No errors.
creation bytecode
0x608060405260016006553480156200001657600080fd5b50604051620059f2380380620059f28339810160408190526200003991620005e4565b600160008190558151600890815560208301516009556040830151600a556060830151600b556080830151600c5560a0830151600d8054859460ff19909116908360048111156200008e576200008e62000629565b0217905550508251600e80546001600160a01b03199081166001600160a01b039384169081179092556020860151600f8054831691851691909117905560408601516010805483169185169190911790556060860151601180548316918516919091179055608086015160128054831691851691909117905560a086015160138054831691851691909117905560c086015160148054831691851691909117905560e086015160158054831691851691909117905561010086015160168054909216931692909217909155620001689150600090620002e2565b62000189600073c2172a6315c1d7f6855768f843c420ebb36eda97620002e2565b620001aa600073f9c2ba78ae44ba98888b0e9eb27eb63d576f261b620002e2565b600e54620001d290600080516020620059d2833981519152906001600160a01b0316620002e2565b62000201600080516020620059d283398151915273c2172a6315c1d7f6855768f843c420ebb36eda97620002e2565b62000230600080516020620059d283398151915273f9c2ba78ae44ba98888b0e9eb27eb63d576f261b620002e2565b601254600480546001600160a01b03199081166001600160a01b0393841690811783556013546005805490931690851617909155600e5460405163095ea7b360e01b81529193849363095ea7b39362000292939092169160001991016200066c565b6020604051808303816000875af1158015620002b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d89190620006a8565b50505050620006d5565b620002ee828262000351565b6200034d5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45b5050565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b0382111715620003bc57620003bc6200037e565b6040525050565b6000620003cf60405190565b9050620003dd828262000394565b919050565b60006001600160a01b03821662000378565b620003ff81620003e2565b81146200040b57600080fd5b50565b80516200037881620003f4565b60006101208284031215620004335762000433600080fd5b62000440610120620003c3565b905060006200045084846200040e565b825250602062000463848483016200040e565b602083015250604062000479848285016200040e565b60408301525060606200048f848285016200040e565b6060830152506080620004a5848285016200040e565b60808301525060a0620004bb848285016200040e565b60a08301525060c0620004d1848285016200040e565b60c08301525060e0620004e7848285016200040e565b60e083015250610100620004fe848285016200040e565b6101008301525092915050565b80620003ff565b805162000378816200050b565b600581106200040b57600080fd5b805162000378816200051f565b600060c08284031215620005515762000551600080fd5b6200055d60c0620003c3565b905060006200056d848462000512565b8252506020620005808484830162000512565b6020830152506040620005968482850162000512565b6040830152506060620005ac8482850162000512565b6060830152506080620005c28482850162000512565b60808301525060a0620005d8848285016200052d565b60a08301525092915050565b6000806101e08385031215620005fd57620005fd600080fd5b60006200060b85856200041b565b9250506101206200061f858286016200053a565b9150509250929050565b634e487b7160e01b600052602160045260246000fd5b6200064a81620003e2565b82525050565b6000620003786200065e8381565b90565b6200064a8162000650565b604081016200067c82856200063f565b6200068b602083018462000661565b9392505050565b801515620003ff565b8051620003788162000692565b600060208284031215620006bf57620006bf600080fd5b6000620006cd84846200069b565b949350505050565b6152ed80620006e56000396000f3fe6080604052600436106101f95760003560e01c80638a72ea6a1161010d578063b39d6e5a116100a0578063d983ec471161006f578063d983ec471461067f578063ddddfcc01461069f578063ed44fe59146106bf578063f3ad65f4146106df578063f88d0f401461074557600080fd5b8063b39d6e5a146105df578063cb7721a7146105ff578063cd1d894c1461061f578063d547741f1461065f57600080fd5b8063a217fddf116100dc578063a217fddf146104f6578063a27d5d5d1461050b578063ae47fac01461052b578063ae7c564d1461054b57600080fd5b80638a72ea6a1461045d57806391d1485414610494578063979579b0146104b457806397d6eb19146104c957600080fd5b806336568abe11610190578063466df0a11161015f578063466df0a1146103c05780634fefb1d2146103d3578063502d98fe146104005780636685209a14610415578063859abc571461043557600080fd5b806336568abe1461032b5780633f829ccc1461034b5780633febb51b1461038057806340f28a79146103a057600080fd5b8063248a9ca3116101cc578063248a9ca31461029a5780632bb4ef7a146102cb5780632c594526146102eb5780632f2ff15d1461030b57600080fd5b806301ffc9a7146101fe578063061f5f43146102345780631076e6e21461025657806311d2d61114610278575b600080fd5b34801561020a57600080fd5b5061021e61021936600461349c565b610768565b60405161022b91906134c7565b60405180910390f35b34801561024057600080fd5b5061024961079f565b60405161022b91906134db565b34801561026257600080fd5b506102766102713660046134fe565b61081d565b005b34801561028457600080fd5b5061024960008051602061529883398151915281565b3480156102a657600080fd5b506102496102b5366004613530565b6000908152600160208190526040909120015490565b3480156102d757600080fd5b5061021e6102e6366004613530565b610874565b3480156102f757600080fd5b5061027661030636600461359b565b610887565b34801561031757600080fd5b50610276610326366004613607565b6108e6565b34801561033757600080fd5b50610276610346366004613607565b610911565b34801561035757600080fd5b5061037373f9c2ba78ae44ba98888b0e9eb27eb63d576f261b81565b60405161022b919061364d565b34801561038c57600080fd5b5061027661039b366004613530565b610950565b3480156103ac57600080fd5b506102766103bb36600461359b565b6109c0565b6102766103ce36600461365b565b610a26565b3480156103df57600080fd5b506102496103ee366004613530565b60196020526000908152604090205481565b34801561040c57600080fd5b50610249610b85565b34801561042157600080fd5b506102766104303660046136d2565b610b90565b34801561044157600080fd5b5061037373c2172a6315c1d7f6855768f843c420ebb36eda9781565b34801561046957600080fd5b5061047d610478366004613530565b610ee5565b60405161022b9b9a99989796959493929190613795565b3480156104a057600080fd5b5061021e6104af366004613607565b610f70565b3480156104c057600080fd5b50610249610f9b565b3480156104d557600080fd5b506104e96104e43660046136d2565b610fd3565b60405161022b9190613962565b34801561050257600080fd5b50610249600081565b34801561051757600080fd5b506102766105263660046139a2565b611321565b34801561053757600080fd5b5061027661054636600461359b565b611a93565b34801561055757600080fd5b5061047d610566366004613530565b601860205260009081526040902080546001820154600283015460038401546004850154600586015460069096015460ff80871697610100880482169761ffff62010000820416976001600160401b03600160201b83041697600160601b909204909316956001600160a01b039093169490939091908b565b3480156105eb57600080fd5b506102766105fa36600461359b565b611adf565b34801561060b57600080fd5b5061027661061a366004613ade565b611b1e565b34801561062b57600080fd5b50600854600954600a54600b54600c54600d5461064d95949392919060ff1686565b60405161022b96959493929190613b5b565b34801561066b57600080fd5b5061027661067a366004613607565b611f6c565b34801561068b57600080fd5b5061027661069a366004613bcb565b611f92565b3480156106ab57600080fd5b506102496106ba366004613530565b612123565b3480156106cb57600080fd5b506102766106da36600461365b565b612185565b3480156106eb57600080fd5b50600e54600f54601054601154601254601354601454601554601654610730986001600160a01b03908116988116978116968116958116948116938116928116911689565b60405161022b99989796959493929190613bed565b34801561075157600080fd5b5061075a612287565b60405161022b929190613c73565b60006001600160e01b03198216637965db0b60e01b148061079957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6014546015546040516370a0823160e01b81526000926001600160a01b03908116926370a08231926107d7929091169060040161364d565b602060405180830381865afa1580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190613c99565b905090565b6000610828816122e1565b8160086108358282613e24565b9050507f8f42852c1751d696b4914b6d72f616226c5ed8581ee835addc2f4d7a86675ca860086040516108689190613ee6565b60405180910390a15050565b600061087f82612123565b909114919050565b6000610892816122e1565b60005b828110156108e0576108ce60008585848181106108b4576108b4613ef4565b90506020020160208101906108c99190613f0a565b6122ee565b806108d881613f41565b915050610895565b50505050565b60008281526001602081905260409091200154610902816122e1565b61090c83836122ee565b505050565b6001600160a01b03811633146109425760405162461bcd60e51b815260040161093990613faa565b60405180910390fd5b61094c8282612359565b5050565b600061095b816122e1565b4782101561097b5760405162461bcd60e51b815260040161093990613fe8565b600e54610991906001600160a01b0316836123c0565b7f55a344f4d8c94672cae37703e7cef627c67950eefd10ebccd28f4c6fb42eaf578260405161086891906134db565b60006109cb816122e1565b60005b828110156108e057610a146000805160206152988339815191528585848181106109fa576109fa613ef4565b9050602002016020810190610a0f9190613f0a565b612359565b80610a1e81613f41565b9150506109ce565b6000610a31816122e1565b6000805b83811015610b20576000878783818110610a5157610a51613ef4565b905060200201359050610a6342612123565b811015610a825760405162461bcd60e51b81526004016109399061402c565b610a8b81610874565b610aa75760405162461bcd60e51b81526004016109399061407b565b858583818110610ab957610ab9613ef4565b90506020020135601960008381526020019081526020016000206000828254610ae2919061408b565b909155508690508583818110610afa57610afa613ef4565b9050602002013583610b0c919061408b565b92505080610b1990613f41565b9050610a35565b507f3aa0646d77d145a53c5338b4319207e8cc7e3300c3058f436b1622a4e715705386868686604051610b5694939291906140dc565b60405180910390a1803414610b7d5760405162461bcd60e51b815260040161093990614155565b505050505050565b600061081842612123565b600260005403610bb25760405162461bcd60e51b815260040161093990614199565b600260009081558281526007602052604090205482906001600160a01b03163314610bef5760405162461bcd60e51b8152600401610939906141ee565b60008181526007602052604080822080546001600160a01b03191690555182917f7cc135e0cebb02c3480ae5d74d377283180a2601f8f644edf7987b009316c63a91a26000838152601860205260409020610c4c836127106141fe565b60038201819055600c54606491610c6391906141fe565b610c6d9190614233565b6006820155600080610c7d612287565b60058501829055845460ff60601b1916600160601b82151502178086559193509150600160201b90046001600160401b0316421115610cc957610cc18360056124a3565b505050610edb565b6001835460ff166004811115610ce157610ce1613705565b14610cf157610cc18360046124a3565b8260020154836006015410158015610d1157508260050154836003015410155b8015610d2557508254600160601b900460ff165b610d3457610cc18360016124a3565b600060196000610d42610b85565b81526020019081526020016000205490508360060154811015610d7357610d6a8460036124a3565b50505050610edb565b6010546001850154600f548654604051632142170760e11b81526001600160a01b03948516946342842e0e94610dbe94908216939116916201000090910461ffff1690600401614260565b600060405180830381600087803b158015610dd857600080fd5b505af1925050508015610de9575060015b610e3557610df5614288565b806308c379a003610e295750610e096142a3565b80610e145750610e2b565b610e1f8560026124a3565b5050505050610edb565b505b3d6000803e3d6000fd5b836006015460196000610e46610b85565b81526020019081526020016000206000828254610e639190614328565b909155505060018401546006850154610e85916001600160a01b0316906123c0565b835460ff191660021784556006840154600585015460405189927f1e7f730d619f6cee7fb47bc75e01c2cbb005cb804cc904ee6c8eaccd7b39175192610ece92899291906144c9565b60405180910390a2505050505b5050600160005550565b60178181548110610ef557600080fd5b6000918252602090912060079091020180546001820154600283015460038401546004850154600586015460069096015460ff8087169850610100870481169761ffff62010000890416976001600160401b03600160201b82041697600160601b909104909216956001600160a01b0390921694919391928b565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6011546015546040516370a0823160e01b81526000926001600160a01b03908116926370a08231926107d7929091169060040161364d565b60606000836001600160401b03811115610fef57610fef6139f2565b60405190808252806020026020018201604052801561108057816020015b61106d60408051610160810190915280600081526020016000815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e0820181905261010082018190526101209091015290565b81526020019060019003908161100d5790505b50905060005b848110156111d757601761109a828661408b565b815481106110aa576110aa613ef4565b600091825260209091206040805161016081019091526007909202018054829060ff1660048111156110de576110de613705565b60048111156110ef576110ef613705565b81528154602090910190610100900460ff16600581111561111257611112613705565b600581111561112357611123613705565b8152815462010000810461ffff166020830152600160201b81046001600160401b03166040830152600160601b900460ff161515606082015260018201546001600160a01b03166080820152600282015460a0820152600382015460c0820152600482015460e082015260058201546101008201526006909101546101209091015282518390839081106111b9576111b9613ef4565b602002602001018190525080806111cf90613f41565b915050611086565b506017805480602002602001604051908101604052809291908181526020016000905b8282101561131457600084815260209020604080516101608101909152600784029091018054829060ff16600481111561123657611236613705565b600481111561124757611247613705565b81528154602090910190610100900460ff16600581111561126a5761126a613705565b600581111561127b5761127b613705565b8152815462010000810461ffff16602080840191909152600160201b82046001600160401b03166040840152600160601b90910460ff16151560608301526001808401546001600160a01b03166080840152600284015460a0840152600384015460c0840152600484015460e08401526005840154610100840152600690930154610120909201919091529183529290920191016111fa565b5050505091505092915050565b6002600054036113435760405162461bcd60e51b815260040161093990614199565b60026000908155600d5460ff16600481111561136157611361613705565b0361137e5760405162461bcd60e51b81526004016109399061451d565b6004600d5460ff16600481111561139757611397613705565b14806113d757506003600d5460ff1660048111156113b7576113b7613705565b1480156113d757506113d760008051602061529883398151915233610f70565b6113f35760405162461bcd60e51b815260040161093990614561565b6000806113fe612287565b60105491935091506001600160a01b0316601e6001600160401b03851610156114395760405162461bcd60e51b8152600401610939906145b2565b816114565760405162461bcd60e51b8152600401610939906145f6565b828510156114765760405162461bcd60e51b81526004016109399061463a565b6040516331a9108f60e11b815233906001600160a01b03831690636352211e906114a4908a9060040161464a565b602060405180830381865afa1580156114c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e59190614663565b6001600160a01b03161461150b5760405162461bcd60e51b8152600401610939906146b8565b60405163e985e9c560e01b81526001600160a01b0382169063e985e9c59061153990339030906004016146c8565b602060405180830381865afa158015611556573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061157a91906146f6565b806115fa575060405163020604bf60e21b815230906001600160a01b0383169063081812fc906115ae908a9060040161464a565b602060405180830381865afa1580156115cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ef9190614663565b6001600160a01b0316145b6116165760405162461bcd60e51b81526004016109399061474b565b8460196000611623610b85565b81526020019081526020016000205410156116505760405162461bcd60e51b81526004016109399061478f565b60006116646004546001600160a01b031690565b6008546040516323b872dd60e01b81529192506001600160a01b038316916323b872dd91611698913391309160040161479f565b6020604051808303816000875af19250505080156116d3575060408051601f3d908101601f191682019092526116d0918101906146f6565b60015b611735576116df614288565b806308c379a003610e2957506116f36142a3565b806116fe5750610e2b565b8060405160200161170f9190614815565b60408051601f198184030181529082905262461bcd60e51b825261093991600401614879565b5060006117458861ffff16612521565b905060006040518061016001604052806001600481111561176857611768613705565b81526020016000815261ffff8b166020820152604001611788894261488a565b6001600160401b031681526000602080830182905233604080850191909152606084018d90526080840183905260a0840187905260c0840183905260e09093018290528582526018905220815181549293508392829060ff191660018360048111156117f6576117f6613705565b021790555060208201518154829061ff00191661010083600581111561181e5761181e613705565b021790555060408201518154606084015160808501511515600160601b0260ff60601b196001600160401b03909216600160201b026bffffffffffffffff000000001961ffff9095166201000002949094166bffffffffffffffffffff00001990931692909217929092179190911617815560a0820151600180830180546001600160a01b039093166001600160a01b03199093169290921790915560c0830151600283015560e08301516003830155610100830151600480840191909155610120840151600584015561014090930151600690920191909155601780548083018255600091909152835160079091027fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1501805485949193849260ff1990921691849081111561195057611950613705565b021790555060208201518154829061ff00191661010083600581111561197857611978613705565b02179055506040828101518254606085015160808601516bffffffffffffffffffff0000199092166201000061ffff948516026bffffffffffffffff00000000191617600160201b6001600160401b03909216919091021760ff60601b1916600160601b9115159190910217835560a08401516001840180546001600160a01b0319166001600160a01b0390921691909117905560c0840151600284015560e0840151600384015561010084015160048401556101208401516005840155610140909301516006909201919091555133918b16907f0f2cd33ce9f958cd7d66d7c98f3bea87f17b35c7dfbb2525e67b32f83b6e43f990611a7b9085908d906148bd565b60405180910390a35050600160005550505050505050565b6000611a9e816122e1565b60005b828110156108e057611acd6000805160206152988339815191528585848181106108b4576108b4613ef4565b80611ad781613f41565b915050611aa1565b6000611aea816122e1565b60005b828110156108e057611b0c60008585848181106109fa576109fa613ef4565b80611b1681613f41565b915050611aed565b600260005403611b405760405162461bcd60e51b815260040161093990614199565b60026000908155600d5460ff166004811115611b5e57611b5e613705565b03611b7b5760405162461bcd60e51b81526004016109399061451d565b6002600d5460ff166004811115611b9457611b94613705565b1480611bd457506001600d5460ff166004811115611bb457611bb4613705565b148015611bd45750611bd460008051602061529883398151915233610f70565b611bf05760405162461bcd60e51b815260040161093990614561565b6000838383604051602001611c07939291906148f3565b6040516020818303038152906040528051906020012090506000611c2a8261265f565b90506000611c38828861268f565b6016549091506001600160a01b03808316911614611c685760405162461bcd60e51b815260040161093990614952565b428411611c875760405162461bcd60e51b81526004016109399061498a565b8460196000611c94610b85565b8152602001908152602001600020541015611cc15760405162461bcd60e51b81526004016109399061478f565b601054600f54604051632142170760e11b81526001600160a01b03928316926342842e0e92611cfa923392909116908b90600401614260565b600060405180830381600087803b158015611d1457600080fd5b505af1158015611d28573d6000803e3d6000fd5b505050508460196000611d39610b85565b81526020019081526020016000206000828254611d569190614328565b90915550611d66905033866123c0565b60408051610160810190915260009080600481526020016000815261ffff891660208201526001600160401b038716604082015260006060820181905233608083015260a0820189905260c0820181905260e082018190526101008201819052610120909101819052601780546001818101835591909252825160079092027fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c150180549394508493909291839160ff191690836004811115611e2a57611e2a613705565b021790555060208201518154829061ff001916610100836005811115611e5257611e52613705565b02179055506040828101518254606085015160808601516bffffffffffffffffffff0000199092166201000061ffff948516026bffffffffffffffff00000000191617600160201b6001600160401b03909216919091021760ff60601b1916600160601b9115159190910217835560a08401516001840180546001600160a01b0319166001600160a01b0390921691909117905560c0840151600284015560e0840151600384015561010084015160048401556101208401516005840155610140909301516006909201919091555133918916907ff29cd3d91b40acb68947fbf2fd0b2f12145fa2039cbed4bb0c4a415738e41fa090611f559085908b906148bd565b60405180910390a350506001600055505050505050565b60008281526001602081905260409091200154611f88816122e1565b61090c8383612359565b6000611f9d816122e1565b6000611fb16004546001600160a01b031690565b600e54909150611fcc906000906001600160a01b0316612359565b600e5460405163095ea7b360e01b81526001600160a01b038381169263095ea7b39261200192909116906000906004016149a3565b6020604051808303816000875af1158015612020573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204491906146f6565b5082600e6120528282614b3a565b5050600e5460405163095ea7b360e01b81526001600160a01b038381169263095ea7b39261208a9290911690600019906004016149a3565b6020604051808303816000875af11580156120a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cd91906146f6565b50600e546120e6906000906001600160a01b03166122ee565b7fd3a0dac45eb4321ed4e88b005ebe8ddc35f23d6aff3505d2afc9926b2492a22d600e6040516121169190614c48565b60405180910390a1505050565b600080600080612132856126b3565b955095509550505050600061214686612727565b905061217b826121758561216f88612169612162600189614328565b8d90612762565b9061278a565b90612798565b906127a5565b9695505050505050565b6000612190816122e1565b6000805b8581101561222b578484828181106121ae576121ae613ef4565b90506020020135601960008989858181106121cb576121cb613ef4565b90506020020135815260200190815260200160002060008282546121ef9190614328565b90915550859050848281811061220757612207613ef4565b9050602002013582612219919061408b565b915061222481613f41565b9050612194565b50600e54612242906001600160a01b0316826123c0565b7fadd7051f71076a2bab98dae7ff90d30d1d650a1703eca9afdc655d43601012b98686868660405161227794939291906140dc565b60405180910390a1505050505050565b6000806000612294610f9b565b905060006122a061079f565b905060006122ae83836127b1565b905060006064600860020154836122c591906141fe565b6122cf9190614233565b600b5490979310159550919350505050565b6122eb81336127c6565b50565b6122f88282610f70565b61094c5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6123638282610f70565b1561094c5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6123ca8282612804565b61094c5760115460408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918491600480830192600092919082900301818588803b15801561241557600080fd5b505af1158015612429573d6000803e3d6000fd5b505060115460405163a9059cbb60e01b81526001600160a01b03909116935063a9059cbb9250612460915085908590600401614c57565b6020604051808303816000875af115801561247f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906146f6565b8154600360ff198216811784558291849161ffff19909116176101008360058111156124d1576124d1613705565b02179055506004820154600383015460058401546040517fd3f9b8598eaec2beb0fa58a44e34875a2374aeadd487abce05e8afe1f3166e39926125159287926144c9565b60405180910390a25050565b600954600090819061253a90633342904d60e11b612882565b604080518082018252600c81526b61737365744164647265737360a01b602080830191909152601054925193945061259c939192612584926001600160a01b039091169101614c9a565b60408051601f198184030181529190528391906128a6565b6040805180820190915260078152661d1bdad95b925960ca1b60208201526125c6908290856128c4565b61261a6040518060400160405280600c81526020016b1c1c9a58da5b99d05cdcd95d60a21b8152506040518060400160405280600381526020016208aa8960eb1b815250836128e29092919063ffffffff16565b61262981600860000154612900565b915081837f7327ecbaff12047eaa1348d9c3c9764baa2ed8073746bbd1bd8662bfac79ea2b60405160405180910390a350919050565b6000816040516020016126729190614caf565b604051602081830303815290604052805190602001209050919050565b600080600061269e858561291a565b915091506126ab8161295f565b509392505050565b600080808080806126cf6126ca6201518089614233565b612a3f565b9197509550935060006126e56201518089614cea565b90506126f3610e1082614233565b9350612701610e1082614cea565b905061270e603c82614233565b925061271b603c82614cea565b91505091939550919395565b6000806127376201518084614233565b9050600761274682600361408b565b6127509190614cea565b61275b90600161408b565b9392505050565b600061277162015180836141fe565b61277b9084614328565b90508281111561079957600080fd5b6000612771610e10836141fe565b6000612771603c836141fe565b600061277b8284614328565b600061275b83670de0b6b3a764000084612bb3565b6127d08282610f70565b61094c576127e8816001600160a01b03166014612bd2565b6127f3836020612bd2565b60405160200161170f929190614cfe565b6040805160008082526020820190925281906001600160a01b038516906175309085906040516128349190614d56565b600060405180830381858888f193505050503d8060008114612872576040519150601f19603f3d011682016040523d82523d6000602084013e612877565b606091505b509095945050505050565b61288a61343f565b61289261343f565b61289e81853086612d3d565b949350505050565b60808301516128b59083612d7a565b608083015161090c9082612d91565b60808301516128d39083612d7a565b608083015161090c9082612d9e565b60808301516128f19083612d7a565b608083015161090c9082612d7a565b60055460009061275b906001600160a01b03168484612dc3565b60008082516041036129505760208301516040840151606085015160001a61294487828585612e4a565b94509450505050612958565b506000905060025b9250929050565b600081600481111561297357612973613705565b0361297b5750565b600181600481111561298f5761298f613705565b036129ac5760405162461bcd60e51b815260040161093990614d96565b60028160048111156129c0576129c0613705565b036129dd5760405162461bcd60e51b815260040161093990614dda565b60038160048111156129f1576129f1613705565b03612a0e5760405162461bcd60e51b815260040161093990614e29565b6004816004811115612a2257612a22613705565b036122eb5760405162461bcd60e51b815260040161093990614e78565b60008080838162253d8c612a568362010bd9614e88565b612a609190614e88565b9050600062023ab1612a73836004614ec4565b612a7d9190614f4c565b90506004612a8e8262023ab1614ec4565b612a99906003614e88565b612aa39190614f4c565b612aad9083614f7a565b9150600062164b09612ac0846001614e88565b612acc90610fa0614ec4565b612ad69190614f4c565b90506004612ae6826105b5614ec4565b612af09190614f4c565b612afa9084614f7a565b612b0590601f614e88565b9250600061098f612b17856050614ec4565b612b219190614f4c565b905060006050612b338361098f614ec4565b612b3d9190614f4c565b612b479086614f7a565b9050612b54600b83614f4c565b9450612b6185600c614ec4565b612b6c836002614e88565b612b769190614f7a565b91508483612b85603187614f7a565b612b90906064614ec4565b612b9a9190614e88565b612ba49190614e88565b9a919950975095505050505050565b828202811515841585830485141716612bcb57600080fd5b0492915050565b60606000612be18360026141fe565b612bec90600261408b565b6001600160401b03811115612c0357612c036139f2565b6040519080825280601f01601f191660200182016040528015612c2d576020820181803683370190505b509050600360fc1b81600081518110612c4857612c48613ef4565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612c7757612c77613ef4565b60200101906001600160f81b031916908160001a9053506000612c9b8460026141fe565b612ca690600161408b565b90505b6001811115612d1e576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612cda57612cda613ef4565b1a60f81b828281518110612cf057612cf0613ef4565b60200101906001600160f81b031916908160001a90535060049490941c93612d1781614fb6565b9050612ca9565b50831561275b5760405162461bcd60e51b815260040161093990614fff565b612d4561343f565b612d558560800151610100612f2a565b50509183526001600160a01b031660208301526001600160e01b031916604082015290565b612d878260038351612f8f565b61090c8282613096565b612d878260028351612f8f565b6001600160401b03811115612db75761094c82826130bd565b61094c82600083612f8f565b600654600090612dd481600161408b565b60065583516040808601516080870151519151600093633c6d41b960e01b93612e0a93869384939289916002919060240161501f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905061217b868386846130f2565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612e815750600090506003612f21565b8460ff16601b14158015612e9957508460ff16601c14155b15612eaa5750600090506004612f21565b600060018787878760405160008152602001604052604051612ecf9493929190615096565b6020604051602081039080840390855afa158015612ef1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612f1a57600060019250925050612f21565b9150600090505b94509492505050565b604080518082019091526060815260006020820152612f4a602083614cea565b15612f7257612f5a602083614cea565b612f65906020614328565b612f6f908361408b565b91505b506020828101829052604080518085526000815290920101905290565b6017816001600160401b031611612fb3576108e08360e0600585901b168317613200565b60ff816001600160401b031611612fef57612fd9836018611fe0600586901b1617613200565b506108e0836001600160401b0383166001613225565b61ffff816001600160401b03161161302c57613016836019611fe0600586901b1617613200565b506108e0836001600160401b0383166002613225565b63ffffffff816001600160401b03161161306b5761305583601a611fe0600586901b1617613200565b506108e0836001600160401b0383166004613225565b61308083601b611fe0600586901b1617613200565b506108e0836001600160401b0383166008613225565b60408051808201909152606081526000602082015261275b8384600001515184855161324b565b6130c88260c2613200565b5061094c82826040516020016130de91906134db565b604051602081830303815290604052612d91565b600030846040516020016131079291906150e0565b60408051808303601f1901815282825280516020918201206000818152600790925291812080546001600160a01b0319166001600160a01b038a1617905590925082917fb5e6e01e79f91267dc17b4e6314d5d4d03593d2ceee0fbb452b750bd70ea5af99190a260048054604051630200057560e51b81526001600160a01b0390911691634000aea0916131a19189918891889101615106565b6020604051808303816000875af11580156131c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e491906146f6565b61289e5760405162461bcd60e51b815260040161093990615173565b60408051808201909152606081526000602082015261275b8384600001515184613335565b60408051808201909152606081526000602082015261289e848560000151518585613390565b604080518082019091526060815260006020820152825182111561326e57600080fd5b602085015161327d838661408b565b11156132b0576132b0856132a08760200151878661329b919061408b565b613411565b6132ab9060026141fe565b613428565b6000808651805187602083010193508088870111156132cf5787860182525b505050602084015b6020841061330f57805182526132ee60208361408b565b91506132fb60208261408b565b9050613308602085614328565b93506132d7565b51815160001960208690036101000a019081169019919091161790525083949350505050565b6040805180820190915260608152600060208201528360200151831061336a5761336a84856020015160026132ab91906141fe565b83518051602085830101848153818603613385576001820183525b509495945050505050565b60408051808201909152606081526000602082015260208501516133b4858461408b565b11156133c8576133c8856132a0868561408b565b600060016133d884610100615288565b6133e29190614328565b905085518386820101858319825116178152815185880111156134055784870182525b50959695505050505050565b600081831115613422575081610799565b50919050565b81516134348383612f2a565b506108e08382613096565b6040805160a0810182526000808252602080830182905282840182905260608084018390528451808601909552845283015290608082015290565b6001600160e01b031981165b81146122eb57600080fd5b80356107998161347a565b6000602082840312156134b1576134b1600080fd5b600061289e8484613491565b8015155b82525050565b6020810161079982846134bd565b806134c1565b6020810161079982846134d5565b600060c0828403121561342257613422600080fd5b600060c0828403121561351357613513600080fd5b600061289e84846134e9565b80613486565b80356107998161351f565b60006020828403121561354557613545600080fd5b600061289e8484613525565b60008083601f84011261356657613566600080fd5b5081356001600160401b0381111561358057613580600080fd5b60208301915083602082028301111561295857612958600080fd5b600080602083850312156135b1576135b1600080fd5b82356001600160401b038111156135ca576135ca600080fd5b6135d685828601613551565b92509250509250929050565b60006001600160a01b038216610799565b613486816135e2565b8035610799816135f3565b6000806040838503121561361d5761361d600080fd5b60006136298585613525565b925050602061363a858286016135fc565b9150509250929050565b6134c1816135e2565b602081016107998284613644565b6000806000806040858703121561367457613674600080fd5b84356001600160401b0381111561368d5761368d600080fd5b61369987828801613551565b945094505060208501356001600160401b038111156136ba576136ba600080fd5b6136c687828801613551565b95989497509550505050565b600080604083850312156136e8576136e8600080fd5b60006136f48585613525565b925050602061363a85828601613525565b634e487b7160e01b600052602160045260246000fd5b600581106122eb576122eb613705565b806137358161371b565b919050565b60006107998261372b565b6134c18161373a565b600681106122eb576122eb613705565b806137358161374e565b60006107998261375e565b6134c181613768565b61ffff81166134c1565b6001600160401b0381166134c1565b61016081016137a4828e613745565b6137b1602083018d613773565b6137be604083018c61377c565b6137cb606083018b613786565b6137d8608083018a6134bd565b6137e560a0830189613644565b6137f260c08301886134d5565b6137ff60e08301876134d5565b61380d6101008301866134d5565b61381b6101208301856134d5565b6138296101408301846134d5565b9c9b505050505050505050505050565b805161016083019061384b8482613745565b50602082015161385e6020850182613773565b506040820151613871604085018261377c565b5060608201516138846060850182613786565b50608082015161389760808501826134bd565b5060a08201516138aa60a0850182613644565b5060c08201516138bd60c08501826134d5565b5060e08201516138d060e08501826134d5565b506101008201516138e56101008501826134d5565b506101208201516138fa6101208501826134d5565b506101408201516108e06101408501826134d5565b600061391b8383613839565b50506101600190565b600061392e825190565b80845260209384019383018060005b83811015613385578151613951888261390f565b97506020830192505060010161393d565b6020808252810161275b8184613924565b61ffff8116613486565b803561079981613973565b6001600160401b038116613486565b803561079981613988565b6000806000606084860312156139ba576139ba600080fd5b60006139c6868661397d565b93505060206139d786828701613525565b92505060406139e886828701613997565b9150509250925092565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b0382111715613a2d57613a2d6139f2565b6040525050565b6000613a3f60405190565b90506137358282613a08565b60006001600160401b03821115613a6457613a646139f2565b601f19601f83011660200192915050565b82818337506000910152565b6000613a94613a8f84613a4b565b613a34565b905082815260208101848484011115613aaf57613aaf600080fd5b6126ab848285613a75565b600082601f830112613ace57613ace600080fd5b813561289e848260208601613a81565b60008060008060808587031215613af757613af7600080fd5b84356001600160401b03811115613b1057613b10600080fd5b613b1c87828801613aba565b9450506020613b2d8782880161397d565b9350506040613b3e87828801613525565b9250506060613b4f87828801613525565b91505092959194509250565b60c08101613b6982896134d5565b613b7660208301886134d5565b613b8360408301876134d5565b613b9060608301866134d5565b613b9d60808301856134d5565b613baa60a0830184613745565b979650505050505050565b6000610120828403121561342257613422600080fd5b60006101208284031215613be157613be1600080fd5b600061289e8484613bb5565b6101208101613bfc828c613644565b613c09602083018b613644565b613c16604083018a613644565b613c236060830189613644565b613c306080830188613644565b613c3d60a0830187613644565b613c4a60c0830186613644565b613c5760e0830185613644565b613c65610100830184613644565b9a9950505050505050505050565b60408101613c8182856134d5565b61275b60208301846134bd565b80516107998161351f565b600060208284031215613cae57613cae600080fd5b600061289e8484613c8e565b600081356107998161351f565b6000600019835b81169019929092169190911792915050565b6000610799613cec8381565b90565b613cf882613ce0565b613d04815b8354613cc7565b8255505050565b600081610799565b613d1c82613d0b565b613d04613cfd82613d0b565b600581106122eb57600080fd5b6000813561079981613d28565b600060ff83613cce565b613d558261373a565b613d04818354613d42565b808280613d6c81613cba565b9050613d788184613cef565b505050600181016020830180613d8d81613cba565b9050613d998184613d13565b505050600281016040830180613dae81613cba565b9050613dba8184613cef565b505050600381016060830180613dcf81613cba565b9050613ddb8184613cef565b505050600481016080830180613df081613cba565b9050613dfc8184613cef565b5050506005810160a0830180613e1181613d35565b9050613e1d8184613d4c565b5050505050565b61094c8282613d60565b6000610799825b60ff1690565b805460c0830190613e4b81613d0b565b613e5585826134d5565b50506001820154613e6581613d0b565b613e7260208601826134d5565b50506002820154613e8281613d0b565b613e8f60408601826134d5565b50506003820154613e9f81613d0b565b613eac60608601826134d5565b50506004820154613ebc81613d0b565b613ec960808601826134d5565b50506005820154613ed981613e2e565b613e1d60a0860182613745565b60c081016107998284613e3b565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613f1f57613f1f600080fd5b600061289e84846135fc565b634e487b7160e01b600052601160045260246000fd5b60006000198203613f5457613f54613f2b565b5060010190565b602f81526000602082017f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636581526e103937b632b9903337b91039b2b63360891b602082015291505b5060400190565b6020808252810161079981613f5b565b6014815260006020820173496e73756666696369656e742062616c616e636560601b815291505b5060200190565b6020808252810161079981613fba565b601b81526000602082017f43616e277420616464207370656e6420746f207468652070617374000000000081529150613fe1565b6020808252810161079981613ff8565b602281526000602082017f5765656b207374617274206d7573742062652061207374617274206f66207765815261656b60f01b60208201529150613fa3565b602080825281016107998161403c565b6000821982111561409e5761409e613f2b565b500190565b81835260006020840193506001600160fb1b038311156140c5576140c5600080fd5b6020830292506140d6838584613a75565b50500190565b604080825281016140ee8186886140a3565b9050818103602083015261217b8184866140a3565b603581526000602082017f546f74616c206f6620616c6c206c696d697473206d75737420657175616c20748152741a1948185b5bdd5b9d081bd988115512081cd95b9d605a1b60208201529150613fa3565b6020808252810161079981614103565b601f81526000602082017f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081529150613fe1565b6020808252810161079981614165565b602881526000602082017f536f75726365206d75737420626520746865206f7261636c65206f6620746865815267081c995c5d595cdd60c21b60208201529150613fa3565b60208082528101610799816141a9565b600081600019048311821515161561421857614218613f2b565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826142425761424261421d565b500490565b6000610799613cec61ffff841681565b6134c181614247565b6060810161426e8286613644565b61427b6020830185613644565b61289e6040830184614257565b600060033d1115613cec5760046000803e5060005160e01c90565b600060443d10156142b15790565b60405160043d036004823e80513d60248201116001600160401b03821117156142d957505090565b80820180516001600160401b038111156142f4575050505090565b80602083010160043d03850181111561430f57505050505090565b61431e82602001850186613a08565b5090949350505050565b60008282101561433a5761433a613f2b565b500390565b6000610799613e358360081c90565b600061079961435d8360101c90565b61ffff1690565b60006107996143738360201c90565b6001600160401b031690565b6000610799613e358360601c90565b6000610799825b6001600160a01b031690565b80546101608301906143b281613e2e565b6143bc8582613745565b506143c68161433f565b6143d36020860182613773565b506143dd8161434e565b6143ea604086018261377c565b506143f481614364565b6144016060860182613786565b5061440b8161437f565b61441860808601826134bd565b505060018201546144288161438e565b61443560a0860182613644565b5050600282015461444581613d0b565b61445260c08601826134d5565b5050600382015461446281613d0b565b61446f60e08601826134d5565b5050600482015461447f81613d0b565b61448d6101008601826134d5565b5050600582015461449d81613d0b565b6144ab6101208601826134d5565b505060068201546144bb81613d0b565b613e1d6101408601826134d5565b6101a081016144d882866143a1565b6144e66101608301856134d5565b61289e6101808301846134d5565b6012815260006020820171119b1e5dda19595b081a5cc81c185d5cd95960721b81529150613fe1565b60208082528101610799816144f4565b601881526000602082017f466c79776865656c20697320696e2074657374206d6f6465000000000000000081529150613fe1565b602080825281016107998161452d565b602481526000602082017f4f66666572206d7573742062652076616c696420666f72206174206c656173748152632033307360e01b60208201529150613fa3565b6020808252810161079981614571565b601e81526000602082017f546f6f206c6974746c65205048554e4b20696e20537573686920706f6f6c000081529150613fe1565b60208082528101610799816145c2565b601d81526000602082017f4d696e696d756d2073616c6520707269636520697320746f6f206c6f7700000081529150613fe1565b6020808252810161079981614606565b602081016107998284614257565b8051610799816135f3565b60006020828403121561467857614678600080fd5b600061289e8484614658565b601981526000602082017f53656e64657220646f6573206e6f74206f776e207068756e6b0000000000000081529150613fe1565b6020808252810161079981614684565b604081016146d68285613644565b61275b6020830184613644565b801515613486565b8051610799816146e3565b60006020828403121561470b5761470b600080fd5b600061289e84846146eb565b601781526000602082017f466c79776865656c206e6565647320617070726f76616c00000000000000000081529150613fe1565b6020808252810161079981614717565b601981526000602082017f5765656b6c7920616c6c6f77616e63652065786365656465640000000000000081529150613fe1565b602080825281016107998161475b565b606081016147ad8286613644565b6147ba6020830185613644565b61289e60408301846134d5565b60005b838110156147e25781810151838201526020016147ca565b838111156108e05750506000910152565b60006147fd825190565b61480b8185602086016147c7565b9290920192915050565b7f53656e64204c494e4b20746f207573652074686520466c79776865656c3a20008152601f01600061275b82846147f3565b6000614851825190565b8084526020840193506148688185602086016147c7565b601f01601f19169290920192915050565b6020808252810161275b8184614847565b60006001600160401b03821691506001600160401b0383169250826001600160401b030382111561409e5761409e613f2b565b61018081016148cc8285613839565b61275b6101608301846134d5565b60006107998260f01b90565b6134c161ffff82166148da565b60006148ff82866148e6565b60028201915061490f82856134d5565b60208201915061491f82846134d5565b506020019392505050565b6011815260006020820170496e76616c6964205369676e617475726560781b81529150613fe1565b602080825281016107998161492a565b601181526000602082017013d999995c881a185cc8195e1c1a5c9959607a1b81529150613fe1565b6020808252810161079981614962565b6134c181613ce0565b604081016149b18285613644565b61275b602083018461499a565b60008135610799816135f3565b60006001600160a01b0383613cce565b60006107996001600160a01b038316614395565b6000610799826149db565b6000610799826149ef565b614a0e826149fa565b613d048183546149cb565b808280614a25816149be565b9050614a318184614a05565b505050600181016020830180614a46816149be565b9050614a528184614a05565b505050600281016040830180614a67816149be565b9050614a738184614a05565b505050600381016060830180614a88816149be565b9050614a948184614a05565b505050600481016080830180614aa9816149be565b9050614ab58184614a05565b5050506005810160a0830180614aca816149be565b9050614ad68184614a05565b5050506006810160c0830180614aeb816149be565b9050614af78184614a05565b5050506007810160e0830180614b0c816149be565b9050614b188184614a05565b50505060088101610100830180614b2e816149be565b9050613e1d8184614a05565b61094c8282614a19565b8054610120830190614b558161438e565b614b5f8582613644565b50506001820154614b6f8161438e565b614b7c6020860182613644565b50506002820154614b8c8161438e565b614b996040860182613644565b50506003820154614ba98161438e565b614bb66060860182613644565b50506004820154614bc68161438e565b614bd36080860182613644565b50506005820154614be38161438e565b614bf060a0860182613644565b50506006820154614c008161438e565b614c0d60c0860182613644565b50506007820154614c1d8161438e565b614c2a60e0860182613644565b50506008820154614c3a8161438e565b613e1d610100860182613644565b61012081016107998284614b44565b60408101614c658285613644565b61275b60208301846134d5565b60006107998260601b90565b600061079982614c72565b6134c1614c95826135e2565b614c7e565b6000614ca68284614c89565b50601401919050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c016000614ce182846134d5565b50602001919050565b600082614cf957614cf961421d565b500690565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526017016000614d3082856147f3565b7001034b99036b4b9b9b4b733903937b6329607d1b8152601101915061289e82846147f3565b600061275b82846147f3565b601881526000602082017f45434453413a20696e76616c6964207369676e6174757265000000000000000081529150613fe1565b6020808252810161079981614d62565b601f81526000602082017f45434453413a20696e76616c6964207369676e6174757265206c656e6774680081529150613fe1565b6020808252810161079981614da6565b602281526000602082017f45434453413a20696e76616c6964207369676e6174757265202773272076616c815261756560f01b60208201529150613fa3565b6020808252810161079981614dea565b602281526000602082017f45434453413a20696e76616c6964207369676e6174757265202776272076616c815261756560f01b60208201529150613fa3565b6020808252810161079981614e39565b6000816001600160ff1b0303831360008312151615614ea957614ea9613f2b565b81600160ff1b03831260008312161561409e5761409e613f2b565b6000826001600160ff1b030482116000841360008413161615614ee957614ee9613f2b565b81600160ff1b0583126000841260008413161615614f0957614f09613f2b565b82600160ff1b0582126000841360008412161615614f2957614f29613f2b565b826001600160ff1b03058212600084126000841216161561421857614218613f2b565b600082614f5b57614f5b61421d565b600160ff1b821460001984141615614f7557614f75613f2b565b500590565b600082600160ff1b01821260008412151615614f9857614f98613f2b565b826001600160ff1b0301821360008412161561433a5761433a613f2b565b600081614fc557614fc5613f2b565b506000190190565b60208082527f537472696e67733a20686578206c656e67746820696e73756666696369656e7491019081526000613fe1565b6020808252810161079981614fcd565b6001600160e01b031981166134c1565b60e0810161502d828a613644565b61503a60208301896134d5565b61504760408301886134d5565b615054606083018761500f565b61506160808301866134d5565b61506e60a08301856134d5565b81810360c08301526150808184614847565b9998505050505050505050565b60ff81166134c1565b608081016150a482876134d5565b6150b1602083018661508d565b6150be60408301856134d5565b6150cb60608301846134d5565b95945050505050565b6134c1614c95826149fa565b60006150ec82856150d4565b6014820191506150fc82846134d5565b5060200192915050565b606081016151148286613644565b61512160208301856134d5565b81810360408301526150cb8184614847565b602381526000602082017f756e61626c6520746f207472616e73666572416e6443616c6c20746f206f7261815262636c6560e81b60208201529150613fa3565b6020808252810161079981615133565b80825b6001851115612f21578086048111156151a1576151a1613f2b565b60018516156151af57908102905b80026151bb8560011c90565b9450615186565b6000826151d15750600161275b565b816151de5750600061275b565b81600181146151f457600281146151fe5761522b565b600191505061275b565b60ff84111561520f5761520f613f2b565b8360020a91508482111561522557615225613f2b565b5061275b565b5060208310610133831016604e8410600b841016171561525e575081810a8381111561525957615259613f2b565b61275b565b61526b8484846001615183565b9250905081840481111561528157615281613f2b565b0292915050565b600061275b60001984846151c256feda6fac9f81a22bb02ed26455dcee2a5f2434c8a3377a2cc986478052c1594f9ea2646970667358221220e7bc310a5e73de83060cc104bd8c946c50ce6955bfca63555a14f63c8266683c64736f6c634300080f0033da6fac9f81a22bb02ed26455dcee2a5f2434c8a3377a2cc986478052c1594f9e00000000000000000000000061f874551c69f0e40c9f55219107b408c989adec00000000000000000000000061f874551c69f0e40c9f55219107b408c989adec000000000000000000000000f07468ead8cf26c752c676e43c814fee9c8cf402000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca000000000000000000000000c780c666f17f661851ee11a8730b36d0b25219f9000000000000000000000000b39185e33e8c28e0bb3dbbce24da5dea6379ae91000000000000000000000000d3e31f8aac930e354283ca3efda1e22525f98af100000000000000000000000057dfcd90336d2f71aaa06f6d29292743e3a5007600000000000000000000000000000000000000000000000022b1c8c1227a0000353132363638316538666463346662663832336138316363613563313862343100000000000000000000000000000000000000000000000000000000000000960000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000005a0000000000000000000000000000000000000000000000000000000000000001