0 txs
459 calls
constructor
constructor((address baseToken0, uint8 baseToken0Decimals, address quoteToken0, uint8 quoteToken0Decimals, address baseToken1, uint8 baseToken1Decimals, address quoteToken1, uint8 quoteToken1Decimals, address frxEthErc20, address fraxErc20, address uniV3PairAddress, uint32 twapDuration, address fraxUsdChainlinkFeedAddress, uint256 fraxUsdMaximumOracleDelay, address ethUsdChainlinkFeed, uint256 maxEthUsdOracleDelay, address curvePoolEmaPriceOracleAddress, uint256 minimumCurvePoolEma, uint256 maximumCurvePoolEma, address timelockAddress, address sfrxEthErc4626Address) _params)
functions
BASE_TOKEN_0_DECIMALS
viewfunction BASE_TOKEN_0_DECIMALS() view returns (uint256)
BASE_TOKEN_0
viewfunction BASE_TOKEN_0() view returns (address)
BASE_TOKEN_1_DECIMALS
viewfunction BASE_TOKEN_1_DECIMALS() view returns (uint256)
BASE_TOKEN_1
viewfunction BASE_TOKEN_1() view returns (address)
calculatePrices
viewfunction calculatePrices(uint256 _wethPerFrxEthCurveEma, uint256 _fraxPerFrxEthTwap, bool _isBadDataEthUsdChainlink, uint256 _usdPerEthChainlink, bool _isBadDataFraxUsdChainlink, uint256 _usdPerFraxChainlink, uint256 _frxEthPerSfrxEth) view returns (bool _isBadData, uint256 _priceLow, uint256 _priceHigh)
CURVE_POOL_EMA_PRICE_ORACLE_PRECISION
viewfunction CURVE_POOL_EMA_PRICE_ORACLE_PRECISION() view returns (uint256)
CURVE_POOL_EMA_PRICE_ORACLE
viewfunction CURVE_POOL_EMA_PRICE_ORACLE() view returns (address)
decimals
purefunction decimals() pure returns (uint8)
ETH_USD_CHAINLINK_FEED_ADDRESS
viewfunction ETH_USD_CHAINLINK_FEED_ADDRESS() view returns (address)
ETH_USD_CHAINLINK_FEED_DECIMALS
viewfunction ETH_USD_CHAINLINK_FEED_DECIMALS() view returns (uint8)
ETH_USD_CHAINLINK_FEED_PRECISION
viewfunction ETH_USD_CHAINLINK_FEED_PRECISION() view returns (uint256)
FRAX_USD_CHAINLINK_FEED_ADDRESS
viewfunction FRAX_USD_CHAINLINK_FEED_ADDRESS() view returns (address)
FRAX_USD_CHAINLINK_FEED_DECIMALS
viewfunction FRAX_USD_CHAINLINK_FEED_DECIMALS() view returns (uint8)
FRAX_USD_CHAINLINK_FEED_PRECISION
viewfunction FRAX_USD_CHAINLINK_FEED_PRECISION() view returns (uint256)
getCurvePoolToken1EmaPrice
viewfunction getCurvePoolToken1EmaPrice() view returns (uint256 _emaPrice)
getEthUsdChainlinkPrice
viewfunction getEthUsdChainlinkPrice() view returns (bool _isBadData, uint256 _updatedAt, uint256 _usdPerEth)
getFraxPerFrxEthUniV3Twap
viewfunction getFraxPerFrxEthUniV3Twap() view returns (uint256 _fraxPerFrxEthTwap)
getFraxUsdChainlinkPrice
viewfunction getFraxUsdChainlinkPrice() view returns (bool _isBadData, uint256 _updatedAt, uint256 _usdPerFrax)
getFrxEthPerSfrxEthErc4626Vault
viewfunction getFrxEthPerSfrxEthErc4626Vault() view returns (uint256 _frxEthPerSfrxEth)
getPrices
viewfunction getPrices() view returns (bool _isBadData, uint256 _priceLow, uint256 _priceHigh)
getPricesNormalized
viewfunction getPricesNormalized() view returns (bool _isBadDataNormal, uint256 _priceLowNormal, uint256 _priceHighNormal)
getUniswapV3Twap
viewfunction getUniswapV3Twap() view returns (uint256 _twap)
getUsdPerEthChainlink
viewfunction getUsdPerEthChainlink() view returns (bool _isBadData, uint256 _usdPerEth)
getUsdPerFraxChainlink
viewfunction getUsdPerFraxChainlink() view returns (bool _isBadData, uint256 _usdPerFrax)
getWethPerFrxEthCurveEma
viewfunction getWethPerFrxEthCurveEma() view returns (uint256 _wethPerFrxEth)
maximumCurvePoolEma
viewfunction maximumCurvePoolEma() view returns (uint256)
maximumEthUsdOracleDelay
viewfunction maximumEthUsdOracleDelay() view returns (uint256)
maximumFraxUsdOracleDelay
viewfunction maximumFraxUsdOracleDelay() view returns (uint256)
minimumCurvePoolEma
viewfunction minimumCurvePoolEma() view returns (uint256)
name
purefunction name() pure returns (string _name)
NORMALIZATION_0
viewfunction NORMALIZATION_0() view returns (int256)
NORMALIZATION_1
viewfunction NORMALIZATION_1() view returns (int256)
ORACLE_PRECISION
viewfunction ORACLE_PRECISION() view returns (uint256)
pendingTimelockAddress
viewfunction pendingTimelockAddress() view returns (address)
QUOTE_TOKEN_0_DECIMALS
viewfunction QUOTE_TOKEN_0_DECIMALS() view returns (uint256)
QUOTE_TOKEN_0
viewfunction QUOTE_TOKEN_0() view returns (address)
QUOTE_TOKEN_1_DECIMALS
viewfunction QUOTE_TOKEN_1_DECIMALS() view returns (uint256)
QUOTE_TOKEN_1
viewfunction QUOTE_TOKEN_1() view returns (address)
SFRXETH_ERC4626
viewfunction SFRXETH_ERC4626() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
timelockAddress
viewfunction timelockAddress() view returns (address)
TWAP_PRECISION
viewfunction TWAP_PRECISION() view returns (uint128)
twapDuration
viewfunction twapDuration() view returns (uint32)
UNI_V3_PAIR_ADDRESS
viewfunction UNI_V3_PAIR_ADDRESS() view returns (address)
UNISWAP_V3_TWAP_BASE_TOKEN
viewfunction UNISWAP_V3_TWAP_BASE_TOKEN() view returns (address)
UNISWAP_V3_TWAP_QUOTE_TOKEN
viewfunction UNISWAP_V3_TWAP_QUOTE_TOKEN() view returns (address)
version
purefunction version() pure returns (uint256 _major, uint256 _minor, uint256 _patch)
acceptTransferTimelock
nonpayablefunction acceptTransferTimelock()
addRoundData
nonpayablefunction addRoundData(address _fraxOracle)
renounceTimelock
nonpayablefunction renounceTimelock()
setMaximumCurvePoolEma
nonpayablefunction setMaximumCurvePoolEma(uint256 _maximumPrice)
setMaximumEthUsdOracleDelay
nonpayablefunction setMaximumEthUsdOracleDelay(uint256 _newMaxOracleDelay)
setMaximumFraxUsdOracleDelay
nonpayablefunction setMaximumFraxUsdOracleDelay(uint256 _newMaxOracleDelay)
setMinimumCurvePoolEma
nonpayablefunction setMinimumCurvePoolEma(uint256 _minimumPrice)
setTwapDuration
nonpayablefunction setTwapDuration(uint32 _newTwapDuration)
transferTimelock
nonpayablefunction transferTimelock(address _newTimelock)
events
SetMaximumCurvePoolEma
event SetMaximumCurvePoolEma(uint256 oldMaximum, uint256 newMaximum)
SetMaximumEthUsdOracleDelay
event SetMaximumEthUsdOracleDelay(uint256 oldMaxOracleDelay, uint256 newMaxOracleDelay)
SetMaximumFraxUsdOracleDelay
event SetMaximumFraxUsdOracleDelay(uint256 oldMaxOracleDelay, uint256 newMaxOracleDelay)
SetMinimumCurvePoolEma
event SetMinimumCurvePoolEma(uint256 oldMinimum, uint256 newMinimum)
SetTwapDuration
event SetTwapDuration(uint256 oldTwapDuration, uint256 newTwapDuration)
TimelockTransferred
event TimelockTransferred(address indexed previousTimelock, address indexed newTimelock)
TimelockTransferStarted
event TimelockTransferStarted(address indexed previousTimelock, address indexed newTimelock)
errors
OnlyPendingTimelock
error OnlyPendingTimelock()
OnlyTimelock
error OnlyTimelock()
creation bytecode
0x61032060405234620007f7576102a0620029608038038091620000258261032062000894565b6103203912620007f7576040516102a081016001600160401b0381118282101762000862576040526200005a610320620008b8565b815262000069610340620008cd565b60208201526200007b610360620008b8565b60408201526200008d610380620008cd565b60608201526200009f6103a0620008b8565b6080820152620000b16103c0620008cd565b60a0820152620000c36103e0620008b8565b60c0820152620000d5610400620008cd565b60e0820152620000e7610420620008b8565b610100820152620000fa610440620008b8565b6101208201526200010d610460620008b8565b6101408201526104805163ffffffff81168103620007f757610160820152620001386104a0620008b8565b6101808201526104c0516101a0820152620001556104e0620008b8565b6101c08201819052610500516101e0830181905262000176610520620008b8565b61020084015261054051610220840152610560516102408401526200019d610580620008b8565b610260840152620001b06105a0620008b8565b61028084015260405191620001c58362000878565b6001600160a01b03908116835260208301919091526101808301516101a08401516040519392909116620001f98462000878565b83526020830152610140830151610160840151610100850151610120860151604051936001600160a01b03918216939282169263ffffffff169116608085016001600160401b038111868210176200086257604052845260208401526040830152606082015260018060a01b0361020085015116610220850151610240860151906040519283606081011060018060401b0360608601111762000862576060840160405283526020830152604082015260018060a01b038551169060ff6020870151169160018060a01b0360408801511660ff6060890151169060018060a01b0360808a01511660ff60a08b01511660018060a01b0360c08c0151169060ff60e08d01511692604051958661010081011060018060401b03610100890111176200086257604099620003b79861010089018c5288526020880152858a8801526060870152608086015260a085015260c084015260e083015260805260ff6060820151168060a05260018060a01b0360c08301511660c05260ff60e08301511660e05260018060a01b038251166101005260ff60a081602085015116938461012052600180831b03608082015116610140520151166101605262000901565b61018052620003cd60e051610160519062000901565b6101a0526379e7dc3b60e11b60009081526020818152838220805460ff19908116600190811790925584516001600160a01b039081166101c05285840151835594909501516002556303b9884f60e21b83527fa69d87a466dcd0c797af2c29fa5657e1e342f4d0a9c93701acba2ba88caada0e8054861682179055855184166101e052858201516003805463ffffffff191663ffffffff929092169190911790556040868101518516610200526060909601518416610220526351eb09cd60e01b9092527f94d1b103d9bc485f84a2b98a4f4895b331f634f4dab769eb4ae1e8cd38844c7f8054909416909117909255845116610240819052915163313ce56760e01b815291829060049082905afa908115620008055760009162000811575b506004926200050660ff836020946102605216620008dc565b61028052015182556323e2f2e160e11b600090815260209081527ff5b620afdafd0e663b0432a8b75b69296bf0eeaab4c8c12db6a065f1a15fa6d2805460ff1916600117905581516001600160a01b03166102a081905260405163313ce56760e01b815293849182905afa9182156200080557600092620007b4575b506200059860ff836020946102c05216620008dc565b6102e05201516005556007546102608201516001600160a01b0316906001600160a01b03199081169082337f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc6600080a333161717600755600060208190527f83596b7a35d435ace5a1c05bce0730b03f9eef0f3a2652b4523c55a9006a3ca18054600160ff1991821681179092557ffcd29878e9d0256214b7c9524e4dd1bcc5e64dc8edf5ffacf4077022b791e886805482168317905563cb757b9760e01b9092527ff3497f619d33404604a9e6030d229698a133fc84763acf4228437c26277e6ee2805490921617905561028001516001600160a01b0316610300526040516120446200091c8239608051816105d2015260a051816104f9015260c05181610dc9015260e05181610cc3015261010051816114830152610120518161040e01526101405181611415015261016051816112550152610180518161088a01526101a0518161174f01526101c05181818161133d0152611bf001526101e0518181816110f90152611eb2015261020051818181610bf20152611f1c015261022051818181610b110152611f44015261024051818181610aa30152611de3015261026051816104670152610280518181816106e001526119fb01526102a051818181610b840152611d1101526102c051816111fc01526102e051818181610d1b0152611a490152610300518181816105650152611ab1015261204490f35b91506020823d602011620007fc575b81620007d26020938362000894565b81010312620007f7576200059860ff620007ee602094620008cd565b93505062000582565b600080fd5b3d9150620007c3565b6040513d6000823e3d90fd5b90506020813d60201162000859575b816200082f6020938362000894565b81010312620007f7576004926200050660ff6200084e602094620008cd565b9350505092620004ed565b3d915062000820565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200086257604052565b601f909101601f19168101906001600160401b038211908210176200086257604052565b51906001600160a01b0382168203620007f757565b519060ff82168203620007f757565b604d8111620008eb57600a0a90565b634e487b7160e01b600052601160045260246000fd5b81810392916000138015828513169184121617620008eb5756fe608060408181526004908136101561001657600080fd5b600091823560e01c93846232e91a1461171a5750836301ffc9a71461167257836306fdde03146114f9578363090f3f50146114a75783630b7f3ffe14610d3e578363116d79761461143957836320888004146113cb5783632570c27a1461136157836326939205146112f357836326d89545146112b1578363313ce5671461127857836337f85f66146112205783633b17136a146111c55783633be38cf9146111585783633cb6f5fa1461111d578363417d25a9146110af5783634501409514611001578363471d778914610fc75783634bc66f3214610f755783634d3375e8146109c25783634f8b4ae714610ea157836354fd4d5014610e5d57836356ee4c0814610ded57836359c909e114610d7f57836359f768b214610d435783636485712114610d3e5783636ff484721461028e578363726de1a514610ce6578363781097d014610c8e5783637c99a49914610c525783638c1e2f9214610b35578363952dca4814610c16578363993e3d5414610ba857836399a64f2814610b3a5783639c0d313f14610b35578363a2cc770314610ac7578363b374839b14610a59578363b93cd81614610a1e578363bd9a548b146109c2578363c433c80a1461091d578363c809d4ed146108ad578363c82f2b1214610855578363cb757b9714610703578363cca992fa146106ab578363cfae8d641461066a578363d7360946146105f657508263e0d2e78014610589578263e0fba44b1461051c578263e5a66dfa146104c5578263eb995c431461048b578263ebf43bca14610431578263f097486c146103da578263f6ccaad41461032d578263f97697ff146102ee578263fc28b1431461029357505063ff21f5711461028e57600080fd5b6117b8565b346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576102e6906102cd6119d5565b9151901515815260208101919091529081906040820190565b0390f35b5080fd5b346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea5760209051670de0b6b3a76400008152f35b50346103d757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d75761036461187d565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008060065416600655600754903373ffffffffffffffffffffffffffffffffffffffff83167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc6600080a316331760075580f35b80fd5b346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576102e6906102cd611a23565b346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346106665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610666577f1b427db70b2e813aae1e9f4dc54fcd2ae904b1350f60b84a7bab7d379aa2b02e903591610651611832565b6005548151908152836020820152a160055580f35b8280fd5b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020906106a4611a6e565b9051908152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b90346106665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106665781359173ffffffffffffffffffffffffffffffffffffffff8316809303610851578361078c610760611bad565b610768611e62565b610770611a23565b61077b9291926119d5565b939092610786611a6e565b95611b1f565b918691963b156108515783608492875198899586947f45d9f5820000000000000000000000000000000000000000000000000000000086521515898601526cffffffffffffffffffffffffff809216602486015216604484015264ffffffffff421660648401525af1801561084757610803578380f35b67ffffffffffffffff831161081b5750528180808380f35b8360416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b82513d86823e3d90fd5b8380fd5b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b346106665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610666577f2d76fda59e51b6069c5600ca7d7f2cb8449933f16ba284b7a22f410d487ac904903591610908611832565b6001548151908152836020820152a160015580f35b346106665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261066657359063ffffffff808316809303610851577fa5868b8f066a74ed982ad7843f1f76a16fc96b95c00596d6249b5fe5dee544137fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000926109a8611832565b6003549281519084168152856020820152a1161760035580f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576102e690610a00610760611bad565b92519115158252602082015260408101919091529081906060820190565b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576102e690610a00611da0565b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6117f1565b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020906002549051908152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020906005549051908152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b611772565b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020906001549051908152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346106665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610666577fcfde23b8b5cb70458592a0920d25ba0c811d04a57f0737cc8a379cbbf0dbbbb4903591610e48611832565b6002548151908152836020820152a160025580f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea5760609181519160028352816020840152820152f35b82346103d757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d757610ed8611832565b610ee061187d565b7fffffffffffffffffffffffff000000000000000000000000000000000000000080600654166006556007548273ffffffffffffffffffffffffffffffffffffffff821681817f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8280a37f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68280a31660075580f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea5760209073ffffffffffffffffffffffffffffffffffffffff600754169051908152f35b3461066657827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106665760209250549051908152f35b9050346102ea5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea573573ffffffffffffffffffffffffffffffffffffffff8082168092036106665761105a611832565b817fffffffffffffffffffffffff00000000000000000000000000000000000000006006541617600655600754167f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8380a380f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576102e690610a00611cce565b346106665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610666577f5215771cad7bc88de36c71ac95764acc6eb44eeca03f4b9f90eb8a8c1131e3aa8135926111b3611832565b82548151908152846020820152a15580f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905160128152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea5760209063ffffffff600354169051908152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b91346103d75760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103d7576044359081151582036103d7576084359081151582036103d7575092610a00916102e69460c4359260a43592606435916024359035611b1f565b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea5760209073ffffffffffffffffffffffffffffffffffffffff600654169051908152f35b3461066657827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106665781519060a082019082821067ffffffffffffffff83111761164657508252606781526020907f76322073667278457468204475616c204f7261636c6520496e20555344207769828201527f746820437572766520506f6f6c2028574554482920454d4120616e6420556e69838201527f73776170207633205457415020616e64204672617820616e642045544820436860608201527f61696e6c696e6b00000000000000000000000000000000000000000000000000608082015282519382859384528251928382860152825b84811061163057505050828201840152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168101030190f35b81810183015188820188015287955082016115f4565b8460416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b346106665760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106665735907fffffffff000000000000000000000000000000000000000000000000000000008216809203610666576020927f01ffc9a7000000000000000000000000000000000000000000000000000000008314928315611705575b5050519015158152f35b81528084528190205460ff16915083806116fb565b8390346102ea57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102ea576020907f00000000000000000000000000000000000000000000000000000000000000008152f35b346117b35760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126117b35760206117ab611bad565b604051908152f35b600080fd5b346117b35760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126117b35760206117ab611e62565b346117b35760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126117b3576020604051670de0b6b3a76400008152f35b73ffffffffffffffffffffffffffffffffffffffff60075416330361185357565b60046040517f1c0be90a000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff60065416330361189e57565b60046040517ff5c49e64000000000000000000000000000000000000000000000000000000008152fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761190957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8181029291811591840414171561194b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b801561199c57760a70c3c40a64e6c51999090b65f67d92400000000000000490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b811561199c570490565b6119dd611da0565b919291670de0b6b3a7640000808202925082040361194b57611a20907f0000000000000000000000000000000000000000000000000000000000000000906119cb565b90565b611a2b611cce565b919291670de0b6b3a7640000808202925082040361194b57611a20907f0000000000000000000000000000000000000000000000000000000000000000906119cb565b6040517f99530b0600000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611b1357600091611ae5575090565b906020823d8211611b0b575b81611afe602093836118c8565b810103126103d757505190565b3d9150611af1565b6040513d6000823e3d90fd5b94611b3d611b38611b389395611b439597999a98611938565b61197a565b93611938565b94670de0b6b3a764000091808302908382040361194b5781611b64916119cb565b958083029283040361194b57611b79916119cb565b928115611ba5575b509282811015611b9f57805b9280821115611b9a575090565b905090565b82611b8d565b905038611b81565b6040517f86fc88d300000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115611b1357600091611c47575b506002549081811115611c4057505b6001549081811015611b9a575090565b9050611c30565b906020823d8211611c70575b81611c60602093836118c8565b810103126103d757505138611c21565b3d9150611c53565b519069ffffffffffffffffffff821682036117b357565b908160a09103126117b357611ca381611c78565b91602082015191604081015191611a20608060608401519301611c78565b9190820391821161194b57565b6040517ffeaf968c00000000000000000000000000000000000000000000000000000000815260a08160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611b13576000918293611d69575b5060008213801590611d5557929190565b50611d608342611cc1565b60055410929190565b909250611d8d915060a03d8111611d99575b611d8581836118c8565b810190611c8f565b50925050909138611d44565b503d611d7b565b6040517ffeaf968c00000000000000000000000000000000000000000000000000000000815260a08160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215611b13576000918293611e3b575b5060008213801590611e2757929190565b50611e328342611cc1565b60045410929190565b909250611e56915060a03d8111611d9957611d8581836118c8565b50925050909138611e16565b6040516040810181811067ffffffffffffffff82111761190957604052600190818152602090818101908236833780511561200857829073ffffffffffffffffffffffffffffffffffffffff92837f000000000000000000000000000000000000000000000000000000000000000016815263ffffffff600354166040519687937f07f7ca9f00000000000000000000000000000000000000000000000000000000855260a4850190670de0b6b3a76400006004870152877f0000000000000000000000000000000000000000000000000000000000000000166024870152877f000000000000000000000000000000000000000000000000000000000000000016604487015260a060648701525180915260c4850193966000905b828210611fec5750505050829394506084830152038173b210ce856631eeeb767efa666ec7c1c57738d4385afa908115611b1357600091611fc0575b50905090565b82813d8311611fe5575b611fd481836118c8565b810103126103d75750518038611fba565b503d611fca565b8851811686529787019789978b97509095019490830190611f7e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c6343000813000a00000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000012000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38f000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000003480000000000000000000000000000000000000000000000000000000000000012000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38f00000000000000000000000000000000000000000000000000000000000000120000000000000000000000005e8422345238f34275888049021821e8e08caa1f000000000000000000000000853d955acef822db058eb8505911ed77f175b99e00000000000000000000000036c060cc4b088c830a561e959a679a58205d3f560000000000000000000000000000000000000000000000000000000000000384000000000000000000000000b9e1e3a9feff48998e45fa90847ed4d467e8bcfd0000000000000000000000000000000000000000000000000000000000000f3c0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b84190000000000000000000000000000000000000000000000000000000000000f3c0000000000000000000000009c3b46c0ceb5b9e304fcd6d88fc50f7dd24b31bc0000000000000000000000000000000000000000000000000c7d713b49da00000000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca000000000000000000000000ac3e018457b222d93114458476f3e3416abbe38f