0 txs
0 calls
constructor
No constructor.
functions
_calculateOperationProfit
viewfunction _calculateOperationProfit(uint256 initialAmount, uint256 currentBalance, uint256 dailyOperations, uint256 packageLimit, uint256 dailyYieldPercent, uint256 dailyOperationLimit) view returns (uint256)
_generateRandomYieldPercent
viewfunction _generateRandomYieldPercent(uint256 dailyYieldPercent) view returns (uint256)
AURUMToken
viewfunction AURUMToken() view returns (address)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
baseURI
viewfunction baseURI() view returns (string)
dailyResetInterval
viewfunction dailyResetInterval() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
flashLoanContract
viewfunction flashLoanContract() view returns (address)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getCurrentRate
viewfunction getCurrentRate(uint256 usdtAmount) view returns (uint256)
getPackage
viewfunction getPackage(uint256 packId) view returns (tuple)
getPackageLimit
purefunction getPackageLimit(uint256 initialAmount, uint256 limit) pure returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStartOfDayUTC
viewfunction getStartOfDayUTC() view returns (uint256)
getTokensByUuid
viewfunction getTokensByUuid(string uuid) view returns (tuple[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address owner, address operator) view returns (bool)
name
viewfunction name() view returns (string)
nextTokenId
viewfunction nextTokenId() view returns (uint256)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
packages
viewfunction packages(uint256) view returns (uint256 initialAmount, uint256 loanMargin, uint32 dailyYieldPercent, uint32 annualYieldPercent, uint256 limit, uint256 lockPeriod)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenByIndex
viewfunction tokenByIndex(uint256 index) view returns (uint256)
tokenData
viewfunction tokenData(uint256) view returns (string uuid, address recipient, uint256 packId, uint256 balance, uint256 dailyOperations, uint256 lockTimestamp, uint256 lastOperationTimestamp)
tokenOfOwnerByIndex
viewfunction tokenOfOwnerByIndex(address owner, uint256 index) view returns (uint256)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
treasuryAddress
viewfunction treasuryAddress() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
approve
nonpayablefunction approve(address to, uint256 tokenId)
executeFlashLoan
payablefunction executeFlashLoan(uint256 tokenId, tuple arbitrage) payable
executeOperator
nonpayablefunction executeOperator(uint256 tokenId)
executeOperatorDistribute
nonpayablefunction executeOperatorDistribute(uint256[] tokenIds)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _flashLoanContract, address _AURUMTokenAddress, address _treasuryAddress, uint256 _dailyMinYieldPercent, uint256 _dailyMaxYieldPercent, tuple[] _packages)
purchasePack
nonpayablefunction purchasePack(uint256 packId, address recipient, string uuid)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setAURUMToken
nonpayablefunction setAURUMToken(address _AURUMTokenAddress)
setBaseURI
nonpayablefunction setBaseURI(string newBaseURI)
setDayResetInterval
nonpayablefunction setDayResetInterval(uint256 _interval)
setFlashLoanContract
nonpayablefunction setFlashLoanContract(address _flashLoanContract)
setTreasuryAddress
nonpayablefunction setTreasuryAddress(address _treasuryAddress)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
updatePackage
nonpayablefunction updatePackage(uint256 packId, uint256 initialAmount, uint256 loanMargin, uint32 dailyYieldPercent, uint32 annualYieldPercent, uint256 limit, uint256 lockPeriod)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
upgradeTokenData
nonpayablefunction upgradeTokenData(uint256 tokenId, tuple data)
events
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
AutoFlashLoanExecuted
event AutoFlashLoanExecuted(uint256 indexed tokenId, uint256 profit)
BatchMetadataUpdate
event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId)
Debug
event Debug(string message, uint256 value)
FlashLoanExecuted
event FlashLoanExecuted(uint256 indexed tokenId, uint256 profit)
Initialized
event Initialized(uint64 version)
MetadataUpdate
event MetadataUpdate(uint256 _tokenId)
PackPurchased
event PackPurchased(address indexed buyer, uint256 indexed tokenId, uint256 packId, string uuid)
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)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ERC721EnumerableForbiddenBatchMint
error ERC721EnumerableForbiddenBatchMint()
ERC721IncorrectOwner
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
ERC721InsufficientApproval
error ERC721InsufficientApproval(address operator, uint256 tokenId)
ERC721InvalidApprover
error ERC721InvalidApprover(address approver)
ERC721InvalidOperator
error ERC721InvalidOperator(address operator)
ERC721InvalidOwner
error ERC721InvalidOwner(address owner)
ERC721InvalidReceiver
error ERC721InvalidReceiver(address receiver)
ERC721InvalidSender
error ERC721InvalidSender(address sender)
ERC721NonexistentToken
error ERC721NonexistentToken(uint256 tokenId)
ERC721OutOfBoundsIndex
error ERC721OutOfBoundsIndex(address owner, uint256 index)
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1681525034801561004357600080fd5b506080516174e46200006e60003960008181613944015281816139990152613b5a01526174e46000f3fe60806040526004361061031e5760003560e01c80636605bfda116101ab578063ad3cb1cc116100f7578063c5f956af11610095578063d547741f1161006f578063d547741f14610c62578063e19bfade14610c8b578063e985e9c514610cb4578063f5b541a614610cf157610325565b8063c5f956af14610bd1578063c87b56dd14610bfc578063d016d65c14610c3957610325565b8063b88a529b116100d1578063b88a529b14610aec578063b88d4fde14610b29578063b99dfe1814610b52578063c216212a14610b8f57610325565b8063ad3cb1cc14610a55578063b28ea31914610a80578063b4b5b48f14610aa957610325565b806391d148541161016457806395d89b411161013e57806395d89b41146109ab578063a1aa66d7146109d6578063a217fddf14610a01578063a22cb46514610a2c57610325565b806391d14854146109085780639312b3841461094557806393fc96151461098257610325565b80636605bfda146107e45780636c0360eb1461080d57806370a082311461083857806375794a3c1461087557806375b5eabe146108a057806386162c1e146108dd57610325565b8063308ea0b41161026a578063483ba4321161022357806352d1902d116101fd57806352d1902d1461071657806355f804b3146107415780635c8632991461076a5780636352211e146107a757610325565b8063483ba432146106945780634f1ef286146106bd5780634f6ccce7146106d957610325565b8063308ea0b41461058657806336568abe146105af5780633a4e62fa146105d857806342842e0e1461060357806345da344a1461062c57806347c367821461065757610325565b806318160ddd116102d7578063248a9ca3116102b1578063248a9ca3146104ba5780632a52940d146104f75780632f2ff15d146105205780632f745c591461054957610325565b806318160ddd1461043d5780631fcf12651461046857806323b872dd1461049157610325565b806301ffc9a71461032a57806306fdde0314610367578063081812fc14610392578063095ea7b3146103cf57806310c6909b146103f8578063155bdcd61461041457610325565b3661032557005b600080fd5b34801561033657600080fd5b50610351600480360381019061034c919061538e565b610d1c565b60405161035e91906153d6565b60405180910390f35b34801561037357600080fd5b5061037c610d2e565b6040516103899190615481565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906154d9565b610dcf565b6040516103c69190615547565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f1919061558e565b610deb565b005b610412600480360381019061040d9190615755565b610e01565b005b34801561042057600080fd5b5061043b60048036038101906104369190615920565b611184565b005b34801561044957600080fd5b5061045261123c565b60405161045f919061598b565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906159a6565b611257565b005b34801561049d57600080fd5b506104b860048036038101906104b39190615a15565b61175e565b005b3480156104c657600080fd5b506104e160048036038101906104dc9190615a9e565b611860565b6040516104ee9190615ada565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190615af5565b61188e565b005b34801561052c57600080fd5b5061054760048036038101906105429190615b22565b6118df565b005b34801561055557600080fd5b50610570600480360381019061056b919061558e565b611901565b60405161057d919061598b565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a891906154d9565b6119b8565b005b3480156105bb57600080fd5b506105d660048036038101906105d19190615b22565b6119d0565b005b3480156105e457600080fd5b506105ed611a4b565b6040516105fa9190615bc1565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190615a15565b611a6f565b005b34801561063857600080fd5b50610641611a8f565b60405161064e919061598b565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190615bdc565b611a95565b60405161068b919061598b565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b691906154d9565b611b16565b005b6106d760048036038101906106d29190615d0a565b611e6b565b005b3480156106e557600080fd5b5061070060048036038101906106fb91906154d9565b611e8a565b60405161070d919061598b565b60405180910390f35b34801561072257600080fd5b5061072b611f0e565b6040516107389190615ada565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190615d66565b611f41565b005b34801561077657600080fd5b50610791600480360381019061078c9190615d66565b611f62565b60405161079e9190615f75565b60405180910390f35b3480156107b357600080fd5b506107ce60048036038101906107c991906154d9565b6121d9565b6040516107db9190615547565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190615af5565b6121eb565b005b34801561081957600080fd5b5061082261223d565b60405161082f9190615481565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a9190615af5565b6122cb565b60405161086c919061598b565b60405180910390f35b34801561088157600080fd5b5061088a612394565b604051610897919061598b565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c291906154d9565b61239a565b6040516108d4919061598b565b60405180910390f35b3480156108e957600080fd5b506108f261243d565b6040516108ff919061598b565b60405180910390f35b34801561091457600080fd5b5061092f600480360381019061092a9190615b22565b61245e565b60405161093c91906153d6565b60405180910390f35b34801561095157600080fd5b5061096c60048036038101906109679190615f97565b6124d7565b604051610979919061598b565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a49190616037565b6124fa565b005b3480156109b757600080fd5b506109c06127e6565b6040516109cd9190615481565b60405180910390f35b3480156109e257600080fd5b506109eb612887565b6040516109f891906160a5565b60405180910390f35b348015610a0d57600080fd5b50610a166128ad565b604051610a239190615ada565b60405180910390f35b348015610a3857600080fd5b50610a536004803603810190610a4e91906160ec565b6128b4565b005b348015610a6157600080fd5b50610a6a6128ca565b604051610a779190615481565b60405180910390f35b348015610a8c57600080fd5b50610aa76004803603810190610aa291906162cb565b612903565b005b348015610ab557600080fd5b50610ad06004803603810190610acb91906154d9565b612d18565b604051610ae39796959493929190616374565b60405180910390f35b348015610af857600080fd5b50610b136004803603810190610b0e91906154d9565b612e02565b604051610b20919061598b565b60405180910390f35b348015610b3557600080fd5b50610b506004803603810190610b4b91906163ea565b612ea7565b005b348015610b5e57600080fd5b50610b796004803603810190610b7491906154d9565b612ec4565b604051610b8691906164f7565b60405180910390f35b348015610b9b57600080fd5b50610bb66004803603810190610bb191906154d9565b612f65565b604051610bc896959493929190616521565b60405180910390f35b348015610bdd57600080fd5b50610be6612fc1565b604051610bf39190615547565b60405180910390f35b348015610c0857600080fd5b50610c236004803603810190610c1e91906154d9565b612fe7565b604051610c309190615481565b60405180910390f35b348015610c4557600080fd5b50610c606004803603810190610c5b9190616582565b6131b7565b005b348015610c6e57600080fd5b50610c896004803603810190610c849190615b22565b613293565b005b348015610c9757600080fd5b50610cb26004803603810190610cad9190615af5565b6132b5565b005b348015610cc057600080fd5b50610cdb6004803603810190610cd69190616624565b613307565b604051610ce891906153d6565b60405180910390f35b348015610cfd57600080fd5b50610d066133a9565b604051610d139190615ada565b60405180910390f35b6000610d27826133cd565b9050919050565b60606000610d3a613447565b9050806000018054610d4b90616693565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7790616693565b8015610dc45780601f10610d9957610100808354040283529160200191610dc4565b820191906000526020600020905b815481529060010190602001808311610da757829003601f168201915b505050505091505090565b6000610dda8261346f565b50610de4826134f7565b9050919050565b610dfd8282610df8613542565b61354a565b5050565b610e0961355c565b6000600460008481526020019081526020016000209050600060036000836002015481526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016003820154815260200160048201548152505090506000610ece826000015183608001516124d7565b90506000612710836040015163ffffffff168460000151610eef91906166f3565b610ef99190616764565b905081846003015410610f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f38906167e1565b60405180910390fd5b8360050154421015610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f9061684d565b60405180910390fd5b6000610f9261243d565b90508085600601541015610fb457600085600401819055504285600601819055505b60006003610fdc866000015188600301548960040154888a6040015163ffffffff1689611a95565b610fe69190616764565b905082818760040154610ff9919061686d565b111561103a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611031906168ed565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663956722653489848a60010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518563ffffffff1660e01b81526004016110bc939291906169a1565b6000604051808303818588803b1580156110d557600080fd5b505af11580156110e9573d6000803e3d6000fd5b505050505080866003016000828254611102919061686d565b925050819055508086600401600082825461111d919061686d565b9250508190555060075442611132919061686d565b8660050181905550877f80a4ff25f3b66eb50a419011aa68170d7c415b3e8b9155e3076d39e5fb56e93d8260405161116a919061598b565b60405180910390a25050505050506111806135b3565b5050565b6000801b611191816135cc565b816004600085815260200190815260200160002060008201518160000190816111ba9190616b7d565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060155905050505050565b6000806112476135e0565b9050806002018054905091505090565b61125f61355c565b6000600360008581526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600382015481526020016004820154815250509050600081600001511161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390616c9b565b60405180910390fd5b600061134b8260000151612e02565b9050600060028261135c9190616764565b90506000818361136c9190616cbb565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8730866040518463ffffffff1660e01b81526004016113cd93929190616cef565b6020604051808303816000875af11580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190616d3b565b61144f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144690616db4565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016114ce929190616dd4565b6020604051808303816000875af11580156114ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115119190616d3b565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b815260040161156d919061598b565b600060405180830381600087803b15801561158757600080fd5b505af115801561159b573d6000803e3d6000fd5b505050506000600660008154809291906115b490616dfd565b9190505590506115c48782613608565b6040518060e001604052808781526020018873ffffffffffffffffffffffffffffffffffffffff16815260200189815260200160008152602001600081526020016000815260200160008152506004600083815260200190815260200160002060008201518160000190816116399190616b7d565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c082015181600601559050506005866040516116c69190616e81565b9081526020016040518091039020819080600181540180825580915050600190039060005260206000200160009091909190915055808773ffffffffffffffffffffffffffffffffffffffff167fb75cd6c57aaf11c85dd705fc0a6ea09b1bf5c6aee363e26cadf30d77f78ae4b68a89604051611744929190616e98565b60405180910390a350505050506117596135b3565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117d05760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016117c79190615547565b60405180910390fd5b60006117e483836117df613542565b613701565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461185a578382826040517f64283d7b00000000000000000000000000000000000000000000000000000000815260040161185193929190616ec8565b60405180910390fd5b50505050565b60008061186b613717565b905080600001600084815260200190815260200160002060010154915050919050565b6000801b61189b816135cc565b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6118e882611860565b6118f1816135cc565b6118fb838361373f565b50505050565b60008061190c6135e0565b9050611917846122cb565b831061195c5783836040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401611953929190616dd4565b60405180910390fd5b8060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000205491505092915050565b6000801b6119c5816135cc565b816007819055505050565b6119d8613542565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a3c576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a468282613840565b505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a8a83838360405180602001604052806000815250612ea7565b505050565b60075481565b600080611aa18461239a565b905060006402540be400828a611ab791906166f3565b611ac19190616764565b9050858189611ad0919061686d565b1115611ae5578786611ae29190616cbb565b90505b838188611af2919061686d565b1115611b07578684611b049190616cbb565b90505b80925050509695505050505050565b611b1e61355c565b60006004600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe90616f4b565b60405180910390fd5b600060036000836002015481526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016003820154815260200160048201548152505090506000611c75826000015183608001516124d7565b90506000612710836040015163ffffffff168460000151611c9691906166f3565b611ca09190616764565b90508184600301541115611ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce0906167e1565b60405180910390fd5b8360050154421015611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d279061684d565b60405180910390fd5b6000611d3a61243d565b90508085600601541015611d5c57600085600401819055504285600601819055505b6000611d8285600001518760030154886004015487896040015163ffffffff1688611a95565b905082818760040154611d95919061686d565b1115611dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcd906168ed565b60405180910390fd5b80866003016000828254611dea919061686d565b9250508190555080866004016000828254611e05919061686d565b9250508190555060075442611e1a919061686d565b8660050181905550867fcdaeef511aa9dada0cae443f00a7086134f3c61c8a0919facab94c7417fe2b8882604051611e52919061598b565b60405180910390a2505050505050611e686135b3565b50565b611e73613942565b611e7c82613a28565b611e868282613a39565b5050565b600080611e956135e0565b9050611e9f61123c565b8310611ee5576000836040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401611edc929190616dd4565b60405180910390fd5b806002018381548110611efb57611efa616f6b565b5b9060005260206000200154915050919050565b6000611f18613b58565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6000801b611f4e816135cc565b81600a9081611f5d9190616b7d565b505050565b60606000600583604051611f769190616e81565b9081526020016040518091039020805480602002602001604051908101604052809291908181526020018280548015611fce57602002820191906000526020600020905b815481526020019060010190808311611fba575b5050505050905060008151905060008167ffffffffffffffff811115611ff757611ff66155d3565b5b60405190808252806020026020018201604052801561203057816020015b61201d61528d565b8152602001906001900390816120155790505b50905060005b828110156121cd57600084828151811061205357612052616f6b565b5b602002602001015190506000600460008381526020019081526020016000209050806040518060e001604052908160008201805461209090616693565b80601f01602080910402602001604051908101604052809291908181526020018280546120bc90616693565b80156121095780601f106120de57610100808354040283529160200191612109565b820191906000526020600020905b8154815290600101906020018083116120ec57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820154815250508484815181106121ad576121ac616f6b565b5b6020026020010181905250505080806121c590616dfd565b915050612036565b50809350505050919050565b60006121e48261346f565b9050919050565b6000801b6121f8816135cc565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600a805461224a90616693565b80601f016020809104026020016040519081016040528092919081815260200182805461227690616693565b80156122c35780601f10612298576101008083540402835291602001916122c3565b820191906000526020600020905b8154815290600101906020018083116122a657829003601f168201915b505050505081565b6000806122d6613447565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361234a5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016123419190615547565b60405180910390fd5b8060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915050919050565b60065481565b6000806003836123aa9190616cbb565b90506000620f4240600183866123c09190616cbb565b6123ca919061686d565b6123d491906166f3565b905060004442336040516020016123ed93929190617003565b6040516020818303038152906040528051906020012060001c9050600082826124169190617040565b620f42408561242591906166f3565b61242f919061686d565b905080945050505050919050565b600062015180804261244f9190616764565b61245991906166f3565b905090565b600080612469613717565b905080600001600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505092915050565b60006103e882846124e891906166f3565b6124f29190616764565b905092915050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929612524816135cc565b61252c61355c565b60005b838390508110156127d857600084848381811061254f5761254e616f6b565b5b905060200201359050600081148061256957506006548110155b8061258a575060006004600083815260200190815260200160002060020154145b1561259557506127c5565b6000600460008381526020019081526020016000209050600060036000836002015481526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600382015481526020016004820154815250509050600061265a826000015183608001516124d7565b90506000612710836040015163ffffffff16846000015161267b91906166f3565b6126859190616764565b9050600061269161243d565b905080856006015410156126b357600085600401819055504285600601819055505b60006126d985600001518760030154886004015487896040015163ffffffff1688611a95565b9050856005015442101580156126f25750838660030154105b80156127335750612710856040015163ffffffff16866000015161271691906166f3565b6127209190616764565b818760040154612730919061686d565b11155b156127bd578086600301600082825461274c919061686d565b9250508190555080866004016000828254612767919061686d565b925050819055506007544261277c919061686d565b8660050181905550867fcdaeef511aa9dada0cae443f00a7086134f3c61c8a0919facab94c7417fe2b88826040516127b4919061598b565b60405180910390a25b505050505050505b80806127d090616dfd565b91505061252f565b506127e16135b3565b505050565b606060006127f2613447565b905080600101805461280390616693565b80601f016020809104026020016040519081016040528092919081815260200182805461282f90616693565b801561287c5780601f106128515761010080835404028352916020019161287c565b820191906000526020600020905b81548152906001019060200180831161285f57829003601f168201915b505050505091505090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000801b81565b6128c66128bf613542565b8383613bdf565b5050565b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b600061290d613d5d565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff1614801561295b5750825b9050600060018367ffffffffffffffff16148015612990575060003073ffffffffffffffffffffffffffffffffffffffff163b145b90508115801561299e575080155b156129d5576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315612a255760018560000160086101000a81548160ff0219169083151502179055505b612a996040518060400160405280601781526020017f496d70726f76656420415552554d204e4f4445204e46540000000000000000008152506040518060400160405280600881526020017f417572756d4e4654000000000000000000000000000000000000000000000000815250613d85565b612aa1613d9b565b612aa9613da5565b612ab1613db7565b612ab9613dc1565b612ac1613dcb565b612aeb7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9293361373f565b50612af96000801b3361373f565b508a6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555089600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600881905550866009819055506201518060078190555060005b8651811015612ca657868181518110612bf357612bf2616f6b565b5b602002602001015160036000600184612c0c919061686d565b8152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548163ffffffff021916908363ffffffff16021790555060608201518160020160046101000a81548163ffffffff021916908363ffffffff1602179055506080820151816003015560a082015181600401559050508080612c9e90616dfd565b915050612bd7565b5060016006819055508315612d0b5760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051612d0291906170c0565b60405180910390a15b5050505050505050505050565b6004602052806000526040600020600091509050806000018054612d3b90616693565b80601f0160208091040260200160405190810160405280929190818152602001828054612d6790616693565b8015612db45780601f10612d8957610100808354040283529160200191612db4565b820191906000526020600020905b815481529060010190602001808311612d9757829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154908060060154905087565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166348e9a9d2836040518263ffffffff1660e01b8152600401612e5f919061598b565b602060405180830381865afa158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea091906170f0565b9050919050565b612eb284848461175e565b612ebe84848484613dd5565b50505050565b612ecc6152e0565b600360008381526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016002820160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600382015481526020016004820154815250509050919050565b60036020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900463ffffffff16908060020160049054906101000a900463ffffffff16908060030154908060040154905086565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060612ff28261346f565b506000600460008481526020019081526020016000206040518060e001604052908160008201805461302390616693565b80601f016020809104026020016040519081016040528092919081815260200182805461304f90616693565b801561309c5780601f106130715761010080835404028352916020019161309c565b820191906000526020600020905b81548152906001019060200180831161307f57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152505090506000600a805461313e90616693565b905011613180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317790617169565b60405180910390fd5b600a61318f8260400151613f8c565b6040516020016131a09291906172a4565b604051602081830303815290604052915050919050565b6000801b6131c4816135cc565b6040518060c001604052808881526020018781526020018663ffffffff1681526020018563ffffffff16815260200184815260200183815250600360008a8152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548163ffffffff021916908363ffffffff16021790555060608201518160020160046101000a81548163ffffffff021916908363ffffffff1602179055506080820151816003015560a082015181600401559050505050505050505050565b61329c82611860565b6132a5816135cc565b6132af8383613840565b50505050565b6000801b6132c2816135cc565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600080613312613447565b90508060050160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505092915050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480613440575061343f8261405a565b5b9050919050565b60007f80bb2b638cc20bc4d0a60d66940f3ab4a00c1d7b313497ca82fb0b4ab0079300905090565b60008061347b836140d4565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036134ee57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016134e5919061598b565b60405180910390fd5b80915050919050565b600080613502613447565b905080600401600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b600033905090565b613557838383600161411f565b505050565b60006135666142f3565b905060028160000154036135a6576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002816000018190555050565b60006135bd6142f3565b90506001816000018190555050565b6135dd816135d8613542565b61431b565b50565b60007f645e039705490088daad89bae25049a34f4a9072d398537b1ab2425f24cbed00905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361367a5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016136719190615547565b60405180910390fd5b600061368883836000613701565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146136fc5760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016136f39190615547565b60405180910390fd5b505050565b600061370e84848461436c565b90509392505050565b60007f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800905090565b60008061374a613717565b9050613756848461245e565b61383457600181600001600086815260200190815260200160002060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506137d0613542565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061383a565b60009150505b92915050565b60008061384b613717565b9050613857848461245e565b1561393657600081600001600086815260200190815260200160002060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506138d2613542565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600191505061393c565b60009150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614806139ef57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166139d6614489565b73ffffffffffffffffffffffffffffffffffffffff1614155b15613a26576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000801b613a35816135cc565b5050565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613aa157506040513d601f19601f82011682018060405250810190613a9e91906172f3565b60015b613ae257816040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401613ad99190615547565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114613b4957806040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600401613b409190615ada565b60405180910390fd5b613b5383836144e0565b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614613bdd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000613be9613447565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c5c57826040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401613c539190615547565b60405180910390fd5b818160050160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3184604051613d4f91906153d6565b60405180910390a350505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b613d8d614553565b613d978282614593565b5050565b613da3614553565b565b613dad614553565b613db56145d0565b565b613dbf614553565b565b613dc9614553565b565b613dd3614553565b565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115613f86578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e19613542565b8685856040518563ffffffff1660e01b8152600401613e3b9493929190617375565b6020604051808303816000875af1925050508015613e7757506040513d601f19601f82011682018060405250810190613e7491906173d6565b60015b613efb573d8060008114613ea7576040519150601f19603f3d011682016040523d82523d6000602084013e613eac565b606091505b506000815103613ef357836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401613eea9190615547565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613f8457836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401613f7b9190615547565b60405180910390fd5b505b50505050565b606060006001613f9b846145f1565b01905060008167ffffffffffffffff811115613fba57613fb96155d3565b5b6040519080825280601f01601f191660200182016040528015613fec5781602001600182028036833780820191505090505b509050600082602001820190505b60011561404f578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161404357614042616735565b5b04945060008503613ffa575b819350505050919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806140cd57506140cc82614744565b5b9050919050565b6000806140df613447565b905080600201600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6000614129613447565b905081806141645750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156142985760006141748561346f565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156141df57508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156141f257506141f08185613307565b155b1561423457836040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161422b9190615547565b60405180910390fd5b821561429657848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8481600401600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b60007f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00905090565b614325828261245e565b6143685780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161435f929190617403565b60405180910390fd5b5050565b60008061437a8585856147a5565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036143be576143b9846149d2565b6143fd565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146143fc576143fb8185614a2e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361443f5761443a84614ba8565b61447e565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461447d5761447c8585614c94565b5b5b809150509392505050565b60006144b77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614d30565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6144e982614d3a565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2600081511115614546576145408282614e07565b5061454f565b61454e614e8b565b5b5050565b61455b614ec8565b614591576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61459b614553565b60006145a5613447565b9050828160000190816145b89190616b7d565b50818160010190816145ca9190616b7d565b50505050565b6145d8614553565b60006145e26142f3565b90506001816000018190555050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061464f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161464557614644616735565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061468c576d04ee2d6d415b85acef8100000000838161468257614681616735565b5b0492506020810190505b662386f26fc1000083106146bb57662386f26fc1000083816146b1576146b0616735565b5b0492506010810190505b6305f5e10083106146e4576305f5e10083816146da576146d9616735565b5b0492506008810190505b61271083106147095761271083816146ff576146fe616735565b5b0492506004810190505b6064831061472c576064838161472257614721616735565b5b0492506002810190505b600a831061473b576001810190505b80915050919050565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061479e575061479d82614ee8565b5b9050919050565b6000806147b0613447565b905060006147bd856140d4565b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146147ff576147fe818587614fca565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146148925761484160008660008061411f565b60018260030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146149175760018260030160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8582600201600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480925050509392505050565b60006149dc6135e0565b9050806002018054905081600301600084815260200190815260200160002081905550806002018290806001815401808255809150506001900390600052602060002001600090919091909150555050565b6000614a386135e0565b90506000614a45846122cb565b90506000826001016000858152602001908152602001600020549050818114614b325760008360000160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020549050808460000160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020819055508184600101600083815260200190815260200160002081905550505b826001016000858152602001908152602001600020600090558260000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020600090555050505050565b6000614bb26135e0565b9050600060018260020180549050614bca9190616cbb565b905060008260030160008581526020019081526020016000205490506000836002018381548110614bfe57614bfd616f6b565b5b9060005260206000200154905080846002018381548110614c2257614c21616f6b565b5b906000526020600020018190555081846003016000838152602001908152602001600020819055508360030160008681526020019081526020016000206000905583600201805480614c7757614c7661742c565b5b600190038181906000526020600020016000905590555050505050565b6000614c9e6135e0565b905060006001614cad856122cb565b614cb79190616cbb565b9050828260000160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550808260010160008581526020019081526020016000208190555050505050565b6000819050919050565b60008173ffffffffffffffffffffffffffffffffffffffff163b03614d9657806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401614d8d9190615547565b60405180910390fd5b80614dc37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b614d30565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606000808473ffffffffffffffffffffffffffffffffffffffff1684604051614e319190617497565b600060405180830381855af49150503d8060008114614e6c576040519150601f19603f3d011682016040523d82523d6000602084013e614e71565b606091505b5091509150614e8185838361508e565b9250505092915050565b6000341115614ec6576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000614ed2613d5d565b60000160089054906101000a900460ff16905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480614fb357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80614fc35750614fc28261511d565b5b9050919050565b614fd5838383615187565b61508957600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361504a57806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401615041919061598b565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401615080929190616dd4565b60405180910390fd5b505050565b6060826150a35761509e82615248565b615115565b600082511480156150cb575060008473ffffffffffffffffffffffffffffffffffffffff163b145b1561510d57836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016151049190615547565b60405180910390fd5b819050615116565b5b9392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561523f57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061520057506151ff8484613307565b5b8061523e57508273ffffffffffffffffffffffffffffffffffffffff16615226836134f7565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b60008151111561525b5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060e0016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600063ffffffff168152602001600063ffffffff16815260200160008152602001600081525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61536b81615336565b811461537657600080fd5b50565b60008135905061538881615362565b92915050565b6000602082840312156153a4576153a361532c565b5b60006153b284828501615379565b91505092915050565b60008115159050919050565b6153d0816153bb565b82525050565b60006020820190506153eb60008301846153c7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561542b578082015181840152602081019050615410565b60008484015250505050565b6000601f19601f8301169050919050565b6000615453826153f1565b61545d81856153fc565b935061546d81856020860161540d565b61547681615437565b840191505092915050565b6000602082019050818103600083015261549b8184615448565b905092915050565b6000819050919050565b6154b6816154a3565b81146154c157600080fd5b50565b6000813590506154d3816154ad565b92915050565b6000602082840312156154ef576154ee61532c565b5b60006154fd848285016154c4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061553182615506565b9050919050565b61554181615526565b82525050565b600060208201905061555c6000830184615538565b92915050565b61556b81615526565b811461557657600080fd5b50565b60008135905061558881615562565b92915050565b600080604083850312156155a5576155a461532c565b5b60006155b385828601615579565b92505060206155c4858286016154c4565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61560b82615437565b810181811067ffffffffffffffff8211171561562a576156296155d3565b5b80604052505050565b600061563d615322565b90506156498282615602565b919050565b600080fd5b600060ff82169050919050565b61566981615653565b811461567457600080fd5b50565b60008135905061568681615660565b92915050565b6000608082840312156156a2576156a16155ce565b5b6156ac6080615633565b905060006156bc84828501615579565b60008301525060206156d084828501615579565b60208301525060406156e484828501615677565b60408301525060606156f8848285016154c4565b60608301525092915050565b6000610100828403121561571b5761571a6155ce565b5b6157256040615633565b905060006157358482850161568c565b60008301525060806157498482850161568c565b60208301525092915050565b600080610120838503121561576d5761576c61532c565b5b600061577b858286016154c4565b925050602061578c85828601615704565b9150509250929050565b600080fd5b600080fd5b600067ffffffffffffffff8211156157bb576157ba6155d3565b5b6157c482615437565b9050602081019050919050565b82818337600083830152505050565b60006157f36157ee846157a0565b615633565b90508281526020810184848401111561580f5761580e61579b565b5b61581a8482856157d1565b509392505050565b600082601f83011261583757615836615796565b5b81356158478482602086016157e0565b91505092915050565b600060e08284031215615866576158656155ce565b5b61587060e0615633565b9050600082013567ffffffffffffffff8111156158905761588f61564e565b5b61589c84828501615822565b60008301525060206158b084828501615579565b60208301525060406158c4848285016154c4565b60408301525060606158d8848285016154c4565b60608301525060806158ec848285016154c4565b60808301525060a0615900848285016154c4565b60a08301525060c0615914848285016154c4565b60c08301525092915050565b600080604083850312156159375761593661532c565b5b6000615945858286016154c4565b925050602083013567ffffffffffffffff81111561596657615965615331565b5b61597285828601615850565b9150509250929050565b615985816154a3565b82525050565b60006020820190506159a0600083018461597c565b92915050565b6000806000606084860312156159bf576159be61532c565b5b60006159cd868287016154c4565b93505060206159de86828701615579565b925050604084013567ffffffffffffffff8111156159ff576159fe615331565b5b615a0b86828701615822565b9150509250925092565b600080600060608486031215615a2e57615a2d61532c565b5b6000615a3c86828701615579565b9350506020615a4d86828701615579565b9250506040615a5e868287016154c4565b9150509250925092565b6000819050919050565b615a7b81615a68565b8114615a8657600080fd5b50565b600081359050615a9881615a72565b92915050565b600060208284031215615ab457615ab361532c565b5b6000615ac284828501615a89565b91505092915050565b615ad481615a68565b82525050565b6000602082019050615aef6000830184615acb565b92915050565b600060208284031215615b0b57615b0a61532c565b5b6000615b1984828501615579565b91505092915050565b60008060408385031215615b3957615b3861532c565b5b6000615b4785828601615a89565b9250506020615b5885828601615579565b9150509250929050565b6000819050919050565b6000615b87615b82615b7d84615506565b615b62565b615506565b9050919050565b6000615b9982615b6c565b9050919050565b6000615bab82615b8e565b9050919050565b615bbb81615ba0565b82525050565b6000602082019050615bd66000830184615bb2565b92915050565b60008060008060008060c08789031215615bf957615bf861532c565b5b6000615c0789828a016154c4565b9650506020615c1889828a016154c4565b9550506040615c2989828a016154c4565b9450506060615c3a89828a016154c4565b9350506080615c4b89828a016154c4565b92505060a0615c5c89828a016154c4565b9150509295509295509295565b600067ffffffffffffffff821115615c8457615c836155d3565b5b615c8d82615437565b9050602081019050919050565b6000615cad615ca884615c69565b615633565b905082815260208101848484011115615cc957615cc861579b565b5b615cd48482856157d1565b509392505050565b600082601f830112615cf157615cf0615796565b5b8135615d01848260208601615c9a565b91505092915050565b60008060408385031215615d2157615d2061532c565b5b6000615d2f85828601615579565b925050602083013567ffffffffffffffff811115615d5057615d4f615331565b5b615d5c85828601615cdc565b9150509250929050565b600060208284031215615d7c57615d7b61532c565b5b600082013567ffffffffffffffff811115615d9a57615d99615331565b5b615da684828501615822565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b6000615df7826153f1565b615e018185615ddb565b9350615e1181856020860161540d565b615e1a81615437565b840191505092915050565b615e2e81615526565b82525050565b615e3d816154a3565b82525050565b600060e0830160008301518482036000860152615e608282615dec565b9150506020830151615e756020860182615e25565b506040830151615e886040860182615e34565b506060830151615e9b6060860182615e34565b506080830151615eae6080860182615e34565b5060a0830151615ec160a0860182615e34565b5060c0830151615ed460c0860182615e34565b508091505092915050565b6000615eeb8383615e43565b905092915050565b6000602082019050919050565b6000615f0b82615daf565b615f158185615dba565b935083602082028501615f2785615dcb565b8060005b85811015615f635784840389528151615f448582615edf565b9450615f4f83615ef3565b925060208a01995050600181019050615f2b565b50829750879550505050505092915050565b60006020820190508181036000830152615f8f8184615f00565b905092915050565b60008060408385031215615fae57615fad61532c565b5b6000615fbc858286016154c4565b9250506020615fcd858286016154c4565b9150509250929050565b600080fd5b600080fd5b60008083601f840112615ff757615ff6615796565b5b8235905067ffffffffffffffff81111561601457616013615fd7565b5b6020830191508360208202830111156160305761602f615fdc565b5b9250929050565b6000806020838503121561604e5761604d61532c565b5b600083013567ffffffffffffffff81111561606c5761606b615331565b5b61607885828601615fe1565b92509250509250929050565b600061608f82615b8e565b9050919050565b61609f81616084565b82525050565b60006020820190506160ba6000830184616096565b92915050565b6160c9816153bb565b81146160d457600080fd5b50565b6000813590506160e6816160c0565b92915050565b600080604083850312156161035761610261532c565b5b600061611185828601615579565b9250506020616122858286016160d7565b9150509250929050565b600067ffffffffffffffff821115616147576161466155d3565b5b602082029050602081019050919050565b600063ffffffff82169050919050565b61617181616158565b811461617c57600080fd5b50565b60008135905061618e81616168565b92915050565b600060c082840312156161aa576161a96155ce565b5b6161b460c0615633565b905060006161c4848285016154c4565b60008301525060206161d8848285016154c4565b60208301525060406161ec8482850161617f565b60408301525060606162008482850161617f565b6060830152506080616214848285016154c4565b60808301525060a0616228848285016154c4565b60a08301525092915050565b60006162476162428461612c565b615633565b90508083825260208201905060c0840283018581111561626a57616269615fdc565b5b835b81811015616293578061627f8882616194565b84526020840193505060c08101905061626c565b5050509392505050565b600082601f8301126162b2576162b1615796565b5b81356162c2848260208601616234565b91505092915050565b60008060008060008060c087890312156162e8576162e761532c565b5b60006162f689828a01615579565b965050602061630789828a01615579565b955050604061631889828a01615579565b945050606061632989828a016154c4565b935050608061633a89828a016154c4565b92505060a087013567ffffffffffffffff81111561635b5761635a615331565b5b61636789828a0161629d565b9150509295509295509295565b600060e082019050818103600083015261638e818a615448565b905061639d6020830189615538565b6163aa604083018861597c565b6163b7606083018761597c565b6163c4608083018661597c565b6163d160a083018561597c565b6163de60c083018461597c565b98975050505050505050565b600080600080608085870312156164045761640361532c565b5b600061641287828801615579565b945050602061642387828801615579565b9350506040616434878288016154c4565b925050606085013567ffffffffffffffff81111561645557616454615331565b5b61646187828801615cdc565b91505092959194509250565b61647681616158565b82525050565b60c0820160008201516164926000850182615e34565b5060208201516164a56020850182615e34565b5060408201516164b8604085018261646d565b5060608201516164cb606085018261646d565b5060808201516164de6080850182615e34565b5060a08201516164f160a0850182615e34565b50505050565b600060c08201905061650c600083018461647c565b92915050565b61651b81616158565b82525050565b600060c082019050616536600083018961597c565b616543602083018861597c565b6165506040830187616512565b61655d6060830186616512565b61656a608083018561597c565b61657760a083018461597c565b979650505050505050565b600080600080600080600060e0888a0312156165a1576165a061532c565b5b60006165af8a828b016154c4565b97505060206165c08a828b016154c4565b96505060406165d18a828b016154c4565b95505060606165e28a828b0161617f565b94505060806165f38a828b0161617f565b93505060a06166048a828b016154c4565b92505060c06166158a828b016154c4565b91505092959891949750929550565b6000806040838503121561663b5761663a61532c565b5b600061664985828601615579565b925050602061665a85828601615579565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806166ab57607f821691505b6020821081036166be576166bd616664565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006166fe826154a3565b9150616709836154a3565b9250828202616717816154a3565b9150828204841483151761672e5761672d6166c4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061676f826154a3565b915061677a836154a3565b92508261678a57616789616735565b5b828204905092915050565b7f4c696d6974207265616368656400000000000000000000000000000000000000600082015250565b60006167cb600d836153fc565b91506167d682616795565b602082019050919050565b600060208201905081810360008301526167fa816167be565b9050919050565b7f4f7065726174696f6e206973206c6f636b656400000000000000000000000000600082015250565b60006168376013836153fc565b915061684282616801565b602082019050919050565b600060208201905081810360008301526168668161682a565b9050919050565b6000616878826154a3565b9150616883836154a3565b925082820190508082111561689b5761689a6166c4565b5b92915050565b7f45786365656473206461696c79207969656c64206c696d697400000000000000600082015250565b60006168d76019836153fc565b91506168e2826168a1565b602082019050919050565b60006020820190508181036000830152616906816168ca565b9050919050565b61691681615653565b82525050565b6080820160008201516169326000850182615e25565b5060208201516169456020850182615e25565b506040820151616958604085018261690d565b50606082015161696b6060850182615e34565b50505050565b61010082016000820151616988600085018261691c565b50602082015161699b608085018261691c565b50505050565b6000610140820190506169b76000830186616971565b6169c561010083018561597c565b6169d3610120830184615538565b949350505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302616a3d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82616a00565b616a478683616a00565b95508019841693508086168417925050509392505050565b6000616a7a616a75616a70846154a3565b615b62565b6154a3565b9050919050565b6000819050919050565b616a9483616a5f565b616aa8616aa082616a81565b848454616a0d565b825550505050565b600090565b616abd616ab0565b616ac8818484616a8b565b505050565b5b81811015616aec57616ae1600082616ab5565b600181019050616ace565b5050565b601f821115616b3157616b02816169db565b616b0b846169f0565b81016020851015616b1a578190505b616b2e616b26856169f0565b830182616acd565b50505b505050565b600082821c905092915050565b6000616b5460001984600802616b36565b1980831691505092915050565b6000616b6d8383616b43565b9150826002028217905092915050565b616b86826153f1565b67ffffffffffffffff811115616b9f57616b9e6155d3565b5b616ba98254616693565b616bb4828285616af0565b600060209050601f831160018114616be75760008415616bd5578287015190505b616bdf8582616b61565b865550616c47565b601f198416616bf5866169db565b60005b82811015616c1d57848901518255600182019150602085019450602081019050616bf8565b86831015616c3a5784890151616c36601f891682616b43565b8355505b6001600288020188555050505b505050505050565b7f496e76616c6964207061636b6167650000000000000000000000000000000000600082015250565b6000616c85600f836153fc565b9150616c9082616c4f565b602082019050919050565b60006020820190508181036000830152616cb481616c78565b9050919050565b6000616cc6826154a3565b9150616cd1836154a3565b9250828203905081811115616ce957616ce86166c4565b5b92915050565b6000606082019050616d046000830186615538565b616d116020830185615538565b616d1e604083018461597c565b949350505050565b600081519050616d35816160c0565b92915050565b600060208284031215616d5157616d5061532c565b5b6000616d5f84828501616d26565b91505092915050565b7f5472616e7366657220746f207472656173757279206661696c65640000000000600082015250565b6000616d9e601b836153fc565b9150616da982616d68565b602082019050919050565b60006020820190508181036000830152616dcd81616d91565b9050919050565b6000604082019050616de96000830185615538565b616df6602083018461597c565b9392505050565b6000616e08826154a3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203616e3a57616e396166c4565b5b600182019050919050565b600081905092915050565b6000616e5b826153f1565b616e658185616e45565b9350616e7581856020860161540d565b80840191505092915050565b6000616e8d8284616e50565b915081905092915050565b6000604082019050616ead600083018561597c565b8181036020830152616ebf8184615448565b90509392505050565b6000606082019050616edd6000830186615538565b616eea602083018561597c565b616ef76040830184615538565b949350505050565b7f4e6f742074686520726563697069656e74000000000000000000000000000000600082015250565b6000616f356011836153fc565b9150616f4082616eff565b602082019050919050565b60006020820190508181036000830152616f6481616f28565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b616fb5616fb0826154a3565b616f9a565b82525050565b60008160601b9050919050565b6000616fd382616fbb565b9050919050565b6000616fe582616fc8565b9050919050565b616ffd616ff882615526565b616fda565b82525050565b600061700f8286616fa4565b60208201915061701f8285616fa4565b60208201915061702f8284616fec565b601482019150819050949350505050565b600061704b826154a3565b9150617056836154a3565b92508261706657617065616735565b5b828206905092915050565b6000819050919050565b600067ffffffffffffffff82169050919050565b60006170aa6170a56170a084617071565b615b62565b61707b565b9050919050565b6170ba8161708f565b82525050565b60006020820190506170d560008301846170b1565b92915050565b6000815190506170ea816154ad565b92915050565b6000602082840312156171065761710561532c565b5b6000617114848285016170db565b91505092915050565b7f4261736520555249206e6f742073657420666f72207061636b61676500000000600082015250565b6000617153601c836153fc565b915061715e8261711d565b602082019050919050565b6000602082019050818103600083015261718281617146565b9050919050565b6000815461719681616693565b6171a08186616e45565b945060018216600081146171bb57600181146171d057617203565b60ff1983168652811515820286019350617203565b6171d9856169db565b60005b838110156171fb578154818901526001820191506020810190506171dc565b838801955050505b50505092915050565b7f5f00000000000000000000000000000000000000000000000000000000000000600082015250565b6000617242600183616e45565b915061724d8261720c565b600182019050919050565b7f2e706e6700000000000000000000000000000000000000000000000000000000600082015250565b600061728e600483616e45565b915061729982617258565b600482019050919050565b60006172b08285617189565b91506172bb82617235565b91506172c78284616e50565b91506172d282617281565b91508190509392505050565b6000815190506172ed81615a72565b92915050565b6000602082840312156173095761730861532c565b5b6000617317848285016172de565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061734782617320565b617351818561732b565b935061736181856020860161540d565b61736a81615437565b840191505092915050565b600060808201905061738a6000830187615538565b6173976020830186615538565b6173a4604083018561597c565b81810360608301526173b6818461733c565b905095945050505050565b6000815190506173d081615362565b92915050565b6000602082840312156173ec576173eb61532c565b5b60006173fa848285016173c1565b91505092915050565b60006040820190506174186000830185615538565b6174256020830184615acb565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b600061747182617320565b61747b818561745b565b935061748b81856020860161540d565b80840191505092915050565b60006174a38284617466565b91508190509291505056fea2646970667358221220dfb1aa2074c4ef6954d4455d0de930e8c4ad5c3c8e38d0971556cb3f1c070a1164736f6c63430008140033