133 txs
143 calls
constructor
constructor(address _brevisProof)
functions
brevisProof
viewfunction brevisProof() view returns (address)
currEpoch
viewfunction currEpoch() view returns (uint64)
epochInfos
viewfunction epochInfos(uint64) view returns (uint64 startTime, uint64 endTime, uint128 indexingBlockNumber)
getCumulativeRewards
viewfunction getCumulativeRewards(address user) view returns (uint64 epoch, uint256 rewards)
getMerkleProof
viewfunction getMerkleProof(uint64 epoch, address user) view returns (uint256 _cumulativeRewards, bytes32[] proof)
getProtocolInfo
viewfunction getProtocolInfo(uint32 protocolId) view returns (tuple)
numBuckets
viewfunction numBuckets() view returns (uint8)
owner
viewfunction owner() view returns (address)
proofHandlers
viewfunction proofHandlers(address) view returns (bool)
protocols
viewfunction protocols(uint32) view returns (uint64 chainId, uint8 bucket, string name, bytes32 vkHash, uint16 batchSize, address resultHandler, bool enabled, address taxCollector, uint256 taxBps)
resultHandlers
viewfunction resultHandlers(address) view returns (bool)
state
viewfunction state() view returns (uint8)
submitters
viewfunction submitters(address) view returns (bool)
topRoot
viewfunction topRoot() view returns (bytes32)
totalPointsByBucket
viewfunction totalPointsByBucket(uint8) view returns (uint256)
addPoints
nonpayablefunction addPoints(uint8 bucket, address user, uint256 addedPoints, tuple protocol)
addProofHandler
nonpayablefunction addProofHandler(address proofHandler)
addResultHandler
nonpayablefunction addResultHandler(address resultHandler)
addSubmitter
nonpayablefunction addSubmitter(address submitter)
batchRemoveProtocolInfos
nonpayablefunction batchRemoveProtocolInfos(uint32[] _protocolIds)
batchSetCumulativeRewards
nonpayablefunction batchSetCumulativeRewards(address[] users, uint256[] _cumulativeRewards)
batchSetProtocolInfos
nonpayablefunction batchSetProtocolInfos(uint64[] chainIds, uint32[] _protocolIds, uint8[] buckets, string[] names, bytes32[] vkHashes, uint16[] batchSizes, address[] _resultHandlers, bool[] enableds, address[] taxCollectors, uint256[] taxBpses, bytes32[][] extraDatas)
batchSetProtocolsEnabled
nonpayablefunction batchSetProtocolsEnabled(uint32[] _protocolIds, bool[] enableds)
batchSubmitProofs
nonpayablefunction batchSubmitProofs(uint32[] _protocolIds, bytes[] proofs, bytes[] circuitOutputs)
genSubRoot
nonpayablefunction genSubRoot(uint64 epoch, uint256 nLeaves)
genTopRoot
nonpayablefunction genTopRoot(uint64 epoch)
handleProofResult
nonpayablefunction handleProofResult(uint32 protocolId, tuple protocol, bytes circuitOutput)
markEpochInitialized
nonpayablefunction markEpochInitialized(uint64 epoch)
markSubmissionsComplete
nonpayablefunction markSubmissionsComplete(uint64 epoch)
removeProofHandler
nonpayablefunction removeProofHandler(address proofHandler)
removeProtocolInfo
nonpayablefunction removeProtocolInfo(uint32 protocolId)
removeResultHandler
nonpayablefunction removeResultHandler(address resultHandler)
removeSubmitter
nonpayablefunction removeSubmitter(address submitter)
renounceOwnership
nonpayablefunction renounceOwnership()
setBrevisProof
nonpayablefunction setBrevisProof(address _brevisProof)
setCumulativeRewards
nonpayablefunction setCumulativeRewards(address user, uint256 _cumulativeRewards)
setEpochInfo
nonpayablefunction setEpochInfo(uint64 epoch, uint64 startTime, uint64 endTime, uint256 totalRewardAmount, uint256[] bucketShares)
setGlobalState
nonpayablefunction setGlobalState(uint64 _currEpoch, uint8 _state)
setNumBuckets
nonpayablefunction setNumBuckets(uint8 _numBuckets)
setProtocolEnabled
nonpayablefunction setProtocolEnabled(uint32 protocolId, bool enabled)
setProtocolInfo
nonpayablefunction setProtocolInfo(uint64 chainId, uint32 protocolId, uint8 bucket, string name, bytes32 vkHash, uint16 batchSize, address resultHandler, bool enabled, address taxCollector, uint256 taxBps, bytes32[] extraData)
settle
nonpayablefunction settle(uint64 epoch, uint256 count)
submitProof
nonpayablefunction submitProof(uint32 protocolId, bytes proof, bytes circuitOutput)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AllSettled
event AllSettled(uint64 indexed epoch)
AllSubRootsGenerated
event AllSubRootsGenerated(uint64 indexed epoch)
BrevisProofUpdated
event BrevisProofUpdated(address prevBrevisProof, address newBrevisProof)
CumulativeRewardsUpdated
event CumulativeRewardsUpdated(address indexed user, uint256 cumulativeRewards)
EpochInfoUpdated
event EpochInfoUpdated(uint64 indexed epoch, uint64 startTime, uint64 endTime, uint256[] bucketAmounts)
EpochInitialized
event EpochInitialized(uint64 indexed epoch)
GlobalStateUpdated
event GlobalStateUpdated(uint64 indexed currEpoch, uint8 indexed state)
NumBucketsUpdated
event NumBucketsUpdated(uint8 numBuckets)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PointsAdded
event PointsAdded(uint64 indexed epoch, uint8 indexed bucket, address indexed user, string protocolName, uint256 addedPoints)
ProofHandlerAdded
event ProofHandlerAdded(address indexed proofHandler)
ProofHandlerRemoved
event ProofHandlerRemoved(address indexed proofHandler)
ProtocolDisabled
event ProtocolDisabled(uint32 indexed protocolId, string name)
ProtocolEnabled
event ProtocolEnabled(uint32 indexed protocolId, string name)
ProtocolInfoRemoved
event ProtocolInfoRemoved(uint32 indexed protocolId, string name)
ProtocolInfoUpdated
event ProtocolInfoUpdated(uint64 indexed chainId, uint32 indexed protocolId, uint8 indexed bucket, string name, bytes32 vkHash, uint256 batchSize, address resultHandler, bool enabled, address taxCollector, uint256 taxBps, bytes32[] extraData)
ResultHandlerAdded
event ResultHandlerAdded(address indexed resultHandler)
ResultHandlerRemoved
event ResultHandlerRemoved(address indexed resultHandler)
Settled
event Settled(uint64 indexed epoch, address indexed user, uint8 indexed bucket, uint256 addedPoints, uint256 addedRewards, uint256 newCumulativeRewards)
SubmissionsComplete
event SubmissionsComplete(uint64 indexed epoch)
SubmitterAdded
event SubmitterAdded(address indexed submitter)
SubmitterRemoved
event SubmitterRemoved(address indexed submitter)
SubRootGenerated
event SubRootGenerated(uint64 indexed epoch, uint256 indexed subRootIndex, bytes32 subRoot)
SubRootLeafProcessed
event SubRootLeafProcessed(uint64 indexed epoch, uint256 indexed subRootIndex, uint256 indexed leafIndex, address user, uint256 cumulativeRewards, bytes32 leafHash)
TopRootGenerated
event TopRootGenerated(uint64 indexed epoch, bytes32 topRoot)
TotalPointsByBucketAdded
event TotalPointsByBucketAdded(uint64 indexed epoch, uint8 indexed bucket, uint256 points)
errors
EnumerableMapNonexistentKey
error EnumerableMapNonexistentKey(bytes32 key)
IncorrectEpoch
error IncorrectEpoch(uint64 epoch)
InvalidAppCommitHash
error InvalidAppCommitHash(bytes32 expected, bytes32 actual)
InvalidInputLengths
error InvalidInputLengths()
InvalidState
error InvalidState(uint8 state)
InvalidVkHash
error InvalidVkHash(bytes32 expected, bytes32 actual)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60803461010257601f6154c438819003918201601f19168301916001600160401b038311848410176101075780849260209460405283398101031261010257516001600160a01b038116908190036101025733156100ec5760008054336001600160a01b0319821681178355604051939290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360088054610100600160481b03191661010017905580156100db57600480546001600160a01b0319169190911790556153a6908161011e8239f35b63d92e233d60e01b60005260046000fd5b631e4fbdf760e01b600052600060045260246000fd5b600080fd5b634e487b7160e01b600052604160045260246000fdfe61042080604052600436101561001457600080fd5b600061040052610400513560e01c908163065604351461431e575080630727917314613f76578063072900f914613efe5780630f6d1eb414613c60578063116dcd7d14613bfe5780631b4fc38b14613bde5780631e45e18514613b515780631f26c48b14613a5b5780632ca8b6011461398d5780632cdbfb931461394a578063373db229146137e2578063376c2bc8146137585780633abbf2da1461347957806345a3533b146132ef5780634d0923d8146132ac57806350f0fa21146131b35780636370f17d14612c37578063669e4eb5146129e2578063715018a61461298057806375ffab73146128cd57806377586e04146126e25780638879315d146126b65780638da5cb5b1461268b578063908225aa146124275780639682cbfa1461239a5780639d042093146119ff578063aa195f7b14611975578063ad9ebe321461184b578063b94bd6bb14611704578063bf73918e14611503578063bfdcc9a2146114db578063c19d93fb146114aa578063c36f41e214611435578063c772c87f1461139d578063c7f5aaa014611374578063ce13e7a81461133c578063d1ed17e0146110b7578063d5759c0914610f87578063dc737a2014610e2a578063e18370ca14610c2b578063e4524bb514610856578063ea0ce51814610529578063f2fde38b146104935763fa2ec0301461020c57600080fd5b34610446576020366003190112610446576102256143e3565b61022d614b8f565b60ff60085416906005821015610479578161045b5763ffffffff168061040051526001602052604061040051206001600160a01b036040519161026f83614430565b60ff81546001600160401b038116855260401c16602084015261029460018201614483565b9260408101938452600282015460608201526101206102f5600660038501549461ffff8616608086015260ff60a0860196888160101c16885260b01c16151560c08601528660048201541660e0860152600581015461010086015201614a9b565b9101525116803b1561044657604051906368d50a8360e01b825283600483015281602481610400519361040051905af1801561044d5761042b575b506103cc7f6822e4450f695ee0b191df6a12d39bce9f3f87472939c31165d011ca0a272f3c9161035f8461523f565b5083610400515260016020526103b76006604061040051206104005181556001810161038b81546143f6565b806103d6575b5050610400516002820181905560038201819055600482018190556005820155016149b8565b51604051918291602083526020830190614527565b0390a26104005180f35b601f81116001146103f057506104005190555b8780610391565b610413908261040051526001601f60206104005120920160051c820191016147c5565b610400805182905251602081209181905590556103e9565b6104005161043891614462565b610400516104465782610330565b6104005180fd5b6040513d61040051823e3d90fd5b5063683f44bb60e11b61040051526104005150600452602461040051fd5b634e487b7160e01b61040051526021600452602461040051fd5b34610446576020366003190112610446576001600160a01b036104b461435d565b6104bc614b8f565b16801561050d576104005180546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36104005180f35b631e4fbdf760e01b610400515261040051600452602461040051fd5b34610446576060366003190112610446576004356001600160401b038111610446576105599036906004016143b3565b906024356001600160401b038111610446576105799036906004016143b3565b90926044356001600160401b0381116104465761059a9036906004016143b3565b91909233610400515260076020526105bb60ff604061040051205416614779565b8115801561084c575b8015610842575b61082d57610400515b8281106105e2576104005180f35b6105f56105f08285896147dc565b614af7565b61060082848a614b3a565b61060b84888a614b3a565b939092336104005152600760205261062c60ff604061040051205416614779565b60ff600854166005811015610479576001810361081057506107459063ffffffff831661040051526001602052606060406104005120916040519561067087614430565b60ff84546001600160401b038116895260401c16602088015261069560018501614483565b60408801526106fd6006600286015495858a0196875260ff600382015461ffff811660808d01526001600160a01b038160101c1660a08d015260b01c16151560c08b01526001600160a01b0360048201541660e08b015260058101546101008b015201614a9b565b6101208801526001600160a01b0360045416906001600160401b038851166040519687948593849363e044095360e01b85526004850152604060248501526044840191614a2f565b039161040051905af190811561044d57610400519283926107d3575b50518082036107b8575050610777368686614680565b602081519101209081810361079d57505091600194939161079793614e2f565b016105d4565b6340f748cd60e01b6104005152600452602452604461040051fd5b6335bce51360e11b6104005152600452602452604461040051fd5b925090506060823d8211610808575b816107ef60609383614462565b810103126104465760406020830151920151908e610761565b3d91506107e2565b63683f44bb60e11b61040051526104005150600452602461040051fd5b63637643ab60e11b6104005152600461040051fd5b50828114156105cb565b50808214156105c4565b346104465760403660031901126104465761086f61439d565b6024356008549160ff83166005811015610479576002810361081057506001600160401b038091169260081c168203610c1257816104005152600960205260406104005120906040519160808301908382106001600160401b03831117610bf85760019160405280546001600160401b03811685526001600160401b038160401c16602086015260801c60408501520191604051809384916020825491828152019161040051526020610400512090610400515b818110610bdf575050506060929161093c910385614462565b0191825260ff600f541660105492610400515061040051935b8315610bd65760ff831693846104005152600a6020526040610400512094855415610ba157509061099691610a80610a1787865160ff891696878092614897565b518c7f9efdcd7e00e57e4d2c7c12f1e0408a812a8d940da0afada9938d88be5d4710a6606060026109c78b88614840565b90549060031b1c96019580610400515286602052610a216001600160a01b0360406104005120549216988996886104005152600b6020526040610400512054906104005150610400515084614f3c565b6104005190614802565b610a3581610a2e886152f3565b9050614802565b90866104005152600e602052816040610400512055610a53876150c9565b5060405192835260208301526040820152a48161040051526020526104005160406104005120558761511e565b506000190194546000198101908111610b74578103610b8e578251516000198101908111610b74578214610adb57506104005152600b602052610400516040610400512055610ad26104005192614ae6565b935b9391610955565b93505050915060015b15610b5c575060ff90610400515061040051506003821960085416176008558119600f5416600f5561040051601055166104005152600b6020526104005160406104005120557f64e4fe2e975e34557ba3458484d9064e3eae16332ae974185f17dda74fc292c26104005161040051a25b6104005180f35b915060ff1660ff19600f541617600f55601055610b55565b634e487b7160e01b61040051526011600452602461040051fd5b610b9b915094929461495d565b91610ad4565b8351519195509193916000198201918211610b745714610bca57610bc490614ae6565b93610ad4565b93505090506001610ae4565b92505091610ae4565b8254845287945060209093019260019283019201610923565b634e487b7160e01b61040051526041600452602461040051fd5b506320eeef9d60e01b6104005152600452602461040051fd5b3461044657610c3936614729565b919290923361040051526007602052610c5b60ff604061040051205416614779565b80158015610e20575b61082d57610400515b838110610c7b576104005180f35b610c8e610c898284866147dc565b614b51565b90610c9a8186886147dc565b353361040051526007602052610cb960ff604061040051205416614779565b60085460ff81166005811015610479578061081057506001600160401b039060081c1660018114908115610d8d575b5015610d48577fa1a86ec5bc9cb16543e635cdd7c4b82bda0b15213dbd82348f879042b3e9780860206001600160a01b036001951692836104005152600e8252806040610400512055610d3a846150c9565b50604051908152a201610c6d565b60405162461bcd60e51b815260206004820152600f60248201527f77616974206e65787420626c6f636b00000000000000000000000000000000006044820152606490fd5b60405163a3b1b31d60e01b8152915060208260048160645afa91821561044d576104005192610de6575b50610dc96001600160401b039161493e565b1661040051526009602052604061040051205460801c1088610ce8565b90915060203d8111610e19575b610dfd8183614462565b60208260009281010312610e1657505190610dc9610db7565b80fd5b503d610df3565b5082811415610c64565b3461044657604036600319011261044657610e4361435d565b602435903361040051526007602052610e6560ff604061040051205416614779565b60085460ff81166005811015610479578061081057506001600160401b039060081c1660018114908115610ef3575b5015610d485760206001600160a01b037fa1a86ec5bc9cb16543e635cdd7c4b82bda0b15213dbd82348f879042b3e97808921692836104005152600e8252806040610400512055610ee4846150c9565b50604051908152a26104005180f35b60405163a3b1b31d60e01b8152915060208260048160645afa91821561044d576104005192610f4c575b50610f2f6001600160401b039161493e565b1661040051526009602052604061040051205460801c1083610e94565b9091506020813d602011610f7f575b81610f6860209383614462565b81010312610f7a575190610f2f610f1d565b600080fd5b3d9150610f5b565b3461044657610f9536614729565b9092610f9f614b8f565b81830361082d57610400515b838110610fb9576104005180f35b610fc76105f08286856147dc565b610fda610fd58386896147dc565b614b65565b90610fe3614b8f565b60ff600854166005811015610479578061081057509063ffffffff60019392169081610400515283602052604061040051209061103a81600384019060ff60b01b1960ff60b01b835492151560b01b169116179055565b1561107c57837faaf817e27cb709c532bd8a556c41800cc79948f41be602afcf86269a162eb4bd9161107260405192839201826148ab565b0390a25b01610fab565b837fcd6dd2bfbc2095d9f6cf85d22bfb83173551ba7a122305b908fc5524c0714c66916110af60405192839201826148ab565b0390a2611076565b34610446576080366003190112610446576110d061459c565b6110d8614373565b60443591606435906001600160401b038211610446578160040190610140600319843603011261044657336104005152600660205260ff604061040051205416156112f75760ff1692836104005152600a60205260406104005120946001600160a01b03821695611149878261532a565b6104005190949150610104870135806111f9575b50926111a76111e0937fff4b09174e75080e8d34b61d08ea82e7d1100c558cb6ba7571bcacf69899c21c97936111a161119a6111ef999886614858565b8098614802565b91614f17565b50876104005152600b6020526111c560406104005120918254614802565b905560446001600160401b0360085460081c16960190614b08565b92909160405193849384614b72565b0390a46104005180f35b84819793949695925002958187041481151715610b74576111a7856111e0946111a161119a6112d3878e6111ef9c8f7fff4b09174e75080e8d34b61d08ea82e7d1100c558cb6ba7571bcacf69899c21c9f7fff4b09174e75080e8d34b61d08ea82e7d1100c558cb6ba7571bcacf69899c21c916112e46127106001600160a01b0393049788976112b060e485019761129b876112948b614b51565b168261532a565b90506111a18c6112aa8c614b51565b92614802565b5060446112cb6001600160401b0360085460081c1698614b51565b940190614b08565b604098919851948594169884614b72565b0390a4959899505050939750935061115d565b60405162461bcd60e51b815260206004820152601c60248201527f6f6e6c7920726573756c742068616e646c65727320616c6c6f776564000000006044820152606490fd5b346104465760203660031901126104465760ff61135761459c565b166104005152600b60205260206040610400512054604051908152f35b3461044657610400513660031901126104465760206001600160a01b0360045416604051908152f35b34610446576020366003190112610446576001600160a01b036113be61435d565b6113c6614b8f565b1680156114205760407fddb7d4b45d521a6718ed9ccac62f1faa18b869772bca7e77ab6f392912a4ec189160045490806001600160a01b03198316176004556001600160a01b038351921682526020820152a16104005180f35b63d92e233d60e01b6104005152600461040051fd5b34610446576020366003190112610446576001600160a01b0361145661435d565b61145e614b8f565b1680610400515260076020526040610400512060ff1981541690557ff84a004e1673d2f349a7c93c72b3794b8eba6d2f9338044d8c8cd260e51a57a16104005161040051a26104005180f35b3461044657610400513660031901126104465760ff6008541660405161040051506005821015610479576020918152f35b34610446576104005136600319011261044657602060ff610400515460a01c16604051908152f35b346104465760603660031901126104465761151c6143e3565b6024356001600160401b038111610446576101406003198236030112610446576040519061154982614430565b60048101356001600160401b0381168103610446578252602481013560ff8116810361044657602083015260448101356001600160401b03811161044657810136602382011215610446576115a8903690602460048201359101614680565b604083015260648101356060830152608481013561ffff811681036104465760808301526115d860a48201614389565b60a083015260c481013580151581036104465760c08301526115fc60e48201614389565b60e0830152610104810135610100830152610124810135906001600160401b038211610446570136602382011215610446576116429036906024600482013591016146dd565b6101208201526044356001600160401b038111610446576116679036906004016145ac565b91336104005152600560205260ff604061040051205416156116bf5760ff6008541693600585101561047957600185036116a557610b559450614e2f565b610400805163683f44bb60e11b9052516004869052602490fd5b60405162461bcd60e51b815260206004820152601b60248201527f6f6e6c792070726f6f662068616e646c65727320616c6c6f77656400000000006044820152606490fd5b346104465760203660031901126104465763ffffffff6117226143e3565b606061012060405161173381614430565b61040051815261040051602082015282604082015261040051838201526104005160808201526104005160a08201526104005160c08201526104005160e082015261040051610100820152015216610400515260016020526118476040610400512061182d6006604051926117a784614430565b60ff81546001600160401b038116865260401c1660208501526117cc60018201614483565b60408501526002810154606085015260ff600382015461ffff811660808701526001600160a01b038160101c1660a087015260b01c16151560c08501526001600160a01b0360048201541660e0850152600581015461010085015201614a9b565b6101208201526040519182916020835260208301906145d9565b0390f35b346104465760203660031901126104465761186461435d565b60085460ff811660058110156104795780610810575060081c6001600160401b03166001811480156118cf575b6118b16001600160a01b036040946118ab6118b99461496c565b166152f3565b92905061493e565b906001600160401b038351921682526020820152f35b5060405163a3b1b31d60e01b815260208160048160645afa90811561044d576104005191611941575b506118b16001600160a01b036040946118ab6118b9946001600160401b0361191f8861493e565b16610400515260096020528761040051205460801c1094505094505050611891565b90506020813d60201161196d575b8161195c60209383614462565b81010312610f7a57516118b16118f8565b3d915061194f565b346104465760203660031901126104465761198e61435d565b611996614b8f565b60ff60085416906005821015610479578161045b576001600160a01b031680610400515260066020526040610400512060ff1981541690557f1602c5bcc673d1d5f0c782ac7faa22c4e47e10222017072c7c0a1aef8e1e16156104005161040051a26104005180f35b3461044657610160366003190112610446576004356001600160401b03811161044657611a309036906004016143b3565b60c05260a0526024356001600160401b03811161044657611a559036906004016143b3565b60e052610320526044356001600160401b03811161044657611a7b9036906004016143b3565b61034052610100526064356001600160401b03811161044657611aa29036906004016143b3565b610120526102e0526084356001600160401b03811161044657611ac99036906004016143b3565b610360526102205260a4356001600160401b03811161044657611af09036906004016143b3565b610300526101405260c4356001600160401b03811161044657611b179036906004016143b3565b610160526102405260e4356001600160401b03811161044657611b3e9036906004016143b3565b6101805261026052610104356001600160401b03811161044657611b669036906004016143b3565b6101a0526102a052610124356001600160401b03811161044657611b8e9036906004016143b3565b6101c0526102c0526001600160401b03610144351161044657611bb736610144356004016143b3565b610280526101e052611bc7614b8f565b60c05115801561238c575b801561237d575b801561236d575b801561235d575b801561234d575b801561233d575b801561232d575b801561231d575b801561230d575b80156122fd575b61082d5761040051610200525b610360516102005110611c32576104005180f35b611c446102005160c05160a0516147dc565b356001600160401b038116810361044657611c6b6105f06102005160e051610320516147dc565b90611c806102005161034051610100516147dc565b3560ff8116810361044657611c9f61020051610120516102e051614b3a565b9091611cb56102005161036051610220516147dc565b3592611ccb6102005161030051610140516147dc565b3561ffff8116810361044657611cee610c896102005161016051610240516147dc565b611d05610fd56102005161018051610260516147dc565b90611d1d610c89610200516101a0516102a0516147dc565b92611d32610200516101c0516102c0516147dc565b3594610280516102005110156122e357601e196101e0513603016102005160051b6101e05101351215610446576102005160051b6101e05101356101e05101976001600160401b0389351161044657883560051b360360208a011361044657611d99614b8f565b60ff600854166005811015610479578061081057506001600160a01b0384166104005152600660205260ff6040610400512054161561229e5760ff610400515460a01c1660ff8916101561225957611df663ffffffff8d16615074565b506001600160a01b0384163b156104465760405163052db9cf60e31b815263ffffffff8d1660048201526104005181602481836001600160a01b038a165af1801561044d5761223e575b50604051611e4d81614430565b6001600160401b038c16815260ff89166020820152611e6d368385614680565b60408201528a606082015261ffff841660808201526001600160a01b03851660a082015285151560c08201526001600160a01b03871660e082015287610100820152611ebe368b3560208d016146dd565b61012082015263ffffffff8d166104005152600160205260406104005120906001600160401b0380825116166001600160401b0319835416178255602081015168ff000000000000000083549160401b169068ff0000000000000000191617825560408101518051906001600160401b038211610bf857611f4260018501546143f6565b601f81116121fa575b506020906001601f841114612183579180611f849261012095946104005192612178575b50508160011b916000199060031b1c19161790565b60018401555b606081015160028401556120076003840161ffff60808401511681549075ffffffffffffffffffffffffffffffffffffffffffff1975ffffffffffffffffffffffffffffffffffffffff000060a087015160101b1692161717815560c0830151151560ff60b01b1960ff60b01b835492151560b01b169116179055565b6001600160a01b0360e0820151166001600160a01b036004850191166001600160a01b031982541617905561010081015160058401550151908151916001600160401b038311610bf8576020600691612062858486016149ec565b019101610400515260206104005120610400515b83811061216457505050506001600160a01b0395949391926120b1879461ffff93604051608052610100608051526101006080510191614a2f565b9a602060805101521660406080510152166060608051015215156080805101521660a0608051015260c06080510152608051830360e06080510152813583526001600160fb1b0382351161044657816001600160401b0363ffffffff60ff6020947f22cc39fb9f698334c07d92b6c2cc1a233f0da11fed8b1d8b320e7af2ed32a5f2963560051b868601878a0137169716951693608051913560051b010301608051a46001610200510161020052611c1e565b600190602084519401938184015501612076565b015190503880611f6f565b90601f1983169160018601610400515281610400512092610400515b8181106121e25750916001939185610120979694106121c9575b505050811b016001840155611f8a565b015160001960f88460031b161c191690553880806121b9565b9293602060018192878601518155019501930161219f565b61222e9060018601610400515260206104005120601f850160051c81019160208610612234575b601f0160051c01906147c5565b38611f4b565b9091508190612221565b6104005161224b91614462565b61040051610446578c611e40565b60405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964206275636b65740000000000000000000000000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601b60248201527f756e617574686f72697a656420726573756c742068616e646c657200000000006044820152606490fd5b634e487b7160e01b61040051526032600452602461040051fd5b50610280516101c0511415611c11565b506101c0516101a0511415611c0a565b506101a051610180511415611c03565b5061018051610160511415611bfc565b5061016051610300511415611bf5565b5061030051610360511415611bee565b5061036051610120511415611be7565b5061012051610340511415611be0565b506103405160e0511415611bd9565b5060e05160c0511415611bd2565b34610446576020366003190112610446576123b361435d565b6123bb614b8f565b60ff60085416906005821015610479578161045b576001600160a01b0316806104005152600660205260406104005120600160ff198254161790557f502e775abb2383950531644d7bf2d4c666e9596157bf6f4c7d9b51ce0336314e6104005161040051a26104005180f35b34610446576020366003190112610446576004356001600160401b038111610446576124579036906004016143b3565b90612460614b8f565b610400515b828110612473576104005180f35b6124816105f08285856147dc565b612489614b8f565b60ff6008541660058110156104795780610810575063ffffffff1690816104005152600160205260406104005120916001600160a01b03604051936124cd85614430565b60ff81546001600160401b038116875260401c1660208601526124f260018201614483565b946040810195865260028201546060820152610120612553600660038501549461ffff8616608086015260ff60a0860196888160101c16885260b01c16151560c08601528660048201541660e0860152600581015461010086015201614a9b565b9101525116803b1561044657604051906368d50a8360e01b825282600483015281602481610400519361040051905af1801561044d57612670575b507f6822e4450f695ee0b191df6a12d39bce9f3f87472939c31165d011ca0a272f3c6126146001946125bf8461523f565b50836104005152856020526103b76006604061040051206104005181558881016125e981546143f6565b8061261d575050610400516002820181905560038201819055600482018190556005820155016149b8565b0390a201612465565b601f81118b1461263657506104005190555b8b80610391565b612658908261040051528b601f60206104005120920160051c820191016147c5565b6104008051829052516020812091819055905561262f565b6104005161267d91614462565b61040051610446578561258e565b3461044657610400513660031901126104465760206001600160a01b03610400515416604051908152f35b3461044657610400513660031901126104465760206001600160401b0360085460081c16604051908152f35b34610446576020366003190112610446576126fb61439d565b336104005152600760205261271960ff604061040051205416614779565b6008549060ff82166005811015610479576001810361081057506001600160401b038091169160081c1681036128b557610400515b600254811015612801576002548110156122e3576002610400515263ffffffff8160206104005120016104005150546104005160031b1c1680610400515260016020526001600160a01b03600360406104005120015460101c16803b15610446576040519163052db9cf60e31b8352600483015281602481610400519361040051905af1801561044d576127e6575b5060010161274e565b610400516127f391614462565b6104005161044657826127dd565b50610400515b816104005152600960205260016040610400512001549060ff8116918210156128765781612871926104005152600b602052837fc09ad501f56c8a0caedcbad2ec1dab802b1ceef6c666a24040ffc4477958a59260206040610400512054604051908152a3614ae6565b612807565b827f3711923da2f2c9c943ad1776a84dfe8778252657c474f9f306485453dc82ba236104005161040051a2610400516008805460ff1916600217905580f35b6320eeef9d60e01b6104005152600452602461040051fd5b34610446576020366003190112610446576128e661459c565b6128ee614b8f565b60ff6008541660058110156104795780610810577f5f7601cd31de990d2b7fe9278b29c356d6b7a1e8557d82d7f19197d714b5088560208361040051547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff74ff00000000000000000000000000000000000000008360a01b16911617610400515560ff60405191168152a16104005180f35b3461044657610400513660031901126104465761299b614b8f565b6104005180546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a36104005180f35b34610446576060366003190112610446576129fb6143e3565b6024356001600160401b03811161044657612a1a9036906004016145ac565b90916044356001600160401b03811161044657612a3b9036906004016145ac565b9290913361040051526007602052612a5c60ff604061040051205416614779565b60ff600854169460058610156104795760018603612c1d57612b76955063ffffffff8216610400515260016020526060604061040051209160405194612aa186614430565b60ff84546001600160401b038116885260401c166020870152612ac660018501614483565b6040870152612b2e600660028601549585890196875260ff600382015461ffff811660808c01526001600160a01b038160101c1660a08c015260b01c16151560c08a01526001600160a01b0360048201541660e08a015260058101546101008a015201614a9b565b6101208701526001600160a01b0360045416906001600160401b038751166040519a8b948593849363e044095360e01b85526004850152604060248501526044840191614a2f565b039161040051905af190811561044d5761040051968792612bdf575b50518082036107b8575050612ba8368585614680565b6020815191012094858103612bc25750610b559450614e2f565b85906340f748cd60e01b6104005152600452602452604461040051fd5b965090506060863d606011612c15575b81612bfc60609383614462565b8101031261044657604060208701519601519087612b92565b3d9150612bef565b610400805163683f44bb60e11b9052516004879052602490fd5b346104465761016036600319011261044657612c5161439d565b6103c0526024356103e081905263ffffffff811690036104465760443560ff81168103610446576064356001600160401b03811161044657612c979036906004016145ac565b60a4356103a08190529092919061ffff811690036104465760c435906001600160a01b03821682036104465760e43580151581036104465761010435906001600160a01b038216820361044657610144356001600160401b03811161044657612d049036906004016143b3565b906103805292612d12614b8f565b60ff600854166005811015610479578061081057506001600160a01b0385166104005152600660205260ff6040610400512054161561229e5760ff610400515460a01c1660ff8716101561225957612d7263ffffffff6103e05116615074565b506001600160a01b0385163b156104465760405163052db9cf60e31b81526103e05163ffffffff1660048201526104005181602481836001600160a01b038b165af1801561044d576131a0575b50604051612dcc81614430565b6001600160401b036103c051168152602081019060ff88168252612df1368a85614680565b60408201908152606082016084358152608083019061ffff6103a05116825260a084016001600160a01b038b16815260c0850191881515835260e08601946001600160a01b038b16865261012435610100880152612e53368d610380516146dd565b61012088015263ffffffff6103e051166104005152600160205260406104005120976001600160401b0380895116166001600160401b03198a54161789555168ff000000000000000089549160401b169068ff00000000000000001916178855518051906001600160401b038211610bf857612ed260018a01546143f6565b601f8111613167575b506020906001601f8411146130e05792612f23836101209a999794612f9497946001600160a01b039a9761040051926121785750508160011b916000199060031b1c19161790565b60018b01555b5160028a015561ffff60038a0193511675ffffffffffffffffffffffffffffffffffffffffffff1975ffffffffffffffffffffffffffffffffffffffff00008554935160101b1692161717825551151560ff60b01b1960ff60b01b835492151560b01b169116179055565b51166001600160a01b036004850191166001600160a01b031982541617905561010081015160058401550151908151916001600160401b038311610bf8576020600691612fe3858486016149ec565b019101610400515260206104005120610400515b8381106130cc5750505050906001600160a01b03613025819493604051996101008b526101008b0191614a2f565b9560843560208a015261ffff6103a0511660408a0152166060880152151560808701521660a08501526101243560c085015283820360e08501528082526001600160fb1b0381116104465760ff7f22cc39fb9f698334c07d92b6c2cc1a233f0da11fed8b1d8b320e7af2ed32a5f29160051b9384610380516020860137169360208163ffffffff6103e05116956001600160401b036103c051169501030190a46104005180f35b600190602084519401938184015501612ff7565b90601f1983169160018b01610400515281610400512092610400515b81811061314f575093612f9496936001600160a01b03999693600193836101209e9d9b9810613136575b505050811b0160018b0155612f29565b015160001960f88460031b161c19169055388080613126565b929360206001819287860151815501950193016130fc565b61319a9060018b01610400515260206104005120601f850160051c8101916020861061223457601f0160051c01906147c5565b38612edb565b610400516131ad91614462565b87612dbf565b34610446576040366003190112610446576131cc61439d565b602435906005821015610446576131e1614b8f565b6001600160401b03811615613267576008805460ff9390931668ffffffffffffffffff1990931691811b68ffffffffffffffff0016919091178217908190556005821015610479576001600160401b039060081c167fc0b26fd2c11b8c0762b3ddd78c4beaf1923e7ef6307ad2b5ceafb992ccdc1b916104005161040051a36104005180f35b60405162461bcd60e51b815260206004820152601360248201527f65706f6368207374617274732066726f6d2031000000000000000000000000006044820152606490fd5b34610446576020366003190112610446576001600160a01b036132cd61435d565b1661040051526006602052602060ff6040610400512054166040519015158152f35b346104465760203660031901126104465761330861439d565b336104005152600760205261332660ff604061040051205416614779565b6008549060ff82166005811015610479578061081057506001600160401b038082169260081c168203610c1257811580156133e2575b613366915061496c565b601154610400515b8181106133b457827ffa7123a93f584cf4d9fb3271d15b3f117fb9603f50b1d22b689b509b420225286104005161040051a2610400516008805460ff1916600117905580f35b601154156122e357600190601161040051526133db60206104005120610400515054615175565b500161336e565b5060405163a3b1b31d60e01b81529060208260048160645afa91821561044d57610400519261343e575b50906001600160401b036134226133669361493e565b1661040051526009602052604061040051205460801c1061335c565b91506020823d602011613471575b8161345960209383614462565b81010312610446579051906001600160401b0361340c565b3d915061344c565b346104465760403660031901126104465761349261439d565b61349a614373565b60085460ff81166005811015610479578061081057506001600160401b036134c781809360081c1661493e565b169216918203610c12576001600160a01b0316806104005152600e60205260406104005120549081158061373e575b613726576104005152600d60205260406104005120546000198101908111610b74576104005160115460001981019081119391929190845b610b745783818695108061370d575b156135515761354b9061495d565b9361352e565b9190826136eb5761040051945b600c5461356b8782614858565b91610b74576135819285106136c1575b50614865565b91610400515b83518110156135ff57806135eb6135dd6135ab6135a66001958b614802565b614bb8565b60409391935192839160208301958690916034926bffffffffffffffffffffffff199060601b16825260148201520190565b03601f198101835282614462565b5190206135f88287614897565b5201613587565b50613625613617846136118888614858565b90614cdc565b91613620614a50565b614cdc565b9061363b6136368251845190614802565b614865565b92610400515b8251811015613669578061365760019285614897565b516136628288614897565b5201613641565b5091610400515b81518110156136a2578061368660019284614897565b5161369b613695838751614802565b88614897565b5201613670565b5050506118476040519283928352604060208401526040830190614568565b906136df6136e5926136d287614825565b90549060031b1c90614858565b90614858565b8661357b565b6000198301838111610b745761370090614825565b90549060031b1c9461355e565b5061371781614825565b90549060031b1c84101561353d565b63015ab34360e11b6104005152600452602461040051fd5b506104008051829052600d602052516040902054156134f6565b346104465760203660031901126104465761377161435d565b613779614b8f565b60ff60085416906005821015610479578161045b576001600160a01b031680610400515260056020526040610400512060ff1981541690557fbe5dcd1f0b2a0fbeeeb1bb03d6eaa4dc9ed20124839302d2dd653b8c01d793ae6104005161040051a26104005180f35b34610446576020366003190112610446576137fb61439d565b6008549060ff82166005811015610479576004810361081057506001600160401b038091169160081c1681036128b55761383b613836614a50565b614be8565b60145560405163a3b1b31d60e01b815260208160048160645afa90811561044d576104005191613918575b50816104005152600960205260406104005120906fffffffffffffffffffffffffffffffff82549181199060801b1691161790556008546001600160401b038160081c166001600160401b038114610b745768ffffffffffffffffff19909116600191909101600890811b68ffffffffffffffff00169190911790556014546040519081527f149bb8e98c16d440ac1f1a03a4d3c2d93d9011a48aba5ab0e47386c72c6cd4f890602090a26104005180f35b90506020813d602011613942575b8161393360209383614462565b81010312610446575182613866565b3d9150613926565b34610446576020366003190112610446576001600160a01b0361396b61435d565b1661040051526005602052602060ff6040610400512054166040519015158152f35b346104465760203660031901126104465763ffffffff6139ab6143e3565b166104005152600160205260ff604061040051208054906139ce60018201614483565b600282015491846003820154613a1f60056001600160a01b036004860154169401549460405198886001600160401b038b9a168a5260401c1660208901526101206040890152610120880190614527565b94606087015261ffff811660808701526001600160a01b038160101c1660a087015260b01c16151560c085015260e08401526101008301520390f35b3461044657604036600319011261044657613a746143e3565b60243590811515820361044657613a89614b8f565b60ff6008541660058110156104795780610810575063ffffffff169081610400515260016020526040610400512090613adc81600384019060ff60b01b1960ff60b01b835492151560b01b169116179055565b15613b155760017faaf817e27cb709c532bd8a556c41800cc79948f41be602afcf86269a162eb4bd916103cc60405192839201826148ab565b60017fcd6dd2bfbc2095d9f6cf85d22bfb83173551ba7a122305b908fc5524c0714c6691613b4960405192839201826148ab565b0390a2610b55565b3461044657602036600319011261044657613b6a61435d565b613b72614b8f565b60ff60085416906005821015610479578161045b576001600160a01b0316806104005152600560205260406104005120600160ff198254161790557f1a6f0b2e0a49f9872fcf562d696d893dc6c4094bdcd27cba1c6e14311a56c8376104005161040051a26104005180f35b346104465761040051366003190112610446576020601454604051908152f35b34610446576020366003190112610446576001600160401b03613c1f61439d565b166104005152600960205260606040610400512054604051906001600160401b03811682526001600160401b038160401c16602083015260801c6040820152f35b3461044657604036600319011261044657613c7961439d565b6024356008549160ff83166005811015610479576003810361081057506001600160401b038091169260081c168203610c12576401000000008111613eb957601154610400519080613e9557610400516013805491905580613e74575b505b613ce482600c54614858565b90818411613e6b575b84613cf785614865565b610400515b868110613dcf57506020613d307fa798d21d4735fa640961e41c1c64c71ac1a880bed56cc8f53dd2e4fa0cd51f4d92614be8565b613d3981615019565b50604051908152a38203613d85575050610400516008805460ff191660041790557fb95c96f28d7bc16885c1b6299dcc3816b715899206a2e0939cce4c4c9bb2d5679080a26104005180f35b613d8f9250614802565b601354600160401b811015610bf857613db1816001613dc89301601355614825565b819391549060031b91821b91600019901b19161790565b9055610b55565b8084600193947f43fa36b7b583cad3d050ef0cb611495f9f3bd6ccfcc858eeb0b677dc65c71cce6060613e056135a6868d614802565b604051606083901b6bffffffffffffffffffffffff1916602082019081526034820183905290613e3881605481016135dd565b5190209081613e47898d614897565b526001600160a01b036040519316835260208301526040820152a401908691613cfc565b92508092613ced565b613e8f906013610400515260206104005120908101906147c5565b84613cd6565b90506000198101818111610b7457613eac90614825565b90549060031b1c90613cd8565b60405162461bcd60e51b815260206004820152600f60248201527f746f6f206d616e79206c656176657300000000000000000000000000000000006044820152606490fd5b34610446576020366003190112610446576001600160a01b03613f1f61435d565b613f27614b8f565b16806104005152600760205260406104005120600160ff198254161790557fb079bc2cbde1f186e0b351d4a87c4597e3ed098f571548617449e73506428d8b6104005161040051a26104005180f35b346104465760a036600319011261044657613f8f61439d565b6024356001600160401b03811690819003610446576044356001600160401b038116919082810361044657606435906084356001600160401b03811161044657613fdd9036906004016143b3565b9290913361040051526007602052613ffe60ff604061040051205416614779565b6008549660ff88166005811015610479578061081057506001600160401b038091169760081c1687036143055760ff610400515460a01c1684036142c057866104005152600960205260406104005120856001600160401b0319825416179055866104005152600960205260406104005120906fffffffffffffffff000000000000000082549160401b16906fffffffffffffffff000000000000000019161790556140a9836146c6565b6140b66040519182614462565b8381526140c2846146c6565b602082019190601f19013683378761040051526009602052600160406104005120019051916001600160401b038311610bf857600160401b8311610bf857815483835580841061429e575b5090610400515260206104005120610400515b83811061428a575050610400519491508490505b81811061422c5750505050612710036141db578261040051526009602052600160406104005120019060405192606084019184526020840152606060408401528154809152608083019161040051526020610400512090610400515b8181106141c557857f7b158b44bae8b68ba7efc6ab9f46fe56309a2870128c67c38c041ba45fe1535d86860387a26104005180f35b8254845260209093019260019283019201614190565b60405162461bcd60e51b815260206004820152602360248201527f6275636b657420736861726573206e6f7420616464696e6720757020746f203160448201526230302560e81b6064820152608490fd5b61424f6127106142486142408486896147dc565b358098614802565b9685614f3c565b61040051810191908210610b745781600192508961040051526009602052614282613db183856040610400512001614840565b905501614134565b600190602084519401938184015501614120565b6142ba90836104005152846020610400512091820191016147c5565b8961410d565b60405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206275636b657420736861726573206c656e677468000000006044820152606490fd5b866320eeef9d60e01b6104005152600452602461040051fd5b34610446576020366003190112610446576020906001600160a01b0361434261435d565b1661040051526007825260ff60406104005120541615158152f35b600435906001600160a01b0382168203610f7a57565b602435906001600160a01b0382168203610f7a57565b35906001600160a01b0382168203610f7a57565b600435906001600160401b0382168203610f7a57565b9181601f84011215610f7a578235916001600160401b038311610f7a576020808501948460051b010111610f7a57565b6004359063ffffffff82168203610f7a57565b90600182811c92168015614426575b602083101461441057565b634e487b7160e01b600052602260045260246000fd5b91607f1691614405565b61014081019081106001600160401b0382111761444c57604052565b634e487b7160e01b600052604160045260246000fd5b90601f801991011681019081106001600160401b0382111761444c57604052565b9060405191826000825492614497846143f6565b808452936001811690811561450557506001146144be575b506144bc92500383614462565b565b90506000929192526020600020906000915b8183106144e95750509060206144bc92820101386144af565b60209193508060019154838589010152019101909184926144d0565b9050602092506144bc94915060ff191682840152151560051b820101386144af565b919082519283825260005b848110614553575050826000602080949584010152601f8019910116010190565b80602080928401015182828601015201614532565b906020808351928381520192019060005b8181106145865750505090565b8251845260209384019390920191600101614579565b6004359060ff82168203610f7a57565b9181601f84011215610f7a578235916001600160401b038311610f7a5760208381860195010111610f7a57565b61467d916001600160401b03825116815260ff602083015116602082015261012061461560408401516101406040850152610140840190614527565b926060810151606084015261ffff60808201511660808401526001600160a01b0360a08201511660a084015260c0810151151560c08401526001600160a01b0360e08201511660e0840152610100810151610100840152015190610120818403910152614568565b90565b9291926001600160401b03821161444c57604051916146a9601f8201601f191660200184614462565b829481845281830111610f7a578281602093846000960137010152565b6001600160401b03811161444c5760051b60200190565b9291906146e9816146c6565b936146f76040519586614462565b602085838152019160051b8101928311610f7a57905b82821061471957505050565b813581526020918201910161470d565b6040600319820112610f7a576004356001600160401b038111610f7a5781614753916004016143b3565b92909291602435906001600160401b038211610f7a57614775916004016143b3565b9091565b1561478057565b60405162461bcd60e51b815260206004820152601760248201527f6f6e6c79207375626d69747465727320616c6c6f7765640000000000000000006044820152606490fd5b8181106147d0575050565b600081556001016147c5565b91908110156147ec5760051b0190565b634e487b7160e01b600052603260045260246000fd5b9190820180921161480f57565b634e487b7160e01b600052601160045260246000fd5b6013548110156147ec57601360005260206000200190600090565b80548210156147ec5760005260206000200190600090565b9190820391821161480f57565b9061486f826146c6565b61487c6040519182614462565b828152809261488d601f19916146c6565b0190602036910137565b80518210156147ec5760209160051b010190565b90602082526000918154916148bf836143f6565b9283602084015260018116908160001461491d57506001146148e2575b50505090565b600090815260208120929350915b83831061490657506040925001013880806148dc565b8054604084840101526020909201916001016148f0565b9150506040935060ff929192191683830152151560051b01013880806148dc565b6001600160401b03600019911601906001600160401b03821161480f57565b600019811461480f5760010190565b1561497357565b60405162461bcd60e51b815260206004820152601560248201527f65706f6368206e6f7420696e64657865642079657400000000000000000000006044820152606490fd5b80549060008155816149c8575050565b6000526020600020908101905b8181106149e0575050565b600081556001016149d5565b90600160401b811161444c57815491818155828210614a0a57505050565b600052602060002091820191015b818110614a23575050565b60008155600101614a18565b908060209392818452848401376000828201840152601f01601f1916010190565b604051906011548083528260208101601160005260206000209260005b818110614a825750506144bc92500383614462565b8454835260019485019487945060209093019201614a6d565b906040519182815491828252602082019060005260206000209260005b818110614acd5750506144bc92500383614462565b8454835260019485019487945060209093019201614ab8565b60ff1660ff811461480f5760010190565b3563ffffffff81168103610f7a5790565b903590601e1981360301821215610f7a57018035906001600160401b038211610f7a57602001918136038313610f7a57565b908210156147ec576147759160051b810190614b08565b356001600160a01b0381168103610f7a5790565b358015158103610f7a5790565b939291602091614b8a91604087526040870191614a2f565b930152565b6001600160a01b03600054163303614ba357565b63118cdaa760e01b6000523360045260246000fd5b614bc390600c614840565b90549060031b1c9081600052600e6020526001600160a01b0360406000205492169190565b90815115614cd6575b81516001811115614cc6576001810180911161480f57614c139060011c614865565b9060005b8351600019810190811161480f57811015614c8757614c368185614897565b51600182019081831161480f57614c50614c579287614897565b5190614ff4565b614c648260011c85614897565b526002810180911115614c1757634e487b7160e01b600052601160045260246000fd5b90928051600019810190811161480f578214614ca6575b505090614bf1565b614cb382614cbe92614897565b519160011c83614897565b523880614c9e565b50908051156147ec576020015190565b60009150565b9161042060405190614cee8183614462565b6020825250610400366020830137806000935b85516001811115614e2457600116158015614e0e575b614de5575b60011c9085516001810180911161480f57614d399060011c614865565b9460005b8751600019810190811161480f57811015614da657614d5c8189614897565b51600182019081831161480f57614c50614d76928b614897565b614d838260011c89614897565b526002810180911115614d3d57634e487b7160e01b600052601160045260246000fd5b90939695919492958051600019810190811161480f578214614dd0575b5050949193929092614d01565b614cb382614ddd92614897565b523880614dc3565b93614e0890614df76001871888614897565b51614e028285614897565b5261495d565b93614d1c565b508551600019810190811161480f578110614d17565b505090935091909152565b60c082015160009492939015614ed2576001600160a01b0360a08501511692833b15614ece5785614e929593614ea482969463ffffffff94604051998a988997889663ad5aa16d60e01b88521660048701526060602487015260648601906145d9565b84810360031901604486015291614a2f565b03925af18015614ec357614eb6575050565b81614ec091614462565b50565b6040513d84823e3d90fd5b8580fd5b60405162461bcd60e51b815260206004820152601160248201527f70726f746f636f6c2064697361626c65640000000000000000000000000000006044820152606490fd5b6001600160a01b0361467d93921691826000526002820160205260406000205561511e565b918183029160001981850993838086109503948086039514614fd05784831115614fb75790829109816000038216809204600281600302188082026002030280820260020302808202600203028082026002030280820260020302809102600203029360018380600003040190848311900302920304170290565b82634e487b71600052156003026011186020526024601cfd5b505091508115614fde570490565b634e487b7160e01b600052601260045260246000fd5b8181101561500a57600052602052604060002090565b90600052602052604060002090565b8060005260126020526040600020541560001461506e57601154600160401b81101561444c57615055613db18260018594016011556011614840565b9055601154906000526012602052604060002055600190565b50600090565b8060005260036020526040600020541560001461506e57600254600160401b81101561444c576150b0613db18260018594016002556002614840565b9055600254906000526003602052604060002055600190565b80600052600d6020526040600020541560001461506e57600c54600160401b81101561444c57615105613db1826001859401600c55600c614840565b9055600c5490600052600d602052604060002055600190565b600082815260018201602052604090205461516e57805490600160401b82101561444c5782615157613db1846001809601855584614840565b905580549260005201602052604060002055600190565b5050600090565b600081815260126020526040902054801561516e57600019810181811161480f5760115460001981019190821161480f57818103615205575b50505060115480156151ef57600019016151c9816011614840565b8154906000199060031b1b19169055601155600052601260205260006040812055600190565b634e487b7160e01b600052603160045260246000fd5b615227615216613db1936011614840565b90549060031b1c9283926011614840565b905560005260126020526040600020553880806151ae565b600081815260036020526040902054801561516e57600019810181811161480f5760025460001981019190821161480f578181036152b9575b50505060025480156151ef5760001901615293816002614840565b8154906000199060031b1b19169055600255600052600360205260006040812055600190565b6152db6152ca613db1936002614840565b90549060031b1c9283926002614840565b90556000526003602052604060002055388080615278565b80600052600e60205260406000205480156000146153225750600052600d602052604060002054151590600090565b600192909150565b919080600052600283016020526040600020549283156000146153685761536292935060019160005201602052604060002054151590565b90600090565b50506001919056fea2646970667358221220a2e9eef12c5a7cde181fddd2a97fb4a18cb60378391b753aaadc6d31bf26295d64736f6c634300081c00330000000000000000000000006b38ceefdea74326dd2f2e53fa6ffdb791c7fa95