14 txs
37 calls
constructor
constructor(address _tokiemonItems, address _degeniaSkills, address _tokiemonNFT, address _manaSystem)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
degeniaSkills
viewfunction degeniaSkills() view returns (address)
delayLevelThreshold
viewfunction delayLevelThreshold() view returns (uint256)
disassemblyConfigs
viewfunction disassemblyConfigs(uint256) view returns (tuple randomDrop, tuple specialDrop)
freeCraftingKitId
viewfunction freeCraftingKitId() view returns (uint256)
getDisassemblyConfig
viewfunction getDisassemblyConfig(uint256 itemId) view returns (tuple)
getPendingCraft
viewfunction getPendingCraft(address user) view returns (tuple, bool)
getRecipe
viewfunction getRecipe(uint256 outputId) view returns (tuple)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSacrificeConfig
viewfunction getSacrificeConfig(uint256 tier, uint8 rarity) view returns (uint256[] outputIds, uint256[] outputAmounts, uint256 keyAmount)
hasClaimedFreeCraftingKit
viewfunction hasClaimedFreeCraftingKit(address) view returns (bool)
hasClaimedInitialXp
viewfunction hasClaimedInitialXp(address) view returns (bool)
hasPendingCraft
viewfunction hasPendingCraft(address) view returns (bool)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
initialXpAmount
viewfunction initialXpAmount() view returns (uint256)
initialXpItemIds
viewfunction initialXpItemIds(uint256) view returns (uint256)
isFreeCraftingKitEnabled
viewfunction isFreeCraftingKitEnabled() view returns (bool)
isInitialXpEnabled
viewfunction isInitialXpEnabled() view returns (bool)
manaSystem
viewfunction manaSystem() view returns (address)
maxCraftAmount
viewfunction maxCraftAmount() view returns (uint256)
maxDisassembleAmount
viewfunction maxDisassembleAmount() view returns (uint256)
pendingCrafts
viewfunction pendingCrafts(address) view returns (uint256 outputId, uint256 amount, uint256 endTime)
previewBulkSacrificeOutcome
viewfunction previewBulkSacrificeOutcome(uint256[] tokenIds) view returns (tuple[] previews)
previewSacrificeOutcome
viewfunction previewSacrificeOutcome(uint256 tokenId) view returns (uint256[] outputIds, uint256[] outputAmounts, uint256 keyAmount, uint256 manaRefund)
recipes
viewfunction recipes(uint256) view returns (uint256 earnedXpAmount, uint256 requiredSkillLevel, uint256 delay)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokiemonItems
viewfunction tokiemonItems() view returns (address)
tokiemonNFT
viewfunction tokiemonNFT() view returns (address)
addDisassemblyConfig
nonpayablefunction addDisassemblyConfig(uint256 itemId, uint256[] guaranteedIds, uint256[] guaranteedAmounts, uint256 randomId, uint256 minAmount, uint256 maxAmount, uint256 specialId, uint256 probability)
addRecipe
nonpayablefunction addRecipe(uint256 outputId, uint256[] inputIds, uint256[] inputAmounts, uint256 earnedXpAmount, uint256 requiredSkillLevel, uint256 delay)
bulkAddDisassemblyConfigs
nonpayablefunction bulkAddDisassemblyConfigs(tuple input)
bulkAddRecipes
nonpayablefunction bulkAddRecipes(tuple input)
bulkClaimFreeCraftingKit
nonpayablefunction bulkClaimFreeCraftingKit(address[] accounts)
bulkClaimInitialXp
nonpayablefunction bulkClaimInitialXp(address[] accounts)
bulkRemoveDisassemblyConfigs
nonpayablefunction bulkRemoveDisassemblyConfigs(uint256[] itemIds)
bulkRemoveRecipes
nonpayablefunction bulkRemoveRecipes(uint256[] outputIds)
bulkSacrificeTokiemon
nonpayablefunction bulkSacrificeTokiemon(uint256[] tokenIds)
bulkSetSacrificeConfigs
nonpayablefunction bulkSetSacrificeConfigs(uint256[] tiers, uint8[] rarities, uint256[][] outputIds, uint256[][] outputAmounts, uint256[] keyAmounts)
claimFreeCraftingKit
nonpayablefunction claimFreeCraftingKit()
claimInitialXp
nonpayablefunction claimInitialXp()
completeCraft
nonpayablefunction completeCraft()
craftItems
nonpayablefunction craftItems(uint256 outputId, uint256 amount)
disassembleItems
nonpayablefunction disassembleItems(uint256[] itemIds, uint256[] amounts)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
removeDisassemblyConfig
nonpayablefunction removeDisassemblyConfig(uint256 itemId)
removeRecipe
nonpayablefunction removeRecipe(uint256 outputId)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setDelayLevelThreshold
nonpayablefunction setDelayLevelThreshold(uint256 newThreshold)
setFreeCraftingKitEnabled
nonpayablefunction setFreeCraftingKitEnabled(bool enabled)
setFreeCraftingKitId
nonpayablefunction setFreeCraftingKitId(uint256 _freeCraftingKitId)
setInitialXpConfig
nonpayablefunction setInitialXpConfig(uint256[] itemIds, uint256 xpAmount)
setInitialXpEnabled
nonpayablefunction setInitialXpEnabled(bool enabled)
setMaxCraftAmount
nonpayablefunction setMaxCraftAmount(uint256 newAmount)
setMaxDisassembleAmount
nonpayablefunction setMaxDisassembleAmount(uint256 newAmount)
setSacrificeConfig
nonpayablefunction setSacrificeConfig(uint256 tier, uint8 rarity, uint256[] outputIds, uint256[] outputAmounts, uint256 keyAmount)
events
BulkFreeCraftingKitClaimed
event BulkFreeCraftingKitClaimed(address[] accounts)
BulkTokiemonSacrificed
event BulkTokiemonSacrificed(uint256[] tokenIds, uint256[] outputIds, uint256[] outputAmounts, uint256 totalManaRefund)
CraftCompleted
event CraftCompleted(address indexed account, uint256 indexed outputId, uint256 amount)
CraftStarted
event CraftStarted(address indexed account, uint256 indexed outputId, uint256 amount, uint256 endTime)
DisassemblyConfigAdded
event DisassemblyConfigAdded(uint256 indexed itemId)
DisassemblyConfigRemoved
event DisassemblyConfigRemoved(uint256 indexed itemId)
FreeCraftingKitClaimed
event FreeCraftingKitClaimed(address indexed account)
InitialXpClaimed
event InitialXpClaimed(address indexed account)
InitialXpConfigUpdated
event InitialXpConfigUpdated(uint256[] itemIds, uint256[] amounts)
ItemCrafted
event ItemCrafted(address indexed account, uint256 indexed outputId, uint256 outputAmount)
ItemsDisassembled
event ItemsDisassembled(address indexed account, uint256[] inputIds, uint256[] inputAmounts, uint256[] outputIds, uint256[] amounts)
RecipeAdded
event RecipeAdded(uint256 indexed outputId)
RecipeRemoved
event RecipeRemoved(uint256 indexed outputId)
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)
TokiemonSacrificed
event TokiemonSacrificed(uint256 indexed tokenId, uint256 purchaseTier, uint8 rarity, uint256[] outputIds, uint256[] outputAmounts, uint256 keyAmount, uint256 manaRefund)
UnifiedCraftCompleted
event UnifiedCraftCompleted(address indexed account, uint256 indexed outputId, uint256 amount, uint256 xpGained)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
creation bytecode
0x6101206040526102b76101009081526200001e9060029060016200015f565b50606460035560fa600455610133600555610320600655601e6007556008805461ffff191690553480156200005257600080fd5b5060405162006245380380620062458339810160408190526200007591620001e9565b600180556001600160a01b0380851660805283811660a05282811660e052811660c052620000a5600033620000b0565b505050505062000246565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1662000155576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556200010c3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000159565b5060005b92915050565b828054828255906000526020600020908101928215620001a3579160200282015b82811115620001a3578251829061ffff1690559160200191906001019062000180565b50620001b1929150620001b5565b5090565b5b80821115620001b15760008155600101620001b6565b80516001600160a01b0381168114620001e457600080fd5b919050565b600080600080608085870312156200020057600080fd5b6200020b85620001cc565b93506200021b60208601620001cc565b92506200022b60408601620001cc565b91506200023b60608601620001cc565b905092959194509250565b60805160a05160c05160e051615f166200032f600039600081816104a401528181611617015281816117190152818161195a01528181611b9d015281816122560152818161231a015281816124e00152818161297501528181612a720152612c6d0152600081816107cc0152611de501526000818161042f0152818161210401528181613a1b01528181614105015281816141e50152614dea01526000818161084001528181611d570152818161205901528181612faa015281816135ef0152818161393f01528181614347015281816145a501528181614cad0152614d180152615f166000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c80635d9e4942116101d3578063a8e138e911610104578063d50588e3116100a2578063e05ca6061161007c578063e05ca606146108c5578063f5c44dc7146108e8578063f8d12a41146108fb578063fd4efaa31461091b57600080fd5b8063d50588e31461087e578063d547741f146108a0578063dfb5c768146108b357600080fd5b8063b9fdfebe116100de578063b9fdfebe146107ff578063bdf46b281461083b578063c18f225714610862578063c53dbd011461087557600080fd5b8063a8e138e9146107c7578063afb00a5f146107ee578063b0b43539146107f657600080fd5b80638b1a90bc1161017157806395cd99a51161014b57806395cd99a5146107865780639afd3c6714610799578063a217fddf146107ac578063a550ac7d146107b457600080fd5b80638b1a90bc1461074d5780638bef81271461076057806391d148541461077357600080fd5b8063788c0fec116101ad578063788c0fec146106ff5780637e8683351461071f5780638314b4e31461073257806386d2d8d91461074557600080fd5b80635d9e4942146106b657806361b68df3146106c95780636dfabab3146106dc57600080fd5b8063371f9a76116102ad578063467730f11161024b57806355aa4c291161022557806355aa4c291461067257806359a463891461067a5780635c8053b51461069a5780635d4df968146106ad57600080fd5b8063467730f1146106395780634bcd27011461064c57806351e947261461065f57600080fd5b80633b508352116102875780633b508352146105875780633ccc2cd7146105d1578063426ba381146105f4578063443c227c1461060757600080fd5b8063371f9a76146104ec57806338550d5d1461050f5780633aa7c7211461057e57600080fd5b80632035cab21161031a5780632f2ff15d116102f45780632f2ff15d1461048c578063334a104c1461049f57806336568abe146104c657806336f5dc6c146104d957600080fd5b80632035cab21461041757806323e21f9b1461042a578063248a9ca31461046957600080fd5b806309f976191161035657806309f97619146103cd5780630b291ecd146103e057806311b459a5146103f75780631a419dea1461040457600080fd5b806301ffc9a71461037d5780630429eb94146103a5578063045e15c4146103ba575b600080fd5b61039061038b36600461501a565b61092e565b60405190151581526020015b60405180910390f35b6103b86103b336600461504b565b610965565b005b6103b86103c83660046150d0565b610b2f565b6103b86103db366004615111565b610c44565b6103e960065481565b60405190815260200161039c565b6008546103909060ff1681565b6103b861041236600461512a565b610c55565b6103b8610425366004615227565b610fc2565b6104517f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161039c565b6103e9610477366004615111565b60009081526020819052604090206001015490565b6103b861049a3660046152d0565b61116e565b6104517f000000000000000000000000000000000000000000000000000000000000000081565b6103b86104d43660046152d0565b611193565b6103b86104e7366004615111565b6111cb565b6103906104fa366004615300565b600d6020526000908152604090205460ff1681565b61057061051d366004615111565b600a60209081526000918252604091829020825160608101845260018201548152600282015481840152600382015481850152835180850190945260048201548452600590910154918301919091529082565b60405161039c92919061531d565b6103e960045481565b6105b6610595366004615300565b600b6020526000908152604090208054600182015460029092015490919083565b6040805193845260208401929092529082015260600161039c565b6103906105df366004615300565b600c6020526000908152604090205460ff1681565b6103b8610602366004615111565b6111fc565b6105b6610615366004615111565b60096020526000908152604090206002810154600382015460049092015490919083565b6103b861064736600461534d565b61129e565b6103b861065a3660046150d0565b611513565b6103b861066d3660046153dd565b611e9d565b6103b8611ebc565b61068d6106883660046150d0565b6121a1565b60405161039c919061543b565b6103b86106a83660046154e2565b612618565b6103e960035481565b6103b86106c4366004615111565b61287f565b6103b86106d73660046150d0565b6128b0565b6106ef6106ea366004615111565b612962565b60405161039c9493929190615584565b61071261070d366004615111565b612d5b565b60405161039c91906155bd565b6103b861072d366004615662565b612e35565b6103b8610740366004615111565b6136b7565b6103b8613759565b6103b861075b366004615111565b613b09565b6103b861076e3660046153dd565b613b5b565b6103906107813660046152d0565b613b81565b6103b86107943660046150d0565b613baa565b6103b86107a73660046156cd565b613cbf565b6103e9600081565b6103b86107c2366004615708565b613efa565b6104517f000000000000000000000000000000000000000000000000000000000000000081565b6103b8614475565b6103e960055481565b61081261080d366004615300565b61466b565b60408051835181526020808501519082015292810151908301521515606082015260800161039c565b6104517f000000000000000000000000000000000000000000000000000000000000000081565b6103b861087036600461572a565b6146de565b6103e960075481565b61089161088c366004615775565b614792565b60405161039c9392919061579a565b6103b86108ae3660046152d0565b61489a565b60085461039090610100900460ff1681565b6103906108d3366004615300565b600e6020526000908152604090205460ff1681565b6103e96108f6366004615111565b6148bf565b61090e610909366004615111565b6148e0565b60405161039c91906157d0565b6103b86109293660046150d0565b6149f8565b60006001600160e01b03198216637965db0b60e01b148061095f57506301ffc9a760e01b6001600160e01b03198316145b92915050565b600061097081614a6b565b600061097c8380615834565b915061098d90506020840184615834565b9050811480156109aa57506109a56040840184615834565b905081145b80156109c357506109be6060840184615834565b905081145b80156109dc57506109d76080840184615834565b905081145b80156109f557506109f060a0840184615834565b905081145b610a1a5760405162461bcd60e51b8152600401610a119061587d565b60405180910390fd5b60005b81811015610b2957610b21610a328580615834565b83818110610a4257610a426158ac565b90506020020135858060200190610a599190615834565b84818110610a6957610a696158ac565b9050602002810190610a7b9190615834565b610a886040890189615834565b86818110610a9857610a986158ac565b9050602002810190610aaa9190615834565b610ab760608b018b615834565b88818110610ac757610ac76158ac565b905060200201358a8060800190610ade9190615834565b89818110610aee57610aee6158ac565b905060200201358b8060a00190610b059190615834565b8a818110610b1557610b156158ac565b9050602002013561129e565b600101610a1d565b50505050565b6000610b3a81614a6b565b60005b82811015610b2957600060096000868685818110610b5d57610b5d6158ac565b9050602002013581526020019081526020016000206000018054905011610b965760405162461bcd60e51b8152600401610a11906158c2565b60096000858584818110610bac57610bac6158ac565b90506020020135815260200190815260200160002060008082016000610bd29190614f03565b610be0600183016000614f03565b5060006002820181905560038201819055600490910155838382818110610c0957610c096158ac565b905060200201357fa0d5c6d628345f5e1a4bf244cc6151e0b32de2afdae8813045b29151135612cc60405160405180910390a2600101610b3d565b6000610c4f81614a6b565b50600755565b6000610c6081614a6b565b898881148015610c6f57508087145b8015610c7a57508085145b8015610c8557508083145b610ca15760405162461bcd60e51b8152600401610a119061587d565b60005b81811015610fb357868682818110610cbe57610cbe6158ac565b9050602002810190610cd09190615834565b9050898983818110610ce457610ce46158ac565b9050602002810190610cf69190615834565b905014610d365760405162461bcd60e51b815260206004820152600e60248201526d496e76616c696420636f6e66696760901b6044820152606401610a11565b6000898983818110610d4a57610d4a6158ac565b9050602002810190610d5c9190615834565b905011610d7b5760405162461bcd60e51b8152600401610a11906158f1565b60038d8d83818110610d8f57610d8f6158ac565b9050602002013511610da2576001610dbf565b848482818110610db457610db46158ac565b905060200201356000145b610e0b5760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206b657920616d6f756e7420666f72207469657200000000006044820152606401610a11565b60405180606001604052808a8a84818110610e2857610e286158ac565b9050602002810190610e3a9190615834565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250602001888884818110610e8357610e836158ac565b9050602002810190610e959190615834565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250602001868684818110610ede57610ede6158ac565b90506020020135815250600f60008f8f85818110610efe57610efe6158ac565b90506020020135815260200190815260200160002060008d8d85818110610f2757610f276158ac565b9050602002016020810190610f3c9190615917565b6004811115610f4d57610f4d615934565b6004811115610f5e57610f5e615934565b8152602080820192909252604001600020825180519192610f8492849290910190614f21565b506020828101518051610f9d9260018501920190614f21565b5060409190910151600290910155600101610ca4565b50505050505050505050505050565b6000610fcd81614a6b565b848314610fec5760405162461bcd60e51b8152600401610a119061587d565b846110095760405162461bcd60e51b8152600401610a11906158f1565b6003881161101857600161101b565b81155b6110675760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206b657920616d6f756e7420666f72207469657200000000006044820152606401610a11565b60405180606001604052808787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505050908252506040805160208781028281018201909352878252928301929091889188918291850190849080828437600092018290525093855250505060209182018590528a8152600f909152604081209089600481111561110657611106615934565b600481111561111757611117615934565b815260208082019290925260400160002082518051919261113d92849290910190614f21565b5060208281015180516111569260018501920190614f21565b50604082015181600201559050505050505050505050565b60008281526020819052604090206001015461118981614a6b565b610b298383614a78565b6001600160a01b03811633146111bc5760405163334bd91960e11b815260040160405180910390fd5b6111c68282614b0a565b505050565b60006111d681614a6b565b600082116111f65760405162461bcd60e51b8152600401610a119061594a565b50600355565b600061120781614a6b565b6000828152600a60205260409020546112325760405162461bcd60e51b8152600401610a1190615972565b6000828152600a602052604081209061124b8282614f6c565b50600060018201819055600282018190556003820181905560048201819055600590910181905560405183917fd06afb2d8931aca23a94e550272d6a33e498345be8a59cc12fe0e9c2a7f4c21b91a25050565b60006112a981614a6b565b8685146112f85760405162461bcd60e51b815260206004820152601c60248201527f496e70757420617272617973206c656e677468206d69736d61746368000000006044820152606401610a11565b8661133a5760405162461bcd60e51b8152602060048201526012602482015271456d70747920696e7075742061727261797360701b6044820152606401610a11565b6000898152600960205260409020541561138e5760405162461bcd60e51b815260206004820152601560248201527452656369706520616c72656164792065786973747360581b6044820152606401610a11565b82156113f557600084116113f55760405162461bcd60e51b815260206004820152602860248201527f585020616d6f756e7420726571756972656420666f72206c6576656c207265716044820152671d5a5c995b595b9d60c21b6064820152608401610a11565b6040518060a0016040528089898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050509082525060408051602089810282810182019093528982529283019290918a918a91829185019084908082843760009201829052509385525050506020808301889052604080840188905260609093018690528c8252600981529190208251805191926114a492849290910190614f21565b5060208281015180516114bd9260018501920190614f21565b506040828101516002830155606083015160038301556080909201516004909101555189907fa500df86140b8784590aa5e621287dc1f0cd8612579e77c28ed803d280bb19a990600090a2505050505050505050565b61151b614b75565b806115565760405162461bcd60e51b815260206004820152600b60248201526a456d70747920617272617960a81b6044820152606401610a11565b60198111156115995760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e7920746f6b656e7360881b6044820152606401610a11565b604080516127108082526204e2208201909252600091602082016204e200803683375050604080516127108082526204e22082019092529293506000929150602082016204e2008036833701905050905060008060005b85811015611c1357600087878381811061160c5761160c6158ac565b9050602002013590507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e826040518263ffffffff1660e01b815260040161166391815260200190565b602060405180830381865afa158015611680573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a491906159b7565b6001600160a01b0316336001600160a01b0316146116f65760405162461bcd60e51b815260206004820152600f60248201526e2737ba103a37b5b2b71037bbb732b960891b6044820152606401610a11565b604051632e2349af60e11b81526004810182905260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c46935e90602401600060405180830381865afa158015611760573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117889190810190615a88565b6000828152600f6020526040812092965090945092509050818360048111156117b3576117b3615934565b60048111156117c4576117c4615934565b81526020019081526020016000206040518060600160405290816000820180548060200260200160405190810160405280929190818152602001828054801561182c57602002820191906000526020600020905b815481526020019060010190808311611818575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561188457602002820191906000526020600020905b815481526020019060010190808311611870575b5050505050815260200160028201548152505090506000816000015151116118e45760405162461bcd60e51b81526020600482015260136024820152724e6f2073616372696669636520636f6e66696760681b6044820152606401610a11565b6020810151518151511461192b5760405162461bcd60e51b815260206004820152600e60248201526d496e76616c696420636f6e66696760901b6044820152606401610a11565b60008060005b60038110156119fc57604051632c170c9d60e21b815260048101889052602481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b05c327490604401608060405180830381865afa1580156119a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cd9190615b20565b80519091506119df9060ff1685615bb6565b93508060600151836119f19190615bb6565b925050600101611931565b5060038511611a9f576000611a12600684615bdf565b8460400151611a219190615bb6565b90508a8681518110611a3557611a356158ac565b6020026020010151611a735760018b8781518110611a5557611a556158ac565b9115156020928302919091019091015289611a6f81615bf3565b9a50505b808c8781518110611a8657611a866158ac565b60200260200101818151611a9a9190615bb6565b905250505b60005b835151811015611b6e57600084600001518281518110611ac457611ac46158ac565b602002602001015190508b8181518110611ae057611ae06158ac565b6020026020010151611b1e5760018c8281518110611b0057611b006158ac565b911515602092830291909101909101528a611b1a81615bf3565b9b50505b84602001518281518110611b3457611b346158ac565b60200260200101518d8281518110611b4e57611b4e6158ac565b60200260200101818151611b629190615bb6565b90525050600101611aa2565b50611b7a600382615bdf565b611b849089615bb6565b604051630852cd8d60e31b8152600481018890529098507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015611be957600080fd5b505af1158015611bfd573d6000803e3d6000fd5b5050600190980197506115f09650505050505050565b506000826001600160401b03811115611c2e57611c2e6159a1565b604051908082528060200260200182016040528015611c57578160200160208202803683370190505b5090506000836001600160401b03811115611c7457611c746159a1565b604051908082528060200260200182016040528015611c9d578160200160208202803683370190505b5090506000805b612710811015611d3957868181518110611cc057611cc06158ac565b602002602001015115611d315780848381518110611ce057611ce06158ac565b602002602001018181525050878181518110611cfe57611cfe6158ac565b6020026020010151838381518110611d1857611d186158ac565b602090810291909101015281611d2d81615bf3565b9250505b600101611ca4565b508415611dc357604051630fbfeffd60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631f7fdffa90611d9090339087908790600401615c0c565b600060405180830381600087803b158015611daa57600080fd5b505af1158015611dbe573d6000803e3d6000fd5b505050505b8315611e4a57604051632884a08960e11b8152336004820152602481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635109411290604401600060405180830381600087803b158015611e3157600080fd5b505af1158015611e45573d6000803e3d6000fd5b505050505b7fb98d7da709ba4c7514b0b57c63387eca7ad6bf9062be44e1853e8b3e2b684a808989858588604051611e81959493929190615c90565b60405180910390a150505050505050611e9960018055565b5050565b6000611ea881614a6b565b506008805460ff1916911515919091179055565b611ec4614b75565b60085460ff16611f165760405162461bcd60e51b815260206004820152601c60248201527f496e697469616c20585020636c61696d696e672064697361626c6564000000006044820152606401610a11565b336000908152600e602052604090205460ff1615611f765760405162461bcd60e51b815260206004820152601a60248201527f416c726561647920636c61696d656420696e697469616c2058500000000000006044820152606401610a11565b600254611fc55760405162461bcd60e51b815260206004820152601960248201527f496e697469616c205850206e6f7420636f6e66696775726564000000000000006044820152606401610a11565b6002546000906001600160401b03811115611fe257611fe26159a1565b60405190808252806020026020018201604052801561200b578160200160208202803683370190505b50905060005b815181101561204157600182828151811061202e5761202e6158ac565b6020908102919091010152600101612011565b50604051633092687960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636124d0f2906120939033906002908690600401615cdd565b600060405180830381600087803b1580156120ad57600080fd5b505af11580156120c1573d6000803e3d6000fd5b5050336000818152600e6020526040808220805460ff1916600117905560065490516330e327ef60e21b81526004810193909352602483019190915260448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063c38c9fbc9150606401600060405180830381600087803b15801561215257600080fd5b505af1158015612166573d6000803e3d6000fd5b50506040513392507f57a1b1e5dd6e6a81a0186fbae705bb1160429b6cc432f3d11157d5a1b11339dd9150600090a25061219f60018055565b565b6060816001600160401b038111156121bb576121bb6159a1565b60405190808252806020026020018201604052801561221e57816020015b61220b6040518060a0016040528060008152602001606081526020016060815260200160008152602001600081525090565b8152602001906001900390816121d95790505b50905060005b82811015612611576000848483818110612240576122406158ac565b90506020020135905060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e836040518263ffffffff1660e01b81526004016122a291815260200190565b602060405180830381865afa1580156122bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e391906159b7565b6001600160a01b0316036122f75750612609565b604051632e2349af60e11b81526004810182905260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c46935e90602401600060405180830381865afa158015612361573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123899190810190615a88565b6000828152600f6020526040812092965090945092509050818360048111156123b4576123b4615934565b60048111156123c5576123c5615934565b81526020019081526020016000206040518060600160405290816000820180548060200260200160405190810160405280929190818152602001828054801561242d57602002820191906000526020600020905b815481526020019060010190808311612419575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561248557602002820191906000526020600020905b815481526020019060010190808311612471575b5050505050815260200160028201548152505090508060000151516000036124b05750505050612609565b6000808060005b600381101561258257604051632c170c9d60e21b815260048101899052602481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b05c327490604401608060405180830381865afa15801561252f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125539190615b20565b80519091506125659060ff1685615bb6565b93508060600151836125779190615bb6565b9250506001016124b7565b50600386116125a857612596600683615bdf565b84604001516125a59190615bb6565b92505b6125b3600382615bdf565b90506040518060a001604052808881526020018560000151815260200185602001518152602001848152602001828152508989815181106125f6576125f66158ac565b6020026020010181905250505050505050505b600101612224565b5092915050565b600061262381614a6b565b88871461267c5760405162461bcd60e51b815260206004820152602160248201527f47756172616e7465656420617272617973206c656e677468206d69736d6174636044820152600d60fb1b6064820152608401610a11565b838511156126c35760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420616d6f756e742072616e676560601b6044820152606401610a11565b6127108211156127155760405162461bcd60e51b815260206004820152601c60248201527f50726f626162696c697479206d757374206265203c3d203130303030000000006044820152606401610a11565b60008b8152600a6020526040902054156127695760405162461bcd60e51b8152602060048201526015602482015274436f6e66696720616c72656164792065786973747360581b6044820152606401610a11565b60008b8152600a60205260408120905b8a8110156127fb578160000160405180604001604052808e8e858181106127a2576127a26158ac565b9050602002013581526020018c8c858181106127c0576127c06158ac565b602090810292909201359092528354600181810186556000958652948290208451600290920201908155920151918301919091555001612779565b5060408051606081018252888152602080820189905290820187905260018301899055600283018890556003830187905581518083018352868152018490526004820185905560058201849055518c907fb48dced4bc5965c11abf7827c5a11e608fd482835fdf4076dbbd57aee942762590600090a2505050505050505050505050565b600061288a81614a6b565b600082116128aa5760405162461bcd60e51b8152600401610a119061594a565b50600455565b60006128bb81614a6b565b60005b82811015612923576001600d60008686858181106128de576128de6158ac565b90506020020160208101906128f39190615300565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016128be565b507f4b9577eb92e226c06908022a89ef41aad1cc5f6b3ee71f84423488d991ba0c6f8383604051612955929190615d4b565b60405180910390a1505050565b60608060008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e876040518263ffffffff1660e01b81526004016129c191815260200190565b602060405180830381865afa1580156129de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0291906159b7565b6001600160a01b031603612a4f5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606401610a11565b604051632e2349af60e11b81526004810186905260009081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635c46935e90602401600060405180830381865afa158015612ab9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612ae19190810190615a88565b6000828152600f602052604081209296509094509250905081836004811115612b0c57612b0c615934565b6004811115612b1d57612b1d615934565b815260200190815260200160002060405180606001604052908160008201805480602002602001604051908101604052809291908181526020018280548015612b8557602002820191906000526020600020905b815481526020019060010190808311612b71575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612bdd57602002820191906000526020600020905b815481526020019060010190808311612bc9575b505050505081526020016002820154815250509050600081600001515111612c3d5760405162461bcd60e51b81526020600482015260136024820152724e6f2073616372696669636520636f6e66696760681b6044820152606401610a11565b6000945084805b6003811015612d0f57604051632c170c9d60e21b8152600481018b9052602481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b05c327490604401608060405180830381865afa158015612cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce09190615b20565b8051909150612cf29060ff1684615bb6565b9250806060015187612d049190615bb6565b965050600101612c44565b5060038411612d3557612d23600682615bdf565b8260400151612d329190615bb6565b95505b612d40600386615bdf565b94508160000151826020015197509750505050509193509193565b612d63614f8d565b6000828152600a602090815260408083208151815460809481028201850190935260608101838152909491938593919285929185015b82821015612ddf57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190612d99565b505050908252506040805160608101825260018401548152600284015460208281019190915260038501548284015280840191909152815180830183526004850154815260059094015490840152015292915050565b612e3d614b75565b82818114612e5d5760405162461bcd60e51b8152600401610a119061587d565b60008111612e7d5760405162461bcd60e51b8152600401610a11906158f1565b6000805b82811015612f40576000600a6000898985818110612ea157612ea16158ac565b9050602002013581526020019081526020016000206000018054905011612eda5760405162461bcd60e51b8152600401610a1190615972565b6000858583818110612eee57612eee6158ac565b9050602002013511612f125760405162461bcd60e51b8152600401610a119061594a565b848482818110612f2457612f246158ac565b9050602002013582612f369190615bb6565b9150600101612e81565b50600454811115612f935760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d617820646973617373656d626c6520616d6f756e7400006044820152606401610a11565b604051633092687960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636124d0f290612fe79033908a908a908a908a90600401615d99565b600060405180830381600087803b15801561300157600080fd5b505af1158015613015573d6000803e3d6000fd5b506000925061271091506130269050565b60405190808252806020026020018201604052801561304f578160200160208202803683370190505b5060408051603280825261066082019092529192506000919060208201610640803683370190505090506000805b858110156131c3576000600a60008c8c8581811061309d5761309d6158ac565b905060200201358152602001908152602001600020905060008989848181106130c8576130c86158ac565b90506020020135905060005b82548110156131b55760008360000182815481106130f4576130f46158ac565b6000918252602080832060408051808201909152600290930201805483526001015490820181905290925061312a908590615dd1565b905088826000015181518110613142576131426158ac565b602002602001015160000361317d578151888861315e81615bf3565b995081518110613170576131706158ac565b6020026020010181815250505b8089836000015181518110613194576131946158ac565b602002602001018181516131a89190615bb6565b90525050506001016130d4565b50826001019250505061307d565b506040805142602082015244918101919091523360608201526000906080016040516020818303038152906040528051906020012060001c905060005b868110156134a9576000600a60008d8d85818110613220576132206158ac565b90506020020135815260200190815260200160002090506000816001016001015482600101600201546132539190615de8565b61325e906001615bb6565b905060005b8b8b85818110613275576132756158ac565b9050602002013581101561349b576000858f8f87818110613298576132986158ac565b9050602002013586846040516020016132ca949392919093845260208401929092526040830152606082015260800190565b60408051601f1981840301815291905280516020909101206001850154909150156133965760006132fb8483615dfb565b600286015461330a9190615bb6565b905089856001016000015481518110613325576133256158ac565b6020026020010151600003613363576001850154898961334481615bf3565b9a5081518110613356576133566158ac565b6020026020010181815250505b808a86600101600001548151811061337d5761337d6158ac565b602002602001018181516133919190615bb6565b905250505b600484015415613492576000816040516020016133d4918152604060208201819052600790820152661cdc1958da585b60ca1b606082015260800190565b60408051601f198184030181529190528051602090910120600586015490915061340061271083615dfb565b1015613490578985600401600001548151811061341f5761341f6158ac565b602002602001015160000361345d576004850154898961343e81615bf3565b9a5081518110613450576134506158ac565b6020026020010181815250505b60018a866004016000015481518110613478576134786158ac565b6020026020010181815161348c9190615bb6565b9052505b505b50600101613263565b508260010192505050613200565b506000826001600160401b038111156134c4576134c46159a1565b6040519080825280602002602001820160405280156134ed578160200160208202803683370190505b5090506000836001600160401b0381111561350a5761350a6159a1565b604051908082528060200260200182016040528015613533578160200160208202803683370190505b50905060005b848110156135d157858181518110613553576135536158ac565b602002602001015183828151811061356d5761356d6158ac565b6020026020010181815250508686828151811061358c5761358c6158ac565b6020026020010151815181106135a4576135a46158ac565b60200260200101518282815181106135be576135be6158ac565b6020908102919091010152600101613539565b50831561365b57604051630fbfeffd60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631f7fdffa9061362890339086908690600401615c0c565b600060405180830381600087803b15801561364257600080fd5b505af1158015613656573d6000803e3d6000fd5b505050505b336001600160a01b03167fd0ee1c19c26f080acf7172b21713ce9d5cdce0f738fda0a9d48acd34f687d7f28d8d8d8d878760405161369e96959493929190615e0f565b60405180910390a25050505050505050610b2960018055565b60006136c281614a6b565b6000828152600960205260409020546136ed5760405162461bcd60e51b8152600401610a11906158c2565b6000828152600960205260408120906137068282614f03565b613714600183016000614f03565b5060006002820181905560038201819055600490910181905560405183917fa0d5c6d628345f5e1a4bf244cc6151e0b32de2afdae8813045b29151135612cc91a25050565b613761614b75565b336000908152600c602052604090205460ff166137b35760405162461bcd60e51b815260206004820152601060248201526f139bc81c195b991a5b99c818dc98599d60821b6044820152606401610a11565b336000908152600b602090815260408083208151606081018352815480825260018301548286015260029092015481840152908452600983528184208251815460c09581028201860190945260a08101848152929594909391928492909184919084018282801561384357602002820191906000526020600020905b81548152602001906001019080831161382f575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561389b57602002820191906000526020600020905b815481526020019060010190808311613887575b5050505050815260200160028201548152602001600382015481526020016004820154815250509050816040015142101561390a5760405162461bcd60e51b815260206004820152600f60248201526e4372616674206e6f7420726561647960881b6044820152606401610a11565b336000818152600b6020908152604080832083815560018101849055600201839055600c9091529020805460ff1916905582517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691631f7fdffa9161397790614b9f565b6139848660200151614b9f565b6040518463ffffffff1660e01b81526004016139a293929190615c0c565b600060405180830381600087803b1580156139bc57600080fd5b505af11580156139d0573d6000803e3d6000fd5b50505060408201516000915015613a8057826020015182604001516139f59190615dd1565b6040516330e327ef60e21b815233600482015260006024820152604481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c38c9fbc90606401600060405180830381600087803b158015613a6757600080fd5b505af1158015613a7b573d6000803e3d6000fd5b505050505b825160208085015160405190815233917f8a378946be9b59034db4372bfaab2f9fe3e7153f247795097422c02dbbb932b1910160405180910390a382516020808501516040805191825291810184905233917ffdd086d64a6176f61bf89bdf7feb23dc2b7f5f552d1359411a1dd4d2b80cb679910160405180910390a350505061219f60018055565b6000613b1481614a6b565b81600003613b555760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a59081ada5d08125160921b6044820152606401610a11565b50600555565b6000613b6681614a6b565b50600880549115156101000261ff0019909216919091179055565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000613bb581614a6b565b60005b82811015610b29576000600a6000868685818110613bd857613bd86158ac565b9050602002013581526020019081526020016000206000018054905011613c115760405162461bcd60e51b8152600401610a1190615972565b600a6000858584818110613c2757613c276158ac565b90506020020135815260200190815260200160002060008082016000613c4d9190614f6c565b50600060018201819055600282018190556003820181905560048201819055600590910155838382818110613c8457613c846158ac565b905060200201357fd06afb2d8931aca23a94e550272d6a33e498345be8a59cc12fe0e9c2a7f4c21b60405160405180910390a2600101613bb8565b6000613cca81614a6b565b6000613cd68380615834565b9150613ce790506020840184615834565b905081148015613d045750613cff6040840184615834565b905081145b8015613d1d5750613d186060840184615834565b905081145b8015613d365750613d316080840184615834565b905081145b8015613d4f5750613d4a60a0840184615834565b905081145b8015613d685750613d6360c0840184615834565b905081145b8015613d815750613d7c60e0840184615834565b905081145b613d9d5760405162461bcd60e51b8152600401610a119061587d565b60005b81811015610b2957613ef2613db58580615834565b83818110613dc557613dc56158ac565b90506020020135858060200190613ddc9190615834565b84818110613dec57613dec6158ac565b9050602002810190613dfe9190615834565b613e0b6040890189615834565b86818110613e1b57613e1b6158ac565b9050602002810190613e2d9190615834565b613e3a60608b018b615834565b88818110613e4a57613e4a6158ac565b905060200201358a8060800190613e619190615834565b89818110613e7157613e716158ac565b905060200201358b8060a00190613e889190615834565b8a818110613e9857613e986158ac565b905060200201358c8060c00190613eaf9190615834565b8b818110613ebf57613ebf6158ac565b905060200201358d8060e00190613ed69190615834565b8c818110613ee657613ee66158ac565b90506020020135612618565b600101613da0565b613f02614b75565b60008281526009602090815260408083208151815460c09481028201850190935260a08101838152909391928492849190840182828015613f6257602002820191906000526020600020905b815481526020019060010190808311613f4e575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015613fba57602002820191906000526020600020905b815481526020019060010190808311613fa6575b50505050508152602001600282015481526020016003820154815260200160048201548152505090506000816000015151116140085760405162461bcd60e51b8152600401610a11906158c2565b600082116140285760405162461bcd60e51b8152600401610a119061594a565b60035482111561407a5760405162461bcd60e51b815260206004820152601860248201527f45786365656473206d617820637261667420616d6f756e7400000000000000006044820152606401610a11565b336000908152600c602052604090205460ff16156140da5760405162461bcd60e51b815260206004820152601b60248201527f416c72656164792068617320612070656e64696e6720637261667400000000006044820152606401610a11565b6060810151156141c65760608101516040516344098d2760e01b8152336004820152600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906344098d2790604401602060405180830381865afa158015614154573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141789190615e6b565b10156141c65760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e7420736b696c6c206c6576656c00000000000000006044820152606401610a11565b6040516344098d2760e01b8152336004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906344098d2790604401602060405180830381865afa158015614234573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142589190615e6b565b905081608001516000148061426f57506007548111155b156142845761427f828585614bea565b61446a565b60008260200151516001600160401b038111156142a3576142a36159a1565b6040519080825280602002602001820160405280156142cc578160200160208202803683370190505b50905060005b83602001515181101561432d5784846020015182815181106142f6576142f66158ac565b60200260200101516143089190615dd1565b82828151811061431a5761431a6158ac565b60209081029190910101526001016142d2565b508251604051633092687960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636124d0f29161437e9133918690600401615e84565b600060405180830381600087803b15801561439857600080fd5b505af11580156143ac573d6000803e3d6000fd5b5050505060405180606001604052808681526020018581526020018585608001516143d79190615dd1565b6143e19042615bb6565b9052336000818152600b602081815260408084208651815586830151600180830191909155968201516002909101908155600c835293819020805460ff19169096179095555254915187927f93ea69e6893daf407ca3682316f900f80d32712bb395358a9d2e24c8aa4831ed9161446091898252602082015260400190565b60405180910390a3505b5050611e9960018055565b61447d614b75565b600854610100900460ff166144d45760405162461bcd60e51b815260206004820152601a60248201527f46726565206b697420636c61696d696e672064697361626c65640000000000006044820152606401610a11565b336000908152600d602052604090205460ff16156145345760405162461bcd60e51b815260206004820152601860248201527f416c726561647920636c61696d65642066726565206b697400000000000000006044820152606401610a11565b6005546000036145865760405162461bcd60e51b815260206004820152601760248201527f46726565206b6974206e6f7420636f6e666967757265640000000000000000006044820152606401610a11565b336000818152600d60205260409020805460ff191660011790556005547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691631f7fdffa916145dd90614b9f565b6145e76001614b9f565b6040518463ffffffff1660e01b815260040161460593929190615c0c565b600060405180830381600087803b15801561461f57600080fd5b505af1158015614633573d6000803e3d6000fd5b50506040513392507fe5e672f15a60e6fdb99a561b3dbf405317e1f1f9bd07aff5fdf2dc7b932a0d609150600090a261219f60018055565b61468f60405180606001604052806000815260200160008152602001600081525090565b506001600160a01b03166000908152600b60209081526040808320600c83529281902054815160608101835284548152600185015493810193909352600290930154908201529160ff90911690565b60006146e981614a6b565b6146f560026000614f03565b60005b8381101561473e576002858583818110614714576147146158ac565b835460018082018655600095865260209586902092909502939093013592019190915550016146f8565b506006829055604080516000815260208101918290527faeb2fbaed71af40e314b314a6e45e1d01be3f45f102044c3241d48ab6bcafd7e91614784918791879190615eba565b60405180910390a150505050565b6000828152600f6020526040812060609182918190818660048111156147ba576147ba615934565b60048111156147cb576147cb615934565b81526020019081526020016000209050806000018160010182600201548280548060200260200160405190810160405280929190818152602001828054801561483357602002820191906000526020600020905b81548152602001906001019080831161481f575b505050505092508180548060200260200160405190810160405280929190818152602001828054801561488557602002820191906000526020600020905b815481526020019060010190808311614871575b50505050509150935093509350509250925092565b6000828152602081905260409020600101546148b581614a6b565b610b298383614b0a565b600281815481106148cf57600080fd5b600091825260209091200154905081565b6149126040518060a0016040528060608152602001606081526020016000815260200160008152602001600081525090565b6000828152600960209081526040918290208251815460c09381028201840190945260a08101848152909391928492849184018282801561497257602002820191906000526020600020905b81548152602001906001019080831161495e575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156149ca57602002820191906000526020600020905b8154815260200190600101908083116149b6575b5050505050815260200160028201548152602001600382015481526020016004820154815250509050919050565b6000614a0381614a6b565b60005b82811015610b29576001600e6000868685818110614a2657614a266158ac565b9050602002016020810190614a3b9190615300565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101614a06565b614a758133614eca565b50565b6000614a848383613b81565b614b02576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055614aba3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161095f565b50600061095f565b6000614b168383613b81565b15614b02576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161095f565b600260015403614b9857604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110614bd957614bd96158ac565b602090810291909101015292915050565b60008360200151516001600160401b03811115614c0957614c096159a1565b604051908082528060200260200182016040528015614c32578160200160208202803683370190505b50905060005b846020015151811015614c93578285602001518281518110614c5c57614c5c6158ac565b6020026020010151614c6e9190615dd1565b828281518110614c8057614c806158ac565b6020908102919091010152600101614c38565b508351604051633092687960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636124d0f291614ce49133918690600401615e84565b600060405180830381600087803b158015614cfe57600080fd5b505af1158015614d12573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631f7fdffa33614d4f86614b9f565b614d5886614b9f565b6040518463ffffffff1660e01b8152600401614d7693929190615c0c565b600060405180830381600087803b158015614d9057600080fd5b505af1158015614da4573d6000803e3d6000fd5b505050506000828560400151614dba9190615dd1565b604086015190915015614e4f576040516330e327ef60e21b815233600482015260006024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c38c9fbc90606401600060405180830381600087803b158015614e3657600080fd5b505af1158015614e4a573d6000803e3d6000fd5b505050505b604051838152849033907f84f6761ddb0e53992c21152e857c77b4caa1408c8c86aff8123aa093fd72e92e9060200160405180910390a36040805184815260208101839052859133917ffdd086d64a6176f61bf89bdf7feb23dc2b7f5f552d1359411a1dd4d2b80cb679910160405180910390a35050505050565b614ed48282613b81565b611e995760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610a11565b5080546000825590600052602060002090810190614a759190614fea565b828054828255906000526020600020908101928215614f5c579160200282015b82811115614f5c578251825591602001919060010190614f41565b50614f68929150614fea565b5090565b5080546000825560020290600052602060002090810190614a759190614fff565b604051806060016040528060608152602001614fc360405180606001604052806000815260200160008152602001600081525090565b8152602001614fe5604051806040016040528060008152602001600081525090565b905290565b5b80821115614f685760008155600101614feb565b5b80821115614f685760008082556001820155600201615000565b60006020828403121561502c57600080fd5b81356001600160e01b03198116811461504457600080fd5b9392505050565b60006020828403121561505d57600080fd5b81356001600160401b0381111561507357600080fd5b820160c0818503121561504457600080fd5b60008083601f84011261509757600080fd5b5081356001600160401b038111156150ae57600080fd5b6020830191508360208260051b85010111156150c957600080fd5b9250929050565b600080602083850312156150e357600080fd5b82356001600160401b038111156150f957600080fd5b61510585828601615085565b90969095509350505050565b60006020828403121561512357600080fd5b5035919050565b60008060008060008060008060008060a08b8d03121561514957600080fd5b8a356001600160401b038082111561516057600080fd5b61516c8e838f01615085565b909c509a5060208d013591508082111561518557600080fd5b6151918e838f01615085565b909a50985060408d01359150808211156151aa57600080fd5b6151b68e838f01615085565b909850965060608d01359150808211156151cf57600080fd5b6151db8e838f01615085565b909650945060808d01359150808211156151f457600080fd5b506152018d828e01615085565b915080935050809150509295989b9194979a5092959850565b60058110614a7557600080fd5b600080600080600080600060a0888a03121561524257600080fd5b8735965060208801356152548161521a565b955060408801356001600160401b038082111561527057600080fd5b61527c8b838c01615085565b909750955060608a013591508082111561529557600080fd5b506152a28a828b01615085565b989b979a50959894979596608090950135949350505050565b6001600160a01b0381168114614a7557600080fd5b600080604083850312156152e357600080fd5b8235915060208301356152f5816152bb565b809150509250929050565b60006020828403121561531257600080fd5b8135615044816152bb565b82518152602080840151818301526040808501519083015282516060830152820151608082015260a08101615044565b60008060008060008060008060c0898b03121561536957600080fd5b8835975060208901356001600160401b038082111561538757600080fd5b6153938c838d01615085565b909950975060408b01359150808211156153ac57600080fd5b506153b98b828c01615085565b999c989b5096999698976060880135976080810135975060a0013595509350505050565b6000602082840312156153ef57600080fd5b8135801515811461504457600080fd5b60008151808452602080850194506020840160005b8381101561543057815187529582019590820190600101615414565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156154d457603f19898403018552815160a08151855288820151818a870152615492828701826153ff565b91505087820151858203898701526154aa82826153ff565b60608481015190880152608093840151939096019290925250509386019390860190600101615464565b509098975050505050505050565b6000806000806000806000806000806101008b8d03121561550257600080fd5b8a35995060208b01356001600160401b038082111561552057600080fd5b61552c8e838f01615085565b909b50995060408d013591508082111561554557600080fd5b506155528d828e01615085565b9b9e9a9d50989b989a9960608a0135996080810135995060a0810135985060c0810135975060e0013595509350505050565b60808152600061559760808301876153ff565b82810360208401526155a981876153ff565b604084019590955250506060015292915050565b6020808252825160c083830152805160e084018190526000929182019083906101008601905b808310156156165761560082855180518252602090810151910152565b60408201915084840193506001830192506155e3565b506020870151935061563f60408701858051825260208082015190830152604090810151910152565b6040870151805160a0880152602081015160c088015293505b9695505050505050565b6000806000806040858703121561567857600080fd5b84356001600160401b038082111561568f57600080fd5b61569b88838901615085565b909650945060208701359150808211156156b457600080fd5b506156c187828801615085565b95989497509550505050565b6000602082840312156156df57600080fd5b81356001600160401b038111156156f557600080fd5b8201610100818503121561504457600080fd5b6000806040838503121561571b57600080fd5b50508035926020909101359150565b60008060006040848603121561573f57600080fd5b83356001600160401b0381111561575557600080fd5b61576186828701615085565b909790965060209590950135949350505050565b6000806040838503121561578857600080fd5b8235915060208301356152f58161521a565b6060815260006157ad60608301866153ff565b82810360208401526157bf81866153ff565b915050826040830152949350505050565b602081526000825160a060208401526157ec60c08401826153ff565b90506020840151601f1984830301604085015261580982826153ff565b9150506040840151606084015260608401516080840152608084015160a08401528091505092915050565b6000808335601e1984360301811261584b57600080fd5b8301803591506001600160401b0382111561586557600080fd5b6020019150600581901b36038213156150c957600080fd5b602080825260159082015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b602080825260159082015274149958da5c1948191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b6020808252600c908201526b456d7074792061727261797360a01b604082015260600190565b60006020828403121561592957600080fd5b81356150448161521a565b634e487b7160e01b600052602160045260246000fd5b6020808252600e908201526d125b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b60208082526015908201527410dbdb999a59c8191bd95cc81b9bdd08195e1a5cdd605a1b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156159c957600080fd5b8151615044816152bb565b604051601f8201601f191681016001600160401b03811182821017156159fc576159fc6159a1565b604052919050565b600082601f830112615a1557600080fd5b81516001600160401b03811115615a2e57615a2e6159a1565b6020615a42601f8301601f191682016159d4565b8281528582848701011115615a5657600080fd5b60005b83811015615a74578581018301518282018401528201615a59565b506000928101909101919091529392505050565b60008060008060808587031215615a9e57600080fd5b84516001600160401b0380821115615ab557600080fd5b615ac188838901615a04565b95506020870151915080821115615ad757600080fd5b50615ae487828801615a04565b935050604085015191506060850151615afc8161521a565b939692955090935050565b805163ffffffff81168114615b1b57600080fd5b919050565b600060808284031215615b3257600080fd5b604051608081018181106001600160401b0382111715615b5457615b546159a1565b604052825160ff81168114615b6857600080fd5b8152615b7660208401615b07565b6020820152615b8760408401615b07565b6040820152606083015160608201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561095f5761095f615ba0565b634e487b7160e01b600052601260045260246000fd5b600082615bee57615bee615bc9565b500490565b600060018201615c0557615c05615ba0565b5060010190565b6001600160a01b0384168152608060208201819052600090615c30908301856153ff565b8281036040840152615c4281856153ff565b8381036060909401939093525050600081526020019392505050565b81835260006001600160fb1b03831115615c7757600080fd5b8260051b80836020870137939093016020019392505050565b608081526000615ca4608083018789615c5e565b8281036020840152615cb681876153ff565b90508281036040840152615cca81866153ff565b9150508260608301529695505050505050565b6001600160a01b0384168152606060208083018290528454918301829052600085815281812090929091906080850190845b81811015615d2b57845483526001948501949284019201615d0f565b50508481036040860152615d3f81876153ff565b98975050505050505050565b60208082528181018390526000908460408401835b86811015615d8e578235615d73816152bb565b6001600160a01b031682529183019190830190600101615d60565b509695505050505050565b6001600160a01b0386168152606060208201819052600090615dbe9083018688615c5e565b8281036040840152615d3f818587615c5e565b808202811582820484141761095f5761095f615ba0565b8181038181111561095f5761095f615ba0565b600082615e0a57615e0a615bc9565b500690565b608081526000615e2360808301888a615c5e565b8281036020840152615e36818789615c5e565b90508281036040840152615e4a81866153ff565b90508281036060840152615e5e81856153ff565b9998505050505050505050565b600060208284031215615e7d57600080fd5b5051919050565b6001600160a01b0384168152606060208201819052600090615ea8908301856153ff565b828103604084015261565881856153ff565b604081526000615ece604083018587615c5e565b828103602084015261565881856153ff56fea264697066735822122085c2b7f6339a282dcec888b73d787858027041e2c9ef95d8f9802ce34cd52a0764736f6c63430008180033000000000000000000000000ad574f7f4eb563b0ccdcca0d7d7628aeaf071d65000000000000000000000000f762475553237a16cfa8d72c8ffc0e3260eaa641000000000000000000000000802187c392b15cdc8df8aa05bfef314df1f65c62000000000000000000000000901a60c22ebf6b3799bb0d14d97a1908bbc0e7a9