5 txs
104 calls
constructor
constructor(address _SY, address _PT, string _name, string _symbol, uint8 __decimals, uint256 _expiry, bool _doCacheIndexSameBlock)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
doCacheIndexSameBlock
viewfunction doCacheIndexSameBlock() view returns (bool)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
expiry
viewfunction expiry() view returns (uint256)
factory
viewfunction factory() view returns (address)
getPostExpiryData
viewfunction getPostExpiryData() view returns (uint256 firstPYIndex)
getRewardTokens
viewfunction getRewardTokens() view returns (address[])
globalInterestIndex
viewfunction globalInterestIndex() view returns (uint256)
isDistributingInterestAndRewards
viewfunction isDistributingInterestAndRewards() view returns (bool)
isExpired
viewfunction isExpired() view returns (bool)
lastInterestBlock
viewfunction lastInterestBlock() view returns (uint256)
lastRewardBlock
viewfunction lastRewardBlock() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
postExpiry
viewfunction postExpiry() view returns (uint256 firstPYIndex)
PT
viewfunction PT() view returns (address)
pyIndexLastUpdatedBlock
viewfunction pyIndexLastUpdatedBlock() view returns (uint128)
pyIndexStored
viewfunction pyIndexStored() view returns (uint256)
rewardState
viewfunction rewardState(address) view returns (uint128 index, uint128 lastBalance)
SY
viewfunction SY() view returns (address)
symbol
viewfunction symbol() view returns (string)
syReserve
viewfunction syReserve() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
userInterest
viewfunction userInterest(address) view returns (uint128 index, uint128 accrued, uint256 pyIndex)
userReward
viewfunction userReward(address, address) view returns (uint128 index, uint128 accrued)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
mintPY
nonpayablefunction mintPY(address receiverPT, address receiverYT) returns (uint256 amountPYOut)
mintPYMulti
nonpayablefunction mintPYMulti(address[] receiverPTs, address[] receiverYTs, uint256[] amountSyToMints) returns (uint256[] amountPYOuts)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
pyIndexCurrent
nonpayablefunction pyIndexCurrent() returns (uint256 currentIndex)
redeemDueInterestAndRewards
nonpayablefunction redeemDueInterestAndRewards(address user, bool redeemInterest, bool redeemRewards) returns (uint256 interestOut, uint256[] rewardsOut)
redeemInterestAndRewardsPostExpiryForTreasury
nonpayablefunction redeemInterestAndRewardsPostExpiryForTreasury()
redeemPY
nonpayablefunction redeemPY(address receiver) returns (uint256 amountSyOut)
redeemPYMulti
nonpayablefunction redeemPYMulti(address[] receivers, uint256[] amountPYToRedeems) returns (uint256[] amountSyOuts)
rewardIndexesCurrent
nonpayablefunction rewardIndexesCurrent() returns (uint256[])
setPostExpiryData
nonpayablefunction setPostExpiryData()
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Burn
event Burn(address indexed caller, address indexed receiver, uint256 amountPYToRedeem, uint256 amountSyOut)
CollectInterestFee
event CollectInterestFee(uint256 amountInterestFee)
CollectRewardFee
event CollectRewardFee(address indexed rewardToken, uint256 amountRewardFee)
Mint
event Mint(address indexed caller, address indexed receiverPT, address indexed receiverYT, uint256 amountSyToMint, uint256 amountPYOut)
RedeemInterest
event RedeemInterest(address indexed user, uint256 interestOut)
RedeemRewards
event RedeemRewards(address indexed user, uint256[] amountRewardsOut)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
WithdrawFeeToTreasury
event WithdrawFeeToTreasury(uint256[] amountRewardsOut, uint256 syOut)
errors
ArrayEmpty
error ArrayEmpty()
ArrayLengthMismatch
error ArrayLengthMismatch()
YCExpired
error YCExpired()
YCNoFloatingSy
error YCNoFloatingSy()
YCNotExpired
error YCNotExpired()
YCNothingToRedeem
error YCNothingToRedeem()
YCPostExpiryDataNotSet
error YCPostExpiryDataNotSet()
YieldContractInsufficientSy
error YieldContractInsufficientSy(uint256 actualSy, uint256 requiredSy)
creation bytecode
0x610200604081815234620005f957620055cf8038038091620000228286620005fe565b8439820160e083820312620005f9576200003c8362000622565b926200004b6020820162000622565b818401519093906001600160401b038111620005f957836200006f91840162000637565b606083015190936001600160401b038211620005f9576200009291840162000637565b9360808301519560ff87168703620005f95760c060a0850151940151948515158603620005f9578351978885016001600160401b0381118a821017620004c757855260018952603160f81b60208a015281516001600160401b038111620004c757600354600181811c91168015620005ee575b6020821014620005d857601f811162000572575b50806020601f8211600114620004e957600091620004dd575b508160011b916000199060031b1c1916176003555b87516001600160401b038111620004c7576004988954600181811c91168015620004bc575b6020821014620004a7579081601f8493116200044f575b50602090601f8311600114620003e457600092620003d8575b50508160011b916000199060031b1c19161788555b608052600160f81b60018060f81b0360025416176002556020815191012096602081519101209661010097818952610120948186524660c05280519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f948585528284015260608301524660808301523060a083015260a0825260c0820199828b1060018060401b038c1117620003c3575089905251902060a0523060e0526101409081526101609182526101809283526101c09485526101a0933385526101e0968752614f209889620006af8a3960805189611dfc015260a051896149d0015260c05189614a9c015260e051896149a101525188614a1f01525187614a45015251866149fc0152518581816102a60152818161069301528181610f520152818161103d01528181611155015281816117e80152818161183c0152818161342d0152818161399301528181613aa301528181613d6701528181613e9e0152613fc601525184818161073d01528181612fcd0152818161334a0152818161391c0152613967015251838181610c890152818161357401528181613c170152613ff7015251828181610475015281816105ad01528181610b7201528181610d7001528181610ed2015281816110f00152818161153801528181611b5001528181611e5701528181612ff1015281816133e9015281816138f2015261426e015251818181611cea0152613a370152f35b604190634e487b7160e01b6000525260246000fd5b0151905038806200019c565b60008c8152602081209350601f198516905b8181106200043657509084600195949392106200041c575b505050811b018855620001b1565b015160001960f88460031b161c191690553880806200040e565b92936020600181928786015181550195019301620003f6565b9091508a6000526020600020601f840160051c810191602085106200049c575b90601f859493920160051c01905b8181106200048c575062000183565b600081558493506001016200047d565b90915081906200046f565b60228b634e487b7160e01b6000525260246000fd5b90607f16906200016c565b634e487b7160e01b600052604160045260246000fd5b90508301513862000132565b600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9250601f198416905b81811062000559575090836001949392106200053f575b5050811b0160035562000147565b85015160001960f88460031b161c19169055388062000531565b9192602060018192868a0151815501940192016200051a565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c810160208410620005d0575b601f830160051c82018110620005c357505062000119565b60008155600101620005ab565b5080620005ab565b634e487b7160e01b600052602260045260246000fd5b90607f169062000105565b600080fd5b601f909101601f19168101906001600160401b03821190821017620004c757604052565b51906001600160a01b0382168203620005f957565b919080601f84011215620005f9578251906001600160401b038211620004c7576040519160209162000673601f8301601f1916840185620005fe565b818452828287010111620005f95760005b8181106200069a57508260009394955001015290565b85810183015184820184015282016200068456fe608060408181526004908136101561001657600080fd5b600092833560e01c90816306fdde03146122a857508063095ea7b3146122595780630a2b83a71461221c5780630b49fcef146121af57806318160ddd146121515780631d52edc41461208a5780631d6e45a11461204c57806323b872dd14611e7c5780632f13b60c14611e20578063313ce56714611dc45780633644e51514611d895780633d8df49214611d4c5780634ba6dcd714611d0f578063516399df14611cb45780635333581914611a6a5780635cbadbe4146119ca57806360e0a9e11461197b57806370a082311461190e5780637d24da4d146114825780637ecebe001461142057806395d89b41146112cb578063a9059cbb146111f7578063a9f8d181146111ba578063acc5da4c14611061578063afd27bf514610ff2578063b0d8898114610e07578063bcb7ea5d14610cad578063c45a015514610c3e578063c4f59f9b14610bb0578063cdbb036114610ac4578063d2a3584e14610a84578063d505accf146107ea578063d68076c314610761578063d94073d4146106f2578063db74aa151461050c578063dd62ed3e14610498578063e184c9be1461043f578063e767b9e514610402578063ea64a820146103725763f8b2f991146101dc57600080fd5b3461036e57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261036e5760025461021d60028260f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8092161760025583825180947ff8b2f991000000000000000000000000000000000000000000000000000000008252818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af19283156103645784610318959461031c575b50507f0100000000000000000000000000000000000000000000000000000000000000906002541617600255519182916020835260208301906124d4565b0390f35b7f01000000000000000000000000000000000000000000000000000000000000009294509061035c913d8091833e61035481836125b8565b810190612f22565b9290386102da565b82513d86823e3d90fd5b8280fd5b8382346103fe5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57806103189273ffffffffffffffffffffffffffffffffffffffff6103c5612458565b168152600860209081529190205491516fffffffffffffffffffffffffffffffff8316815260809290921c908201529081906040820190565b5080fd5b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe576020906009549051908152f35b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b8382346103fe57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57806020926104d4612458565b6104dc612480565b73ffffffffffffffffffffffffffffffffffffffff91821683526001865283832091168252845220549051908152f35b5091346106ef57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106ef5750610545612458565b9161054e612480565b6002549261056260028560f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80951617600255427f000000000000000000000000000000000000000000000000000000000000000011156106c8575061068c6106877f0100000000000000000000000000000000000000000000000000000000000000928451966106078861256d565b600188526020978836818301378651916106208361256d565b600183528936818501378751936106368561256d565b600185528a368187013761064861398b565b61065186612660565b5261065b84612660565b73ffffffffffffffffffffffffffffffffffffffff809216905261067e83612660565b91169052612f9c565b612660565b51926106b77f0000000000000000000000000000000000000000000000000000000000000000614e41565b600c55600254161760025551908152f35b82517f5b15a6da000000000000000000000000000000000000000000000000000000008152fd5b80fd5b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b8382346103fe5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe578060609273ffffffffffffffffffffffffffffffffffffffff6107b3612458565b168152600b602052209060018254920154908051926fffffffffffffffffffffffffffffffff8116845260801c6020840152820152f35b509190346103fe5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57610824612458565b61082c612480565b90604435926064356084359060ff82168203610a8057804211610a235773ffffffffffffffffffffffffffffffffffffffff908185169283895260056020528989208054906001820190558a519260208401917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98352868d860152858a1660608601528a608086015260a085015260c084015260c0835260e083019267ffffffffffffffff93818110858211176109f7578c52519020906108eb61498a565b928b519260208401947f1901000000000000000000000000000000000000000000000000000000000000865260228501526042840152604283526080830190838210908211176109cb57916109599391610951938d5260c4359260a435925190206148d5565b9190916146b0565b160361096e575061096b93945061453b565b80f35b60649060208751917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152fd5b60248b6041897f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60248c60418a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60648360208a51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152fd5b8680fd5b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57602090600d5460801c9051908152f35b83346106ef57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106ef577f0100000000000000000000000000000000000000000000000000000000000000600254610b2760028260f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80921617600255427f00000000000000000000000000000000000000000000000000000000000000001115610ba3575b600254161760025580f35b610bab6139f3565b610b98565b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57610be8613e5a565b815192839260208080860192818752855180945286019401925b828110610c1157505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610c02565b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b8382346103fe57602091827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106ef5750610ce9612458565b907f010000000000000000000000000000000000000000000000000000000000000061068c61068760025494610d2560028760f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80971617600255427f00000000000000000000000000000000000000000000000000000000000000001115610dfa575b8451610da18161256d565b60018152873681830137855191610db78361256d565b60018352883681850137610dc96138ef565b610dd284612660565b5273ffffffffffffffffffffffffffffffffffffffff610df183612660565b91169052613326565b610e026139f3565b610d96565b503461036e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261036e5767ffffffffffffffff8235818111610fee57610e5590369085016124a3565b9190946024359182116106ef5750610e7090369085016124a3565b94909160025494610e8760028760f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80971617600255427f00000000000000000000000000000000000000000000000000000000000000001115610fe1575b868203610fba578115610f93575094610f467f010000000000000000000000000000000000000000000000000000000000000093610f3e610f4c946103189936916126fe565b9236916126b0565b90613326565b92610f767f0000000000000000000000000000000000000000000000000000000000000000614e41565b600c556002541617600255519182916020835260208301906124d4565b84517ff1364a74000000000000000000000000000000000000000000000000000000008152fd5b84517fa24a13a6000000000000000000000000000000000000000000000000000000008152fd5b610fe96139f3565b610ef8565b8480fd5b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50903461036e57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261036e57600254916110a560028460f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80941617600255427f00000000000000000000000000000000000000000000000000000000000000001180156111ad575b61118757837f010000000000000000000000000000000000000000000000000000000000000084611146613bc4565b5050611150613f76565b6111797f0000000000000000000000000000000000000000000000000000000000000000614e41565b600c55600254161760025580f35b517fcd81a636000000000000000000000000000000000000000000000000000000008152fd5b6111b56139f3565b611117565b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe576020906007549051908152f35b8382346103fe57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe576020907f0100000000000000000000000000000000000000000000000000000000000000611253612458565b6112bc6002549161126a60028460f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80941617600255602435903361423a565b60025416176002555160018152f35b508290346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57805191809380549160019083821c92828516948515611416575b60209586861081146113ea578589529081156113a85750600114611350575b6103188787611346828c03836125b8565b51918291826123f2565b81529295507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061139557505050826103189461134692820101948680611335565b8054868501880152928601928101611377565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168887015250505050151560051b8301019250611346826103188680611335565b6024846022857f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b93607f1693611316565b8382346103fe5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe578060209273ffffffffffffffffffffffffffffffffffffffff611472612458565b1681526005845220549051908152f35b503461036e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261036e576114ba612458565b90602480359182159283158103610a80576044358015948515820361190a57600254956114ed60028860f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80981617600255427f000000000000000000000000000000000000000000000000000000000000000011156118fd575b816118f5575b506118cd57611572866127c5565b156118ae5794611580613e5a565b9261158b8451612611565b97809273ffffffffffffffffffffffffffffffffffffffff96878916945b875181101561172257886115bd828a61269c565b51168452600660208181528886208887528152888620548e92608091821c6115e5868661269c565b528c8c6115f2878761269c565b5161160c575b50505050505061160790612769565b6115a9565b866116169161269c565b5116885282528987208988528252611649848b8920946fffffffffffffffffffffffffffffffff9586815416905561269c565b519183831161171e576008908d611660878f61269c565b5116895252828a88209216908254901c039182116116f3578d8c6116df858e6116d78f98611607996116d2829a6116e69a906fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b61269c565b51169361269c565b5191614b53565b90508b3880808c8c6115f8565b86866011877f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8780fd5b50989392505092979450879593507f78d61a0c27b13f43911095f9f356f14daa3cd8b125eea1aa22421245e90e813d6117688688519182916020835260208301906124d4565b0390a25b1561188057938161180c61031895966117a57f010000000000000000000000000000000000000000000000000000000000000095612cec565b73ffffffffffffffffffffffffffffffffffffffff831692838252600b6020528882205460801c988992206fffffffffffffffffffffffffffffffff81541690557f0000000000000000000000000000000000000000000000000000000000000000614b53565b7f83a945bd12c713615b59a6e48a3467c05d1a7442350600d6f7fce6af9f7190e96020878951908152a25b6118607f0000000000000000000000000000000000000000000000000000000000000000614e41565b600c556002541617600255835193849384528060208501528301906124d4565b61031893507f0100000000000000000000000000000000000000000000000000000000000000915093611837565b92945094859391506118c76118c1613e5a565b51612611565b9261176c565b8683517f68146f1d000000000000000000000000000000000000000000000000000000008152fd5b905038611564565b6119056139f3565b61155e565b8880fd5b8382346103fe5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe5760209061197461194d612458565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000205490565b9051908152f35b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe576020906fffffffffffffffffffffffffffffffff600d54169051908152f35b8382346103fe57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe578061031892611a07612458565b611a0f612480565b73ffffffffffffffffffffffffffffffffffffffff91821683526006602090815284842091909216835281529190205491516fffffffffffffffffffffffffffffffff8316815260809290921c908201529081906040820190565b503461036e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261036e5767ffffffffffffffff9282358481116103fe57611aba90369085016124a3565b90916024358681116103fe57611ad390369087016124a3565b9690916044359182116106ef5750611aee90369087016124a3565b93909260025496611b0560028960f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80991617600255427f00000000000000000000000000000000000000000000000000000000000000001115611c8d578115611c6657818914801590611c5c575b611c3557611b9d611b983688886126b0565b614ac2565b611ba561398b565b8111611bf8575050610f4c93610f3e6103189994611bea7f01000000000000000000000000000000000000000000000000000000000000009895611bf29536916126fe565b9536916126fe565b91612f9c565b9087604492611c0561398b565b9151927fa2cb08190000000000000000000000000000000000000000000000000000000084528301526024820152fd5b86517fa24a13a6000000000000000000000000000000000000000000000000000000008152fd5b5081861415611b86565b86517ff1364a74000000000000000000000000000000000000000000000000000000008152fd5b86517f5b15a6da000000000000000000000000000000000000000000000000000000008152fd5b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57602090517f000000000000000000000000000000000000000000000000000000000000000015158152f35b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57602090600c549051908152f35b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57602090600a549051908152f35b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe5760209061197461498a565b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe5760209051427f000000000000000000000000000000000000000000000000000000000000000011158152f35b509190346103fe5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57611eb6612458565b611ebe612480565b90604435928560025495611ed860028860f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8098161760025573ffffffffffffffffffffffffffffffffffffffff8416815260016020528181203382526020522054907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611fa2575b6020877f0100000000000000000000000000000000000000000000000000000000000000886112bc89898961423a565b848210611fef57509260209594926112bc92611fe2837f01000000000000000000000000000000000000000000000000000000000000009703338361453b565b9250929495819450611f72565b60649060208851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57602090600e54159051908152f35b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57602090600254906120d160028360f81c1415612508565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809316176002557f0100000000000000000000000000000000000000000000000000000000000000612142613a35565b92600254161760025551908152f35b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe576020907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600254169051908152f35b5082346106ef57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106ef5750600e549081156121f4576020925051908152f35b9050517fd2509633000000000000000000000000000000000000000000000000000000008152fd5b8382346103fe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe57602090600e549051908152f35b8382346103fe57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103fe576020906122a1612297612458565b602435903361453b565b5160018152f35b929050346123ee57837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126123ee57600354600181811c91869082811680156123e4575b60209586861082146123b85750848852908115612378575060011461231f575b6103188686611346828b03836125b8565b929550600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061236557505050826103189461134692820101943861230e565b8054868501880152928601928101612348565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687860152505050151560051b8301019250611346826103183861230e565b8360226024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b93607f16936122ee565b8380fd5b60208082528251818301819052939260005b858110612444575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006040809697860101520116010190565b818101830151848201604001528201612404565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361247b57565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361247b57565b9181601f8401121561247b5782359167ffffffffffffffff831161247b576020808501948460051b01011161247b57565b90815180825260208080930193019160005b8281106124f4575050505090565b8351855293810193928101926001016124e6565b1561250f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b6040810190811067ffffffffffffffff82111761258957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761258957604052565b67ffffffffffffffff81116125895760051b60200190565b9061261b826125f9565b61262860405191826125b8565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061265682946125f9565b0190602036910137565b80511561266d5760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561266d5760209160051b010190565b92916126bb826125f9565b916126c960405193846125b8565b829481845260208094019160051b810192831161247b57905b8282106126ef5750505050565b813581529083019083016126e2565b9291612709826125f9565b9161271760405193846125b8565b829481845260208094019160051b810192831161247b57905b82821061273d5750505050565b813573ffffffffffffffffffffffffffffffffffffffff8116810361247b578152908301908301612730565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146127965760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6127cd6128ce565b908051156128165773ffffffffffffffffffffffffffffffffffffffff8316801515908161280b575b5061280057505050565b61280992612b22565b565b9050301415386127f6565b505050565b6128236128ce565b9181511561288a5773ffffffffffffffffffffffffffffffffffffffff908383838316801515908161287f575b5061286e575b5050508316801515908161280b575061280057505050565b61287792612b22565b388383612856565b905030141538612850565b50505050565b9190820391821161279657565b9190820180921161279657565b9190916fffffffffffffffffffffffffffffffff8080941691160191821161279657565b6128d6613e5a565b906128e18251612611565b80835115612ae75750600754430361295e575b6000805b8451811015612959578073ffffffffffffffffffffffffffffffffffffffff612924612954938861269c565b5116835260086020526fffffffffffffffffffffffffffffffff60408420541661294e828661269c565b52612769565b6128f8565b505090565b909143600755600c5490612970613f76565b8115159360005b8251811015612adc5773ffffffffffffffffffffffffffffffffffffffff906129b8826129a4838761269c565b5116926129b1838761269c565b5116614e41565b918060005260086020918183526040906129dc826000205496608097881c90612890565b92816000528085526fffffffffffffffffffffffffffffffff9485846000205416928d8415612ad3575b612ab0575b86841161247b5760005252838260002091167fffffffffffffffffffffffffffffffff0000000000000000000000000000000082541617905582821161247b57612aab94612aa693612a66926000209316908354901c6128aa565b6fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b612769565b612977565b92612acd90612ac78d612ac289613860565b613890565b9061289d565b92612a0b565b60019450612a06565b5092915092506128f4565b919050565b15612af357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b9092919273ffffffffffffffffffffffffffffffffffffffff612b598184169384151580612ce2575b612b5490612aec565b6141e0565b9160005b8151811015612cd95782612b71828461269c565b511690612b7e818961269c565b51826000526006906020908282526040806000208a60005283526fffffffffffffffffffffffffffffffff91828260002054168015612cd1575b818114612cc157670de0b6b3a7640000612bde612bd8612bfd9385612890565b8d61387d565b0488600052868652836000208d6000528652836000205460801c61289d565b9183821161247b5783831161247b578051948186019686881067ffffffffffffffff89111761258957612cbc99868095612aa69a86521688528483890196168652600052815281600020908d600052526000209351167fffffffffffffffffffffffffffffffff0000000000000000000000000000000084541617835551166fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b612b5d565b505050505050612cbc9150612769565b506001612bb8565b50505050509050565b5030851415612b4b565b612cf4612e9c565b9073ffffffffffffffffffffffffffffffffffffffff83168015159081612d29575b50612d2057505050565b61280992612d34565b905030141538612d16565b73ffffffffffffffffffffffffffffffffffffffff811693929184151580612e92575b612d6090612aec565b600090858252600b6020526fffffffffffffffffffffffffffffffff60409381858520541690838214612e87578115612e4657670de0b6b3a764000091612dd5612dce612ddb9373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000205490565b9186612890565b9061387d565b048181116123ee57612e0290888552600b602052612a66838787209216825460801c6128aa565b80821161036e5760019495968352600b60205283832091167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055200155565b505080965081116103fe57600193949583832091167fffffffffffffffffffffffffffffffff00000000000000000000000000000000825416179055200155565b505050505050509050565b5030851415612d57565b6009544314612f1557436009557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025416612ed5613bc4565b92909291600a54938415612f0c575b81612ef2575b505082600a55565b612f04929491612ac2612ac792613860565b913880612eea565b60019450612ee4565b600a5490600d5460801c90565b602090818184031261247b5780519067ffffffffffffffff821161247b57019180601f8401121561247b578251612f58816125f9565b93612f6660405195866125b8565b818552838086019260051b82010192831161247b578301905b828210612f8d575050505090565b81518152908301908301612f7f565b929190612fa98251612611565b612fb1613a35565b60009573ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001692427f00000000000000000000000000000000000000000000000000000000000000001115985b87518110156132fa57670de0b6b3a764000061303a83613034848c61269c565b5161387d565b04613045828861269c565b5283613051828961269c565b511661305d828861269c565b5190801561329c578b61328f575b613074816127c5565b61307d81612cec565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80831161247b576002908154908085168183160190808211612796577fff0000000000000000000000000000000000000000000000000000000000000091169116179055806000526020906000825260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360409586842061312182825461289d565b90558651908152a385613134848761269c565b5116613140848a61269c565b5190883b1561247b5783517f12a31dcc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600480830191909152602482019290925290600082604481838d5af1801561328457938c93888d948d948c9998613227575b50509061321087613209818b613201826132229e6131f9827fc0025304673122449dd60b9b0093874b0e2fd6fe57af1c7c2fbfee0ccf5ead589c9b61269c565b51169b61269c565b51169961269c565b519561269c565b519082519485528401523392a4612769565b613014565b9450945050935093945067ffffffffffffffff8211613256575082528592918a918a918a9188613210876131b9565b6041907f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b84513d6000823e3d90fd5b6132976139f3565b61306b565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b505050505093505050565b519073ffffffffffffffffffffffffffffffffffffffff8216820361247b57565b919061333181614ac2565b9273ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691823b1561247b576040958651937fb64761f900000000000000000000000000000000000000000000000000000000855260009485816004938183816133d689308a84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af180156138565761380f575b50427f000000000000000000000000000000000000000000000000000000000000000011918215926135fb575b509561341c613a35565b90856134288551612611565b9680927f0000000000000000000000000000000000000000000000000000000000000000925b875185101561353957848d818c8e8d8d84978d8f8c61347c6134708a8961269c565b519193612ac283613860565b9161351a575b5061348d888861269c565b528c8461349a898661269c565b51166134a6898961269c565b51906134b192614b53565b6134ba9161289d565b9b6134c49161269c565b5116946134d09161269c565b51916134db9161269c565b518251918252602082015233917f5d624aa9c148153ab3446c1b154f660ee7701e549fe9b62dab7171b1c80e6fa291a361351490612769565b9361344e565b8192509061352d61353292600e546138c9565b612890565b9038613482565b989b97935099945097509350602091508451928380927f61d027b30000000000000000000000000000000000000000000000000000000082527f0000000000000000000000000000000000000000000000000000000000000000165afa9283156135f2575084926135b0575b506128099350614b53565b915091926020823d82116135ea575b816135cc602093836125b8565b810103126106ef5750906135e36128099392613305565b90386135a5565b3d91506135bf565b513d86823e3d90fd5b301561378c578261377f575b613610306127c5565b61361930612cec565b30865285602052888620548181106136fc5781903088528760205203898720557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80821161247b5760025490808316818316038181116136d057889392917fff00000000000000000000000000000000000000000000000000000000000000911691161760025589519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203092a338613412565b6024896011877f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60848360208c51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b6137876139f3565b613607565b60848260208b51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b67ffffffffffffffff819692961161382a57885293386133e5565b6024826041887f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b89513d88823e3d90fd5b90670de0b6b3a76400009182810292818404149015171561279657565b8181029291811591840414171561279657565b811561389a570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b670de0b6b3a764000091828102928184041490151715612796576138ec91613890565b90565b427f00000000000000000000000000000000000000000000000000000000000000001115613962576139407f0000000000000000000000000000000000000000000000000000000000000000614e41565b30600052600060205260406000205480821060001461395d575090565b905090565b6138ec7f0000000000000000000000000000000000000000000000000000000000000000614e41565b6139c06139b77f0000000000000000000000000000000000000000000000000000000000000000614e41565b600c5490612890565b9081156139c957565b60046040517f22826619000000000000000000000000000000000000000000000000000000008152fd5b600e5461280957613a02612e9c565b5050613a0c6128ce565b5050613a16613a35565b6fffffffffffffffffffffffffffffffff9081811161247b5716600e55565b7f000000000000000000000000000000000000000000000000000000000000000080613b7f575b613b76576040517f3ba0b9a900000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115613b6a57600091613b39575b50600d5460801c80821115613b315750905b6fffffffffffffffffffffffffffffffff9182811161247b577fffffffffffffffffffffffffffffffff000000000000000000000000000000008382169343169160801b1617600d55565b905090613ae6565b906020823d8211613b62575b81613b52602093836125b8565b810103126106ef57505138613ad4565b3d9150613b45565b6040513d6000823e3d90fd5b600d5460801c90565b506fffffffffffffffffffffffffffffffff600d54164314613a5c565b9081602091031261247b57516fffffffffffffffffffffffffffffffff8116810361247b5790565b600f5460009182613bd3613a35565b9280151580613e50575b613bea575b505081600f55565b6040517f61d027b300000000000000000000000000000000000000000000000000000000815294506020917f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168387600481845afa968715613dfd578297613e19575b5083600e5415600014613e0857600491604051928380927fdd86fea10000000000000000000000000000000000000000000000000000000082525afa908115613dfd57906fffffffffffffffffffffffffffffffff918391613dd0575b5016915b613cfe86613cf87effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60025416612dd58584612890565b9261387d565b90670de0b6b3a76400009283820291808304851490151715613da357507e4e8d79e4b41c5fad7561dc7c07786ee4e52292da7a3f5dc7ab90e32cc30423949392613d58613d51613d9294613d6094613890565b948561387d565b048093612890565b96613d8d837f00000000000000000000000000000000000000000000000000000000000000009283614b53565b614e41565b600c55604051908152a13880613be2565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b613df09150853d8711613df6575b613de881836125b8565b810190613b9c565b38613cbf565b503d613dde565b6040513d84823e3d90fd5b5050670de0b6b3a764000091613cc3565b9096508381813d8311613e49575b613e3181836125b8565b810103126103fe57613e4290613305565b9538613c62565b503d613e27565b5083811415613bdd565b6040517fc4f59f9b0000000000000000000000000000000000000000000000000000000081526000808260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215613f69578192613ed257505090565b9091503d8083833e613ee481836125b8565b810160209182818303126123ee5780519067ffffffffffffffff8211610fee570181601f820112156123ee57805190613f1c826125f9565b94613f2a60405196876125b8565b828652848087019360051b8301019384116106ef57508301905b828210613f52575050505090565b838091613f5e84613305565b815201910190613f44565b50604051903d90823e3d90fd5b60409081517fef5cfb8c00000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff90828160248183867f0000000000000000000000000000000000000000000000000000000000000000165af180156141d6576141bc575b50807f000000000000000000000000000000000000000000000000000000000000000016938051917f61d027b30000000000000000000000000000000000000000000000000000000083526020958684600481845afa93841561416a578594614185575b5086600e5415600014614174576004918451928380927ff5de2d1f0000000000000000000000000000000000000000000000000000000082525afa90811561416a57906fffffffffffffffffffffffffffffffff91869161414d575b5016905b6140bf613e5a565b855b8151811015612e875780877f880a48d40a6133941abdcfabd5c5f9a791b1e6c8afd23138c5a36e3d950392228b670de0b6b3a76400006141318961412c8a61410c6141489a8c61269c565b5116968d61411989614e41565b9189815260088852205460801c90612890565b61387d565b0461413d818c86614b53565b8951908152a2612769565b6140c1565b6141649150883d8a11613df657613de881836125b8565b386140b3565b83513d87823e3d90fd5b5050670de0b6b3a7640000906140b7565b9093508681813d83116141b5575b61419d81836125b8565b81010312610fee576141ae90613305565b9238614057565b503d614193565b6141cf903d8085833e61035481836125b8565b5038613ff3565b85513d85823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff16600090808252600b6020526001604083200154801561295957826142276040926138ec9560205283832054906138c9565b928152600b602052205460801c9061289d565b9173ffffffffffffffffffffffffffffffffffffffff918284169283156144b7578116938415614433578484146143d557427f000000000000000000000000000000000000000000000000000000000000000011156143c8575b61429e828261281b565b6142a6612e9c565b9182823088036143b7575b5050503086036143a6575b50505060008281528060205260408120549180831061432257604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef95876020965282865203828220558681522061431782825461289d565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b6143af92612d34565b3880806142bc565b6143c092612d34565b3882826142b1565b6143d06139f3565b614294565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff80911691821561462d57169182156145a95760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b60058110156148a657806146c15750565b600181036147275760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b6002810361478d5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b600381036148195760846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b60041461482257565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9291907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831161497e5760ff16601b81141580614973575b614967579160809493916020936040519384528484015260408301526060820152600093849182805260015afa15613f6957815173ffffffffffffffffffffffffffffffffffffffff811615614961579190565b50600190565b50505050600090600490565b50601c81141561490d565b50505050600090600390565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480614a99575b156149f2577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f000000000000000000000000000000000000000000000000000000000000000082527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176125895760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146149c9565b600090815b8151831015614aef57614ae7600191614ae0858561269c565b519061289d565b920191614ac7565b91505090565b3d15614b4e573d9067ffffffffffffffff82116125895760405191614b4260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846125b8565b82523d6000602084013e565b606090565b82156128165773ffffffffffffffffffffffffffffffffffffffff1680614bec5750600080809381935af1614b86614af5565b5015614b8e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b9060405190614c7a82614c4e602096878301947fa9059cbb000000000000000000000000000000000000000000000000000000008652602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836125b8565b60405191614c878361256d565b8483527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656485840152833b15614d8d5790614cd69291600094859283809351925af1614cd0614af5565b90614deb565b805180614ce35750505050565b818491810103126103fe57820151908115918215036106ef5750614d095780808061288a565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b90919015614df7575090565b815115614e075750805190602001fd5b614e3d906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352600483016123f2565b0390fd5b60009073ffffffffffffffffffffffffffffffffffffffff1680614e655750504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa918215614ede578092614eae57505090565b9091506020823d8211614ed6575b81614ec9602093836125b8565b810103126106ef57505190565b3d9150614ebc565b604051903d90823e3d90fdfea264697066735822122057ecc95c16040906471917640bf6c5238bcdea7e8d0964f7da1107008cbbacb664736f6c634300081100330000000000000000000000009d6d509c0354aca187aac6bea7d063d3ef68e2a0000000000000000000000000aa92ea52612fa5ee5aba5510682485c19750cb8200000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000667cab8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011595420724554482032374a554e32303234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001159542d724554482d32374a554e32303234000000000000000000000000000000