3.6k txs
3.7k calls
constructor
constructor(address _issueTokenAddress, address _treasuryAddress, address _providersWhitelistAddress, address[] _allowedTokenAddresses)
functions
allowedTokens
viewfunction allowedTokens(address token) view returns (bool isAllowed)
burnRequests
viewfunction burnRequests(uint256 id) view returns (uint256 id, address provider, uint8 state, uint256 amount, address token, uint256 minExpectedAmount)
burnRequestsCounter
viewfunction burnRequestsCounter() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
ISSUE_TOKEN_ADDRESS
viewfunction ISSUE_TOKEN_ADDRESS() view returns (address)
isWhitelistEnabled
viewfunction isWhitelistEnabled() view returns (bool)
mintRequests
viewfunction mintRequests(uint256 id) view returns (uint256 id, address provider, uint8 state, uint256 amount, address token, uint256 minExpectedAmount)
mintRequestsCounter
viewfunction mintRequestsCounter() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
providersWhitelist
viewfunction providersWhitelist() view returns (address)
SERVICE_ROLE
viewfunction SERVICE_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
treasuryAddress
viewfunction treasuryAddress() view returns (address)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
addAllowedToken
nonpayablefunction addAllowedToken(address _allowedTokenAddress)
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
cancelBurn
nonpayablefunction cancelBurn(uint256 _id)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
cancelMint
nonpayablefunction cancelMint(uint256 _id)
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
completeBurn
nonpayablefunction completeBurn(bytes32 _idempotencyKey, uint256 _id, uint256 _withdrawalAmount)
completeMint
nonpayablefunction completeMint(bytes32 _idempotencyKey, uint256 _id, uint256 _mintAmount)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address _token)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
pause
nonpayablefunction pause()
removeAllowedToken
nonpayablefunction removeAllowedToken(address _allowedTokenAddress)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
requestBurn
nonpayablefunction requestBurn(uint256 _issueTokenAmount, address _withdrawalTokenAddress, uint256 _minWithdrawalAmount)
requestBurnWithPermit
nonpayablefunction requestBurnWithPermit(uint256 _issueTokenAmount, address _withdrawalTokenAddress, uint256 _minWithdrawalAmount, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s)
requestMint
nonpayablefunction requestMint(address _depositTokenAddress, uint256 _amount, uint256 _minMintAmount)
requestMintWithPermit
nonpayablefunction requestMintWithPermit(address _depositTokenAddress, uint256 _amount, uint256 _minMintAmount, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setProvidersWhitelist
nonpayablefunction setProvidersWhitelist(address _providersWhitelistAddress)
setTreasury
nonpayablefunction setTreasury(address _treasuryAddress)
setWhitelistEnabled
nonpayablefunction setWhitelistEnabled(bool _isEnabled)
unpause
nonpayablefunction unpause()
events
AllowedTokenAdded
event AllowedTokenAdded(address tokenAddress)
AllowedTokenRemoved
event AllowedTokenRemoved(address tokenAddres)
BurnRequestCancelled
event BurnRequestCancelled(uint256 indexed id)
BurnRequestCompleted
event BurnRequestCompleted(uint256 indexed id, uint256 burnedAmount, uint256 withdrawalAmount)
BurnRequestCreated
event BurnRequestCreated(uint256 indexed id, address indexed provider, address withdrawalTokenAddress, uint256 issueTokenAmount, uint256 minWithdrawalAmount)
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
EmergencyWithdrawn
event EmergencyWithdrawn(address tokenAddress, uint256 amount)
MintRequestCancelled
event MintRequestCancelled(uint256 indexed id)
MintRequestCompleted
event MintRequestCompleted(bytes32 indexed idempotencyKey, uint256 indexed id, uint256 mintedAmount)
MintRequestCreated
event MintRequestCreated(uint256 indexed id, address indexed provider, address depositToken, uint256 amount, uint256 minMintAmount)
Paused
event Paused(address account)
ProvidersWhitelistSet
event ProvidersWhitelistSet(address providersWhitelistAddress)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
TreasurySet
event TreasurySet(address treasuryAddress)
Unpaused
event Unpaused(address account)
WhitelistEnabledSet
event WhitelistEnabledSet(bool isEnabled)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlEnforcedDefaultAdminDelay
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule)
AccessControlEnforcedDefaultAdminRules
error AccessControlEnforcedDefaultAdminRules()
AccessControlInvalidDefaultAdmin
error AccessControlInvalidDefaultAdmin(address defaultAdmin)
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
BurnRequestNotExist
error BurnRequestNotExist(uint256 id)
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
IdempotencyKeyAlreadyExist
error IdempotencyKeyAlreadyExist(bytes32 _idempotencyKey)
IllegalAddress
error IllegalAddress(address expected, address actual)
IllegalState
error IllegalState(uint8 expected, uint8 current)
InsufficientMintAmount
error InsufficientMintAmount(uint256 mintAmount, uint256 minMintAmount)
InsufficientWithdrawalAmount
error InsufficientWithdrawalAmount(uint256 withdrawalAmount, uint256 minWithdrawalAmount)
InvalidAmount
error InvalidAmount(uint256 _amount)
InvalidProvidersWhitelist
error InvalidProvidersWhitelist(address providersWhitelistAddress)
InvalidTokenAddress
error InvalidTokenAddress(address token)
MintRequestNotExist
error MintRequestNotExist(uint256 id)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TokenNotAllowed
error TokenNotAllowed(address token)
UnknownProvider
error UnknownProvider(address account)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a060405234801561001057600080fd5b506040516139f33803806139f383398101604081905261002f91610332565b62015180338061005a57604051636116401160e11b8152600060048201526024015b60405180910390fd5b600180546001600160d01b0316600160d01b65ffffffffffff8516021790556100846000826101b8565b50506003805460ff191690555061009a84610229565b6001600160a01b03166080526100af83610229565b600380546001600160a01b039290921661010002610100600160a81b03199092169190911790556100df82610229565b600480546001600160a01b0319166001600160a01b039290921691909117905560005b815181101561019a57600082828151811061011f5761011f610429565b602002602001015190506101388161022960201b60201c565b50806001600160a01b03163b60000361016f57604051637330680360e01b81526001600160a01b0382166004820152602401610051565b6001600160a01b03166000908152600560205260409020805460ff1916600190811790915501610102565b50506004805460ff60a01b1916600160a01b1790555061043f915050565b6000826102165760006101d36002546001600160a01b031690565b6001600160a01b0316146101fa57604051631fe1e13d60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0384161790555b6102208383610256565b90505b92915050565b60006001600160a01b0382166102525760405163d92e233d60e01b815260040160405180910390fd5b5090565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166102f8576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556102b03390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610223565b506000610223565b80516001600160a01b038116811461031757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000806080858703121561034857600080fd5b61035185610300565b93506020610360818701610300565b935061036e60408701610300565b60608701519093506001600160401b038082111561038b57600080fd5b818801915088601f83011261039f57600080fd5b8151818111156103b1576103b161031c565b8060051b604051601f19603f830116810181811085821117156103d6576103d661031c565b60405291825284820192508381018501918b8311156103f457600080fd5b938501935b828510156104195761040a85610300565b845293850193928501926103f9565b989b979a50959850505050505050565b634e487b7160e01b600052603260045260246000fd5b60805161357661047d6000396000818161069301528181610af20152818161150f0152818161195001528181611a1e0152611cad01526135766000f3fe608060405234801561001057600080fd5b50600436106102ff5760003560e01c80638da5cb5b1161019c578063cc8463c8116100ee578063e744092e11610097578063f67e607011610071578063f67e6070146107c0578063f9052bea146107d3578063ff5528e0146107f357600080fd5b8063e744092e14610777578063ec6686ad1461079a578063f0f44260146107ad57600080fd5b8063d547741f116100c8578063d547741f14610749578063d602b9fd1461075c578063e3f4ce551461076457600080fd5b8063cc8463c8146106ed578063cefc1429146106f5578063cf6eefb7146106fd57600080fd5b8063a20e7d4711610150578063a693577c1161012a578063a693577c1461068e578063aafa2d69146106b5578063c5f956af146106c857600080fd5b8063a20e7d471461064c578063a217fddf14610673578063a46e82d21461067b57600080fd5b806391d148541161018157806391d14854146105ce578063986d7a6914610612578063a1eda53c1461062557600080fd5b80638da5cb5b146105b357806390469a9d146105bb57600080fd5b8063424e6575116102555780636406c10c1161020957806377bef613116101e357806377bef613146105635780638456cb591461056c57806384ef8ffc1461057457600080fd5b80636406c10c146104cc578063649a5ec71461053d5780636ff1c9bc1461055057600080fd5b80635c6a93841161023a5780635c6a9384146104a55780635c975abb146104ae578063634e93da146104b957600080fd5b8063424e65751461040f5780635676659b1461049257600080fd5b806319b2a6b9116102b757806336568abe1161029157806336568abe146103e15780633f4ba83a146103f45780634178617f146103fc57600080fd5b806319b2a6b91461038a578063248a9ca31461039d5780632f2ff15d146103ce57600080fd5b8063052d9e7e116102e8578063052d9e7e146103485780630aa6220b1461035d578063184d69ab1461036557600080fd5b806301ffc9a714610304578063022d63fb1461032c575b600080fd5b610317610312366004613116565b610806565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff9091168152602001610323565b61035b610356366004613166565b610862565b005b61035b6108f2565b6004546103179074010000000000000000000000000000000000000000900460ff1681565b61035b610398366004613183565b610908565b6103c06103ab3660046131af565b60009081526020819052604090206001015490565b604051908152602001610323565b61035b6103dc3660046131ea565b610b95565b61035b6103ef3660046131ea565b610bda565b61035b610cdf565b61035b61040a36600461321a565b610cf2565b61048061041d3660046131af565b60096020526000908152604090208054600182015460028301546003840154600490940154929373ffffffffffffffffffffffffffffffffffffffff808416947401000000000000000000000000000000000000000090940460ff169391169086565b604051610323969594939291906132a1565b61035b6104a0366004613309565b610def565b6103c060065481565b60035460ff16610317565b61035b6104c736600461321a565b610eaa565b6104806104da3660046131af565b60076020526000908152604090208054600182015460028301546003840154600490940154929373ffffffffffffffffffffffffffffffffffffffff808416947401000000000000000000000000000000000000000090940460ff169391169086565b61035b61054b36600461336e565b610ebe565b61035b61055e36600461321a565b610ed2565b6103c060085481565b61035b610fe5565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610323565b61058e610ff8565b61035b6105c936600461321a565b61101e565b6103176105dc3660046131ea565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61035b610620366004613396565b6110af565b61062d6112fd565b6040805165ffffffffffff938416815292909116602083015201610323565b6103c07fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b81565b6103c0600081565b61035b610689366004613183565b611379565b61058e7f000000000000000000000000000000000000000000000000000000000000000081565b61035b6106c336600461321a565b611605565b60035461058e90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103316116f6565b61035b611794565b6001546040805173ffffffffffffffffffffffffffffffffffffffff831681527401000000000000000000000000000000000000000090920465ffffffffffff16602083015201610323565b61035b6107573660046131ea565b6117f0565b61035b611831565b61035b6107723660046131af565b611844565b61031761078536600461321a565b60056020526000908152604090205460ff1681565b61035b6107a83660046133cb565b6119c5565b61035b6107bb36600461321a565b611a96565b61035b6107ce366004613414565b611b25565b60045461058e9073ffffffffffffffffffffffffffffffffffffffff1681565b61035b6108013660046131af565b611d95565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f3149878600000000000000000000000000000000000000000000000000000000148061085c575061085c82611efc565b92915050565b600061086d81611f93565b6004805483151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f411283ae1b0e68089790510eb77ccad9b761295be576637799607c8ae066fe9f906108e690841515815260200190565b60405180910390a15050565b60006108fd81611f93565b610905611f9d565b50565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b61093281611f93565b600083815260096020526040902060010154839073ffffffffffffffffffffffffffffffffffffffff1661099a576040517fa5cadfbe000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6000848152600960205260408120600181015490916109d39174010000000000000000000000000000000000000000900460ff16611faa565b8060040154841015610a1e576004808201546040517fda9754750000000000000000000000000000000000000000000000000000000081529182018690526024820152604401610991565b6001810180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556003808201549054600283015473ffffffffffffffffffffffffffffffffffffffff92831692610a9a92849261010090910490911690612009565b60018201546040517f7ed9db590000000000000000000000000000000000000000000000000000000081526004810189905273ffffffffffffffffffffffffffffffffffffffff9182166024820152604481018790527f000000000000000000000000000000000000000000000000000000000000000091821690637ed9db5990606401600060405180830381600087803b158015610b3857600080fd5b505af1158015610b4c573d6000803e3d6000fd5b5050505086887f2f78b4436cbdcae9d74f9f2699396a3d28cd2ab069518d23be6b25cd29e4996388604051610b8391815260200190565b60405180910390a35050505050505050565b81610bcc576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd6828261208f565b5050565b81158015610c02575060025473ffffffffffffffffffffffffffffffffffffffff8281169116145b15610cd55760015473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900465ffffffffffff1681151580610c56575065ffffffffffff8116155b80610c6957504265ffffffffffff821610155b15610caa576040517f19ca5ebb00000000000000000000000000000000000000000000000000000000815265ffffffffffff82166004820152602401610991565b5050600180547fffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffff1690555b610bd682826120ba565b6000610cea81611f93565b610905612113565b6000610cfd81611f93565b610d0682612190565b508173ffffffffffffffffffffffffffffffffffffffff163b600003610d70576040517f7330680300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610991565b73ffffffffffffffffffffffffffffffffffffffff821660008181526005602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527ff849d00bc67e9e4bf072df9680646c59b8c5380160834c2e1d4896ce5ec81f7591016108e6565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790526064810185905260ff8416608482015260a4810183905260c48101829052879073ffffffffffffffffffffffffffffffffffffffff82169063d505accf9060e401600060405180830381600087803b158015610e8357600080fd5b505af1925050508015610e94575060015b50610ea08888886110af565b5050505050505050565b6000610eb581611f93565b610bd6826121e3565b6000610ec981611f93565b610bd682612263565b6000610edd81611f93565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6e919061344c565b9050610f9173ffffffffffffffffffffffffffffffffffffffff84163383612009565b6040805173ffffffffffffffffffffffffffffffffffffffff85168152602081018390527f2e39961a70a10f4d46383948095ac2752b3ee642a7c76aa827410aaff08c2e51910160405180910390a1505050565b6000610ff081611f93565b6109056122cc565b600061101960025473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b600061102981611f93565b61103282612190565b5073ffffffffffffffffffffffffffffffffffffffff821660008181526005602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527fbf996b4fd74f0c7159bb017b1db415b0d9a6f13129f46d0b93309d170b78df3191016108e6565b60045474010000000000000000000000000000000000000000900460ff1680156111695750600480546040517fb23bc7d7000000000000000000000000000000000000000000000000000000008152339281019290925273ffffffffffffffffffffffffffffffffffffffff169063b23bc7d790602401602060405180830381865afa158015611143573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111679190613465565b155b156111a2576040517f30ac863d000000000000000000000000000000000000000000000000000000008152336004820152602401610991565b826111ac81612190565b5073ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090205460ff16611224576040517f94403b7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610991565b61122c612327565b61123583612364565b61125773ffffffffffffffffffffffffffffffffffffffff85163330866123a1565b60006112648585856123e7565b9050806020015173ffffffffffffffffffffffffffffffffffffffff1681600001517f7f382249e1e2d2be5b5e769bbd3abd8e092fc5932a37d3819055e2c88c8540f8836080015184606001518560a001516040516112ee9392919073ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b60405180910390a35050505050565b6002546000907a010000000000000000000000000000000000000000000000000000900465ffffffffffff16801515801561134057504265ffffffffffff821610155b61134c57600080611371565b60025474010000000000000000000000000000000000000000900465ffffffffffff16815b915091509091565b7fd8a7a79547af723ee3e12b59a480111268d8969c634e1a34a144d2c8b91d635b6113a381611f93565b600083815260076020526040902060010154839073ffffffffffffffffffffffffffffffffffffffff16611406576040517fe0a3cff500000000000000000000000000000000000000000000000000000000815260048101829052602401610991565b60008481526007602052604081206001810154909161143f9174010000000000000000000000000000000000000000900460ff16611faa565b806004015484101561148a576004808201546040517fe1330b2a0000000000000000000000000000000000000000000000000000000081529182018690526024820152604401610991565b600181018054740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90911617905560028101546040517f346a90740000000000000000000000000000000000000000000000000000000081526004810188905230602482015260448101919091527f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff82169063346a907490606401600060405180830381600087803b15801561156a57600080fd5b505af115801561157e573d6000803e3d6000fd5b5050600380546001860154918601546115bc945073ffffffffffffffffffffffffffffffffffffffff908116935061010090910481169116886123a1565b6002820154604080519182526020820187905287917fbf79ce6ffda2b262d7c1d31cde3fbde100c49885be80ba25764dc18e0256b54f910160405180910390a250505050505050565b600061161081611f93565b61161982612190565b508173ffffffffffffffffffffffffffffffffffffffff163b600003611683576040517f54b1211f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610991565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040519081527fe462dc805cb3ffeb7c059557b4fe0b57a01a6c6ca928941561baf95e8834ef20906020016108e6565b6002546000907a010000000000000000000000000000000000000000000000000000900465ffffffffffff16801515801561173857504265ffffffffffff8216105b61176a576001547a010000000000000000000000000000000000000000000000000000900465ffffffffffff1661178e565b60025474010000000000000000000000000000000000000000900465ffffffffffff165b91505090565b60015473ffffffffffffffffffffffffffffffffffffffff163381146117e8576040517fc22c8022000000000000000000000000000000000000000000000000000000008152336004820152602401610991565b610905612574565b81611827576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bd68282612667565b600061183c81611f93565b61090561268c565b600081815260076020526040902060010154819073ffffffffffffffffffffffffffffffffffffffff166118a7576040517fe0a3cff500000000000000000000000000000000000000000000000000000000815260048101829052602401610991565b600082815260076020526040902060018101546118da9073ffffffffffffffffffffffffffffffffffffffff1633612697565b60018101546119069060009074010000000000000000000000000000000000000000900460ff16611faa565b600181018054740200000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff82161790915560028201547f0000000000000000000000000000000000000000000000000000000000000000916119949173ffffffffffffffffffffffffffffffffffffffff808516921690612009565b60405184907fd4ad51f415ebcb45bd9f8dfd5db6d35f987fdf5ebb909bcc3322990f140bc88e90600090a250505050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018890526064810185905260ff8416608482015260a4810183905260c481018290527f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff82169063d505accf9060e401600060405180830381600087803b158015611a7957600080fd5b505af1925050508015611a8a575060015b50610ea0888888611b25565b6000611aa181611f93565b611aaa82612190565b50600380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8516908102919091179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f906020016108e6565b60045474010000000000000000000000000000000000000000900460ff168015611bdf5750600480546040517fb23bc7d7000000000000000000000000000000000000000000000000000000008152339281019290925273ffffffffffffffffffffffffffffffffffffffff169063b23bc7d790602401602060405180830381865afa158015611bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdd9190613465565b155b15611c18576040517f30ac863d000000000000000000000000000000000000000000000000000000008152336004820152602401610991565b81611c2281612190565b5073ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604090205460ff16611c9a576040517f94403b7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610991565b611ca2612327565b611cab84612364565b7f0000000000000000000000000000000000000000000000000000000000000000611cee73ffffffffffffffffffffffffffffffffffffffff82163330886123a1565b6000611cfb85878661271c565b9050806020015173ffffffffffffffffffffffffffffffffffffffff1681600001517f09fdc4f6581c246c961bfa60d4a4d0d0f26a4bc0d47082a0f628bc8c92ea98f4836080015184606001518560a00151604051611d859392919073ffffffffffffffffffffffffffffffffffffffff9390931683526020830191909152604082015260600190565b60405180910390a3505050505050565b600081815260096020526040902060010154819073ffffffffffffffffffffffffffffffffffffffff16611df8576040517fa5cadfbe00000000000000000000000000000000000000000000000000000000815260048101829052602401610991565b60008281526009602052604090206001810154611e2b9073ffffffffffffffffffffffffffffffffffffffff1633612697565b6001810154611e579060009074010000000000000000000000000000000000000000900460ff16611faa565b600181018054740200000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8216179091556003820154600283015473ffffffffffffffffffffffffffffffffffffffff91821692611ecb928492911690612009565b60405184907f0ae44e75c55e53fff935759d2cd72009d85ed130f95829e8aab2ad776ee29c4590600090a250505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061085c57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461085c565b61090581336128a8565b611fa860008061292e565b565b806002811115611fbc57611fbc613237565b826002811115611fce57611fce613237565b14610bd65781816040517f074104ef000000000000000000000000000000000000000000000000000000008152600401610991929190613482565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261208a91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612a88565b505050565b6000828152602081905260409020600101546120aa81611f93565b6120b48383612b1e565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314612109576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61208a8282612bde565b61211b612c40565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff82166121df576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5090565b60006121ed6116f6565b6121f642612c7c565b61220091906134cc565b905061220c8282612cc8565b60405165ffffffffffff8216815273ffffffffffffffffffffffffffffffffffffffff8316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b600061226e82612d64565b61227742612c7c565b61228191906134cc565b905061228d828261292e565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b91016108e6565b6122d4612327565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121663390565b60035460ff1615611fa8576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610905576040517f3728b83d00000000000000000000000000000000000000000000000000000000815260048101829052602401610991565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526120b49186918216906323b872dd90608401612043565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506008546040805160c08101825282815233602080830191825260008385018181526060850189905273ffffffffffffffffffffffffffffffffffffffff8a8116608087015260a086018990528783526009909352949020835181559151600183018054919092167fffffffffffffffffffffffff00000000000000000000000000000000000000008216811783559451939594869492917fffffffffffffffffffffff0000000000000000000000000000000000000000001617740100000000000000000000000000000000000000008360028111156124fc576124fc613237565b02179055506060820151600282015560808201516003820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560a090910151600490910155506008805460010190555b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900465ffffffffffff168015806125c457504265ffffffffffff821610155b15612605576040517f19ca5ebb00000000000000000000000000000000000000000000000000000000815265ffffffffffff82166004820152602401610991565b61262e600061262960025473ffffffffffffffffffffffffffffffffffffffff1690565b612bde565b5061263a600083612b1e565b5050600180547fffffffffffff000000000000000000000000000000000000000000000000000016905550565b60008281526020819052604090206001015461268281611f93565b6120b48383612bde565b611fa8600080612cc8565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610bd6576040517f95eed10500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152604401610991565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506006546040805160c08101825282815233602080830191825260008385018181526060850189905273ffffffffffffffffffffffffffffffffffffffff8a8116608087015260a086018990528783526007909352949020835181559151600183018054919092167fffffffffffffffffffffffff00000000000000000000000000000000000000008216811783559451939594869492917fffffffffffffffffffffff00000000000000000000000000000000000000000016177401000000000000000000000000000000000000000083600281111561283157612831613237565b02179055506060820151600282015560808201516003820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905560a090910151600490910155506006805460010190559392505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610bd6576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610991565b6002547a010000000000000000000000000000000000000000000000000000900465ffffffffffff168015612a03574265ffffffffffff821610156129d9576002546001805479ffffffffffffffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000090920465ffffffffffff167a01000000000000000000000000000000000000000000000000000002919091179055612a03565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b506002805473ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000065ffffffffffff9485160279ffffffffffffffffffffffffffffffffffffffffffffffffffff16177a0100000000000000000000000000000000000000000000000000009290931691909102919091179055565b6000612aaa73ffffffffffffffffffffffffffffffffffffffff841683612dac565b90508051600014158015612acf575080806020019051810190612acd9190613465565b155b1561208a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610991565b600082612bd4576000612b4660025473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614612b93576040517f3fc3c27a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790555b61256d8383612dba565b600082158015612c08575060025473ffffffffffffffffffffffffffffffffffffffff8381169116145b15612c3657600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b61256d8383612eb6565b60035460ff16611fa8576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600065ffffffffffff8211156121df576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526030600482015260248101839052604401610991565b600180547401000000000000000000000000000000000000000065ffffffffffff84811682027fffffffffffff0000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff88161717909355900416801561208a576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a1505050565b600080612d6f6116f6565b90508065ffffffffffff168365ffffffffffff1611612d9757612d9283826134f2565b61256d565b61256d65ffffffffffff841662069780612f71565b606061256d83836000612f87565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16612eae5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055612e4c3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161085c565b50600061085c565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615612eae5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161085c565b6000818310612f80578161256d565b5090919050565b606081471015612fc5576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610991565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051612fee9190613511565b60006040518083038185875af1925050503d806000811461302b576040519150601f19603f3d011682016040523d82523d6000602084013e613030565b606091505b509150915061304086838361304a565b9695505050505050565b60608261305a57612d92826130d4565b815115801561307e575073ffffffffffffffffffffffffffffffffffffffff84163b155b156130cd576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610991565b508061256d565b8051156130e45780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561312857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461256d57600080fd5b801515811461090557600080fd5b60006020828403121561317857600080fd5b813561256d81613158565b60008060006060848603121561319857600080fd5b505081359360208301359350604090920135919050565b6000602082840312156131c157600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461090557600080fd5b600080604083850312156131fd57600080fd5b82359150602083013561320f816131c8565b809150509250929050565b60006020828403121561322c57600080fd5b813561256d816131c8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061329d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b86815273ffffffffffffffffffffffffffffffffffffffff868116602083015260c08201906132d36040840188613266565b8560608401528085166080840152508260a0830152979650505050505050565b803560ff8116811461330457600080fd5b919050565b600080600080600080600060e0888a03121561332457600080fd5b873561332f816131c8565b9650602088013595506040880135945060608801359350613352608089016132f3565b925060a0880135915060c0880135905092959891949750929550565b60006020828403121561338057600080fd5b813565ffffffffffff8116811461256d57600080fd5b6000806000606084860312156133ab57600080fd5b83356133b6816131c8565b95602085013595506040909401359392505050565b600080600080600080600060e0888a0312156133e657600080fd5b8735965060208801356133f8816131c8565b95506040880135945060608801359350613352608089016132f3565b60008060006060848603121561342957600080fd5b83359250602084013561343b816131c8565b929592945050506040919091013590565b60006020828403121561345e57600080fd5b5051919050565b60006020828403121561347757600080fd5b815161256d81613158565b604081016134908285613266565b61256d6020830184613266565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b65ffffffffffff8181168382160190808211156134eb576134eb61349d565b5092915050565b65ffffffffffff8281168282160390808211156134eb576134eb61349d565b6000825160005b818110156135325760208186018101518583015201613518565b50600092019182525091905056fea2646970667358221220261fa8dfdbdc8a08f952fa6f5594f1d256b59549cb1d07c6c5c271f4a2baad3d64736f6c6343000819003300000000000000000000000066a1e37c9b0eaddca17d3662d6c05f4decf3e110000000000000000000000000d63b6f7e0745272fb80b55dbc840e7dc29660d820000000000000000000000005943026e21e3936538620ba27e01525bba31125500000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7