0 txs
19.3k calls
constructor
constructor(address mToken_, address migrationAdmin_)
functions
accruedYieldOf
viewfunction accruedYieldOf(address account_) view returns (uint240 yield_)
allowance
viewfunction allowance(address account, address spender) view returns (uint256 allowance)
authorizationState
viewfunction authorizationState(address authorizer, bytes32 nonce) view returns (bool isNonceUsed)
balanceOf
viewfunction balanceOf(address account_) view returns (uint256 balance_)
balanceWithYieldOf
viewfunction balanceWithYieldOf(address account_) view returns (uint256 balance_)
CANCEL_AUTHORIZATION_TYPEHASH
viewfunction CANCEL_AUTHORIZATION_TYPEHASH() view returns (bytes32)
claimOverrideRecipientFor
viewfunction claimOverrideRecipientFor(address account_) view returns (address recipient_)
currentIndex
viewfunction currentIndex() view returns (uint128 index_)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields_, string name_, string version_, uint256 chainId_, address verifyingContract_, bytes32 salt_, uint256[] extensions_)
excess
viewfunction excess() view returns (uint240 excess_)
implementation
viewfunction implementation() view returns (address implementation_)
isEarning
viewfunction isEarning(address account_) view returns (bool isEarning_)
isEarningEnabled
viewfunction isEarningEnabled() view returns (bool isEnabled_)
lastIndexOf
viewfunction lastIndexOf(address account_) view returns (uint128 lastIndex_)
migrationAdmin
viewfunction migrationAdmin() view returns (address)
mToken
viewfunction mToken() view returns (address)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address account) view returns (uint256 nonce)
PERMIT_TYPEHASH
viewfunction PERMIT_TYPEHASH() view returns (bytes32)
principalOfTotalEarningSupply
viewfunction principalOfTotalEarningSupply() view returns (uint112)
RECEIVE_WITH_AUTHORIZATION_TYPEHASH
viewfunction RECEIVE_WITH_AUTHORIZATION_TYPEHASH() view returns (bytes32)
registrar
viewfunction registrar() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalAccruedYield
viewfunction totalAccruedYield() view returns (uint240 yield_)
totalEarningSupply
viewfunction totalEarningSupply() view returns (uint240)
totalNonEarningSupply
viewfunction totalNonEarningSupply() view returns (uint240)
totalSupply
viewfunction totalSupply() view returns (uint256 totalSupply_)
TRANSFER_WITH_AUTHORIZATION_TYPEHASH
viewfunction TRANSFER_WITH_AUTHORIZATION_TYPEHASH() view returns (bytes32)
vault
viewfunction vault() view returns (address)
wasEarningEnabled
viewfunction wasEarningEnabled() view returns (bool wasEarning_)
approve
nonpayablefunction approve(address spender_, uint256 amount_) returns (bool success_)
cancelAuthorization
nonpayablefunction cancelAuthorization(address authorizer_, bytes32 nonce_, bytes signature_)
cancelAuthorization
nonpayablefunction cancelAuthorization(address authorizer_, bytes32 nonce_, bytes32 r_, bytes32 vs_)
cancelAuthorization
nonpayablefunction cancelAuthorization(address authorizer_, bytes32 nonce_, uint8 v_, bytes32 r_, bytes32 s_)
claimExcess
nonpayablefunction claimExcess() returns (uint240 excess_)
claimFor
nonpayablefunction claimFor(address account_) returns (uint240 yield_)
disableEarning
nonpayablefunction disableEarning()
enableEarning
nonpayablefunction enableEarning()
migrate
nonpayablefunction migrate()
migrate
nonpayablefunction migrate(address migrator_)
permit
nonpayablefunction permit(address owner_, address spender_, uint256 value_, uint256 deadline_, bytes signature_)
permit
nonpayablefunction permit(address owner_, address spender_, uint256 value_, uint256 deadline_, uint8 v_, bytes32 r_, bytes32 s_)
receiveWithAuthorization
nonpayablefunction receiveWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes signature_)
receiveWithAuthorization
nonpayablefunction receiveWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes32 r_, bytes32 vs_)
receiveWithAuthorization
nonpayablefunction receiveWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, uint8 v_, bytes32 r_, bytes32 s_)
startEarningFor
nonpayablefunction startEarningFor(address account_)
stopEarningFor
nonpayablefunction stopEarningFor(address account_)
transfer
nonpayablefunction transfer(address recipient_, uint256 amount_) returns (bool success_)
transferFrom
nonpayablefunction transferFrom(address sender_, address recipient_, uint256 amount_) returns (bool success_)
transferWithAuthorization
nonpayablefunction transferWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes signature_)
transferWithAuthorization
nonpayablefunction transferWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes32 r_, bytes32 vs_)
transferWithAuthorization
nonpayablefunction transferWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, uint8 v_, bytes32 r_, bytes32 s_)
unwrap
nonpayablefunction unwrap(address recipient_, uint256 amount_) returns (uint240 unwrapped_)
unwrap
nonpayablefunction unwrap(address recipient_) returns (uint240 unwrapped_)
wrap
nonpayablefunction wrap(address recipient_, uint256 amount_) returns (uint240 wrapped_)
wrap
nonpayablefunction wrap(address recipient_) returns (uint240 wrapped_)
events
Approval
event Approval(address indexed account, address indexed spender, uint256 amount)
AuthorizationCanceled
event AuthorizationCanceled(address indexed authorizer, bytes32 indexed nonce)
AuthorizationUsed
event AuthorizationUsed(address indexed authorizer, bytes32 indexed nonce)
Claimed
event Claimed(address indexed account, address indexed recipient, uint240 yield)
EarningDisabled
event EarningDisabled(uint128 index)
EarningEnabled
event EarningEnabled(uint128 index)
EIP712DomainChanged
event EIP712DomainChanged()
ExcessClaimed
event ExcessClaimed(uint240 excess)
Migrated
event Migrated(address indexed migrator, address indexed oldImplementation, address indexed newImplementation)
StartedEarning
event StartedEarning(address indexed account)
StoppedEarning
event StoppedEarning(address indexed account)
Transfer
event Transfer(address indexed sender, address indexed recipient, uint256 amount)
Upgraded
event Upgraded(address indexed implementation)
errors
AuthorizationAlreadyUsed
error AuthorizationAlreadyUsed(address authorizer, bytes32 nonce)
AuthorizationExpired
error AuthorizationExpired(uint256 timestamp, uint256 validBefore)
AuthorizationNotYetValid
error AuthorizationNotYetValid(uint256 timestamp, uint256 validAfter)
CallerMustBePayee
error CallerMustBePayee(address caller, address payee)
DivisionByZero
error DivisionByZero()
EarningCannotBeReenabled
error EarningCannotBeReenabled()
EarningIsDisabled
error EarningIsDisabled()
EarningIsEnabled
error EarningIsEnabled()
InsufficientAllowance
error InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
InsufficientAmount
error InsufficientAmount(uint256 amount)
InsufficientBalance
error InsufficientBalance(address account, uint240 balance, uint240 amount)
InvalidAccountNonce
error InvalidAccountNonce(uint256 nonce, uint256 expectedNonce)
InvalidMigrator
error InvalidMigrator()
InvalidRecipient
error InvalidRecipient(address recipient)
InvalidSignature
error InvalidSignature()
InvalidSignatureLength
error InvalidSignatureLength()
InvalidSignatureS
error InvalidSignatureS()
InvalidSignatureV
error InvalidSignatureV()
InvalidUInt112
error InvalidUInt112()
InvalidUInt240
error InvalidUInt240()
IsApprovedEarner
error IsApprovedEarner()
MigrationFailed
error MigrationFailed()
NotApprovedEarner
error NotApprovedEarner()
SignatureExpired
error SignatureExpired(uint256 deadline, uint256 timestamp)
SignerMismatch
error SignerMismatch()
UnauthorizedMigration
error UnauthorizedMigration()
ZeroMigrationAdmin
error ZeroMigrationAdmin()
ZeroMigrator
error ZeroMigrator()
ZeroMToken
error ZeroMToken()
creation bytecode
0x6101a060405234801562000011575f80fd5b506040516200540a3803806200540a8339810160408190526200003491620003d9565b6040518060400160405280600f81526020016e0577261707065644d206279204d5e3608c1b81525060405180604001604052806002815260200161774d60f01b81525060068280806200008d816200020160201b60201c565b60c052466080526200009e62000235565b60a05250620000b1915083905062000201565b6101005260ff1660e05250506001600160a01b038216610140819052620000eb5760405163b01d5e2b60e01b815260040160405180910390fd5b6001600160a01b038116610120819052620001195760405163ea0b51bb60e01b815260040160405180910390fd5b816001600160a01b031663a6ce63cd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000156573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200017c91906200040f565b6001600160a01b03166101608190526040805163fbfa77cf60e01b8152905163fbfa77cf916004808201926020929091908290030181865afa158015620001c5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001eb91906200040f565b6001600160a01b03166101805250620004d49050565b5f8160405160200162000215919062000432565b6040516020818303038152906040526200022f9062000460565b92915050565b60c0515f907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f906200026790620002d1565b80516020918201206040805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60605f5b602081108015620002fa5750828160208110620002f657620002f662000487565b1a15155b1562000313576200030b816200049b565b9050620002d5565b5f816001600160401b038111156200032f576200032f620004c0565b6040519080825280601f01601f1916602001820160405280156200035a576020820181803683370190505b5090505f5b82811015620003b5578481602081106200037d576200037d62000487565b1a60f81b82828151811062000396576200039662000487565b60200101906001600160f81b03191690815f1a9053506001016200035f565b509392505050565b80516001600160a01b0381168114620003d4575f80fd5b919050565b5f8060408385031215620003eb575f80fd5b620003f683620003bd565b91506200040660208401620003bd565b90509250929050565b5f6020828403121562000420575f80fd5b6200042b82620003bd565b9392505050565b5f82515f5b8181101562000453576020818601810151858301520162000437565b505f920191825250919050565b8051602080830151919081101562000481575f198160200360031b1b821691505b50919050565b634e487b7160e01b5f52603260045260245ffd5b5f60018201620004b957634e487b7160e01b5f52601160045260245ffd5b5060010190565b634e487b7160e01b5f52604160045260245ffd5b60805160a05160c05160e0516101005161012051610140516101605161018051614e3d620005cd5f395f81816109dd015261144601525f818161049e015281816119ec01528181612ca80152818161341c015261350d01525f81816108a301528181610a5101528181610d2201528181611494015281816116580152818161189c01528181611bf801528181611cd501528181611d9101528181612447015281816125210152818161270e0152818161279001526128c001525f8181610673015261196601525f61151b01525f61052401525f8181610ad1015281816112e2015261264501525f610fb401525f610f840152614e3d5ff3fe608060405234801561000f575f80fd5b506004361061037d575f3560e01c806384b0196e116101d4578063bf376c7a11610109578063d505accf116100a9578063e3ee160e11610079578063e3ee160e14610985578063e94a010214610998578063ef55bec6146109c5578063fbfa77cf146109d8575f80fd5b8063d505accf1461090e578063d916948714610921578063dd62ed3e14610948578063ddeae03314610972575f80fd5b8063c967891a116100e4578063c967891a146108cd578063ce5494bb146108d5578063cf092995146108e8578063d33627e5146108fb575f80fd5b8063bf376c7a1461088b578063c3b6f9391461089e578063c9144ddb146108c5575f80fd5b80639fd5a6cf11610174578063a8afc01f1161014f578063a8afc01f1461084a578063a9059cbb14610852578063ace150a514610865578063b7b7289914610878575f80fd5b80639fd5a6cf146107fd578063a08cb48b14610810578063a0cc6a6814610823575f80fd5b80638a75f238116101af5780638a75f238146107bb5780638d78bf7e146107e55780638fd3ab80146107ed57806395d89b41146107f5575f80fd5b806384b0196e1461078357806388b7ab631461079e5780638a4a1017146107b1575f80fd5b806339f47693116102b557806370a08231116102555780637c3ab944116102255780637c3ab944146106bb5780637ecebe00146107055780637f2eecc31461072457806384af270f1461074b575f80fd5b806370a082311461061457806374df25581461066e57806374edaa201461069557806375f26e63146106a8575f80fd5b806356d59ed21161029057806356d59ed2146105bf5780635a049a70146105c75780635c60da1b146105da5780635cf9938414610601575f80fd5b806339f47693146105605780634c57a8fa14610573578063532992c5146105ac575f80fd5b806326987b60116103205780632c786163116102fb5780632c786163146104e557806330adf81f146104f8578063313ce5671461051f5780633644e51514610558575f80fd5b806326987b6014610446578063281b229d1461046f5780632b20e39714610499575f80fd5b8063174f6ce91161035b578063174f6ce91461040057806318160ddd146104155780631ae2379c1461042b57806323b872dd14610433575f80fd5b8063023276f01461038157806306fdde03146103c8578063095ea7b3146103dd575b5f80fd5b61039461038f366004614616565b6109ff565b6040517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6103d0610aca565b6040516103bf919061469a565b6103f06103eb3660046146ac565b610afa565b60405190151581526020016103bf565b61041361040e366004614616565b610b0f565b005b61041d610c76565b6040519081526020016103bf565b610394610cd0565b6103f06104413660046146d4565b610de7565b61044e610ed8565b6040516fffffffffffffffffffffffffffffffff90911681526020016103bf565b600554610394907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681565b6104c07f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103bf565b6103946104f3366004614616565b610ef5565b61041d7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6105467f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016103bf565b61041d610f81565b61039461056e3660046146ac565b610fd6565b60035461058d906dffffffffffffffffffffffffffff1681565b6040516dffffffffffffffffffffffffffff90911681526020016103bf565b6104136105ba36600461470d565b610fea565b61039461100f565b6104136105d5366004614753565b611064565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546104c0565b61041d61060f366004614616565b61108b565b61041d610622366004614616565b73ffffffffffffffffffffffffffffffffffffffff165f9081526006602052604090205461010090047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690565b6104c07f000000000000000000000000000000000000000000000000000000000000000081565b6104136106a3366004614616565b611110565b6103946106b6366004614616565b6112c5565b61044e6106c9366004614616565b73ffffffffffffffffffffffffffffffffffffffff165f908152600660205260409020600101546fffffffffffffffffffffffffffffffff1690565b61041d610713366004614616565b5f6020819052908152604090205481565b61041d7fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de881565b6103f0610759366004614616565b73ffffffffffffffffffffffffffffffffffffffff165f9081526006602052604090205460ff1690565b61078b6112d4565b6040516103bf979695949392919061479d565b6104136107ac366004614931565b61137c565b60075415156103f0565b600454610394907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681565b6103946113ab565b610413611502565b6103d0611514565b61041361080b3660046149b0565b61153f565b61041361081e366004614a1d565b61154f565b61041d7f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b610413611579565b6103f06108603660046146ac565b611711565b610413610873366004614a1d565b61171d565b610413610886366004614a7f565b61173d565b6103946108993660046146ac565b61175a565b6104c07f000000000000000000000000000000000000000000000000000000000000000081565b6103f0611769565b610413611782565b6104136108e3366004614616565b61194e565b6104136108f6366004614931565b6119c9565b6104c0610909366004614616565b6119e9565b61041361091c366004614ad2565b611aeb565b61041d7f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a159742981565b61041d610956366004614b37565b600260209081525f928352604080842090915290825290205481565b610394610980366004614616565b611afb565b610413610993366004614b68565b611b0d565b6103f06109a63660046146ac565b600160209081525f928352604080842090915290825290205460ff1681565b6104136109d3366004614b68565b611b38565b6104c07f000000000000000000000000000000000000000000000000000000000000000081565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815233600482018190525f91610ac491908490610abf9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610a96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aba9190614be0565b611b58565b611bb1565b92915050565b6060610af57f0000000000000000000000000000000000000000000000000000000000000000611e14565b905090565b5f610b06338484611efd565b50600192915050565b610b1881611f6a565b5f610b21610ed8565b9050610b2d8282611faa565b5073ffffffffffffffffffffffffffffffffffffffff82165f908152600660205260409020805460ff16610b6057505050565b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168082556001820180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905561010090047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610be08184612296565b600580547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168401167fffff00000000000000000000000000000000000000000000000000000000000090911617905560405173ffffffffffffffffffffffffffffffffffffffff8516907f9467bac89b535c15fcd73b0e7b12e123a045fd17124952dfa868dfdf5e42d48d905f90a250505050565b6005546004545f91610cab917dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9182169116614c24565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905090565b5f80610cda610ed8565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529091505f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610d67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8b9190614be0565b90505f610d97836123f8565b6005547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811691909101915081811690831611610dd3575f610ddf565b610ddf81830384612417565b935050505090565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ec25782811015610e8d576040517f192b9e4e00000000000000000000000000000000000000000000000000000000815233600482015260248101829052604481018490526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff85165f908152600260209081526040808320338452909152902083820390555b610ecd8585856124e2565b506001949350505050565b5f610ee1611769565b610eed57610af56124fd565b610af561251e565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600660205260408120805460ff16610f2a57505f92915050565b80546001820154610f7a9161010090047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16906fffffffffffffffffffffffffffffffff16610f75610ed8565b6125ac565b9392505050565b5f7f00000000000000000000000000000000000000000000000000000000000000004614610fb157610af561261e565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f610f7a3384610fe585611b58565b6126d3565b610fff84610ff88686612948565b84846129bc565b61100984846129d0565b50505050565b5f8061102161101c610ed8565b6123f8565b6004549091507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690821681101561105b5780820361105d565b5f5b9250505090565b61107a856110728787612948565b858585612a5f565b61108485856129d0565b5050505050565b5f61109582610ef5565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff166111068373ffffffffffffffffffffffffffffffffffffffff165f908152600660205260409020547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101009091041690565b610ac49190614c62565b61111981612a6f565b611121611769565b611157576040517fb019ea3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f908152600660205260409020805460ff1615611189575050565b5f61119261251e565b825460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116811780855590840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff841617905590915061010090047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661122e8183612aae565b600580547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216849003167fffff00000000000000000000000000000000000000000000000000000000000090911617905560405173ffffffffffffffffffffffffffffffffffffffff8516907f8fbc5add0c3fc76c7a869df537ee9250843681f6bbc2ea9735d40c6dc259414c905f90a250505050565b5f610ac43383610fe53361108b565b5f6060805f805f60606113067f0000000000000000000000000000000000000000000000000000000000000000611e14565b604080515f8082526060820183526001602083019081527f3100000000000000000000000000000000000000000000000000000000000000938301939093527f0f000000000000000000000000000000000000000000000000000000000000009b939a5091985046975030965090945092509050565b6113948761138e898989898989612b50565b83612bd7565b6113a2878787878787612c22565b50505050505050565b5f7f49ec4048a361156a5338ff734a59a750f44cb5753bbe0886c6f39289bec2a0146113d5610cd0565b6040517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216815290925060200160405180910390a16040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303815f875af11580156114da573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fe9190614c75565b5090565b61151261150d612ca5565b612dac565b565b6060610af57f0000000000000000000000000000000000000000000000000000000000000000611e14565b6110848561138e87878787612fe9565b61156188610ff88a8a8a8a8a8a612b50565b61156f888888888888612c22565b5050505050505050565b61158230611f6a565b61158a611769565b6115c0576040517fb019ea3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6115c961251e565b60078054600180820183555f9283527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68860028304018054919092166010026101000a6fffffffffffffffffffffffffffffffff8181021990921691851602179055604080517f9f8495f900000000000000000000000000000000000000000000000000000000815290519293507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1692639f8495f99260048084019391929182900301818387803b1580156116b1575f80fd5b505af11580156116c3573d5f803e3d5ffd5b50506040516fffffffffffffffffffffffffffffffff841681527fee580fdb4da10ea17aa673e6f5c8c2370b4166d6a94bc88900e5a96d0589e3ce925060200190505b60405180910390a150565b5f610b063384846124e2565b61172f88610ff88a8a8a8a8a8a613089565b61156f888888888888613105565b61174b8361138e8585612948565b61175583836129d0565b505050565b5f610f7a3384610abf85611b58565b6007545f9061177a90600290614cc1565b600114905090565b61178b30612a6f565b611793611769565b156117ca576040517f7a42736800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60075415611804576040517f437b381f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61180d61251e565b60078054600180820183555f9283527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68860028304018054919092166010026101000a6fffffffffffffffffffffffffffffffff8181021990921691851602179055604080517fa36e40fc00000000000000000000000000000000000000000000000000000000815290519293507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169263a36e40fc9260048084019391929182900301818387803b1580156118f5575f80fd5b505af1158015611907573d5f803e3d5ffd5b50506040516fffffffffffffffffffffffffffffffff841681527f5098de6eb11dbd1127cf4dcd5e960e3944d48a7570b9b1939cff715cb35c5a1892506020019050611706565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146119bd576040517f51e2625e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119c681612dac565b50565b6119db8761138e898989898989613089565b6113a2878787878787613105565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638eaa6ac07f776d5f636c61696d5f6f766572726964655f726563697069656e74000000000084604051602001611a7892919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611aac91815260200190565b602060405180830381865afa158015611ac7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac49190614be0565b6113a28761107289898989612fe9565b5f610ac482611b08610ed8565b611faa565b611b1f896110728b8b8b8b8b8b613089565b611b2d898989898989613105565b505050505050505050565b611b4a896110728b8b8b8b8b8b612b50565b611b2d898989898989612c22565b5f7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8211156114fe576040517f2a49c10d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f90819073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611c3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c619190614be0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301523060248301527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861660448301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906323b872dd906064016020604051808303815f875af1158015611d1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d419190614c75565b506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152611e0c908590611e0490849073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611dd6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dfa9190614be0565b610aba9190614cf9565b93508361321f565b509392505050565b60605f5b602081108015611e395750828160208110611e3557611e35614d0c565b1a15155b15611e4e57611e4781614d39565b9050611e18565b5f8167ffffffffffffffff811115611e6857611e6861485d565b6040519080825280601f01601f191660200182016040528015611e92576020820181803683370190505b5090505f5b82811015611e0c57848160208110611eb157611eb1614d0c565b1a60f81b828281518110611ec757611ec7614d0c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101611e97565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611f73816133ca565b156119c6576040517f8b19807700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f908152600660205260408120805460ff16611fe0575f915050610ac4565b60018101546fffffffffffffffffffffffffffffffff90811690841681900361200d575f92505050610ac4565b815461010090047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661203f8183876125ac565b6001840180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff881617905593507dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84165f036120b1575f9350505050610ac4565b82547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8286018116610100027fff000000000000000000000000000000000000000000000000000000000000ff9092169190911784556004805480831687019092167fffff0000000000000000000000000000000000000000000000000000000000009092169190911790555f612145876119e9565b90505f73ffffffffffffffffffffffffffffffffffffffff82161561216a578161216c565b875b6040517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8816815290915073ffffffffffffffffffffffffffffffffffffffff80831691908a16907f4f3dc01c04a512d8b0b3b29dd31108ec4a93696f6506c2e8e609aa77953da7599060200160405180910390a36040517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8716815273ffffffffffffffffffffffffffffffffffffffff8916905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a38773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461228b5761228b8882888a613576565b505050505092915050565b6004547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90811690831610612317575050600480547fffff000000000000000000000000000000000000000000000000000000000000169055600380547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169055565b5f6123228383613850565b6003549091506dffffffffffffffffffffffffffff90811690821611612348578061235c565b6003546dffffffffffffffffffffffffffff165b600380547fffffffffffffffffffffffffffffffffffff000000000000000000000000000081166dffffffffffffffffffffffffffff91821693909303169190911790555050600480547fffff00000000000000000000000000000000000000000000000000000000000081167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9182169390930316919091179055565b6003545f90610ac4906dffffffffffffffffffffffffffff168361385b565b6040517f84af270f0000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906384af270f90602401602060405180830381865afa1580156124a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c59190614c75565b6124cf5782610f7a565b610f7a6124dc8484613850565b8361385b565b61175583836124f084611b58565b6124f8610ed8565b613576565b5f612509600754151590565b61251257505f90565b610af56007600161388d565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166326987b606040518163ffffffff1660e01b8152600401602060405180830381865afa158015612588573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610af59190614d70565b5f806125c16125bb8686613850565b8461385b565b9050847dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16817dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16111561261357848103612615565b5f5b95945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6126697f0000000000000000000000000000000000000000000000000000000000000000611e14565b80516020918201206040805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f6126de84836138ce565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612768573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278c9190614be0565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb856127dc866127d7610ed8565b612417565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660248201526044016020604051808303815f875af1158015612869573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061288d9190614c75565b506040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152612615907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561291a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061293e9190614be0565b610aba9083614cf9565b604080517f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a1597429602082015273ffffffffffffffffffffffffffffffffffffffff841691810191909152606081018290525f90610f7a906080015b604051602081830303815290604052805190602001206139bf565b6110096129cb85858585613a20565b613a5b565b6129da8282613c1f565b73ffffffffffffffffffffffffffffffffffffffff82165f81815260016020818152604080842086855290915280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155518392917f1cdd46ff242716cdaa72d159d339a485b3438398348d68f09d7c8c0a59353d8191a35050565b6110846129cb8686868686613cac565b612a78816133ca565b6119c6576040517fdd93dca800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082168501167fffff000000000000000000000000000000000000000000000000000000000000909116179055612b088282613cf4565b600380547fffffffffffffffffffffffffffffffffffff000000000000000000000000000081166dffffffffffffffffffffffffffff91821693909301169190911790555050565b604080517fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de8602082015273ffffffffffffffffffffffffffffffffffffffff8089169282019290925290861660608201526080810185905260a0810184905260c0810183905260e081018290525f90612bcc90610100016129a1565b979650505050505050565b5f612be3848484613cff565b90505f816005811115612bf857612bf8614d9f565b03612c035750505050565b612c0e848484613d43565b15612c195750505050565b61100981613a5b565b3373ffffffffffffffffffffffffffffffffffffffff861614612c8f576040517f1c5939f300000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff86166024820152604401610e84565b612c9d868686868686613105565b505050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638eaa6ac07f776d5f6d69677261746f725f763100000000000000000000000000000000000030604051602001612d3492919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401612d6891815260200190565b602060405180830381865afa158015612d83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612da79190614be0565b919050565b73ffffffffffffffffffffffffffffffffffffffff8116612df9576040517f0d626a3200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163b5f03612e49576040517f8d1e7cf400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612e727f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90505f8273ffffffffffffffffffffffffffffffffffffffff166040515f60405180830381855af49150503d805f8114612ec7576040519150601f19603f3d011682016040523d82523d5f602084013e612ecc565b606091505b5050905080612f07576040517fa27bfda200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612f307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fe1b831b0e6f3aa16b4b1a6bd526b5cdeab4940744ca6e0251f5fe5f8caf1c81a60405160405180910390a460405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250505050565b5f612ff382613e8b565b612ffe858585611efd565b73ffffffffffffffffffffffffffffffffffffffff8581165f818152602081815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928101929092529181019290925291861660608201526080810185905260a081019190915260c081018390526126159060e0016129a1565b604080517f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a2267602082015273ffffffffffffffffffffffffffffffffffffffff8089169282019290925290861660608201526080810185905260a0810184905260c0810183905260e081018290525f90612bcc90610100016129a1565b824211613147576040517f498ff9a200000000000000000000000000000000000000000000000000000000815242600482015260248101849052604401610e84565b814210613189576040517fb3fcd33e00000000000000000000000000000000000000000000000000000000815242600482015260248101839052604401610e84565b6131938682613c1f565b73ffffffffffffffffffffffffffffffffffffffff86165f81815260016020818152604080842086855290915280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016909217909155518392917f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a591a3612c9d8686866124e2565b613248817dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613ece565b61325182613f0a565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526006602052604090205460ff16156132a5575f613287610ed8565b90506132938382611faa565b5061329f838383613f6f565b50613358565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260066020526040902080547fff000000000000000000000000000000000000000000000000000000000000ff8116610100918290047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081168501811690920217909155600580547fffff000000000000000000000000000000000000000000000000000000000000811690831684019092169190911790555b6040517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216815273ffffffffffffffffffffffffffffffffffffffff8316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6040517f8eaa6ac00000000000000000000000000000000000000000000000000000000081527f6561726e6572735f6c6973745f69676e6f72656400000000000000000000000060048201525f9081907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690638eaa6ac090602401602060405180830381865afa158015613476573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061349a9190614be0565b141580610ac457506040517fd7d1c1c00000000000000000000000000000000000000000000000000000000081527f6561726e65727300000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff83811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063d7d1c1c090604401602060405180830381865afa158015613552573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac49190614c75565b61357f83613f0a565b6135898482611faa565b506135948382611faa565b506040517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316815273ffffffffffffffffffffffffffffffffffffffff80851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a373ffffffffffffffffffffffffffffffffffffffff8085165f90815260066020526040808220928616825290208054825460ff918216151591161515036137625781547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010090910481169085168110156136f1576040517f03629ea100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316602483015286166044820152606401610e84565b82547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9186900382166101009081027fff000000000000000000000000000000000000000000000000000000000000ff928316179094558254848104831687019092169093029216919091179055611009565b815460ff1661377a576137758685613ff3565b613785565b613785868585614150565b805460ff166138455773ffffffffffffffffffffffffffffffffffffffff85165f90815260066020526040902080547fff000000000000000000000000000000000000000000000000000000000000ff8116610100918290047dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9081168801811690920217909155600580547fffff00000000000000000000000000000000000000000000000000000000000081169083168701909216919091179055612c9d565b612c9d858585613f6f565b5f610f7a8383614277565b5f64e8d4a510006fffffffffffffffffffffffffffffffff83166dffffffffffffffffffffffffffff85160204610f7a565b5f828152602090206002820401547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001831601610ac45760801c92915050565b6138f7817dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613ece565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526006602052604090205460ff161561394b575f61392d610ed8565b90506139398382611faa565b50613945838383614150565b50613955565b6139558282613ff3565b6040517dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821681525f9073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016133be565b5f6139c8610f81565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b5f805f613a2e868686614314565b90925090505f826005811115613a4657613a46614d9f565b14613a515781612bcc565b612bcc878261435b565b5f816005811115613a6e57613a6e614d9f565b03613a765750565b6001816005811115613a8a57613a8a614d9f565b03613ac1576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002816005811115613ad557613ad5614d9f565b03613b0c576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003816005811115613b2057613b20614d9f565b03613b57576040517fbf4bf5b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004816005811115613b6b57613b6b614d9f565b03613ba2576040517fff551e8900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005816005811115613bb657613bb6614d9f565b03613bed576040517f10c74b0300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f90815260016020908152604080832084845290915290205460ff1615613ca8576040517fd309466d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610e84565b5050565b5f805f613cbb8787878761439e565b90925090505f826005811115613cd357613cd3614d9f565b14613cde5781613ce8565b613ce8888261435b565b98975050505050505050565b5f610f7a83836144ab565b5f805f613d0c8585614566565b90925090505f826005811115613d2457613d24614d9f565b14613d2f5781613d39565b613d39868261435b565b9695505050505050565b5f805f8573ffffffffffffffffffffffffffffffffffffffff168585604051602401613d70929190614dcc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e0000000000000000000000000000000000000000000000000000000017905251613df19190614dec565b5f60405180830381855afa9150503d805f8114613e29576040519150601f19603f3d011682016040523d82523d5f602084013e613e2e565b606091505b5091509150818015613e4257506020815110155b8015613d39575080517f1626ba7e0000000000000000000000000000000000000000000000000000000090613e809083016020908101908401614be0565b149695505050505050565b804211156119c6576040517ff88f049000000000000000000000000000000000000000000000000000000000815260048101829052426024820152604401610e84565b805f036119c6576040517f77b8dde300000000000000000000000000000000000000000000000000000000815260048101829052602401610e84565b73ffffffffffffffffffffffffffffffffffffffff81166119c6576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610e84565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260066020526040902080547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010080830482168601909116027fff000000000000000000000000000000000000000000000000000000000000ff9091161790556117558282612aae565b73ffffffffffffffffffffffffffffffffffffffff82165f90815260066020526040902080547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010090910481169083168110156140c2576040517f03629ea100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316602483015284166044820152606401610e84565b81547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918490038216610100027fff000000000000000000000000000000000000000000000000000000000000ff9091161790915560058054808316939093039091167fffff00000000000000000000000000000000000000000000000000000000000090921691909117905550565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260066020526040902080547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100909104811690841681101561421f576040517f03629ea100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201527dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316602483015285166044820152606401610e84565b81547fff000000000000000000000000000000000000000000000000000000000000ff166101008583037dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021782556110848484612296565b5f816fffffffffffffffffffffffffffffffff165f036142c3576040517f23d359a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f7a6fffffffffffffffffffffffffffffffff83167dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851664e8d4a51000028161430e5761430e614c94565b046145aa565b5f80601b60ff84901c017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841661434d8783888461439e565b935093505050935093915050565b5f8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614396576005610f7a565b505f92915050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156143d35750600390505f6144a2565b8460ff16601b141580156143eb57508460ff16601c14155b156143fb5750600490505f6144a2565b604080515f81526020810180835288905260ff871691810191909152606081018590526080810184905260019060a0016020604051602081039080840390855afa15801561444b573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615614499575f8161449d565b60015f5b915091505b94509492505050565b5f816fffffffffffffffffffffffffffffffff165f036144f7576040517f23d359a300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f7a6fffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861664e8d4a51000028201018161430e5761430e614c94565b5f80825160411461457c5750600290505f6145a3565b6020830151604084015160608501515f1a919061459b8784848461439e565b945094505050505b9250929050565b5f6dffffffffffffffffffffffffffff8211156114fe576040517fca21dbd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114612da7575f80fd5b5f60208284031215614626575f80fd5b610f7a826145f3565b5f5b83811015614649578181015183820152602001614631565b50505f910152565b5f815180845261466881602086016020860161462f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f610f7a6020830184614651565b5f80604083850312156146bd575f80fd5b6146c6836145f3565b946020939093013593505050565b5f805f606084860312156146e6575f80fd5b6146ef846145f3565b92506146fd602085016145f3565b9150604084013590509250925092565b5f805f8060808587031215614720575f80fd5b614729856145f3565b966020860135965060408601359560600135945092505050565b803560ff81168114612da7575f80fd5b5f805f805f60a08688031215614767575f80fd5b614770866145f3565b94506020860135935061478560408701614743565b94979396509394606081013594506080013592915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681525f602060e060208401526147d960e084018a614651565b83810360408501526147eb818a614651565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b8181101561484b5783518352928401929184019160010161482f565b50909c9b505050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614899575f80fd5b813567ffffffffffffffff808211156148b4576148b461485d565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156148fa576148fa61485d565b81604052838152866020858801011115614912575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f805f60e0888a031215614947575f80fd5b614950886145f3565b965061495e602089016145f3565b955060408801359450606088013593506080880135925060a0880135915060c088013567ffffffffffffffff811115614995575f80fd5b6149a18a828b0161488a565b91505092959891949750929550565b5f805f805f60a086880312156149c4575f80fd5b6149cd866145f3565b94506149db602087016145f3565b93506040860135925060608601359150608086013567ffffffffffffffff811115614a04575f80fd5b614a108882890161488a565b9150509295509295909350565b5f805f805f805f80610100898b031215614a35575f80fd5b614a3e896145f3565b9750614a4c60208a016145f3565b979a9799505050506040860135956060810135956080820135955060a0820135945060c0820135935060e0909101359150565b5f805f60608486031215614a91575f80fd5b614a9a846145f3565b925060208401359150604084013567ffffffffffffffff811115614abc575f80fd5b614ac88682870161488a565b9150509250925092565b5f805f805f805f60e0888a031215614ae8575f80fd5b614af1886145f3565b9650614aff602089016145f3565b95506040880135945060608801359350614b1b60808901614743565b925060a0880135915060c0880135905092959891949750929550565b5f8060408385031215614b48575f80fd5b614b51836145f3565b9150614b5f602084016145f3565b90509250929050565b5f805f805f805f805f6101208a8c031215614b81575f80fd5b614b8a8a6145f3565b9850614b9860208b016145f3565b975060408a0135965060608a0135955060808a0135945060a08a01359350614bc260c08b01614743565b925060e08a013591506101008a013590509295985092959850929598565b5f60208284031215614bf0575f80fd5b5051919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818116838216019080821115614c5b57614c5b614bf7565b5092915050565b80820180821115610ac457610ac4614bf7565b5f60208284031215614c85575f80fd5b81518015158114610f7a575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82614cf4577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b81810381811115610ac457610ac4614bf7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d6957614d69614bf7565b5060010190565b5f60208284031215614d80575f80fd5b81516fffffffffffffffffffffffffffffffff81168114610f7a575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b828152604060208201525f614de46040830184614651565b949350505050565b5f8251614dfd81846020870161462f565b919091019291505056fea26469706673582212202d8748385752e1bc1e5a812a5da11c2d0a6d1529cbb7839752c726cea9f606fd64736f6c63430008170033000000000000000000000000866a2bf4e572cbcf37d5071a7a58503bfb36be1b000000000000000000000000431169728d75bd02f4053435b87d15c8d1fb2c72