1.2k txs
35.3k calls
constructor
constructor(address initialOwner_, string name_, string symbol_, address collateralToken_, address tokenPrices_)
functions
accountDelegationBalances
viewfunction accountDelegationBalances(address account) view returns (uint256 totalCollateral, address delegateAddress, uint256 delegatedCollateral)
allowance
viewfunction allowance(address tokenOwner, address spender) view returns (uint256)
areExitsPaused
viewfunction areExitsPaused() view returns (bool)
areJoinsPaused
viewfunction areJoinsPaused() view returns (bool)
assetTokens
viewfunction assetTokens() view returns (address[] assets)
availableSharesCapacity
viewfunction availableSharesCapacity() view returns (uint256 shares)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
balanceSheet
viewfunction balanceSheet() view returns (uint256[] totalAssets, uint256[] totalLiabilities)
collateralToken
viewfunction collateralToken() view returns (address)
convertFromShares
viewfunction convertFromShares(uint256 shares) view returns (uint256[] assets, uint256[] liabilities)
convertFromToken
viewfunction convertFromToken(address tokenAddress, uint256 tokenAmount) view returns (uint256 shares, uint256[] assets, uint256[] liabilities)
debtToken
viewfunction debtToken() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
exitFeeBps
viewfunction exitFeeBps() view returns (uint256)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
isBalanceSheetToken
viewfunction isBalanceSheetToken(address tokenAddress) view returns (bool isAsset, bool isLiability)
joinFeeBps
viewfunction joinFeeBps() view returns (uint256)
liabilityTokens
viewfunction liabilityTokens() view returns (address[] liabilities)
manager
viewfunction manager() view returns (address)
maxExitWithShares
viewfunction maxExitWithShares(address sharesOwner) view returns (uint256 maxShares)
maxExitWithToken
viewfunction maxExitWithToken(address tokenAddress, address sharesOwner) view returns (uint256 maxToken)
maxJoinWithShares
viewfunction maxJoinWithShares(address) view returns (uint256 maxShares)
maxJoinWithToken
viewfunction maxJoinWithToken(address tokenAddress, address) view returns (uint256 maxToken)
maxTotalSupply
viewfunction maxTotalSupply() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
owner
viewfunction owner() view returns (address)
previewExitWithShares
viewfunction previewExitWithShares(uint256 shares) view returns (uint256[] assets, uint256[] liabilities)
previewExitWithToken
viewfunction previewExitWithToken(address tokenAddress, uint256 tokenAmount) view returns (uint256 shares, uint256[] assets, uint256[] liabilities)
previewJoinWithShares
viewfunction previewJoinWithShares(uint256 shares) view returns (uint256[] assets, uint256[] liabilities)
previewJoinWithToken
viewfunction previewJoinWithToken(address tokenAddress, uint256 tokenAmount) view returns (uint256 shares, uint256[] assets, uint256[] liabilities)
quoteSend
viewfunction quoteSend(tuple sendParam, bool payInLzToken) view returns (tuple fee)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
symbol
viewfunction symbol() view returns (string)
teleporter
viewfunction teleporter() view returns (address)
tokenPrices
viewfunction tokenPrices() view returns (address)
tokens
viewfunction tokens() view returns (address[] assets, address[] liabilities)
totalSupply
viewfunction totalSupply() view returns (uint256)
acceptOwner
nonpayablefunction acceptOwner()
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
burn
nonpayablefunction burn(uint256 amount)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
delegateVotingPower
nonpayablefunction delegateVotingPower(address delegate)
exitWithShares
nonpayablefunction exitWithShares(uint256 shares, address receiver, address sharesOwner) returns (uint256[] assets, uint256[] liabilities)
exitWithToken
nonpayablefunction exitWithToken(address tokenAddress, uint256 tokenAmount, address receiver, address sharesOwner) returns (uint256 shares, uint256[] assets, uint256[] liabilities)
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
joinWithShares
nonpayablefunction joinWithShares(uint256 shares, address receiver) returns (uint256[] assets, uint256[] liabilities)
joinWithToken
nonpayablefunction joinWithToken(address tokenAddress, uint256 tokenAmount, address receiver) returns (uint256 shares, uint256[] assets, uint256[] liabilities)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
revokeOwnership
nonpayablefunction revokeOwnership()
seed
nonpayablefunction seed(uint256[] assetAmounts, uint256[] liabilityAmounts, uint256 sharesToMint, address receiver, uint256 newMaxTotalSupply)
send
payablefunction send(tuple sendParam, tuple fee, address refundAddress) payable returns (tuple msgReceipt, tuple oftReceipt)
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setManager
nonpayablefunction setManager(address newManager)
setMaxTotalSupply
nonpayablefunction setMaxTotalSupply(uint256 maxTotalSupply_)
setTeleporter
nonpayablefunction setTeleporter(address newTeleporter)
setTokenPrices
nonpayablefunction setTokenPrices(address _tokenPrices)
syncDelegation
nonpayablefunction syncDelegation(address account)
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)
DebtTokenSet
event DebtTokenSet(address indexed debtToken)
EIP712DomainChanged
event EIP712DomainChanged()
Exit
event Exit(address indexed sender, address indexed receiver, address indexed owner, uint256[] assets, uint256[] liabilities, uint256 shares)
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
InKindFees
event InKindFees(uint8 feeType, uint256 feeBps, uint256 feeAmount)
Join
event Join(address indexed sender, address indexed owner, uint256[] assets, uint256[] liabilities, uint256 shares)
ManagerSet
event ManagerSet(address indexed manager)
MaxTotalSupplySet
event MaxTotalSupplySet(uint256 maxTotalSupply)
NewOwnerAccepted
event NewOwnerAccepted(address indexed oldOwner, address indexed newOwner)
NewOwnerProposed
event NewOwnerProposed(address indexed oldOwner, address indexed oldProposedOwner, address indexed newProposedOwner)
TeleporterSet
event TeleporterSet(address indexed teleporter)
TokenPricesSet
event TokenPricesSet(address indexed tokenPrices)
TokenRecovered
event TokenRecovered(address indexed to, address indexed token, uint256 amount)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
errors
ExceededMaxExitWithShares
error ExceededMaxExitWithShares(address owner, uint256 shares, uint256 max)
ExceededMaxExitWithToken
error ExceededMaxExitWithToken(address owner, address tokenAddress, uint256 tokenAmount, uint256 max)
ExceededMaxJoinWithShares
error ExceededMaxJoinWithShares(address receiver, uint256 shares, uint256 max)
ExceededMaxJoinWithToken
error ExceededMaxJoinWithToken(address receiver, address tokenAddress, uint256 tokenAmount, uint256 max)
ExpectedNonZero
error ExpectedNonZero()
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
InvalidParam
error InvalidParam()
InvalidShortString
error InvalidShortString()
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
StringTooLong
error StringTooLong(string str)
creation bytecode
0x6101806040523480156200001257600080fd5b506040516200636b3803806200636b83398101604081905262000035916200035d565b848484818184808380604051806040016040528060018152602001603160f81b815250868681600390816200006b919062000491565b5060046200007a828262000491565b506200008c915083905060056200017a565b610120526200009d8160066200017a565b61014052815160208084019190912060e052815190820120610100524660a0526200012b60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200014081620001b3565b50506001600d55505050506001600160a01b039283166101605250600f80546001600160a01b0319169190921617905550620005b7915050565b60006020835110156200019a57620001928362000230565b9050620001ad565b81620001a7848262000491565b5060ff90505b92915050565b6009546001600160a01b031615620001de57604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166200020e57604051634726455360e11b8152600060048201526024015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600080829050601f815111156200025e578260405163305a27a960e01b81526004016200020591906200055d565b80516200026b8262000592565b179392505050565b80516001600160a01b03811681146200028b57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002c3578181015183820152602001620002a9565b50506000910152565b600082601f830112620002de57600080fd5b81516001600160401b0380821115620002fb57620002fb62000290565b604051601f8301601f19908116603f0116810190828211818310171562000326576200032662000290565b816040528381528660208588010111156200034057600080fd5b62000353846020830160208901620002a6565b9695505050505050565b600080600080600060a086880312156200037657600080fd5b620003818662000273565b60208701519095506001600160401b03808211156200039f57600080fd5b620003ad89838a01620002cc565b95506040880151915080821115620003c457600080fd5b50620003d388828901620002cc565b935050620003e46060870162000273565b9150620003f46080870162000273565b90509295509295909350565b600181811c908216806200041557607f821691505b6020821081036200043657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200048c576000816000526020600020601f850160051c81016020861015620004675750805b601f850160051c820191505b81811015620004885782815560010162000473565b5050505b505050565b81516001600160401b03811115620004ad57620004ad62000290565b620004c581620004be845462000400565b846200043c565b602080601f831160018114620004fd5760008415620004e45750858301515b600019600386901b1c1916600185901b17855562000488565b600085815260208120601f198616915b828110156200052e578886015182559484019460019091019084016200050d565b50858210156200054d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200057e816040850160208701620002a6565b601f01601f19169190910160400192915050565b80516020808301519190811015620004365760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051615d3262000639600039600081816109d701528181612a9501528181612c4101528181613083015261434b015260006119dd015260006119b2015260006138e9015260006138c10152600061381c01526000613846015260006138700152615d326000f3fe6080604052600436106103dd5760003560e01c8063907ad64a1161020d578063be2f503911610128578063d9b47d1c116100bb578063e9cad7661161008a578063f3ff955a1161006f578063f3ff955a14610bf4578063f8d8989814610c14578063ff24951814610c3457600080fd5b8063e9cad76614610bca578063ebbc496514610bdf57600080fd5b8063d9b47d1c14610b3a578063daeccc7914610b5a578063dd62ed3e14610b95578063e9607c0114610bb557600080fd5b8063c7c7f5b3116100f7578063c7c7f5b314610ab9578063cfa8d69214610ada578063d0ebdbe714610afa578063d505accf14610b1a57600080fd5b8063be2f503914610a39578063bfccf0ec14610a59578063c1a9759014610a79578063c28ab67514610a9957600080fd5b8063a9059cbb116101a0578063b1f8100d1161016f578063b1f8100d146109a5578063b2016bd4146109c5578063b2317e6b146109f9578063b3ff9f4914610a1957600080fd5b8063a9059cbb14610923578063ac9650d814610943578063af1454d314610970578063b1e1fca41461098557600080fd5b80639d63848a116101dc5780639d63848a146108a0578063a3696a09146108c3578063a457c2d7146108e3578063a7229fd91461090357600080fd5b8063907ad64a1461083657806395d89b411461085657806398d7e2951461086b5780639a6b27cf1461088b57600080fd5b8063359d6ea9116102fd57806357b17a52116102905780637ecebe001161025f5780637ecebe00146107ae57806384b0196e146107ce5780638da5cb5b146107f65780638f39a80b1461081657600080fd5b806357b17a521461070057806361b3009a1461071557806365310a581461075857806370a082311461077857600080fd5b80633f3e4c11116102cc5780633f3e4c111461067a57806342966c681461069a578063481c6a75146106ba5780634e7e240d146106ec57600080fd5b8063359d6ea9146105f85780633644e51514610618578063395093511461062d5780633b6f743b1461064d57600080fd5b806322285cf6116103755780632b968958116103445780632b968958146105875780632c66d2031461059c5780632fa7f924146105bc578063313ce567146105dc57600080fd5b806322285cf61461050f57806323b872dd146105325780632ab41950146105525780632ab4d0521461057257600080fd5b80630c5bf964116103b15780630c5bf9641461047f57806318160ddd146104a157806320c3627f146104c05780632113f244146104ef57600080fd5b8062274eb3146103e257806301ffc9a71461040d57806306fdde031461043d578063095ea7b31461045f575b600080fd5b3480156103ee57600080fd5b506103f7610c6b565b6040516104049190614ebd565b60405180910390f35b34801561041957600080fd5b5061042d610428366004614f05565b610cd0565b6040519015158152602001610404565b34801561044957600080fd5b50610452610d2d565b6040516104049190614f70565b34801561046b57600080fd5b5061042d61047a366004614f98565b610dbf565b34801561048b57600080fd5b5061049f61049a366004614fc4565b610dd7565b005b3480156104ad57600080fd5b506002545b604051908152602001610404565b3480156104cc57600080fd5b506104e06104db366004614f98565b610e8d565b60405161040493929190615012565b3480156104fb57600080fd5b506104e061050a366004614f98565b610ebc565b34801561051b57600080fd5b50610524610ee6565b60405161040492919061503d565b34801561053e57600080fd5b5061042d61054d366004615062565b611034565b34801561055e57600080fd5b5061052461056d3660046150a3565b61105a565b34801561057e57600080fd5b50600e546104b2565b34801561059357600080fd5b5061049f6110b2565b3480156105a857600080fd5b506104e06105b73660046150bc565b6111d2565b3480156105c857600080fd5b506104e06105d736600461510f565b6112e3565b3480156105e857600080fd5b5060405160128152602001610404565b34801561060457600080fd5b506104b2610613366004614fc4565b6113e5565b34801561062457600080fd5b506104b2611404565b34801561063957600080fd5b5061042d610648366004614f98565b611413565b34801561065957600080fd5b5061066d610668366004615171565b611435565b60405161040491906151c3565b34801561068657600080fd5b5061049f6106953660046150a3565b6114d2565b3480156106a657600080fd5b5061049f6106b53660046150a3565b6115ad565b3480156106c657600080fd5b506011546001600160a01b03165b6040516001600160a01b039091168152602001610404565b3480156106f857600080fd5b5060006104b2565b34801561070c57600080fd5b506104b26115e8565b34801561072157600080fd5b50610735610730366004614fc4565b611678565b604080519384526001600160a01b03909216602084015290820152606001610404565b34801561076457600080fd5b5061049f61077336600461521f565b61174d565b34801561078457600080fd5b506104b2610793366004614fc4565b6001600160a01b031660009081526020819052604090205490565b3480156107ba57600080fd5b506104b26107c9366004614fc4565b611986565b3480156107da57600080fd5b506107e36119a4565b60405161040497969594939291906152b6565b34801561080257600080fd5b506009546106d4906001600160a01b031681565b34801561082257600080fd5b506105246108313660046150a3565b611a49565b34801561084257600080fd5b506104e0610851366004614f98565b611a9a565b34801561086257600080fd5b50610452611ab3565b34801561087757600080fd5b50610524610886366004615340565b611ac2565b34801561089757600080fd5b5061042d611be6565b3480156108ac57600080fd5b506108b5611c6d565b604051610404929190615377565b3480156108cf57600080fd5b5061049f6108de366004614fc4565b611c88565b3480156108ef57600080fd5b5061042d6108fe366004614f98565b611d99565b34801561090f57600080fd5b5061049f61091e366004615062565b611e37565b34801561092f57600080fd5b5061042d61093e366004614f98565b611f01565b34801561094f57600080fd5b5061096361095e36600461539c565b611f0f565b60405161040491906153de565b34801561097c57600080fd5b5061042d611ff9565b34801561099157600080fd5b50600f546106d4906001600160a01b031681565b3480156109b157600080fd5b5061049f6109c0366004614fc4565b61205c565b3480156109d157600080fd5b506106d47f000000000000000000000000000000000000000000000000000000000000000081565b348015610a0557600080fd5b506104b2610a14366004615460565b612185565b348015610a2557600080fd5b50600c546106d4906001600160a01b031681565b348015610a4557600080fd5b5061049f610a54366004614fc4565b6121a3565b348015610a6557600080fd5b5061049f610a7436600461548e565b6122b8565b348015610a8557600080fd5b506104b2610a94366004615460565b612491565b348015610aa557600080fd5b506104b2610ab4366004614fc4565b6124a8565b610acc610ac7366004615516565b6124b3565b604051610404929190615579565b348015610ae657600080fd5b50610524610af53660046155cc565b6125a0565b348015610b0657600080fd5b5061049f610b15366004614fc4565b612683565b348015610b2657600080fd5b5061049f610b353660046155f1565b6128a2565b348015610b4657600080fd5b50610524610b553660046150a3565b612a06565b348015610b6657600080fd5b5061042d610b75366004615668565b600a60209081526000928352604080842090915290825290205460ff1681565b348015610ba157600080fd5b506104b2610bb0366004615460565b612a1f565b348015610bc157600080fd5b506103f7612a71565b348015610bd657600080fd5b506104b2612ac7565b348015610beb57600080fd5b5061049f612afb565b348015610c0057600080fd5b5061049f610c0f366004614fc4565b612baf565b348015610c2057600080fd5b506010546106d4906001600160a01b031681565b348015610c4057600080fd5b50610c54610c4f366004614fc4565b612c3c565b604080519215158352901515602083015201610404565b60408051600180825281830190925260609160208083019080368337505060105482519293506001600160a01b031691839150600090610cad57610cad6156cc565b60200260200101906001600160a01b031690816001600160a01b03168152505090565b6000610cdb82612cb1565b80610d2757507fffffffff0000000000000000000000000000000000000000000000000000000082167fef61d23f00000000000000000000000000000000000000000000000000000000145b92915050565b606060038054610d3c906156fb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d68906156fb565b8015610db55780601f10610d8a57610100808354040283529160200191610db5565b820191906000526020600020905b815481529060010190602001808311610d9857829003601f168201915b5050505050905090565b600033610dcd818585612d59565b5060019392505050565b6011546001600160a01b03166305a8b83082610e08816001600160a01b031660009081526020819052604090205490565b6002546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039093166004840152602483019190915260448201526064015b600060405180830381600087803b158015610e7257600080fd5b505af1158015610e86573d6000803e3d6000fd5b5050505050565b6000606080610eac610e9f8686612eb1565b610ea76115e8565b612f7a565b9298909750919550909350505050565b6000606080610ed8610ece8686612eb1565b6000806000612fc4565b919790965090945092505050565b606080600080610ef4611c6d565b815191935091506000908067ffffffffffffffff811115610f1757610f1761569d565b604051908082528060200260200182016040528015610f40578160200160208202803683370190505b5095505b8351821015610f9857610f6f848381518110610f6257610f626156cc565b6020026020010151612ff1565b868381518110610f8157610f816156cc565b602002602001018181525050816001019150610f44565b5081518067ffffffffffffffff811115610fb457610fb461569d565b604051908082528060200260200182016040528015610fdd578160200160208202803683370190505b509450600091505b825182101561102c57611003838381518110610f6257610f626156cc565b858381518110611015576110156156cc565b602002602001018181525050816001019150610fe5565b505050509091565b600033611042858285613115565b61104d85858561318f565b60019150505b9392505050565b6060806110a76110996040805160c08101825260008082526020820181905291810182905260608101829052608081019190915260025460a082015290565b846110a26115e8565b613382565b909590945092505050565b6110e0336000357fffffffff00000000000000000000000000000000000000000000000000000000166133b4565b611116576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b546001600160a01b031661dead1461117057600b546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b6009546040516000916001600160a01b0316907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60006060806111df61341d565b60006111eb8888612eb1565b905060006111f76115e8565b90506000611206838884613476565b905080891115611263576040517f691bf43d0000000000000000000000000000000000000000000000000000000081526001600160a01b0380891660048301528b166024820152604481018a905260648101829052608401611167565b600061126f8484612f7a565b9299509750909550905080156112bc577f7e81c1439e2f6851efe3288a5d0ae235c1729a6272f98ed0a4b5eb7809140427600184836040516112b393929190615777565b60405180910390a15b6112cb84338b8b8b8b8b613512565b505050506112d96001600d55565b9450945094915050565b60006060806112f061341d565b60006112fc8787612eb1565b905060008061130b83836136a7565b905080881115611368576040517ff0cc4e3b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380891660048301528a1660248201526044810189905260648101829052608401611167565b60006113748484613721565b9299509750909550905080156113c1577f7e81c1439e2f6851efe3288a5d0ae235c1729a6272f98ed0a4b5eb7809140427600084836040516113b893929190615777565b60405180910390a15b6113ce3389898989613768565b505050506113dc6001600d55565b93509350939050565b60006113ef611ff9565b156113fc57506000919050565b610d27612ac7565b600061140e61380f565b905090565b600033610dcd8185856114268383612a1f565b61143091906157f5565b612d59565b60408051808201825260008082526020820152600c5491517f3b6f743b00000000000000000000000000000000000000000000000000000000815290916001600160a01b031690633b6f743b90611492908690869060040161593e565b6040805180830381865afa1580156114ae573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105391906159e2565b611500336000357fffffffff00000000000000000000000000000000000000000000000000000000166133b4565b611536576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254600003611572576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e8190556040518181527f0120f799fc820eabb910038e9cce6e8024add369b4d780181846e300df2844849060200160405180910390a150565b6115b7338261393a565b6011546001600160a01b03166305a8b83033610e08816001600160a01b031660009081526020819052604090205490565b601154604080517f57b17a5200000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916357b17a529160048083019260209291908290030181865afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f91906159fe565b61ffff16905090565b601154600090819081906001600160a01b031663757bb813856116b0816001600160a01b031660009081526020819052604090205490565b6002546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b03909316600484015260248301919091526044820152606401606060405180830381865afa15801561171c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117409190615a22565b9250925092509193909250565b61177b336000357fffffffff00000000000000000000000000000000000000000000000000000000166133b4565b6117b1576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254156117eb576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806117f6611c6d565b815191935091508814611835576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051861461186f576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828511156118c2576040517ff35b483d0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810186905260448101849052606401611167565b600e8390556040518381527f0120f799fc820eabb910038e9cce6e8024add369b4d780181846e300df2844849060200160405180910390a161197b3385878c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061376892505050565b505050505050505050565b6001600160a01b038116600090815260076020526040812054610d27565b6000606080828080836119d87f00000000000000000000000000000000000000000000000000000000000000006005613aaa565b611a037f00000000000000000000000000000000000000000000000000000000000000006006613aaa565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b606080611a9183611a896040805160c08101825260008082526020820181905291810182905260608101829052608081019190915260025460a082015290565b600080613b55565b91509150915091565b6000606080610eac611aac8686612eb1565b6000613721565b606060048054610d3c906156fb565b606080611acd61341d565b6000611ad884613b8e565b905080861115611b2d576040517fdc1803de0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810187905260448101829052606401611167565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260025460a082015290611b686115e8565b90506000611b77838a84613382565b909750955090508015611bc1577f7e81c1439e2f6851efe3288a5d0ae235c1729a6272f98ed0a4b5eb780914042760018383604051611bb893929190615777565b60405180910390a15b611bd083338a8a8d8b8b613512565b50505050611bde6001600d55565b935093915050565b601154604080517f9a6b27cf00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691639a6b27cf9160048083019260209291908290030181865afa158015611c49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140e9190615a5b565b606080611c78612a71565b9150611c82610c6b565b90509091565b611cb6336000357fffffffff00000000000000000000000000000000000000000000000000000000166133b4565b611cec576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116611d37576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611167565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f7ab5072a2f334db02e20cd6aa963f87434f813ef38fba53eea68704c7445ddb990600090a250565b60003381611da78286612a1f565b905083811015611e1f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401611167565b611e2c8286868403612d59565b506001949350505050565b611e65336000357fffffffff00000000000000000000000000000000000000000000000000000000166133b4565b611e9b576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f909683604051611ee091815260200190565b60405180910390a3611efc6001600160a01b0384168383613bdb565b505050565b600033610dcd81858561318f565b60608167ffffffffffffffff811115611f2a57611f2a61569d565b604051908082528060200260200182016040528015611f5d57816020015b6060815260200190600190039081611f485790505b50905060005b82811015611ff257611fcd30858584818110611f8157611f816156cc565b9050602002810190611f939190615a78565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613c8492505050565b828281518110611fdf57611fdf6156cc565b6020908102919091010152600101611f63565b5092915050565b601154604080517faf1454d300000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163af1454d39160048083019260209291908290030181865afa158015611c49573d6000803e3d6000fd5b61208a336000357fffffffff00000000000000000000000000000000000000000000000000000000166133b4565b6120c0576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661210b576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611167565b600b546009546040516001600160a01b038085169381169216907f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d890600090a4600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000611053612195846000612eb1565b8361219e6115e8565b613476565b6121d1336000357fffffffff00000000000000000000000000000000000000000000000000000000166133b4565b612207576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661224a576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815260006004820152602401611167565b6040516001600160a01b038216907f2781e03d8cf8be1845f40e150af1187b0cdb48dccd761a708f5e5b612a865d1d90600090a2600f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6122e6336000357fffffffff00000000000000000000000000000000000000000000000000000000166133b4565b61231c576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038316612367576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611167565b604080518082019091526000808252602082015260005b82811015610e8657838382818110612398576123986156cc565b9050604002018036038101906123ae9190615add565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b0387166000908152600a8352604080822086517fffffffff000000000000000000000000000000000000000000000000000000001683529093529190912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560010161237e565b60006110536124a1846000612eb1565b60006136a7565b6000610d2782613b8e565b6124bb614e30565b60408051808201825260008082526020820152908501356124dd33308361318f565b600c546040517fc7c7f5b30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c7c7f5b390349061252c908a908a908a90600401615b1c565b60c06040518083038185885af115801561254a573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061256f9190615b59565b805191945092506000906125839083615c0b565b905080156125965761259630338361318f565b5050935093915050565b6060806125ab61341d565b60006125b6846113e5565b90508085111561260b576040517ff35b483d0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810186905260448101829052606401611167565b6000806126188783613ca9565b919650945090508015612662577f7e81c1439e2f6851efe3288a5d0ae235c1729a6272f98ed0a4b5eb78091404276000838360405161265993929190615777565b60405180910390a15b61266f3387898888613768565b50505061267c6001600d55565b9250929050565b6126b1336000357fffffffff00000000000000000000000000000000000000000000000000000000166133b4565b6126e7576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811661272a576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815260006004820152602401611167565b6011546001600160a01b0382811691161461279f57601180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f60a0f5b9f9e81e98216071b85826681c796256fe3d1354ecb675580fba64fa6990600090a25b601154604080517ff8d8989800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163f8d898989160048083019260209291908290030181865afa158015612802573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128269190615c1e565b6010549091506001600160a01b0380831691161461289e57601080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f066f10e42df49bba948e2e987181156b9451f4d4db55b013c5ccc92e6ca80c1f90600090a25b5050565b834211156128f25760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401611167565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886129218c613d17565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061297c82613d3f565b9050600061298c82878787613d87565b9050896001600160a01b0316816001600160a01b0316146129ef5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401611167565b6129fa8a8a8a612d59565b50505050505050505050565b606080612a14836000613ca9565b509094909350915050565b600c546000906001600160a01b03838116911614612a67576001600160a01b03808416600090815260016020908152604080832093861683529290522054611053565b611053565b5060001992915050565b604080516001808252818301909252606091602080830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110610cad57610cad6156cc565b600080612ad3600e5490565b90506000198103612ae357919050565b612af5612aef60025490565b82613db1565b91505090565b600b546001600160a01b03163314612b3f576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60095460405133916001600160a01b0316907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55490600090a3600980547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600b80549091169055565b6011546001600160a01b031663d805b07433612be0816001600160a01b031660009081526020819052604090205490565b6002546040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b039384166004820152602481019290925260448201529084166064820152608401610e58565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603612c845750600192600092509050565b6010546001600160a01b0390811690841603612ca65750600092600192509050565b506000928392509050565b6000612cbc82613dc8565b80612d0857507fffffffff0000000000000000000000000000000000000000000000000000000082167ff757005600000000000000000000000000000000000000000000000000000000145b80610d2757507fffffffff0000000000000000000000000000000000000000000000000000000082167f948a39e7000000000000000000000000000000000000000000000000000000001492915050565b6001600160a01b038316612dd45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401611167565b6001600160a01b038216612e505760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401611167565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081018290529080612eed85612c3c565b91509150818015612efc575080155b80612f0d575081158015612f0d5750805b15612f72576040518060c00160405280866001600160a01b0316815260200183151581526020018215158152602001858152602001612f4b87612ff1565b8152602001612f5960025490565b81525092508260800151600003612f7257600060608401525b505092915050565b6000806060806000612fa2878860200151612f96576000612f99565b60015b60006001612fc4565b90945092509050612fb581876001613f90565b97908803965091945092509050565b6000606080612fd38787613ff3565b9250612fe183888787613b55565b9398909750929550919350505050565b6010546000906001600160a01b039081169083160361308157601160009054906101000a90046001600160a01b03166001600160a01b03166359b97ddb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561305d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d279190615c3b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361310d57601160009054906101000a90046001600160a01b03166001600160a01b031663dd50e2d36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561305d573d6000803e3d6000fd5b506000919050565b60006131218484612a1f565b90506000198114613189578181101561317c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611167565b6131898484848403612d59565b50505050565b6001600160a01b03831661320b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401611167565b6001600160a01b0382166132875760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401611167565b6001600160a01b038316600090815260208190526040902054818110156133165760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401611167565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3613189848484614025565b6000606080613392858585614150565b90955092506133a5858760006001613b55565b93979096509294509192505050565b6009546000906001600160a01b03848116911614806110535750506001600160a01b03919091166000908152600a602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000009094168352929052205460ff1690565b6002600d540361346f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611167565b6002600d55565b6000613480611be6565b1561348d57506000611053565b83608001516000036134a157506000611053565b6001600160a01b0383166134b85750600019611053565b6001600160a01b03831660009081526020819052604081205490506134df81846000614150565b50905060006134ef82878361417e565b905085608001518110613506578560800151613508565b805b9695505050505050565b8260000361354c576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416613597576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611167565b6001600160a01b0385166135e2576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401611167565b836001600160a01b0316866001600160a01b03161461360657613606848785613115565b6136148685878686866141b1565b61361e848461393a565b828760a0018181516136309190615c0b565b90525060a0870151600003613645576000600e555b836001600160a01b0316856001600160a01b0316876001600160a01b03167f728a5684b1f77b03e07bd227ddcef96ef31c5268eb61122aabcd651e08f752a185858860405161369693929190615c54565b60405180910390a450505050505050565b60006136b1611ff9565b156136be57506000610d27565b82608001516000036136d257506000610d27565b60006136dd600e5490565b905060001981036136ef579050610d27565b60006136ff8560a0015183613db1565b905061371861371082866001613f90565b86600061417e565b95945050505050565b60008060608061374786876020015161373b57600161373e565b60005b60016000612fc4565b9195509250905061375a84866000614150565b909790965091945092509050565b826000036137a2576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6137af85858585856142f8565b6137b98484614453565b836001600160a01b0316856001600160a01b03167f8bf99c37e0a09491ed7cb29409f9fcd5a61a01752ab57bbf20d72ce465330dab84848760405161380093929190615c54565b60405180910390a35050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561386857507f000000000000000000000000000000000000000000000000000000000000000046145b1561389257507f000000000000000000000000000000000000000000000000000000000000000090565b61140e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b0382166139b65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401611167565b6001600160a01b03821660009081526020819052604090205481811015613a455760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401611167565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611efc83600084614025565b606060ff8314613ac457613abd8361451a565b9050610d27565b818054613ad0906156fb565b80601f0160208091040260200160405190810160405280929190818152602001828054613afc906156fb565b8015613b495780601f10613b1e57610100808354040283529160200191613b49565b820191906000526020600020905b815481529060010190602001808311613b2c57829003601f168201915b50505050509050610d27565b606080600080613b63611c6d565b91509150613b7388888489614559565b9350613b8188888388614559565b9250505094509492505050565b6000613b98611be6565b15613ba557506000919050565b6001600160a01b03821615613bd2576001600160a01b038216600090815260208190526040902054610d27565b60001992915050565b6040516001600160a01b038316602482015260448101829052611efc9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526146a2565b60606110538383604051806060016040528060278152602001615cd66027913961478a565b606080600080613cbb86866001613f90565b90508581039150613d0881613cff6040805160c08101825260008082526020820181905291810182905260608101829052608081019190915260025460a082015290565b60016000613b55565b90979096509194509092505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b6000610d27613d4c61380f565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000613d98878787876147f8565b91509150613da5816148bc565b5090505b949350505050565b600081831115613dc357506000610d27565b500390565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec3e74c8000000000000000000000000000000000000000000000000000000001480613e5b57507fffffffff0000000000000000000000000000000000000000000000000000000082167fa219a02500000000000000000000000000000000000000000000000000000000145b80613ea757507fffffffff0000000000000000000000000000000000000000000000000000000082167f36372b0700000000000000000000000000000000000000000000000000000000145b80613ef357507fffffffff0000000000000000000000000000000000000000000000000000000082167f9d8ff7da00000000000000000000000000000000000000000000000000000000145b80613f3f57507fffffffff0000000000000000000000000000000000000000000000000000000082167f84b0196e00000000000000000000000000000000000000000000000000000000145b80610d2757507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b600082600003613fa1575082611053565b6127108310613fdc576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083612710039050613718856127108386614a24565b6000826080015160001461401c5760a083015160808401516060850151612a6292909185614a24565b50600092915050565b816001600160a01b0316836001600160a01b03161415801561404f57506001600160a01b03831615155b801561406357506001600160a01b03821615155b15611efc576011546001600160a01b03166385a3a58984614099816001600160a01b031660009081526020819052604090205490565b856140b9876001600160a01b031660009081526020819052604090205490565b6002546040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015260248101949094529390911660448301526064820152608481019190915260a401600060405180830381600087803b15801561413357600080fd5b505af1158015614147573d6000803e3d6000fd5b50505050505050565b6000808360000361416657508390506000611bde565b614171858585614ab7565b9594869003949350505050565b600082608001516000146141a757608083015160a08401516141a291869185614a24565b613da9565b6000949350505050565b6000826000815181106141c6576141c66156cc565b602002602001015190506000826000815181106141e5576141e56156cc565b6020908102919091010151601154601054919250614212916001600160a01b03908116918b911684614adb565b6001600160a01b038716600090815260208190526040812054614236908790615c0b565b905060008661424460025490565b61424e9190615c0b565b6011546040517f167860a700000000000000000000000000000000000000000000000000000000815260048101879052602481018690526001600160a01b038c811660448301528b811660648301526084820186905260a4820184905292935091169063167860a79060c401600060405180830381600087803b1580156142d457600080fd5b505af11580156142e8573d6000803e3d6000fd5b5050505050505050505050505050565b60008260008151811061430d5761430d6156cc565b6020026020010151905060008260008151811061432c5761432c6156cc565b6020908102919091010151601154909150614376906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116918a911685614adb565b6001600160a01b03861660009081526020819052604081205461439a9087906157f5565b90506000866143a860025490565b6143b291906157f5565b6011546040517f86dd051800000000000000000000000000000000000000000000000000000000815260048101879052602481018690526001600160a01b038b8116604483015260648201869052608482018490529293509116906386dd05189060a401600060405180830381600087803b15801561443057600080fd5b505af1158015614444573d6000803e3d6000fd5b50505050505050505050505050565b6001600160a01b0382166144a95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611167565b80600260008282546144bb91906157f5565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361289e60008383614025565b6060600061452783614b2c565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b81516060908067ffffffffffffffff8111156145775761457761569d565b6040519080825280602002602001820160405280156145a0578160200160208202803683370190505b5091506000805b82811015614697578581815181106145c1576145c16156cc565b602002602001015191508660a001516000036145fc5760008482815181106145eb576145eb6156cc565b60200260200101818152505061468f565b6001600160a01b03821615801590614620575086516001600160a01b038381169116145b1561463c5786606001518482815181106145eb576145eb6156cc565b614670614662878381518110614654576146546156cc565b602002602001015189614b6d565b60a08901518a919088614a24565b848281518110614682576146826156cc565b6020026020010181815250505b6001016145a7565b505050949350505050565b60006146f7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614b9f9092919063ffffffff16565b90508051600014806147185750808060200190518101906147189190615a5b565b611efc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401611167565b6060600080856001600160a01b0316856040516147a79190615c8a565b600060405180830381855af49150503d80600081146147e2576040519150601f19603f3d011682016040523d82523d6000602084013e6147e7565b606091505b509150915061350886838387614bae565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561482f57506000905060036148b3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614883573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166148ac576000600192509250506148b3565b9150600090505b94509492505050565b60008160048111156148d0576148d0615748565b036148d85750565b60018160048111156148ec576148ec615748565b036149395760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611167565b600281600481111561494d5761494d615748565b0361499a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611167565b60038160048111156149ae576149ae615748565b03614a215760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401611167565b50565b6000614a31858585614c27565b90506001826001811115614a4757614a47615748565b03613da9578280614a5a57614a5a615ca6565b84860915613da957600019811015614a7457600101613da9565b6040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401611167565b6000612710838103908410614acd576000613718565b613718858261271086614a24565b6040516001600160a01b03808516602483015283166044820152606481018290526131899085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401613c20565b600060ff8216601f811115610d27576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600001516001600160a01b0316836001600160a01b031614614b9557612a6283612ff1565b5060800151919050565b6060613da98484600085614d14565b60608315614c1d578251600003614c16576001600160a01b0385163b614c165760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611167565b5081613da9565b613da98383614e06565b6000808060001985870985870292508281108382030391505080600003614c6157838281614c5757614c57615ca6565b0492505050611053565b838110614cab576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401611167565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b606082471015614d8c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401611167565b600080866001600160a01b03168587604051614da89190615c8a565b60006040518083038185875af1925050503d8060008114614de5576040519150601f19603f3d011682016040523d82523d6000602084013e614dea565b606091505b5091509150614dfb87838387614bae565b979650505050505050565b815115614e165781518083602001fd5b8060405162461bcd60e51b81526004016111679190614f70565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001614e73604051806040016040528060008152602001600081525090565b905290565b60008151808452602080850194506020840160005b83811015614eb25781516001600160a01b031687529582019590820190600101614e8d565b509495945050505050565b6020815260006110536020830184614e78565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114614f0057600080fd5b919050565b600060208284031215614f1757600080fd5b61105382614ed0565b60005b83811015614f3b578181015183820152602001614f23565b50506000910152565b60008151808452614f5c816020860160208601614f20565b601f01601f19169290920160200192915050565b6020815260006110536020830184614f44565b6001600160a01b0381168114614a2157600080fd5b60008060408385031215614fab57600080fd5b8235614fb681614f83565b946020939093013593505050565b600060208284031215614fd657600080fd5b813561105381614f83565b60008151808452602080850194506020840160005b83811015614eb257815187529582019590820190600101614ff6565b83815260606020820152600061502b6060830185614fe1565b82810360408401526135088185614fe1565b6040815260006150506040830185614fe1565b82810360208401526137188185614fe1565b60008060006060848603121561507757600080fd5b833561508281614f83565b9250602084013561509281614f83565b929592945050506040919091013590565b6000602082840312156150b557600080fd5b5035919050565b600080600080608085870312156150d257600080fd5b84356150dd81614f83565b93506020850135925060408501356150f481614f83565b9150606085013561510481614f83565b939692955090935050565b60008060006060848603121561512457600080fd5b833561512f81614f83565b925060208401359150604084013561514681614f83565b809150509250925092565b600060e08284031215613d3957600080fd5b8015158114614a2157600080fd5b6000806040838503121561518457600080fd5b823567ffffffffffffffff81111561519b57600080fd5b6151a785828601615151565b92505060208301356151b881615163565b809150509250929050565b815181526020808301519082015260408101610d27565b60008083601f8401126151ec57600080fd5b50813567ffffffffffffffff81111561520457600080fd5b6020830191508360208260051b850101111561267c57600080fd5b600080600080600080600060a0888a03121561523a57600080fd5b873567ffffffffffffffff8082111561525257600080fd5b61525e8b838c016151da565b909950975060208a013591508082111561527757600080fd5b506152848a828b016151da565b90965094505060408801359250606088013561529f81614f83565b809250506080880135905092959891949750929550565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e0602082015260006152f160e0830189614f44565b82810360408401526153038189614f44565b90508660608401526001600160a01b03861660808401528460a084015282810360c08401526153328185614fe1565b9a9950505050505050505050565b60008060006060848603121561535557600080fd5b83359250602084013561536781614f83565b9150604084013561514681614f83565b60408152600061538a6040830185614e78565b82810360208401526137188185614e78565b600080602083850312156153af57600080fd5b823567ffffffffffffffff8111156153c657600080fd5b6153d2858286016151da565b90969095509350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015615453577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452615441858351614f44565b94509285019290850190600101615407565b5092979650505050505050565b6000806040838503121561547357600080fd5b823561547e81614f83565b915060208301356151b881614f83565b6000806000604084860312156154a357600080fd5b83356154ae81614f83565b9250602084013567ffffffffffffffff808211156154cb57600080fd5b818601915086601f8301126154df57600080fd5b8135818111156154ee57600080fd5b8760208260061b850101111561550357600080fd5b6020830194508093505050509250925092565b6000806000838503608081121561552c57600080fd5b843567ffffffffffffffff81111561554357600080fd5b61554f87828801615151565b9450506040601f198201121561556457600080fd5b50602084019150606084013561514681614f83565b600060c0820190508351825267ffffffffffffffff602085015116602083015260408401516155b5604084018280518252602090810151910152565b5082516080830152602083015160a0830152611053565b600080604083850312156155df57600080fd5b8235915060208301356151b881614f83565b600080600080600080600060e0888a03121561560c57600080fd5b873561561781614f83565b9650602088013561562781614f83565b95506040880135945060608801359350608088013560ff8116811461564b57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561567b57600080fd5b823561568681614f83565b915061569460208401614ed0565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061570f57607f821691505b602082108103613d39577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60608101600285106157b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b938152602081019290925260409091015290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610d2757610d276157c6565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261583d57600080fd5b830160208101925035905067ffffffffffffffff81111561585d57600080fd5b80360382131561267c57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6000813563ffffffff811681146158ad57600080fd5b63ffffffff81168452506020820135602084015260408201356040840152606082013560608401526158e26080830183615808565b60e060808601526158f760e08601828461586c565b91505061590760a0840184615808565b85830360a087015261591a83828461586c565b9250505061592b60c0840184615808565b85830360c087015261350883828461586c565b6040815260006159516040830185615897565b905082151560208301529392505050565b6040805190810167ffffffffffffffff811182821017156159ac577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b6000604082840312156159c457600080fd5b6159cc615962565b9050815181526020820151602082015292915050565b6000604082840312156159f457600080fd5b61105383836159b2565b600060208284031215615a1057600080fd5b815161ffff8116811461105357600080fd5b600080600060608486031215615a3757600080fd5b835192506020840151615a4981614f83565b80925050604084015190509250925092565b600060208284031215615a6d57600080fd5b815161105381615163565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615aad57600080fd5b83018035915067ffffffffffffffff821115615ac857600080fd5b60200191503681900382131561267c57600080fd5b600060408284031215615aef57600080fd5b615af7615962565b615b0083614ed0565b81526020830135615b1081615163565b60208201529392505050565b608081526000615b2f6080830186615897565b905083356020830152602084013560408301526001600160a01b0383166060830152949350505050565b60008082840360c0811215615b6d57600080fd5b6080811215615b7b57600080fd5b506040516060810167ffffffffffffffff8282108183111715615bc7577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8160405285518352602086015191508082168214615be457600080fd5b506020820152615bf785604086016159b2565b6040820152915061569484608085016159b2565b81810381811115610d2757610d276157c6565b600060208284031215615c3057600080fd5b815161105381614f83565b600060208284031215615c4d57600080fd5b5051919050565b606081526000615c676060830186614fe1565b8281036020840152615c798186614fe1565b915050826040830152949350505050565b60008251615c9c818460208701614f20565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201e562c5a89461fc273202901ebaf3987300a69ba55aff1daae001494702bcea064736f6c63430008160033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d8000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000ab87046fbb341d058f17cbc4c1133f25a20a52f000000000000000000000000e72df5a35d596b668b22a9a0d4e091a1ce6fb1f4000000000000000000000000000000000000000000000000000000000000000c4f726967616d6920684f484d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004684f484d00000000000000000000000000000000000000000000000000000000