0 txs
0 calls
constructor
No constructor.
functions
ADDRESS_PROVIDER
viewfunction ADDRESS_PROVIDER() view returns (address)
currentFundingRate
viewfunction currentFundingRate(uint256) view returns (int256)
feeCollector
viewfunction feeCollector() view returns (address)
getCurrentFundingRate
viewfunction getCurrentFundingRate(uint256 _pairIndex) view returns (int256)
getExposedPositions
viewfunction getExposedPositions(uint256 _pairIndex) view returns (int256)
getFundingFee
viewfunction getFundingFee(address _account, uint256 _pairIndex, bool _isLong) view returns (int256 fundingFee)
getNextFundingRate
viewfunction getNextFundingRate(uint256 _pairIndex, uint256 price) view returns (int256)
getNextFundingRateUpdateTime
viewfunction getNextFundingRateUpdateTime(uint256 _pairIndex) view returns (uint256)
getPosition
viewfunction getPosition(address _account, uint256 _pairIndex, bool _isLong) view returns (tuple)
getPositionByKey
viewfunction getPositionByKey(bytes32 key) view returns (tuple)
getPositionKey
purefunction getPositionKey(address _account, uint256 _pairIndex, bool _isLong) pure returns (bytes32)
getTradingFee
viewfunction getTradingFee(uint256 _pairIndex, bool _isLong, uint256 _sizeAmount, uint256 price) view returns (uint256 tradingFee)
globalFundingFeeTracker
viewfunction globalFundingFeeTracker(uint256) view returns (int256)
lastFundingRateUpdateTimes
viewfunction lastFundingRateUpdateTimes(uint256) view returns (uint256)
longTracker
viewfunction longTracker(uint256) view returns (uint256)
lpProfit
viewfunction lpProfit(uint256 pairIndex, address token, uint256 price) view returns (int256)
needADL
viewfunction needADL(uint256 pairIndex, bool isLong, uint256 executionSize, uint256 executionPrice) view returns (bool need, uint256 needADLAmount)
needLiquidation
viewfunction needLiquidation(bytes32 positionKey, uint256 price) view returns (bool)
pledgeAddress
viewfunction pledgeAddress() view returns (address)
pool
viewfunction pool() view returns (address)
positions
viewfunction positions(bytes32) view returns (address account, uint256 pairIndex, bool isLong, uint256 collateral, uint256 positionAmount, uint256 averagePrice, int256 fundingFeeTracker)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
riskReserve
viewfunction riskReserve() view returns (address)
router
viewfunction router() view returns (address)
shortTracker
viewfunction shortTracker(uint256) view returns (uint256)
adjustCollateral
nonpayablefunction adjustCollateral(uint256 pairIndex, address account, bool isLong, int256 collateral)
decreasePosition
nonpayablefunction decreasePosition(uint256 pairIndex, uint256 orderId, address account, address keeper, uint256 sizeAmount, bool isLong, int256 collateral, tuple tradingFeeTier, uint256 referralsRatio, uint256 referralUserRatio, address referralOwner, uint256 oraclePrice, bool useRiskReserve) returns (uint256 tradingFee, int256 fundingFee, int256 pnl)
increasePosition
nonpayablefunction increasePosition(uint256 pairIndex, uint256 orderId, address account, address keeper, uint256 sizeAmount, bool isLong, int256 collateral, tuple tradingFeeTier, uint256 referralsRatio, uint256 referralUserRatio, address referralOwner, uint256 oraclePrice) returns (uint256 tradingFee, int256 fundingFee)
initialize
nonpayablefunction initialize(address addressProvider, address _pool, address _pledgeAddress, address _feeCollector, address _riskReserve)
setRouter
nonpayablefunction setRouter(address _router)
updateFundingRate
nonpayablefunction updateFundingRate(uint256 _pairIndex)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AdjustCollateral
event AdjustCollateral(address account, uint256 pairIndex, bool isLong, bytes32 positionKey, uint256 collateralBefore, uint256 collateralAfter)
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
Initialized
event Initialized(uint8 version)
TakeFundingFeeAddTraderFee
event TakeFundingFeeAddTraderFee(address account, uint256 pairIndex, uint256 orderId, uint256 sizeDelta, uint256 tradingFee, int256 fundingFee, uint256 lpTradingFee, uint256 vipDiscountAmount)
UpdatedExecutionLogic
event UpdatedExecutionLogic(address sender, address oldAddress, address newAddress)
UpdatedLiquidationLogic
event UpdatedLiquidationLogic(address sender, address oldAddress, address newAddress)
UpdateFundingInterval
event UpdateFundingInterval(uint256 oldInterval, uint256 newInterval)
UpdateFundingRate
event UpdateFundingRate(uint256 pairIndex, uint256 price, int256 fundingRate, uint256 lastFundingTime)
UpdatePosition
event UpdatePosition(address account, bytes32 positionKey, uint256 pairIndex, uint256 orderId, bool isLong, uint256 beforCollateral, uint256 afterCollateral, uint256 price, uint256 beforPositionAmount, uint256 afterPositionAmount, uint256 averagePrice, int256 fundFeeTracker, int256 pnl)
UpdateRouterAddress
event UpdateRouterAddress(address sender, address oldAddress, address newAddress)
Upgraded
event Upgraded(address indexed implementation)
errors
No errors.
creation bytecode
0x60a0806040523461003257306080526158f790816200003882396080518181816111be0152818161138f0152611b310152f35b600080fdfe60a0604052600436101561001257600080fd5b6000803560e01c8062d20aaa1461218c5780630298e2731461217257806312d85942146121465780631459457a14611fb257806316f0115b14611f895780631848effa14611f605780631ec2bd7b14611f435780632971f66014611e475780632a267a7c14611e1c5780632cbc82bf14611df25780633659cfe614611b0c57806344c5999e14611ae3578063489dba52146116835780634f1ef28614611312578063514ea4bf14611299578063523ed4511461126f57806352d1902d146111ab578063655f881714611189578063812e4bfd1461115f578063894feb9d14610fe85780638c1b753a1461020f57806393a7588014610fc9578063b2a4b8cc14610b36578063bba295a114610b0d578063bc95baad14610ad6578063c0a361d014610481578063c0d78655146102f3578063c415b95c146102ca578063c8d0805214610239578063d5b395a91461020f578063e054d7f2146101e5578063e4548738146101b25763f887ea401461018757600080fd5b346101af57806003193601126101af576070546040516001600160a01b039091168152602090f35b80fd5b50346101af5760603660031901126101af5760206101dd6101d1612204565b6044359060043561497f565b604051908152f35b50346101af5760203660031901126101af5760406020916004358152606883522054604051908152f35b50346101af5760203660031901126101af5760406020916004358152606a83522054604051908152f35b50346101af5760203660031901126101af5761026d60406102c69261025c61517f565b5060043581526066602052206128e5565b6040519182918291909160c08060e083019460018060a01b03815116845260208101516020850152604081015115156040850152606081015160608501526080810151608085015260a081015160a08501520151910152565b0390f35b50346101af57806003193601126101af57606e546040516001600160a01b039091168152602090f35b50346101af5760208060031936011261047d5761030e6121c1565b60655460405162435da560e01b815291926001600160a01b0392909182908290600490829087165afa90811561043b57839183918791610446575b50602460405180948193637be53ca160e01b8352336004840152165afa90811561043b578591610402575b50156103ce5791817f612e824501291f520b5ec7914fa88640aef519e3cef9bedcb88d8ece379acb7d93606093607054931691826001600160601b0360a01b8516176070556040519333855216908301526040820152a180f35b6064906040519062461bcd60e51b82526004820152600d60248201526c37b7363ca837b7b620b236b4b760991b6044820152fd5b90508181813d8311610434575b6104198183612301565b810103126104305761042a906125d2565b38610374565b8480fd5b503d61040f565b6040513d87823e3d90fd5b92505081813d8311610476575b61045d8183612301565b81010312610430578161047084926125be565b38610349565b503d610453565b5080fd5b50346101af576101c03660031901126101af5761049c6121a6565b6104a46121d7565b6104ac61221a565b916104b636612323565b906104bf6121ed565b916101a43515156101a43503610ad25760655460405163c4aa304160e01b81526001600160a01b0390911690602081600481855afa908115610ac7578891610a89575b506001600160a01b031633148015610a04575b61051f91506125df565b61052c85600435846157f4565b80875260666020526040872080549192916001600160a01b0316156109da57600381019161058e835497600484019788549361056d6101843560043561425c565b610184359261014435918d61012435928c6084359160243591600435612aa3565b97919890996004358c52606960205260408c205495600686019687556105b760843585546126ff565b8455606d54604051632f7ce47360e21b815260048035908201528e9161016090829060249082906001600160a01b03165afa9182156109ce579161099d575b5061060a61018435846084356004356135d6565b8d61062e61062761018435608435856106228d6128e5565b615542565b9d8e612943565b81811261088b5761064b91506106458454916154ce565b906126ce565b82555b61065d60c43588600435614046565b84541580610881575b610704575b5060609c50916101a09795939160056000805160206158828339815191529a9896945493549501549554966040519860018060a01b03168952602089015260043560408901526024358e8901521515608088015260a087015260c08601526101843560e086015261010085015261012084015261014083015261016082015284610180820152a160405192835260208301526040820152f35b6101a435156107cb578d60018060a01b03606c541691604060018060a01b039101511691835490803b156107c75760405163148abebb60e21b81526001600160a01b0394909416600485015260248401919091528290604490829084905af180156107ba576107a2575b50916101a09795939160056000805160206158828339815191529a98969460609f5b8155929496989a50509193959761066b565b6107ac8e91612283565b6107b6573861076e565b8c80fd5b8e604051903d90823e3d90fd5b8280fd5b5060018060a01b03606d54168d60018060a01b03606f54169160018060a01b0389541690845491813b1561087d57604051634f7a10db60e11b815260048035908201526001600160a01b0395861660248201529416604485015260648401919091528290608490829084905af180156107ba57610869575b50916101a09795939160056000805160206158828339815191529a98969460609f610790565b6108738e91612283565b6107b65738610843565b8380fd5b5081541515610666565b8354610896826154ce565b116108b8576108b191506108ab8454916154ce565b906126ff565b825561064e565b86548061095757506108cc6108d4916154ce565b8454906126ff565b606c5460408401516001600160a01b0390811693929116803b156107c75760405163f27ac4d960e01b81526001600160a01b0394909416600485015260248401919091528290604490829084905af1801561094a57610937575b508d825561064e565b610943909e919e612283565b9c3861092e565b8f604051903d90823e3d90fd5b9061096b9250610966906154ce565b6127e5565b600288015460ff161561098e57610987600589019182546126ce565b905561064e565b610987600589019182546126ff565b6109c191506101603d610160116109c7575b6109b98183612301565b81019061261a565b386105f6565b503d6109af565b604051903d90823e3d90fd5b60405162461bcd60e51b8152602060048201526002602482015261021360f41b6044820152606490fd5b5060206004916040519283809263477a86ef60e01b82525afa8015610a7e578790610a3f575b61051f91506001600160a01b03163314610515565b506020813d602011610a76575b81610a5960209383612301565b81010312610a7257610a6d61051f916125be565b610a2a565b8680fd5b3d9150610a4c565b6040513d89823e3d90fd5b90506020813d602011610abf575b81610aa460209383612301565b81010312610abb57610ab5906125be565b38610502565b8780fd5b3d9150610a97565b6040513d8a823e3d90fd5b8580fd5b50346101af5761026d60406102c692610b00610af136612229565b91610afa61517f565b506157f4565b81526066602052206128e5565b50346101af57806003193601126101af57606f546040516001600160a01b039091168152602090f35b50346101af5760803660031901126101af57610b50612204565b60443515156044350361047d57610b7260018060a01b0360705416331461295f565b610b81604435600435836157f4565b80835260666020526040832091600483015415610f8e57606d54604051632f7ce47360e21b81526004803590820152610160926001600160a01b0390921691908381602481865afa938415610a7e578794610f6f575b5050606554604051632630c12f60e01b815290602090829060049082906001600160a01b03165afa908115610a7e578791610f35575b50602084810151604051634bb3415360e01b81526001600160a01b0391821660048201529283916024918391165afa908115610a7e578791610f03575b50610c558186614f80565b610ecb576040516330a66e1560e01b8152600480359082015261010081602481875afa918215610ac7578592610cbd928a91610e9a575b50610c96896128e5565b906080602082015191015191610cb160443560043589614b08565b93606435998a926155f0565b5050868413610d42575b867fd96cd62fe772eae2e66a1482cbd5058820e670cb26d2312b309591b23e36e2c960c08789886003820192610d0284549284600435614046565b60018060a01b038354169360ff60026001860154950154169054936040519586526020860152151560408501526060840152608083015260a0820152a180f35b60409081015190516323b872dd60e01b602082019081526001600160a01b03938416602483015260448201949094526064808201869052815293949360a0810193919092169167ffffffffffffffff841181851017610e8657878493928192610def96604052610db1866122ad565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460c0820152519082855af1610de96124ba565b916124ea565b8051908115918215610e64575b505015610e0c5790388080610cc7565b60405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608490fd5b8192509060209181010312610430576020610e7f91016125d2565b3880610dfc565b634e487b7160e01b88526041600452602488fd5b610ebe91506101003d61010011610ec4575b610eb68183612301565b810190612998565b38610c8c565b503d610eac565b60405162461bcd60e51b815260206004820152601060248201526f3732b2b2103634b8bab4b230ba34b7b760811b6044820152606490fd5b90506020813d602011610f2d575b81610f1e60209383612301565b81010312610a72575138610c4a565b3d9150610f11565b90506020813d602011610f67575b81610f5060209383612301565b81010312610a7257610f61906125be565b38610c0d565b3d9150610f43565b610f86929450803d106109c7576109b98183612301565b913880610bd7565b60405162461bcd60e51b8152602060048201526013602482015272706f736974696f6e206e6f742065786973747360681b6044820152606490fd5b50346101af5760203660031901126101af5760206101dd600435615124565b50346101af5760208060031936011261047d576070546001600160a01b03919060043590611019908416331461295f565b82606d54166040518091632f7ce47360e21b82528360048301528160246101609485935afa918215611137578692611142575b5050600483856065541660405192838092632630c12f60e01b82525afa908115611137578492869188936110f7575b50830151604051634bb3415360e01b8152911660048201529485916024918391165afa9182156110ec5784926110ba575b506110b7925061425c565b80f35b90915082813d83116110e5575b6110d18183612301565b810103126107c7576110b7915190386110ac565b503d6110c7565b6040513d86823e3d90fd5b93849193508092503d8311611130575b6111118183612301565b81010312610ad2576024858561112781956125be565b9391925061107b565b503d611107565b6040513d88823e3d90fd5b6111589250803d106109c7576109b98183612301565b388061104c565b50346101af5760203660031901126101af5760406020916004358152606b83522054604051908152f35b50346101af5760403660031901126101af5760206101dd602435600435614784565b50346101af57806003193601126101af577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036112045760206040516000805160206158628339815191528152f35b60405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608490fd5b50346101af5760203660031901126101af5760406020916004358152606983522054604051908152f35b50346101af5760203660031901126101af57604060e091600435815260666020522060018060a01b038154169060018101549060ff600282015416600382015460048301549160066005850154940154946040519687526020870152151560408601526060850152608084015260a083015260c0820152f35b5060403660031901126101af576113276121c1565b90602491823567ffffffffffffffff81116107c757366023820112156107c7578060040135906113568261234c565b6113636040519182612301565b8281526020928382019236888383010111610a7257818792898793018637830101526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116906113bd30831415612368565b6113da6000805160206158628339815191529282845416146123c9565b6004858260655416604051928380926334cc866d60e21b82525afa908115610ac757908291899161164b575b50163303611611577f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114485750505050506110b791925061242a565b859394969516906040516352d1902d60e01b81528781600481865afa8791816115e2575b506114cc5760405162461bcd60e51b815260048101899052602e818b01527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b97919293949695970361158d57509085916114e68461242a565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2805115801590611585575b611522575b505050505080f35b61157a9482917f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60405196611556886122e5565b60278852870152660819985a5b195960ca1b60408701525190845af4610de96124ba565b50388080838161151a565b506001611515565b8460296084926040519262461bcd60e51b845260048401528201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152fd5b9091508881813d831161160a575b6115fa8183612301565b81010312610abb5751903861146c565b503d6115f0565b60405162461bcd60e51b8152600481018690526013818a015272556e617574686f72697a65642061636365737360681b6044820152606490fd5b809250878092503d831161167c575b6116648183612301565b81010312610abb5761167682916125be565b38611406565b503d61165a565b50346101af576101a03660031901126101af5761169e6121a6565b6116a66121d7565b6116ae61221a565b916116b836612323565b906116c16121ed565b9060018060a01b036065541660405163c4aa304160e01b8152602081600481855afa908115610ac7578891611aa9575b506001600160a01b031633148015611a33575b61170e91506125df565b606d54604051632f7ce47360e21b815260048035908201529061016090829060249082906001600160a01b03165afa908115610a7e578791611a12575b5060400151606f546001600160a01b039182169116036119e357604095600080516020615882833981519152936101a09361178988600435866157f4565b91828452606660205261180b8a8520916003830154938b60048501549b6117b56101843560843561272c565b8d1561199f575b8d80151580611996575b61195e575b50506117dc6101843560043561425c565b6117eb60c43587600435614046565b6101843593610144359261012435928c6084359160243591600435612aa3565b909a9099918681126118e657611829906106456003860154916154ce565b60038401555b600435865260696020528b862054936006840194855561185560843560048601546126ce565b600485015561186d6101843583608435600435612d27565b600384015491600560048601549501549554968e519960018060a01b03168a5260208a01526004358e8a015260243560608a01521515608089015260a088015260c08701526101843560e0870152610100860152610120850152610140840152610160830152610180820152a182519182526020820152f35b60038401546118f4826154ce565b116119155761190b906108ab6003860154916154ce565b600384015561182f565b61192161192c916154ce565b6004850154906127e5565b600284015460ff161561194f57611948600585019182546126ce565b905561182f565b611948600585019182546126ff565b61198d9061198761197d60058b019461197886548561272c565b6126ce565b91608435906126ce565b906127e5565b9055388d6117cb565b508115156117c6565b600435600188015586546001600160a01b038c166001600160a01b031990911617875560028701805460ff191660ff851515161790556101843560058801556117bc565b60405162461bcd60e51b815260206004820152600760248201526621706c6564676560c81b6044820152606490fd5b611a2d91506101603d610160116109c7576109b98183612301565b3861174b565b5060206004916040519283809263477a86ef60e01b82525afa8015610a7e578790611a6e575b61170e91506001600160a01b03163314611704565b506020813d602011611aa1575b81611a8860209383612301565b81010312610a7257611a9c61170e916125be565b611a59565b3d9150611a7b565b90506020813d602011611adb575b81611ac460209383612301565b81010312610abb57611ad5906125be565b386116f1565b3d9150611ab7565b50346101af57806003193601126101af57606c546040516001600160a01b039091168152602090f35b50346101af5760208060031936011261047d57611b276121c1565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116611b5e30821415612368565b611b7b6000805160206158628339815191529183835416146123c9565b6004848360655416604051928380926334cc866d60e21b82525afa80156111375783918791611dba575b50163303611d7f57604051908482019282841067ffffffffffffffff851117611d6b578360405286835260ff7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435416600014611c0957505050506110b7915061242a565b84939416906040516352d1902d60e01b81528681600481865afa889181611d38575b50611c8c5760405162461bcd60e51b815260048101889052602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608490fd5b95949503611ce157908591611ca08461242a565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2805115801590611cda5761152257505050505080f35b5081611515565b60405162461bcd60e51b815260048101859052602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b9091508781813d8311611d64575b611d508183612301565b81010312611d6057519038611c2b565b8880fd5b503d611d46565b634e487b7160e01b87526041600452602487fd5b60405162461bcd60e51b8152600481018590526013602482015272556e617574686f72697a65642061636365737360681b6044820152606490fd5b809250868092503d8311611deb575b611dd38183612301565b81010312610ad257611de583916125be565b38611ba5565b503d611dc9565b50346101af5760203660031901126101af5760406020916004358152606783522054604051908152f35b50346101af576040611e39611e303661225c565b92919091614c39565b825191151582526020820152f35b50346101af5760208060031936011261047d57600435808352606b82526040832054600460018060a01b039284846065541660405193848092631074f21360e21b82525afa9081156111375785928792611f09575b50602490604051958693849263c147e88f60e01b84526004840152165afa9182156110ec578492611ed3575b50906101dd916126ce565b9091508281813d8311611f02575b611eeb8183612301565b8101031261087d576101dd92935051908392611ec8565b503d611ee1565b8381949293503d8311611f3c575b611f218183612301565b81010312610ad2576024611f3586936125be565b9190611e9c565b503d611f17565b50346101af5760206101dd611f573661225c565b92919091614a91565b50346101af57806003193601126101af576065546040516001600160a01b039091168152602090f35b50346101af57806003193601126101af57606d546040516001600160a01b039091168152602090f35b50346101af5760a03660031901126101af576004356001600160a01b03818116918290036107c7576024359181831680930361087d57611ff06121a6565b9260643590838216809203610ad25760843593808516809503610a725786549560ff8760081c161596878098612139575b8015612122575b156120c65760ff1981166001178955876120b5575b506001600160601b0360a01b948560655416176065551683606f541617606f5582606d541617606d5581606e541617606e55606c541617606c5561207e5780f35b61ff001981541681557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a180f35b61ffff19166101011788553861203d565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156120285750600160ff821614612028565b50600160ff821610612021565b50346101af5760403660031901126101af576020612168602435600435614f80565b6040519015158152f35b50346101af5760206101dd61218636612229565b916157f4565b50346101af5760206101dd6121a036612229565b91614b08565b604435906001600160a01b03821682036121bc57565b600080fd5b600435906001600160a01b03821682036121bc57565b606435906001600160a01b03821682036121bc57565b61016435906001600160a01b03821682036121bc57565b602435906001600160a01b03821682036121bc57565b60a4359081151582036121bc57565b60609060031901126121bc576004356001600160a01b03811681036121bc57906024359060443580151581036121bc5790565b60809060031901126121bc576004359060243580151581036121bc57906044359060643590565b67ffffffffffffffff811161229757604052565b634e487b7160e01b600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761229757604052565b60e0810190811067ffffffffffffffff82111761229757604052565b6060810190811067ffffffffffffffff82111761229757604052565b90601f8019910116810190811067ffffffffffffffff82111761229757604052565b60409060e31901126121bc576040519061233c826122ad565b60e4358252610104356020830152565b67ffffffffffffffff811161229757601f01601f191660200190565b1561236f57565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b156123d057565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b803b1561245f5760008051602061586283398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b3d156124e5573d906124cb8261234c565b916124d96040519384612301565b82523d6000602084013e565b606090565b9192901561254c57508151156124fe575090565b3b156125075790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b82519091501561255f5750805190602001fd5b6040519062461bcd60e51b82528160208060048301528251908160248401526000935b8285106125a5575050604492506000838284010152601f80199101168101030190fd5b8481018201518686016044015293810193859350612582565b51906001600160a01b03821682036121bc57565b519081151582036121bc57565b156125e657565b60405162461bcd60e51b815260206004820152600c60248201526b37b7363ca2bc32b1baba37b960a11b6044820152606490fd5b809161016092839103126121bc5760405191820182811067ffffffffffffffff8211176122975760405280518252612654602082016125be565b6020830152612665604082016125be565b6040830152612676606082016125be565b6060830152612687608082016125d2565b608083015260a081015160a083015260c081015160c083015260e081015160e083015261010080820151908301526101208082015190830152610140809101519082015290565b919082018092116126db57565b634e487b7160e01b600052601160045260246000fd5b60120390601282116126db57565b919082039182116126db57565b8115612716570490565b634e487b7160e01b600052601260045260246000fd5b90600019818309818302918280831092039180830392146127d05768327cb2734119d3b7a9601e1b9082821115612793577f7d33c22789773a07feda8b6f0930e26fa397c439f1d5cf4b2eb27d7306d2dc99940990828211900360e21b9103601e1c170290565b60405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606490fd5b505068327cb2734119d3b7a9601e1b91500490565b9068327cb2734119d3b7a9601e1b9060001982840992828102928380861095039480860395146128695784831115612793578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b505090612876925061270c565b90565b90600019818309818302918280831092039180830392146128d8576305f5e1009082821115612793577facbe0e98f503f8881186e60dbb7f727bf36b7213ee9f5a78c767074b22e90e21940990828211900360f81b910360081c170290565b50506305f5e10091500490565b906040516128f2816122c9565b82546001600160a01b0316815260018301546020820152600283015460ff16151560408201526003830154606082015260048301546080820152600583015460a082015260069092015460c0830152565b919091600083820193841291129080158216911516176126db57565b1561296657565b60405162461bcd60e51b815260206004820152600a60248201526937b7363ca937baba32b960b11b6044820152606490fd5b809161010092839103126121bc576040519182019082821067ffffffffffffffff8311176122975760e091604052805183526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c0840152015160e082015290565b818103929160001380158285131691841216176126db57565b8051825260018060a01b03806020830151166020840152806040830151166040840152606082015116606083015260808101511515608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015190830152610120808201519083015261014080910151910152565b9a9790959899969492919660018060a01b03606d5416906101608d602460405180958193632f7ce47360e21b835260048301525afa958615612c77578d92600097612c8a575b5091612afb612b03928795948961522f565b95869161411e565b8196919c876000039c8d60008a12600080831282169213901516176126db57606e546001600160a01b03169215612c835760200151935b6040516325cdb61d60e01b8152998a958695612b5a906004880190612a29565b6001600160a01b038d811661016488018190529e81166101848801526101a487018b90526101c487018c90526101e4870191909152610204860191909152610224850191909152166102448301525a92600061026492604095f1958615612c77578b906000968798612c35575b50612c007f0630e77e4b3ad6c747edcb003e15f67d0e78d43dae35efe5e2c2f6beb3010fbf9997959361010099979593612c0793614b08565b809b612943565b9b60405196875260208701526040860152606085015260808401528660a084015260c083015260e0820152a1565b96915096506040863d604011612c6f575b81612c5360409383612301565b810103126101af57508451602090950151958b90612c00612bc7565b3d9150612c46565b6040513d6000823e3d90fd5b5193612b3a565b869493919750612b0392612cb1612afb926101603d610160116109c7576109b98183612301565b98929495509250612ae9565b908160a09103126121bc576040519060a082019082821067ffffffffffffffff83111761229757608091604052805183526020810151602084015260408101516040840152606081015160608401520151608082015290565b600160ff1b81146126db5760000390565b929190600060805280156135d057612d3e84615124565b91156135ae5783608051526067602052604060805120612d5f8282546126ce565b90555b612d6b84615124565b92612d76818361272c565b6080519091818086131561359c57506001955b828082131561358a57506001965b60038110159384613121576001821492839283613580575b8315613560575b606d54604051632500ed8d60e21b8152600481018e905295906001600160a01b031660a087602481845afa988915612f5d578e976080519a613530575b5060405197632f7ce47360e21b89526004890152610160978881602481865afa988915612f5d5760805199613511575b5050612f705782156133e357501561313857505050600014612fb2575050606d546001600160a01b0316803b15612f6a576040519062a0151560e21b825287600483015284602483015260805160448301528160648160805180945af18015612f5d57612f9d575b5091612ea6611987926119786080612eac979601518661272c565b926126ce565b606d546001600160a01b0316803b15612f6a5760405191630e13da9f60e11b835284600484015260248301528160448160805180945af18015612f5d57612f88575b505b6003811015612f705715612f02575b50565b606d546001600160a01b0316803b15612f6a5760405191630e13da9f60e11b8352600483015260805160248301528160448160805180945af18015612f5d57612f485750565b612f5190612283565b6080518015612eff5780fd5b6040513d608051823e3d90fd5b60805180fd5b634e487b7160e01b6080515260216004526024608051fd5b612f9190612283565b6080518015612eee5780fd5b612fa690612283565b6080518015612e8b5780fd5b9250939290506080519283600387101561312157506002861461310f5750915b606d546001600160a01b0316803b15612f6a5760405190637c7c829d60e01b825287600483015284602483015260805160448301528160648160805180945af18015612f5d576130fa575b5080613035575b50906130309291613e41565b612ef0565b606d546001600160a01b03169061304e9085908461522f565b90803b15612f6a576040519162a0151560e21b8352876004840152608051602484015260448301528160648160805180945af18015612f5d576130e5575b50606d546001600160a01b0316803b15612f6a5760405190630e13da9f60e11b82528660048301528460248301528160448160805180945af18015612f5d5715613024576130d990612283565b60805180156130245780fd5b6130ee90612283565b608051801561308c5780fd5b61310390612283565b608051801561301d5780fd5b61311c91935080936126ff565b612fd2565b634e487b7160e01b90526021600452608051602490fd5b93949391929091600214613155575b505050505050505050612ef0565b1561325a5750505082613167916151b7565b606d546001600160a01b0316803b15612f6a576040519162a0151560e21b8352886004840152608051602484015260448301528160648160805180945af18015612f5d57613245575b50916119786131d861198793611978879660806131cf6131de9a612d16565b9101519061272c565b93612d16565b606d546001600160a01b0316803b15612f6a5760405191630e13da9f60e11b835284600484015260248301528160448160805180945af18015612f5d57613230575b505b388080808080808080613147565b61323990612283565b60805180156132205780fd5b61324e90612283565b60805180156131b05780fd5b92945092949095608051938313156000146133c65750935b606d546080516001600160a01b0390911692126133b15760600151905b803b15612f6a5760405191637c7c829d60e01b8352886004840152608051602484015260448301528160648160805180945af18015612f5d5761339c575b50806132e5575b50906132e09291613de5565b613222565b606d546001600160a01b0316803b15612f6a576040519162a0151560e21b8352876004840152602483015260805160448301528160648160805180945af18015612f5d57613387575b50606d546001600160a01b0316803b15612f6a5760405190630e13da9f60e11b82528660048301528460248301528160448160805180945af18015612f5d57156132d45761337b90612283565b60805180156132d45780fd5b61339090612283565b608051801561332e5780fd5b6133a590612283565b60805180156132cd5780fd5b60806133c0910151858561522f565b9061328f565b6133dd919593506133d690612d16565b80956126ff565b91613272565b999a50505092945092975050136000146134b3575050606d546001600160a01b03169050803b15612f6a576040519162a0151560e21b8352846004840152602483015260805160448301528160648160805180945af18015612f5d5761349e575b505b606d546001600160a01b031690813b15612f6a5760405192630e13da9f60e11b8452600484015260248301528160448160805180945af18015612f5d5761348a5750565b61349390612283565b608051806101af5750565b6134a790612283565b60805180156134445780fd5b6134be9293506151b7565b90803b15612f6a576040519162a0151560e21b8352846004840152608051602484015260448301528160648160805180945af18015612f5d57613502575b50613446565b61350b90612283565b386134fc565b613528929950803d106109c7576109b98183612301565b963880612e23565b613552919a5060a03d8111613559575b61354a8183612301565b810190612cbd565b9838612df3565b503d613540565b608051965092506002831480613577575b92612db6565b50888112613571565b8982139350612daf565b9683821215612d975760029750612d97565b9586861215612d895760029650612d89565b836080515260686020526040608051206135c98282546126ce565b9055612d62565b50505050565b92909182156135d0576135e884615124565b9015613dc55783600052606760205260406000206136078482546126ff565b90555b61361384615124565b9261361e838261272c565b90600080841315613db357506001945b600080821395908615613da157506001965b600381101596876137f6576001821493849283613d97575b8315613d78575b606d54604051632500ed8d60e21b8152600481018e905296906001600160a01b031660a088602481845afa9b8c15612c77578e9860009d613d58575b5060405198632f7ce47360e21b8a5260048a0152610160988981602481865afa998a15612c775760009a613d39575b50506137f6578215613c245750156139a15750505060001461382a575050606d546001600160a01b031693843b156121bc576000809560646040518098819362a0151560e21b83528c60048401528760248401528160448401525af1928315612c77576119786080612ea69361374c986119879761381b575b5001518661272c565b606d546001600160a01b031690813b156121bc57600091604483926040519485938492630e13da9f60e11b845289600485015260248401525af18015612c775761380c575b505b60038110156137f657156137a45750565b606d546001600160a01b031690813b156121bc57600091604483926040519485938492630e13da9f60e11b845260048401528160248401525af18015612c77576137eb5750565b6137f490612283565b565b634e487b7160e01b600052602160045260246000fd5b61381590612283565b38613791565b61382490612283565b38613743565b939250935060009182600387101561398d57506002861461397b5750905b606d546001600160a01b0316803b156121bc5760008091606460405180948193637c7c829d60e01b83528c60048401528860248401528160448401525af18015612c775761396c575b50806138a7575b506138a292613e41565b613793565b606d546001600160a01b0316906138c09084908661522f565b813b156121bc5760009160648392604051948593849262a0151560e21b84528c600485015282602485015260448401525af18015612c775761395d575b50606d546001600160a01b031692833b156121bc5760008094604460405180978193630e13da9f60e11b83528b60048401528860248401525af1938415612c77576138a29461394e575b5092613898565b61395790612283565b38613947565b61396690612283565b386138fd565b61397590612283565b38613891565b61398891925080926126ff565b613848565b634e487b7160e01b81526021600452602490fd5b969896919290916002146139be575b505050505050505050613793565b15613aae57505050846139d0916151b7565b606d546001600160a01b03169290833b156121bc5760009360648592604051968793849262a0151560e21b84528d600485015282602485015260448401525af1928315612c7757613a3b95611978611978936131d89361198797613a9f575b5060806131cf89612d16565b606d546001600160a01b031690813b156121bc57600091604483926040519485938492630e13da9f60e11b845289600485015260248401525af18015612c7757613a90575b505b3880808080808080806139b0565b613a9990612283565b38613a80565b613aa890612283565b38613a2f565b929650909460009391613c075750925b606d546001600160a01b031691600013613bf357606001515b813b156121bc57600091606483926040519485938492637c7c829d60e01b84528d600485015282602485015260448401525af18015612c7757613be4575b5080613b2b575b50613b2692613de5565b613a82565b606d546001600160a01b031690813b156121bc5760009160648392604051948593849262a0151560e21b84528c600485015260248401528160448401525af18015612c7757613bd5575b50606d546001600160a01b031692833b156121bc5760008094604460405180978193630e13da9f60e11b83528b60048401528860248401525af1938415612c7757613b2694613bc6575b5092613b1c565b613bcf90612283565b38613bbf565b613bde90612283565b38613b75565b613bed90612283565b38613b15565b6080613c02910151848761522f565b613ad7565b613c1e91949350613c1790612d16565b80946126ff565b91613abe565b99505050509293965050969550600014613cdc575050606d546001600160a01b0316919050813b156121bc5760009160648392604051948593849262a0151560e21b845288600485015260248401528160448401525af18015612c7757613ccd575b505b606d546001600160a01b031691823b156121bc576044600092836040519586948593630e13da9f60e11b8552600485015260248401525af18015612c77576137eb5750565b613cd690612283565b38613c86565b613ce79293506151b7565b813b156121bc5760009160648392604051948593849262a0151560e21b845288600485015282602485015260448401525af18015612c7757613d2a575b50613c88565b613d3390612283565b38613d24565b613d50929a50803d106109c7576109b98183612301565b9738806136ca565b613d71919d5060a03d81116135595761354a8183612301565b9b3861369b565b6000995092506002831480613d8e575b9261365f565b50878112613d88565b8882139350613658565b96878312156136405760029750613640565b948584121561362e576002955061362e565b8360005260686020526040600020613dde8482546126ff565b905561360a565b91613df1918351613e4d565b90613e0960018060a01b03606d5416928251926151b7565b823b156121bc576044600092836040519586948593633a336ee160e01b8552600485015260248401525af18015612c77576137eb5750565b91613df1918351613ee3565b606d54604051632500ed8d60e21b8152600481019290925260a090829060249082906001600160a01b03165afa8015612c7757608091600091613ec5575b5001805180841115613ead575061287692613ea79151906126ff565b9061272c565b613ec092915061287693613ea7916126ff565b612d16565b613edd915060a03d81116135595761354a8183612301565b38613e8b565b606d54604051632500ed8d60e21b8152600481019290925260a090829060249082906001600160a01b03165afa8015612c7757608091600091613f4f575b5001805180841015613f3c575061287692613ea791516126ff565b613ec0929150613ea790612876946126ff565b613f67915060a03d81116135595761354a8183612301565b38613f21565b9060a0600180821b03606d541692602460405180958193632500ed8d60e21b835260048301525afa908115612c7757608092600092613fe2575b5015613fc85701805180841115613ead575061287692613ea79151906126ff565b01805180841015613f3c575061287692613ea791516126ff565b613ffb91925060a03d81116135595761354a8183612301565b9038613fa7565b1561400957565b60405162461bcd60e51b81526020600482015260156024820152740c6ded8d8c2e8cae4c2d840dcdee840cadcdeeaced605b1b6044820152606490fd5b9291801561411857600090818112156140fd576003830161407f815461407661406e856154ce565b821015614002565b6108ab846154ce565b905560018060a01b0361409f81606d54169180606f5416955416926154ce565b93813b1561087d57604051634f7a10db60e11b815260048101979097526001600160a01b03908116602488015291909116604486015260648501929092529192919081908390608490829084905af19081156109ce57506137eb5750565b9293505060036141149101916106458354916154ce565b9055565b50509050565b90929160018060a01b03606e54169160246040809481519283809263548072f160e11b82528660048301525afa938415614201576000946141b3575b5050614167600091615124565b1261418f57831561418457602061418092015190612879565b9190565b614180915190612879565b83156141a5576141a0915190612879565b911590565b60206141a092015190612879565b9091938183813d83116141fa575b6141cb8183612301565b810103126101af575060009160206141679251916141e8836122ad565b8051835201516020820152939161415a565b503d6141c1565b513d6000823e3d90fd5b818102929181159184041417156126db57565b818102929160008212600160ff1b8214166126db5781840514901517156126db57565b811561271657600160ff1b81146000198314166126db570590565b60655460408051631074f21360e21b81529293602093926000906001600160a01b0390600490879087908390829086165afa95861561477a578396614743575b5081878651809863c147e88f60e01b82528b85830152816024968792165afa96871561473957849761470a575b50888452606b885285842054156146ea57866142e887862054426126ff565b106146df576143416142fa868b614784565b978a865260698a526143278887205468327cb2734119d3b7a9601e1b6143208a8d61421e565b0590612943565b8b875260698b528887205561433c814261270c565b61420b565b898552606b895286852055606a8852868685205580606d541690865191632500ed8d60e21b83528a8484015260a0838681845afa9283156146d55786936146b5575b508a865260678a528786205460688b5288872054101561450a5750898552606789526143ba8786205460688b5288872054906126ff565b90856143d96305f5e1006143ce858d61421e565b0593610966856154ce565b928181131561447f5750509060806143f792606d54169301516126ce565b813b15610430578492838b936044938a519788968795630e13da9f60e11b87528601528401525af1801561447557614461575b50916000805160206158a283398151915295939181608096945b868152606b865220549382519586528501528301526060820152a1565b61446b8291612283565b6101af573861442a565b84513d84823e3d90fd5b126144a7575b5050505050916000805160206158a28339815191529593918160809694614444565b9060806144ba92606d54169301516126ff565b813b15610430578492838b936044938a519788968795630e13da9f60e11b87528601528401525af18015614475576144f6575b80808080614485565b6145008291612283565b6101af57386144ed565b60678a528786205460688b5288872054809110614545575b505050505050916000805160206158a28339815191529593918160809694614444565b90866145826305f5e1006145778d8f61457298978f606761456a9352872054906126ff565b978891612d16565b61421e565b0594610966866154ce565b9381811315614610575050509060806145a192606d54169301516126ff565b813b15610430578492838b936044938a519788968795630e13da9f60e11b87528601528401525af18015614475576145fc575b50916000805160206158a283398151915295939181608096945b929496829496983880614522565b6146068291612283565b6101af57386145d4565b90919492501261463d575b5050505050916000805160206158a283398151915295939181608096946145ee565b90608061464b9201516126ce565b813b15610430578492838b936044938a519788968795630e13da9f60e11b87528601528401525af18015614475579380926000805160206158a283398151915298969492608098966146a6575b83959799829597995061461b565b6146af90612283565b38614698565b6146ce91935060a03d81116135595761354a8183612301565b9138614383565b88513d88823e3d90fd5b505050505050505050565b50505092606b929491508061433c614702924261270c565b948352522055565b9096508781813d8311614732575b6147228183612301565b8101031261087d575195386142c9565b503d614718565b86513d86823e3d90fd5b9095508681813d8311614773575b61475b8183612301565b810103126107c75761476c906125be565b943861429c565b503d614751565b85513d85823e3d90fd5b606d5460408051632500ed8d60e21b8152600481018490529394939290916001600160a01b03919082169060a085602481855afa94851561493b57600095614946575b508351918291632f7ce47360e21b835260048301528160246101609485935afa91821561493b5760009261491e575b50508160655416918351968793631074f21360e21b855284600460209687935afa9081156149135784959697986000926148cd575b5091614853939161022493608089519a8b97889663e5537b0f60e01b88526004880190612a29565b8051610164870152888101516101848701528a8101516101a487015260608101516101c487015201516101e4850152610204840152165afa91821561420157506000916148a1575b50905090565b82813d83116148c6575b6148b58183612301565b810103126101af575051803861489b565b503d6148ab565b919092939482813d831161490c575b6148e68183612301565b810103126101af575092614853926102249261490287966125be565b929450909261482b565b503d6148dc565b85513d6000823e3d90fd5b6149349250803d106109c7576109b98183612301565b38806147f6565b84513d6000823e3d90fd5b61495f91955060a03d81116135595761354a8183612301565b93386147c7565b908160209103126121bc575160ff811681036121bc5790565b606f546001600160a01b039392841692919084168303614a88576149a281615124565b9160009280614a6a575b505083606d541693604051948592632f7ce47360e21b845260048401528260246101609788935afa948515612c77576004956020938492600092614a4d575b5050015116926040519485809263313ce56760e01b82525afa918215612c775761287693600093614a1d575b50615473565b614a3f91935060203d8111614a46575b614a378183612301565b810190614966565b9138614a17565b503d614a2d565b614a639250803d106109c7576109b98183612301565b38806149eb565b614a809293614a78826154ce565b911284613f6d565b9038806149ac565b50505050600090565b606d54604051632f7ce47360e21b81526004810183905294919361016092918390879060249082906001600160a01b03165afa8015612c7757614ae796614ae194600092614aeb575b505061522f565b9161411e565b5090565b614b019250803d106109c7576109b98183612301565b3880614ada565b8282614b1792959493956157f4565b9260009384526066602052614b2e604085206128e5565b9160018060a01b03606d5416916040518093632f7ce47360e21b82528260048301528160246101609687935afa938415610a7e5791614bd29493918893612876989995614c0a575b505091614bcb916305f5e1009382526069602052614b9d604083205460c089015190612a10565b918180614c00575b8215614be5575b505015614bd857614bc56080600019975b0151916154ce565b9061420b565b04906151b7565b9061421e565b614bc56080600197614bbd565b15915081614bf6575b503880614bac565b9050811238614bee565b8184139250614ba5565b6305f5e10094929550614bcb939181614c2e92903d106109c7576109b98183612301565b949193819350614b76565b9091939293600092600092839660018060a01b03606d54166040805193632500ed8d60e21b855280600486015260a085602481865afa948515614f76578895614f56575b5081518093632f7ce47360e21b82528260048301528160246101609687935afa938415614f4c578994614f27575b5050614cb690615124565b94858115614f1457614cd190614ccb896154e2565b90612a10565b905b15888712614e7b5715614e0f5784516020860151808210614e0757614cf7916126ff565b8711801590614dff575b614df157871215614d5e5750505090614d1a9151612a10565b915b821315614d5457614d2c826154ce565b8111614d39575b50509190565b909350614d4c91506108ab6001946154ce565b913880614d33565b9350505060019190565b92614d73614dad9260809495830151906153b7565b90614d8f68327cb2734119d3b7a9601e1b94859201518761421e565b059480881315614deb575086945b80881215614dcb57508690612943565b818102918183051490151715614dd757614dd19291614dcb91614241565b90612943565b91614d1c565b634e487b7160e01b85526011600452602485fd5b94614d9d565b505050505050509250508190565b508015614d01565b505087614cf7565b83614e2b614e2584880151606089015190612a10565b856153b7565b89811215614e6557614e4082610966836154ce565b8811614e4f575050875b614cf7565b614e4a91610966614e5f926154ce565b876126ff565b614e4a91610966614e75926154ce565b876126ce565b15614edc57614e908551602087015190612a10565b88811315614eae57614e4a90610645614ea889612d16565b916154ce565b614eb787612d16565b614ec0826154ce565b11614ed557614e4a906108ab614ea889612d16565b5087614cf7565b614ef7614ef183870151606088015190612a10565b846153b7565b8489821215614f0857505087614cf7565b610966614e4a926154ce565b614f2190614dcb896154e2565b90614cd3565b614cb69294509081614f4492903d106109c7576109b98183612301565b929038614cab565b83513d8b823e3d90fd5b614f6f91955060a03d81116135595761354a8183612301565b9338614c7d565b82513d8a823e3d90fd5b600090815260666020526040614f978183206128e5565b9260018060a01b039283606d5416936020860193845194815195632f7ce47360e21b875260048701526101609586816024818b5afa9687156150fb578597615105575b5050805182519788916330a66e1560e01b835260048301528160246101009a8b935afa9788156150fb579089929186996150c8575b505061506a8261506561505a89948b8961504b615038608061506f9b019e8f948551908a615542565b9884518c89019485511515905191614a91565b95511691519051151591614b08565b9360608d0151612943565b612a10565b612943565b9283136150825750505050505050600190565b6150b46150c39660a06150ab6150bd976305f5e1009b838860208d0151169251910151916152b9565b9101519061420b565b94015116615427565b9061270c565b101590565b879299509261506561505a6150f061506a948761506f98903d10610ec457610eb68183612301565b9b945050509261500f565b83513d87823e3d90fd5b61511c929750803d106109c7576109b98183612301565b943880614fda565b60008181526067602052604081205460686020526040822054809111600014615167575061287691815260676020526040808220549160686020522054906126ff565b61287692506040613ec09260676020522054906126ff565b6040519061518c826122c9565b8160c06000918281528260208201528260408201528260608201528260808201528260a08201520152565b811561522857604081810151905163313ce56760e01b815292906001600160a01b03906020908590600490829085165afa928315612c775761287694600094615206575b506020015116615473565b602091945061522190823d8111614a4657614a378183612301565b93906151fb565b5050600090565b91909182156152a357604081810151905163313ce56760e01b815293906001600160a01b03906020908690600490829085165afa928315612c775761287695600094615281575b50602001511661533e565b602091945061529c90823d8111614a4657614a378183612301565b9390615276565b505050600090565b604d81116126db57600a0a90565b909182156152a35760405163313ce56760e01b815291602090839060049082906001600160a01b03165afa8015612c775768327cb2734119d3b7a9601e1b93614bd261531760ff6145729461531c97600091615320575b50166126f1565b6152ab565b0590565b615338915060203d8111614a4657614a378183612301565b38615310565b928115614a885760405163313ce56760e01b815293602090859060049082906001600160a01b03165afa908115612c775761457261531c946153ac61531760ff6153a5615317826153b29968327cb2734119d3b7a9601e1b9d6000916153205750166126f1565b93166126f1565b9461421e565b614241565b81156152285760208181015160405163313ce56760e01b815293916001600160a01b03918590600490829085165afa928315612c775761287694600094615404575b506040015116615473565b60409194506154209060203d8111614a4657614a378183612301565b93906153f9565b9080156152285760405163313ce56760e01b815291602090839060049082906001600160a01b03165afa918215612c775761531760ff61287694614bd2936000916153205750166126f1565b81156152a35760405163313ce56760e01b815290602090829060049082906001600160a01b03165afa928315612c77576154c861531760ff6153a561531782612876996153b2986000916153205750166126f1565b9261421e565b600081126154d95790565b61287690612d16565b6001600160ff1b0381116154f35790565b60405162461bcd60e51b815260206004820152602160248201527f56616c756520746f6f206c6172676520746f2066697420696e20696e743235366044820152601760f91b6064820152608490fd5b91909160a0810190815180861480156155e8575b80156155e0575b6155d55760408692015115156000146155a85750508051841115615590576128769361558a9151906126ff565b9161522f565b90612876936155a161558a92612d16565b92516126ff565b11156155bc576128769361558a91516126ff565b90612876936155cd61558a92612d16565b9251906126ff565b505050505050600090565b50831561555d565b508015615556565b9695929496939190936000938487129182156157de57608081019081519a8b116157a25784818961562b615633966060614dcb960151612943565b945191615542565b9580615791575b5061564784871215614002565b615659575b50505050612876906154ce565b60018060a01b0393604093858583015116855196879363313ce56760e01b9283865285600460209b8c935afa94851561578757908992918596615766575b508201511691600488518094819382525afa91821561575b576156ee6156e761531760ff6156e061531782610966998f996156f89d9c9a61433c9a9261573e575b5050166126f1565b95166126f1565b928c61420b565b9561433c8a6154ce565b1061570457808061564c565b60649250519062461bcd60e51b82526004820152601460248201527365786365656473206d6178206c6576657261676560601b6044820152fd5b6157549250803d10614a4657614a378183612301565b8f806156d8565b8651903d90823e3d90fd5b8391965061578090823d8411614a4657614a378183612301565b9590615697565b88513d86823e3d90fd5b61579b9196612943565b943861563a565b60405162461bcd60e51b815260206004820152601460248201527332bc31b2b2b2399036b0bc103837b9b4ba34b7b760611b6044820152606490fd5b9850505050505050506060608083015192015190565b909168010000000000000000831015615836576000901561582e575060ff60015b169160201b906001600160601b03199060601b16171790565b60ff90615815565b60405162461bcd60e51b81526020600482015260036024820152621c1d1b60ea1b6044820152606490fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcefaf8e5c8a1e0fc7765de2181763981e54c901cc58100bad6623d33fd062bd441ae8683eab23ec8d2d3eb297043db25c91e5ede56c4b8afb584ceef8a57d5d20a264697066735822122010a245d70b25365b3d0235473f137c73e0526e8dacb360af501d9bb9ef90497464736f6c63430008130033