0 txs
267 calls
constructor
No constructor.
functions
creationFee
viewfunction creationFee() view returns (uint256)
currentTokenId
viewfunction currentTokenId() view returns (uint256)
deployed
viewfunction deployed(address) view returns (bool)
dexFeeBasisPoints
viewfunction dexFeeBasisPoints() view returns (uint256)
dexTreasury
viewfunction dexTreasury() view returns (address)
estimateCollateralAmount
viewfunction estimateCollateralAmount(address tokenAddr, uint256 tokenAmount) view returns (uint256 collateralOut, uint256 helioFee, uint256 dexFee)
estimateTokenAmount
viewfunction estimateTokenAmount(address tokenAddr, address tokenIn, uint256 amountCollateral) view returns (uint256 tokensOut, uint256 oraAmount, uint256 creationFeeAmount, uint256 helioFee, uint256 dexFee)
feeBasisPoints
viewfunction feeBasisPoints() view returns (uint256)
getCometConfiguration
viewfunction getCometConfiguration() view returns (tuple)
getInitCode
viewfunction getInitCode(tuple _tokenConfig) view returns (bytes)
initialTokenSupply
viewfunction initialTokenSupply() view returns (uint256)
LPFeeDistributor
viewfunction LPFeeDistributor() view returns (address)
mcLowerLimit
viewfunction mcLowerLimit() view returns (uint256)
migrationFeeFixed
viewfunction migrationFeeFixed() view returns (uint256)
oraToken
viewfunction oraToken() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
poolCreationFee
viewfunction poolCreationFee() view returns (uint256)
readyForMigration
viewfunction readyForMigration(address) view returns (bool)
Swap
viewfunction Swap() view returns (address)
TokenCreationCode
viewfunction TokenCreationCode() view returns (bytes)
tokensMigrationThreshold
viewfunction tokensMigrationThreshold() view returns (uint256)
treasury
viewfunction treasury() view returns (address)
virtualCollateralReserves
viewfunction virtualCollateralReserves() view returns (uint256)
virtualTokenReserves
viewfunction virtualTokenReserves() view returns (uint256)
buyExactIn
payablefunction buyExactIn(address _token, uint256 _amountOutMin, uint256 _collateralAmount, address _tokenIn, uint256 _amountIn) payable
buyExactInWithPermit
payablefunction buyExactInWithPermit(address buyer, address _token, uint256 _amountOutMin, uint256 _collateralAmount, address _tokenIn, uint256 _amountIn, uint256 _permitDeadline, uint8 _v, bytes32 _r, bytes32 _s) payable
buyExactOut
payablefunction buyExactOut(address _token, uint256 _tokenAmount, uint256 _maxCollateralAmount, address _tokenIn, uint256 _amountIn) payable
buyExactOutWithPermit
payablefunction buyExactOutWithPermit(address buyer, address _token, uint256 _tokenAmount, uint256 _maxCollateralAmount, address _tokenIn, uint256 _amountIn, uint256 _permitDeadline, uint8 _v, bytes32 _r, bytes32 _s) payable
createSmartToken
payablefunction createSmartToken(tuple _tokenConfig, address _tokenIn, uint256 _tokenInAmount, bytes32 _salt) payable returns (address tokenAddress)
createSmartTokenAndBuy
payablefunction createSmartTokenAndBuy(tuple _tokenConfig, uint256 _tokenAmountMin, uint256 _collateralAmount, address _tokenIn, uint256 _tokenInAmount, bytes32 _salt) payable returns (address tokenAddress)
createSmartTokenAndBuyWithPermit
payablefunction createSmartTokenAndBuyWithPermit(tuple _tokenConfig, uint256 _tokenAmountMin, uint256 _collateralAmount, address _tokenIn, uint256 _tokenInAmount, uint256 _permitDeadline, uint8 _v, bytes32 _r, bytes32 _s, bytes32 _salt) payable returns (address tokenAddress)
createSmartTokenWithPermit
payablefunction createSmartTokenWithPermit(tuple _tokenConfig, address _tokenIn, uint256 _tokenInAmount, uint256 _permitDeadline, uint8 _v, bytes32 _r, bytes32 _s, bytes32 _salt) payable returns (address tokenAddress)
initialize
nonpayablefunction initialize()
migrate
nonpayablefunction migrate(address _token)
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
sellExactIn
nonpayablefunction sellExactIn(address _token, uint256 _tokenAmount, uint256 _amountCollateralMin)
sellExactInWithPermit
nonpayablefunction sellExactInWithPermit(address seller, address _token, uint256 _tokenAmount, uint256 _amountCollateralMin, uint256 _permitDeadline, uint8 _v, bytes32 _r, bytes32 _s)
sellExactOut
nonpayablefunction sellExactOut(address _token, uint256 _tokenAmountMax, uint256 _amountCollateral)
sellExactOutWithPermit
nonpayablefunction sellExactOutWithPermit(address seller, address _token, uint256 _tokenAmountMax, uint256 _amountCollateral, uint256 _permitDeadline, uint8 _v, bytes32 _r, bytes32 _s)
setConfig
nonpayablefunction setConfig(tuple curveConfig, tuple migrationConfig, tuple addressConfig, tuple configuration, address _swap)
setTokenCreationCode
nonpayablefunction setTokenCreationCode(bytes _tokenCreationCode)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
withdrawToken
nonpayablefunction withdrawToken(address token, address recipient, uint256 amount)
events
BuyAction
event BuyAction(address indexed buyer, address indexed token, uint256 tokenAmount, uint256 curvePositionAfterTrade, uint256 collateralAmount, uint256 fee, uint256 dexFee, uint256 curveProgressBps, uint256 marketCap)
Initialized
event Initialized(uint64 version)
MarketCapReached
event MarketCapReached(address token)
Migrated
event Migrated(address token, uint256 tokensToMigrate, uint256 collateralToMigrate, uint256 lendingPoolAmount, uint256 airDropAmount, uint256 tokensToBurn, uint256 migrationFee, address pair)
NewSmartToken
event NewSmartToken(uint256 indexed tokenId, address indexed addr, address indexed creator, uint256 creationFee)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
SellAction
event SellAction(address indexed seller, address indexed token, uint256 tokenAmount, uint256 curvePositionAfterTrade, uint256 collateralAmount, uint256 fee, uint256 dexFee, uint256 curveProgressBps, uint256 marketCap)
SetConfig
event SetConfig((uint256 initialTokenSupply, uint256 virtualTokenReserves, uint256 virtualCollateralReserves, uint256 feeBasisPoints, uint256 dexFeeBasisPoints) curveConfig, (uint256 migrationFeeFixed, uint256 poolCreationFee, uint256 tokensMigrationThreshold, uint256 mcLowerLimit, uint256 creationFee, uint256 lendingPoolPercentage, uint256 airDropPercentage) migrationConfig, (address treasury, address dexTreasury, address oraToken, address positionManager, address V3Factory, address lpFeeDistributor, address airDropAddress, address cometFactory) addressConfig, (string name, string symbol, address governor, address pauseGuardian, address baseToken, address priceOracle, address assetListFactory, address cometRouter, address swapRouter, uint64 supplyKink, uint64 supplyPerYearInterestRateSlopeLow, uint64 supplyPerYearInterestRateSlopeHigh, uint64 supplyPerYearInterestRateBase, uint64 borrowKink, uint64 borrowPerYearInterestRateSlopeLow, uint64 borrowPerYearInterestRateSlopeHigh, uint64 borrowPerYearInterestRateBase, uint64 storeFrontPriceFactor, uint64 trackingIndexScale, uint64 baseTrackingSupplySpeed, uint64 baseTrackingBorrowSpeed, uint104 baseMinForRewards, uint104 baseBorrowMin, uint104 targetReserves, (address asset, uint8 decimals, uint256 borrowCollateralFactor, uint256 liquidateCollateralFactor, uint256 liquidationFactor, uint256 supplyCap)[] assetConfigs) configuration, address swap)
TokenCreationCodeChanged
event TokenCreationCodeChanged(bytes tokenCreationCode)
Unpaused
event Unpaused(address account)
WithdrawERC20
event WithdrawERC20(address indexed token, address indexed recipient, uint256 amount)
WithdrawETH
event WithdrawETH(address indexed recipient, uint256 amount)
errors
AlreadyDeployed
error AlreadyDeployed()
DexTreasuryZeroValue
error DexTreasuryZeroValue()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FeeBPSCheckFailed
error FeeBPSCheckFailed()
InsufficientAmountIn
error InsufficientAmountIn()
InsufficientAmountOut
error InsufficientAmountOut()
InsufficientETH
error InsufficientETH()
InsufficientETHAmount
error InsufficientETHAmount()
InsufficientTokenAmount
error InsufficientTokenAmount()
InvalidAddress
error InvalidAddress()
InvalidInitialization
error InvalidInitialization()
InvalidTokenAddress
error InvalidTokenAddress()
InvalidTokenCreationCode
error InvalidTokenCreationCode()
NotInitializing
error NotInitializing()
NotReadyForMigration
error NotReadyForMigration()
ORATokenZeroAddress
error ORATokenZeroAddress()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RefundFailed
error RefundFailed()
TokenCreationCodeNotSet
error TokenCreationCodeNotSet()
TokenNotWhitelisted
error TokenNotWhitelisted()
TokensMigrationThresholdZeroValue
error TokensMigrationThresholdZeroValue()
TotalSupplyZeroValue
error TotalSupplyZeroValue()
TradingStopped
error TradingStopped()
TreasuryZeroValue
error TreasuryZeroValue()
VirtualCollateralReservesZeroValue
error VirtualCollateralReservesZeroValue()
VirtualTokenReservesZeroValue
error VirtualTokenReservesZeroValue()
ZeroAmount
error ZeroAmount()
creation bytecode
0x608080604052346015576147b2908161001a8239f35b5f80fdfe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081629a9b7b14612e7557508063015dce0d14612e1457806301e3366714612c75578063095b710d14612c585780630a43557a14612bf5578063145c53a614612b355780631655bc6214612b185780631724941f14612ab55780631eeb0afa146128eb57806330a2aa20146128c357806333d3025d146128aa5780633ebfdaaf146128825780633f4ba83a146128045780635c975abb146127d657806361d027b3146127ae5780636a59c891146125295780636bb922dd1461250c5780636d04eb9f146124ef578063715018a614612488578063727fef1a146123c35780638129fc1c1461222d5780638456cb59146121bc57806385bb39231461217f57806385f377ca1461215757806388bf6a8f146121315780638da5cb5b146120fd57806390ba7da314612069578063930415371461202d57806394b6c1601461200557806396314fb914611ae05780639c5029c814610cde578063ab5e5ff6146109c8578063ace1bfab1461098b578063b077e8691461094c578063b1ac2d0014610913578063b8606eef146108f6578063bb4abe1e146108ce578063be74615f146108b1578063ce5494bb146103c1578063d583ff48146102ed578063d9074900146102c4578063dce0b4e4146102a6578063e8e70c4c14610288578063eb13a7d21461026a578063f2fde38b1461023d5763fe94c2690361000f573461023a578060031936011261023a576020600b54604051908152f35b80fd5b503461023a57602036600319011261023a5761026761025a612eba565b610262613bbc565b613911565b80f35b503461023a578060031936011261023a576020600454604051908152f35b503461023a578060031936011261023a576020600654604051908152f35b503461023a578060031936011261023a576020600d54604051908152f35b503461023a578060031936011261023a576015546040516001600160a01b039091168152602090f35b503461023a578060031936011261023a5760405190806003549061031082613444565b808552916001811690811561039a5750600114610350575b61034c8461033881860382612fe3565b604051918291602083526020830190613177565b0390f35b600381525f51602061469d5f395f51905f52939250905b8082106103805750909150810160200161033882610328565b919260018160209254838588010152019101909291610367565b60ff191660208087019190915292151560051b850190920192506103389150839050610328565b503461076d57602036600319011261076d576103db612eba565b6103e3613982565b6103eb6139ba565b6001600160a01b03165f8181526027602052604090205460ff16156108a257805f52602860205260ff60405f20541615610893576017546001600160a01b0316813b1561076d5760405190631284fa2560e21b82526004820152604060248201526103206044820152806104766104656103648301613514565b8281036043190160648401526135b3565b601a546001600160a01b039081166084840152601b54811660a4840152601c54811660c4840152601d54811660e4840152601e548116610104840152601f5481166101248401526020805491821661014485015260a09190911c6001600160401b03908116610164850152602154808216610184860152604081811c83166101a4870152608082811c84166101c488015260c092831c6101e488015260225480851661020489015280831c851661022489015280821c851661024489015290921c6102648701526023548084166102848801529081901c83166102a4870152901c166102c48401526024546001600160681b038181166102e486015260689190911c81166103048501526025541661032484015282820360431901610344840152602680548084525f91825292909101915f5160206146dd5f395f51905f52915b8181106108385750505090805f92038183865af1801561082d57610818575b5060405163011fa75760e71b815260a08160048186865af191821561080d57839284928590869087936107b6575b50838752602860209081526040808920805460ff1916905551636bb922dd60e01b81529081600481885afa9081156107ab578891610779575b5060405163be74615f60e01b815290602082600481895afa90811561073457899161073f575b61066d92506134bd565b916040519563a8aa1b3160e01b8752602087600481895afa948515610734577f39b6ee16d6a024c7733d047415d2cb3c043e4064b60bf392b839327dcb689f2998610100988b97610703575b506040805198895260208901919091528701526060860152608085015260a084015260c08301526001600160a01b031660e0820152a160015f51602061471d5f395f51905f525580f35b61072691975060203d60201161072d575b61071e8183612fe3565b8101906134f5565b955f6106b9565b503d610714565b6040513d8b823e3d90fd5b90506020823d602011610771575b8161075a60209383612fe3565b8101031261076d5761066d915190610663565b5f80fd5b3d915061074d565b90506020813d6020116107a3575b8161079460209383612fe3565b8101031261076d57515f61063d565b3d9150610787565b6040513d8a823e3d90fd5b9450505050915060a0813d60a011610805575b816107d660a09383612fe3565b810103126108015780519160208201519260408301519260806060820151910151919493905f610604565b8280fd5b3d91506107c9565b6040513d85823e3d90fd5b6108259192505f90612fe3565b5f905f6105d6565b6040513d5f823e3d90fd5b82546001600160a01b038116855260a090811c60ff1660208601526001808501546040870152600285015460608701526003850154608087015260048501549186019190915286955060c090940193600590930192016105b7565b633f7a101960e01b5f5260045ffd5b6307c241ad60e51b5f5260045ffd5b3461076d575f36600319011261076d576020600a54604051908152f35b3461076d575f36600319011261076d576001546040516001600160a01b039091168152602090f35b3461076d575f36600319011261076d576020600754604051908152f35b61093961091f366130d8565b9361092b939193613982565b6109336139ba565b33613de3565b60015f51602061471d5f395f51905f5255005b3461076d57602036600319011261076d576004356001600160401b03811161076d5760e0600319823603011261076d5761033861034c91600401613687565b3461076d57602036600319011261076d576001600160a01b036109ac612eba565b165f526028602052602060ff60405f2054166040519015158152f35b3461076d575f36600319011261076d5760606103006040516109e981612fac565b8281528260208201525f60408201525f838201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f6101208201525f6101408201525f6101608201525f6101808201525f6101a08201525f6101c08201525f6101e08201525f6102008201525f6102208201525f6102408201525f6102608201525f6102808201525f6102a08201525f6102c08201525f6102e08201520152604051610a9381612fac565b604051610aaa81610aa381613514565b0382612fe3565b8152604051610abc81610aa3816135b3565b602082015260018060a01b03601a5416604082015260018060a01b03601b5416606082015260018060a01b03601c5416608082015260018060a01b03601d541660a082015260018060a01b03601e541660c082015260018060a01b03601f541660e08201526001600160401b0360205460018060a01b03811661010084015260a01c166101208201526021546001600160401b0381166101408301526001600160401b038160401c166101608301526001600160401b038160801c1661018083015260c01c6101a08201526022546001600160401b0381166101c08301526001600160401b038160401c166101e08301526001600160401b038160801c1661020083015260c01c6102208201526001600160401b03602354818116610240840152818160401c1661026084015260801c166102808201526001600160681b036024548181166102a084015260681c166102c08201526001600160681b03602554166102e082015260265490610c3082613160565b91610c3e6040519384612fe3565b80835260265f9081525f5160206146dd5f395f51905f52602085015b838310610c805761034c858761030082015260405191829160208352602083019061319b565b60056020600192604051610c9381612fc8565b60ff8654868060a01b038116835260a01c16838201528486015460408201526002860154606082015260038601546080820152600486015460a0820152815201920192019190610c5a565b3461076d5736600319016102c0811261076d5760a01361076d5760405160a081018181106001600160401b03821117611840576040526004358152602435602082015260443560408201526064356060820152608435608082015260e060a31936011261076d5760405190610d5282612f91565b60a435825260c435602083015260e43560408301526101043560608301526101243560808301526101443560a08301526101643560c08301526101003661018319011261076d5760405161010081018181106001600160401b0382111761184057604052610184356001600160a01b038116810361076d5781526101a4356001600160a01b038116810361076d5760208201526101c4356001600160a01b038116810361076d5760408201526101e4356001600160a01b038116810361076d576060820152610204356001600160a01b038116810361076d576080820152610224356001600160a01b038116810361076d5760a0820152610244356001600160a01b038116810361076d5760c0820152610264356001600160a01b038116810361076d5760e08201526001600160401b03610284351161076d57610320610284353603600319011261076d57604051610eaa81612fac565b61028435600401356001600160401b03811161076d57610ed3906004369161028435010161311a565b815260246102843501356001600160401b03811161076d57610efe906004369161028435010161311a565b6020820152610f1260446102843501612ed0565b6040820152610f2660646102843501612ed0565b6060820152610f3a60846102843501612ed0565b6080820152610f4e60a46102843501612ed0565b60a0820152610f6260c46102843501612ed0565b60c0820152610f7660e46102843501612ed0565b60e0820152610f8b6101046102843501612ed0565b610100820152610fa16101246102843501613138565b610120820152610fb76101446102843501613138565b610140820152610fcd6101646102843501613138565b610160820152610fe36101846102843501613138565b610180820152610ff96101a46102843501613138565b6101a082015261100f6101c46102843501613138565b6101c08201526110256101e46102843501613138565b6101e082015261103b6102046102843501613138565b6102008201526110516102246102843501613138565b6102208201526110676102446102843501613138565b61024082015261107d6102646102843501613138565b610260820152611091610284803501613138565b6102808201526110a76102a4610284350161314c565b6102a08201526110bd6102c4610284350161314c565b6102c08201526110d36102e4610284350161314c565b6102e08201526103046102843501356001600160401b03811161076d5736602382610284350101121561076d5761111260048261028435010135613160565b906111206040519283612fe3565b6004610284358201908101358084526020840192913660c0909202016024011161076d57602481610284350101915b6024610284358301600481013560c00201018310611a6a575050506103008201526102a435916001600160a01b038316830361076d5761118d613bbc565b835115611a5b57602084015115611a4c57604084015115611a3d57604085015115611a2e5780516001600160a01b031615611a1f5760208101516001600160a01b031615611a105760408101516001600160a01b031615611a0157612710608085015110156119f257612710606085015110156119f2578351600455602080850151600555604080860151600655606080870151600755608080880151600855885160095588840151600a5588830151600b5588820151600c5588810151600d5560a0808a0151600e5560c0808b0151600f558651601080546001600160a01b03199081166001600160a01b03938416179091559688015160118054891691831691909117905594870151601280548816918716919091179055928601516013805487169186169190911790559085015160148054861691851691909117905584015160158054851691841691909117905583015160168054841691831691909117905560e083015160178054909316911617905581518051906001600160401b03821161184057611320601854613444565b601f81116119a4575b50602090601f83116001146119215761135992915f9183611854575b50508160011b915f199060031b1c19161790565b6018555b60208201518051906001600160401b0382116118405761137e601954613444565b601f81116118c8575b50602090601f831160011461185f576113b692915f91836118545750508160011b915f199060031b1c19161790565b6019555b604082810151601a80546001600160a01b039283166001600160a01b0319918216179091556060850151601b8054918416918316919091179055608080860151601c805491851691841691909117905560a080870151601d805491861691851691909117905560c080880151601e805491871691861691909117905560e0880151601f80549187169190951617909355610100870151602080546101208a015167ffffffffffffffff60a01b941b93909316919095166001600160e01b031990921691909117179092556101408501516101608601516101808701516101a08801516001600160c01b031990851b811667ffffffffffffffff60801b92871b83166001600160401b039586166fffffffffffffffff0000000000000000958a1b86161717176021556101c08901516101e08a01516102008b01516102208c015190971b831696881b841691861690891b8516171794909417602255610240880151602380546102608b01516102808c015190981b9093169690971b909216919092169190921617171790556102a0820151602480546102c08501516cffffffffffffffffffffffffff60681b60689190911b166001600160681b039384166001600160d01b0319909216919091171790556102e083015160258054919092166cffffffffffffffffffffffffff199091161790556103008201518051959068010000000000000000871161184057602654876026558088106117c7575b5060265f9081525f5160206146dd5f395f51905f5297916020015b82821061175757600280546001600160a01b038981166001600160a01b0319928316179092556040878101805160018054918616919094161790925580518b5181526020808d0151818301528c830151828401526060808e0151818401526080808f0151818501528a5160a0808601919091528b84015160c080870191909152958c015160e0808701919091528c8401516101008701528c830151610120870152818d0151610140870152868d01516101608701528d518916610180870152938d015188166101a0860152955187166101c0850152908b015186166101e08401528a01518516610200830152928901518416610220820152908801518316610240820152908701519091166102608201526102c061028082018190527f8ddaa243da73dfc34de4b9e190681fc74726b508800e3a17c2978f8886963178919081908a906117419083018b61319b565b6001600160a01b039091166102a08301520390a1005b805180518a546020838101516001600160a81b03199092166001600160a01b03939093169290921760a091821b60ff60a01b16178c55604083015160018d810191909155606084015160028e0155608084015160038e015592015160048c015560059a909a0199920191016115f2565b8060050290600582040361182c578760050260058104890361182c5760265f525f5160206146dd5f395f51905f5291820191015b81811061180857506115d7565b805f600592555f60018201555f60028201555f60038201555f6004820155016117fb565b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b015190508880611345565b919060195f52805f20905f935b601f19841685106118ad576001945083601f19811610611895575b505050811b016019556113ba565b01515f1960f88460031b161c19169055878080611887565b8181015183556020948501946001909301929091019061186c565b60195f52611911907f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695601f850160051c81019160208610611917575b601f0160051c019061347c565b87611387565b9091508190611904565b90601f1983169160185f527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e925f5b81811061198c5750908460019594939210611974575b505050811b0160185561135d565b01515f1960f88460031b161c19169055878080611966565b92936020600181928786015181550195019301611950565b60185f526119ec907fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e601f850160051c8101916020861061191757601f0160051c019061347c565b87611329565b63ffae119760e01b5f5260045ffd5b636dc8688960e01b5f5260045ffd5b63c764c12360e01b5f5260045ffd5b630172f23760e11b5f5260045ffd5b630c7a88c360e21b5f5260045ffd5b6307b4f43d60e11b5f5260045ffd5b6306bb2a0d60e31b5f5260045ffd5b63ef7facc160e01b5f5260045ffd5b60c08336031261076d5760405190611a8182612fc8565b611a8a84612ed0565b825260208401359160ff8316830361076d5760206004928282958360c095015260408801356040820152606088013560608201526080880135608082015260a088013560a082015281520194019391505061114f565b3461076d57611aee36612ee4565b916001600160a01b031680611dcb575060055490600654916007549160085492600454955b60015481906001600160a01b03858116911681141580611dc2575b15611cc657505060025460405163408ab52960e01b81526001600160a01b03948516600482015260248101929092529192909160209183916044918391165afa90811561082d575f91611c92575b50612710611b9b81611b93611ba394955b866134aa565b0495866134aa565b0480946134e8565b91611bb784611bb285856134e8565b6134e8565b94611bdf611bd8611bc884896134aa565b611bd289856134bd565b906134ca565b96826134bd565b611be987846134e8565b97670de0b6b3a7640000820291808304670de0b6b3a7640000149015171561182c5760a098611c24611c2992670de0b6b3a7640000946134aa565b6134ca565b04600c541115611c56575b5050600d54906040519485526020850152604084015260608301526080820152f35b611c859550611c8b9250611bd290611c7c611c76600554600b54906134e8565b846134e8565b968791826134aa565b926134e8565b8580611c34565b90506020813d602011611cbe575b81611cad60209383612fe3565b8101031261076d5751612710611b7c565b3d9150611ca0565b90935015611ce3575b50612710611b9b81611b93611ba394611b8d565b6002546040516315ab88c960e31b81529293506001600160a01b03169190602082600481865afa92831561082d57611d55936020935f91611da5575b5060405163408ab52960e01b81526001600160a01b03909116600482015260248101929092529092839190829081906044820190565b03915afa90811561082d575f91611d71575b5090612710611ccf565b90506020813d602011611d9d575b81611d8c60209383612fe3565b8101031261076d5751612710611d67565b3d9150611d7f565b611dbc9150843d861161072d5761071e8183612fe3565b8a611d1f565b50801515611b2e565b805f52602760205260ff60405f205416156108a25760405163fd62bcd760e01b8152602081600481855afa90811561082d575f91611fd6575b50611fc757604051630b2ade3160e11b8152602081600481855afa90811561082d575f91611f95575b50604051633a39c31360e21b8152602081600481865afa90811561082d575f91611f63575b509260405163b8606eef60e01b8152602081600481875afa90811561082d575f91611f31575b5060405163095b710d60e01b8152602081600481885afa90811561082d575f91611efe575b50602060049195604051928380926318160ddd60e01b82525afa90811561082d575f91611ecc575b5095611b13565b90506020813d602011611ef6575b81611ee760209383612fe3565b8101031261076d575187611ec5565b3d9150611eda565b90506020813d602011611f29575b81611f1960209383612fe3565b8101031261076d57516020611e9d565b3d9150611f0c565b90506020813d602011611f5b575b81611f4c60209383612fe3565b8101031261076d575186611e78565b3d9150611f3f565b90506020813d602011611f8d575b81611f7e60209383612fe3565b8101031261076d575185611e52565b3d9150611f71565b90506020813d602011611fbf575b81611fb060209383612fe3565b8101031261076d575184611e2d565b3d9150611fa3565b63058aab2d60e21b5f5260045ffd5b611ff8915060203d602011611ffe575b611ff08183612fe3565b810190613492565b84611e04565b503d611fe6565b3461076d5761093961201636613055565b9161201f613982565b6120276139ba565b33613f75565b3461076d576109396120646120413661307f565b92612053989498979597929192613982565b61205b6139ba565b87308789613c32565b613f75565b608036600319011261076d576004356001600160401b03811161076d5760e0600319823603011261076d576120da6020916120ce6120a5612ea4565b6120ad613982565b6120b56139ba565b600d546120c460c48501613430565b9160443590613fc5565b60643590600401614276565b60015f51602061471d5f395f51905f52556040516001600160a01b039091168152f35b3461076d575f36600319011261076d575f5160206146bd5f395f51905f52546040516001600160a01b039091168152602090f35b61093961213d366130d8565b93612149939193613982565b6121516139ba565b33613cb5565b3461076d575f36600319011261076d576011546040516001600160a01b039091168152602090f35b3461076d57602036600319011261076d576001600160a01b036121a0612eba565b165f526027602052602060ff60405f2054166040519015158152f35b3461076d575f36600319011261076d576121d4613bbc565b6121dc6139ba565b600160ff195f5160206146fd5f395f51905f525416175f5160206146fd5f395f51905f52557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b3461076d575f36600319011261076d575f51602061473d5f395f51905f525460ff8160401c1615906001600160401b038116801590816123bb575b60011490816123b1575b1590816123a8575b506123995767ffffffffffffffff1981166001175f51602061473d5f395f51905f52558161236d575b506122ac614571565b6122b4614571565b6122bd33613911565b6122c5614571565b6122cd614571565b60015f51602061471d5f395f51905f52556122e6614571565b6122ee614571565b60ff195f5160206146fd5f395f51905f5254165f5160206146fd5f395f51905f525561231657005b68ff0000000000000000195f51602061473d5f395f51905f5254165f51602061473d5f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b68ffffffffffffffffff191668010000000000000001175f51602061473d5f395f51905f5255816122a3565b63f92ee8a960e01b5f5260045ffd5b9050158361227a565b303b159150612272565b839150612268565b61014036600319011261076d576004356001600160401b03811161076d5760e0600319823603011261076d576044356123fa612e8e565b9060c4359160ff8316830361076d576020936120da93612418613982565b6124206139ba565b6001546001600160a01b03908116908416811461244f575b505060843592610124359160243590600401613a3b565b6124819161245f60c48501613430565b90610104359260e4359260a43591612479600d548b6134bd565b913091613c32565b8580612438565b3461076d575f36600319011261076d576124a0613bbc565b5f5160206146bd5f395f51905f5280546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461076d575f36600319011261076d576020600c54604051908152f35b3461076d575f36600319011261076d576020600954604051908152f35b3461076d57604036600319011261076d57612542612eba565b602435906001600160a01b0316806125c357506060906125a96125b0600554611bb261271061259f8161259761259060065496611bd26007549b61258a6008549a5b826134aa565b926134bd565b98896134aa565b0493846134aa565b04938480936134e8565b80956134e8565b9160405192835260208301526040820152f35b805f52602760205260ff60405f205416156108a25760405163fd62bcd760e01b8152602081600481855afa90811561082d575f9161278f575b50611fc757604051630b2ade3160e11b8152602081600481855afa90811561082d575f9161275d575b5091604051633a39c31360e21b8152602081600481865afa90811561082d575f9161272b575b509060405163b8606eef60e01b8152602081600481875afa90811561082d575f916126f8575b506020600491946040519283809263095b710d60e01b82525afa90811561082d575f916126c2575b5091611bb261271061259f8161259761259060609a611bd26125b09961258a6125a99c9a612584565b9290506020833d6020116126f0575b816126de60209383612fe3565b8101031261076d579151611bb2612699565b3d91506126d1565b90506020813d602011612723575b8161271360209383612fe3565b8101031261076d57516020612671565b3d9150612706565b90506020813d602011612755575b8161274660209383612fe3565b8101031261076d57518461264b565b3d9150612739565b90506020813d602011612787575b8161277860209383612fe3565b8101031261076d575183612625565b3d915061276b565b6127a8915060203d602011611ffe57611ff08183612fe3565b836125fc565b3461076d575f36600319011261076d576010546040516001600160a01b039091168152602090f35b3461076d575f36600319011261076d57602060ff5f5160206146fd5f395f51905f5254166040519015158152f35b3461076d575f36600319011261076d5761281c613bbc565b5f5160206146fd5f395f51905f525460ff8116156128735760ff19165f5160206146fd5f395f51905f52557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b3461076d575f36600319011261076d576002546040516001600160a01b039091168152602090f35b3461076d576109396128be6120413661307f565b613e37565b3461076d576109396128d436613055565b916128dd613982565b6128e56139ba565b33613e37565b3461076d57602036600319011261076d576004356001600160401b03811161076d573660238201121561076d5761292c90369060248160040135910161301f565b612934613bbc565b805115612aa65780516001600160401b03811161184057612956600354613444565b601f8111612a6b575b506020601f82116001146129d957916129b2826129c9937f6322457b208b7edb93fa714d4f8cdb17bd94158d17977c5e344f919f90f74baa955f916129ce575b508160011b915f199060031b1c19161790565b600355604051918291602083526020830190613177565b0390a1005b90508301518661299f565b601f1982169060035f525f51602061469d5f395f51905f52915f5b818110612a535750927f6322457b208b7edb93fa714d4f8cdb17bd94158d17977c5e344f919f90f74baa9492600192826129c99610612a3b575b5050811b01600355610338565b8401515f1960f88460031b161c191690558580612a2e565b919260206001819286890151815501940192016129f4565b60035f52612aa0905f51602061469d5f395f51905f52601f840160051c8101916020851061191757601f0160051c019061347c565b8261295f565b63cbfecc3960e01b5f5260045ffd5b610939612ac136612f1e565b91612ad3999499989598979697613982565b612adb6139ba565b6001546001600160a01b03908116949089908b168614612b01575b505050505050613de3565b612b0d95873091613c32565b878080808088612af6565b3461076d575f36600319011261076d576020600554604051908152f35b61010036600319011261076d576004356001600160401b03811161076d5760e0600319823603011261076d57612b69612ea4565b6084359160ff8316830361076d57612bba6120da92602094612b89613982565b612b916139ba565b6001546001600160a01b039081169083168114612bc6575b5050600d546120c460c48501613430565b60e43590600401614276565b612bee91612bd660c48701613430565b9060c4359260a4359260643591600d54913091613c32565b8580612ba9565b610939612c0136612f1e565b91612c13999499989598979697613982565b612c1b6139ba565b6001546001600160a01b03908116949089908b168614612c41575b505050505050613cb5565b612c4d95873091613c32565b878080808088612c36565b3461076d575f36600319011261076d576020600854604051908152f35b3461076d57612c8336612ee4565b90612c8c613bbc565b612c94613982565b6001600160a01b038116928315612e05576001600160a01b031680158015612de8575b15612d365750814710612d27575f80808481945af1612cd4613401565b5015612d185760207f566e45b1c8057e725bf62796a7f1d37ae294393cab069725a09daddd1af98b7991604051908152a260015f51602061471d5f395f51905f5255005b633c31275160e21b5f5260045ffd5b633b38932f60e11b5f5260045ffd5b91906040516370a0823160e01b8152306004820152602081602481875afa801561082d5783915f91612db3575b5010612da45781612d987f33c35f9541201e342d5e7467016e65a0a06182eb12a5f17103f71cec95b6cb299360209386613bef565b604051908152a3610939565b631762402160e11b5f5260045ffd5b9150506020813d602011612de0575b81612dcf60209383612fe3565b8101031261076d5782905186612d63565b3d9150612dc2565b5073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8114612cb7565b63e6c4247b60e01b5f5260045ffd5b60c036600319011261076d576004356001600160401b03811161076d5760e0600319823603011261076d576120da602091612e4d612e8e565b612e55613982565b612e5d6139ba565b6084359160a435906044359060243590600401613a3b565b3461076d575f36600319011261076d576020905f548152f35b606435906001600160a01b038216820361076d57565b602435906001600160a01b038216820361076d57565b600435906001600160a01b038216820361076d57565b35906001600160a01b038216820361076d57565b606090600319011261076d576004356001600160a01b038116810361076d57906024356001600160a01b038116810361076d579060443590565b61014090600319011261076d576004356001600160a01b038116810361076d57906024356001600160a01b038116810361076d579060443590606435906084356001600160a01b038116810361076d579060a4359060c4359060e43560ff8116810361076d579061010435906101243590565b60e081019081106001600160401b0382111761184057604052565b61032081019081106001600160401b0382111761184057604052565b60c081019081106001600160401b0382111761184057604052565b90601f801991011681019081106001600160401b0382111761184057604052565b6001600160401b03811161184057601f01601f191660200190565b92919261302b82613004565b916130396040519384612fe3565b82948184528183011161076d578281602093845f960137010152565b606090600319011261076d576004356001600160a01b038116810361076d57906024359060443590565b61010090600319011261076d576004356001600160a01b038116810361076d57906024356001600160a01b038116810361076d579060443590606435906084359060a43560ff8116810361076d579060c4359060e43590565b60a090600319011261076d576004356001600160a01b038116810361076d579060243590604435906064356001600160a01b038116810361076d579060843590565b9080601f8301121561076d578160206131359335910161301f565b90565b35906001600160401b038216820361076d57565b35906001600160681b038216820361076d57565b6001600160401b0381116118405760051b60200190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b6103006131c86131b683516103208652610320860190613177565b60208401518582036020870152613177565b9160018060a01b03604082015116604085015260018060a01b03606082015116606085015260018060a01b03608082015116608085015260018060a01b0360a08201511660a085015260018060a01b0360c08201511660c085015260018060a01b0360e08201511660e085015260018060a01b03610100820151166101008501526001600160401b03610120820151166101208501526001600160401b03610140820151166101408501526001600160401b03610160820151166101608501526001600160401b03610180820151166101808501526001600160401b036101a0820151166101a08501526001600160401b036101c0820151166101c08501526001600160401b036101e0820151166101e08501526001600160401b03610200820151166102008501526001600160401b03610220820151166102208501526001600160401b03610240820151166102408501526001600160401b03610260820151166102608501526001600160401b03610280820151166102808501526001600160681b036102a0820151166102a08501526001600160681b036102c0820151166102c08501526001600160681b036102e0820151166102e0850152015191610300818303910152602080835192838152019201905f5b8181106133ac5750505090565b909192602060c060019260a087518580831b03815116835260ff858201511685840152604081015160408401526060810151606084015260808101516080840152015160a0820152019401910191909161339f565b3d1561342b573d9061341282613004565b916134206040519384612fe3565b82523d5f602084013e565b606090565b356001600160a01b038116810361076d5790565b90600182811c92168015613472575b602083101461345e57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691613453565b818110613487575050565b5f815560010161347c565b9081602091031261076d5751801515810361076d5790565b8181029291811591840414171561182c57565b9190820180921161182c57565b81156134d4570490565b634e487b7160e01b5f52601260045260245ffd5b9190820391821161182c57565b9081602091031261076d57516001600160a01b038116810361076d5790565b6018545f929161352382613444565b8082529160018116908115613597575060011461353e575050565b60185f9081529293509091907fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e5b83831061357d575060209250010190565b60018160209294939454838587010152019101919061356c565b9050602093945060ff929192191683830152151560051b010190565b6019545f92916135c282613444565b808252916001811690811561359757506001146135dd575050565b60195f9081529293509091907f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96955b83831061361c575060209250010190565b60018160209294939454838587010152019101919061360b565b9035601e198236030181121561076d5701602081359101916001600160401b03821161076d57813603831361076d57565b908060209392818452848401375f828201840152601f01601f1916010190565b60035461369381613444565b15613902576040516138558160208101946102a086526137596137386137176136f66136d56136c28680613636565b60e06102c08a01526103a0890191613667565b6136e26020870187613636565b8883036102bf19016102e08a015290613667565b6137036040860186613636565b8783036102bf190161030089015290613667565b6137246060850185613636565b8683036102bf190161032088015290613667565b6137456080840184613636565b8583036102bf190161034087015290613667565b60a0820135610360840152906001600160a01b039061377a9060c001612ed0565b1661038083015260045460408301526005546060830152600654608083015260075460a083015260085460c083015260095460e0830152600a54610100830152600b54610120830152600c54610140830152600d54610160830152600e54610180830152600f546101a08301526010546001600160a01b039081166101c084015260115481166101e084015260125481166102008401526013548116610220840152601454811661024084015260155481166102608401526016548116610280840152601754166102a083015203601f198101835282612fe3565b6040519283915f9061386685613444565b94600181169081156138e25750600114613897575b6131359450518092825e015f815203601f198101835282612fe3565b905060035f525f51602061469d5f395f51905f52935f5b8181106138c65750613135945083016020019061387b565b85546020828901810191909152600190960195879550016138ae565b602092935061313596915060ff191682860152801515028401019061387b565b630531917160e11b5f5260045ffd5b6001600160a01b0316801561396f575f5160206146bd5f395f51905f5280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b60025f51602061471d5f395f51905f5254146139ab5760025f51602061471d5f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b60ff5f5160206146fd5f395f51905f5254166139d257565b63d93c066560e01b5f5260045ffd5b91908260e091031261076d576040516139f981612f91565b60c0808294805184526020810151602085015260408101516040850152606081015160608501526080810151608085015260a081015160a08501520151910152565b613a68613a6d93949295979697613a5486600d546134bd565b60c0840199613a628b613430565b92613fc5565b614276565b9381613a7857505050565b600154613a9190839087906001600160a01b0316613bef565b6001600160a01b0385169260e090613aa883613430565b60405163257ac69160e11b81526001600160a01b0391909116600482015260248101919091526044810193909352826064815f875af191821561082d575f92613b6e575b50613b0d5f51602061475d5f395f51905f5291613b088761436c565b613430565b60608084015160808086015186516020808901516040808b015160a0808d015160c09d8e015184519a8b52958a019790975291880194909452968601529284015292820192909252938401526001600160a01b0316918060e081015b0390a3565b90915060e03d60e011613bb5575b613b868183612fe3565b810160e08282031261076d57613bad613b0d915f51602061475d5f395f51905f52936139e1565b929150613aec565b503d613b7c565b5f5160206146bd5f395f51905f52546001600160a01b03163303613bdc57565b63118cdaa760e01b5f523360045260245ffd5b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152613c3091613c2b606483612fe3565b614407565b565b92969194909290916001600160a01b0390911690813b1561076d575f9660ff889460e4976040519b8c9a8b9963d505accf60e01b8b5260018060a01b031660048b015260018060a01b031660248a01526044890152606488015216608486015260a485015260c48401525af1801561082d57613cab5750565b5f613c3091612fe3565b9392613ccc60e0929396613d089587848a886144ef565b60405163c68255a5831b81526001600160a01b038681166004830152602482019790975260448101919091529482169492839081906064820190565b03815f885af191821561082d575f92613d97575b5090613d355f51602061475d5f395f51905f529261436c565b606081810151608080840151845160208087015160408089015160a0808b015160c09b8c015184519a8b52958a019790975291880194909452968601529284015292820192909252918201526001600160a01b03909216918060e08101613b69565b915060e03d60e011613ddc575b613dae8184612fe3565b820160e08382031261076d57613dd5613d35915f51602061475d5f395f51905f52946139e1565b9250613d1c565b503d613da4565b9392613dfa60e0929396613d089587848a886144ef565b60405163257ac69160e11b81526001600160a01b038681166004830152602482019790975260448101919091529482169492839081906064820190565b919260e090613e8792613e4a8682614546565b604051630185155160e51b81526001600160a01b038681166004830152602482019790975260448101929092529094169391829081906064820190565b03815f875af1801561082d575f90613f1b575b602081810151608080840151845160408087015160608089015160a0808b015160c09b8c015186519a8b529a8a0197909752938801949094528601529284015290820152918201526001600160a01b03909216917f654c44c6513c56b8f6221dda613a6f14136cb5b29cf4069b816de6e39eea694491508060e08101613b69565b5060e03d60e011613f6e575b613f318183612fe3565b81019060e08183031261076d577f654c44c6513c56b8f6221dda613a6f14136cb5b29cf4069b816de6e39eea694491613f69916139e1565b613e9a565b503d613f27565b919260e090613e8792613f888682614546565b6040516304a5b60b60e51b81526001600160a01b038681166004830152602482019790975260448101929092529094169391829081906064820190565b929091928215614267576001546001600160a01b0382811691168103614062575050908281106140535760015461400a908290309033906001600160a01b031661459c565b906140136145e0565b8282106140445782821161402657505050565b61403e613c309360018060a01b0360015416936134e8565b91613bef565b637294b85560e11b5f5260045ffd5b636fad977360e11b5f5260045ffd5b8015801561424a575b15614194575050813410614185576002546040516315ab88c960e31b81526001600160a01b0390911690602081600481855afa90811561082d5784926020926140ef925f91614168575b50604051630507dc5160e51b81526001600160a01b0390911660048201526024810185905230604482015293849283919082906064820190565b03925af190811561082d575f91614136575b5091803411614111575b50614013565b5f808061411f8194346134e8565b335af161412a613401565b5015612d18575f61410b565b90506020813d602011614160575b8161415160209383612fe3565b8101031261076d57515f614101565b3d9150614144565b61417f9150843d861161072d5761071e8183612fe3565b5f6140b5565b631a84bc4160e21b5f5260045ffd5b90836141b46141f7949560209460018060a01b036002541690339061459c565b600254604051630507dc5160e51b81526001600160a01b0393841660048201526024810192909252306044830152909384929091169082905f9082906064820190565b03925af190811561082d575f91614218575b50906142136145e0565b614013565b90506020813d602011614242575b8161423360209383612fe3565b8101031261076d57515f614209565b3d9150614226565b5073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee811461406b565b631f2a200560e01b5f5260045ffd5b91905f54906001820180921161182c5761428f84613687565b600d5480614349575b506020815191015ff5926001600160a01b03841690811561433a57815f52602760205260ff60405f20541661432b5760c06142ed91835f52602760205260405f20600160ff19825416179055845f5501613430565b600d546040519081526001600160a01b0390911692907ffd11fd28e8878865d5a9f79613717c32e55df6dfcddbc8dbf9f6d765210013aa90602090a4565b63a6ef0ba160e01b5f5260045ffd5b630f58058360e11b5f5260045ffd5b60015460105461436692916001600160a01b039182169116613bef565b5f614298565b60405163fd62bcd760e01b81526001600160a01b039190911690602081600481855afa90811561082d575f916143e8575b506143a55750565b6020817f28a67e00d20c3495179267f9b20db42e0ba4ec7111a6d7cc345e1522404b8100925f526028825260405f20600160ff19825416179055604051908152a1565b614401915060203d602011611ffe57611ff08183612fe3565b5f61439d565b906144679160018060a01b03165f8060405193614425604086612fe3565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1614461613401565b916145ff565b80519081159182156144d5575b50501561447d57565b60405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608490fd5b6144e89250602080918301019101613492565b5f80614474565b6001600160a01b0381165f81815260276020526040902054959693959194929160ff16156108a2571561433a5715614267578315614267578361453592613c3096613fc5565b6001546001600160a01b0316613bef565b6001600160a01b03165f8181526027602052604090205460ff16156108a2571561433a571561426757565b60ff5f51602061473d5f395f51905f525460401c161561458d57565b631afcd79f60e31b5f5260045ffd5b6040516323b872dd60e01b60208201526001600160a01b039283166024820152929091166044830152606480830193909352918152613c3091613c2b608483612fe3565b346145e757565b5f80808034335af16145f7613401565b5015612d1857565b919290156146615750815115614613575090565b3b1561461c5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156146745750805190602001fd5b60405162461bcd60e51b815260206004820152908190614698906024830190613177565b0390fdfec2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300744a2cf8fd7008e3d53b67916e73460df9fa5214e3ef23dd4259ca09493a3594cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0024d7fa8dc91de8439ddab2bf2fed811078f39a1b400ca47cc66a0ab7a8e361d6a264697066735822122037f48bd5b73ecba419d6d9d016df2908cd9d6176ae2cecda198862594ea094cf64736f6c634300081c0033