0 txs
1 call
constructor
constructor(address[] _adapters, bytes4 _requiredSenderKind, uint256 _protocolFee, address _protocolFeeWallet)
functions
adapters
viewfunction adapters(bytes4) view returns (address)
authorized
viewfunction authorized(address) view returns (address)
check
viewfunction check(address senderWallet, tuple order) view returns (bytes32[])
DOMAIN_CHAIN_ID
viewfunction DOMAIN_CHAIN_ID() view returns (uint256)
DOMAIN_NAME
viewfunction DOMAIN_NAME() view returns (string)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
DOMAIN_VERSION
viewfunction DOMAIN_VERSION() view returns (string)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
FEE_DIVISOR
viewfunction FEE_DIVISOR() view returns (uint256)
nonceUsed
viewfunction nonceUsed(address signer, uint256 nonce) view returns (bool)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
protocolFee
viewfunction protocolFee() view returns (uint256)
protocolFeeWallet
viewfunction protocolFeeWallet() view returns (address)
requiredSenderKind
viewfunction requiredSenderKind() view returns (bytes4)
signatoryMinimumNonce
viewfunction signatoryMinimumNonce(address) view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
authorize
nonpayablefunction authorize(address signatory)
cancel
nonpayablefunction cancel(uint256[] nonces)
cancelUpTo
nonpayablefunction cancelUpTo(uint256 minimumNonce)
renounceOwnership
nonpayablefunction renounceOwnership()
revoke
nonpayablefunction revoke()
setProtocolFee
nonpayablefunction setProtocolFee(uint256 _protocolFee)
setProtocolFeeWallet
nonpayablefunction setProtocolFeeWallet(address _protocolFeeWallet)
swap
nonpayablefunction swap(address recipient, uint256 maxRoyalty, tuple order)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Authorize
event Authorize(address indexed signer, address indexed signerWallet)
Cancel
event Cancel(uint256 indexed nonce, address indexed signerWallet)
CancelUpTo
event CancelUpTo(uint256 indexed nonce, address indexed signerWallet)
EIP712DomainChanged
event EIP712DomainChanged()
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Revoke
event Revoke(address indexed signer, address indexed signerWallet)
SetProtocolFee
event SetProtocolFee(uint256 protocolFee)
SetProtocolFeeWallet
event SetProtocolFeeWallet(address indexed feeWallet)
Swap
event Swap(uint256 indexed nonce, address indexed signerWallet, uint256 signerAmount, uint256 signerId, address signerToken, address indexed senderWallet, uint256 senderAmount, uint256 senderId, address senderToken, address affiliateWallet, uint256 affiliateAmount)
errors
AdaptersInvalid
error AdaptersInvalid()
AffiliateAmountInvalid
error AffiliateAmountInvalid()
ChainIdChanged
error ChainIdChanged()
FeeInvalid
error FeeInvalid()
FeeWalletInvalid
error FeeWalletInvalid()
InvalidShortString
error InvalidShortString()
NonceAlreadyUsed
error NonceAlreadyUsed(uint256)
NonceTooLow
error NonceTooLow()
OrderExpired
error OrderExpired()
RoyaltyExceedsMax
error RoyaltyExceedsMax(uint256)
SenderInvalid
error SenderInvalid()
SenderTokenInvalid
error SenderTokenInvalid()
SignatoryInvalid
error SignatoryInvalid()
SignatoryUnauthorized
error SignatoryUnauthorized()
SignatureInvalid
error SignatureInvalid()
StringTooLong
error StringTooLong(string str)
TokenKindUnknown
error TokenKindUnknown()
TransferFailed
error TransferFailed(address, address)
Unauthorized
error Unauthorized()
creation bytecode
0x6101c06040523480156200001257600080fd5b5060405162003b1138038062003b118339810160408190526200003591620004b3565b604051806040016040528060048152602001630535741560e41b815250604051806040016040528060038152602001621a171960e91b8152506200008862000082620002da60201b60201c565b620002de565b62000095826002620002fc565b61012052620000a6816003620002fc565b61014052815160208084019190912060e052815190820120610100524660a0526200012360e051610100516040805160008051602062003af183398151915260208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05261271082106200014f576040516352dadcf960e01b815260040160405180910390fd5b6001600160a01b0381166200017757604051636b8df36360e01b815260040160405180910390fd5b83516000036200019a57604051632cb13a8760e21b815260040160405180910390fd5b4661016052620001a962000335565b61018052835160005b818110156200029e57858181518110620001d057620001d0620005b5565b602002602001015160096000888481518110620001f157620001f1620005b5565b60200260200101516001600160a01b031663a64d0cd46040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d9190620005cb565b6001600160e01b0319168152602081019190915260400160002080546001600160a01b0319166001600160a01b0392909216919091179055600101620001b2565b50506001600160e01b0319929092166101a052600755600880546001600160a01b0319166001600160a01b0390921691909117905550620007c3565b3390565b600180546001600160a01b0319169055620002f981620003cb565b50565b60006020835110156200031c5762000314836200041b565b90506200032f565b8162000329848262000681565b5060ff90505b92915050565b600060c0516001600160a01b0316306001600160a01b03161480156200035c575060a05146145b1562000369575060805190565b620003c660e051610100516040805160008051602062003af183398151915260208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080829050601f8151111562000452578260405163305a27a960e01b81526004016200044991906200074d565b60405180910390fd5b80516200045f826200079e565b179392505050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200049557600080fd5b919050565b80516001600160e01b0319811681146200049557600080fd5b60008060008060808587031215620004ca57600080fd5b84516001600160401b0380821115620004e257600080fd5b818701915087601f830112620004f757600080fd5b81516020828211156200050e576200050e62000467565b8160051b604051601f19603f8301168101818110868211171562000536576200053662000467565b60405292835281830193508481018201928b8411156200055557600080fd5b948201945b838610156200057e576200056e866200047d565b855294820194938201936200055a565b98506200058f90508982016200049a565b96505050505060408501519150620005aa606086016200047d565b905092959194509250565b634e487b7160e01b600052603260045260246000fd5b600060208284031215620005de57600080fd5b620005e9826200049a565b9392505050565b600181811c908216806200060557607f821691505b6020821081036200062657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200067c576000816000526020600020601f850160051c81016020861015620006575750805b601f850160051c820191505b81811015620006785782815560010162000663565b5050505b505050565b81516001600160401b038111156200069d576200069d62000467565b620006b581620006ae8454620005f0565b846200062c565b602080601f831160018114620006ed5760008415620006d45750858301515b600019600386901b1c1916600185901b17855562000678565b600085815260208120601f198616915b828110156200071e57888601518255948401946001909101908401620006fd565b50858210156200073d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200077d578581018301518582016040015282016200075f565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620006265760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a05161329e62000853600039600081816101b801528181610ee70152611ea501526000818161024d015261239801526000818161029501528181610a8c0152611e2c01526000611af201526000611ac70152600050506000505060005050600050506000505061329e6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80637ce78525116100ee578063b0e21e8a11610097578063b918161111610071578063b918161114610486578063cbf7c6c3146104bc578063e30c3978146104dc578063f2fde38b146104fa57600080fd5b8063b0e21e8a14610462578063b6549f751461046b578063b6a5d7de1461047357600080fd5b80639e93ad8e116100c85780639e93ad8e146103fd578063acb8cc4914610406578063b0dd49431461044257600080fd5b80637ce78525146103b157806384b0196e146103c45780638da5cb5b146103df57600080fd5b8063485421051161015b578063715018a611610135578063715018a614610345578063787dce3d1461034d578063796f077b1461036057806379ba5097146103a957600080fd5b806348542105146102b757806349b8a932146102ca5780636e038752146102ea57600080fd5b80633644e5151161018c5780633644e515146102485780633c6419101461027d578063416f281d1461029057600080fd5b806306a6ea74146101b35780631647795e146102105780632e34082314610233575b600080fd5b6101da7f000000000000000000000000000000000000000000000000000000000000000081565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b61022361021e366004612c2f565b61050d565b6040519015158152602001610207565b610246610241366004612c5b565b610572565b005b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610207565b61024661028b366004612cd0565b6105df565b61026f7f000000000000000000000000000000000000000000000000000000000000000081565b6102466102c5366004612d02565b61061b565b6102dd6102d8366004612d42565b610a5e565b6040516102079190612d79565b6103206102f8366004612ded565b60096020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610207565b6102466118ae565b61024661035b366004612cd0565b6118c2565b61039c6040518060400160405280600481526020017f535741500000000000000000000000000000000000000000000000000000000081525081565b6040516102079190612e76565b610246611940565b6102466103bf366004612e89565b6119f5565b6103cc611ab9565b6040516102079796959493929190612ea6565b60005473ffffffffffffffffffffffffffffffffffffffff16610320565b61026f61271081565b61039c6040518060400160405280600381526020017f342e32000000000000000000000000000000000000000000000000000000000081525081565b61026f610450366004612e89565b60066020526000908152604090205481565b61026f60075481565b610246611b5e565b610246610481366004612e89565b611bdb565b610320610494366004612e89565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6008546103209073ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff16610320565b610246610508366004612e89565b611ca3565b60008061051c61010084612fc6565b9050600061052c61010085612fda565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020908152604080832095835294905292909220546001921c82169091149150505b92915050565b60005b818110156105da57600083838381811061059157610591612fee565b9050602002013590506105a43382611d53565b604051339082907f8dd3c361eb2366ff27c2db0eb07b9261f1d052570742ab8c9a0c326f37aa576d90600090a350600101610575565b505050565b336000818152600660205260408082208490555183917f863123978d9b13946753a916c935c0688a01802440d3ffc668d04d2720c4e11091a350565b61062481611e29565b6000610637610100830160e08401612e89565b73ffffffffffffffffffffffffffffffffffffffff1614158015610681575033610668610100830160e08401612e89565b73ffffffffffffffffffffffffffffffffffffffff1614155b156106b8576040517fa7202ef600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610701336106cc6060840160408501612e89565b6101608401356101408501356106ea61012087016101008801612e89565b6106fc61014088016101208901612ded565b6120eb565b61073f6107146060830160408401612e89565b8460c084013560a085013561072f6080870160608801612e89565b6106fc60a0880160808901612ded565b60006107536101a083016101808401612e89565b73ffffffffffffffffffffffffffffffffffffffff16146107a2576107a2336107846101a084016101808501612e89565b6101a08401356101408501356106ea61012087016101008801612e89565b600754600090612710906107bb9061016085013561301d565b6107c59190612fc6565b905080156108175760085461081790339073ffffffffffffffffffffffffffffffffffffffff168361014086013561080561012088016101008901612e89565b6106fc61014089016101208a01612ded565b61082f61082a6080840160608501612e89565b6122bc565b15610965576000806108476080850160608601612e89565b6040517f2a55205a00000000000000000000000000000000000000000000000000000000815260a08601356004820152610160860135602482015273ffffffffffffffffffffffffffffffffffffffff9190911690632a55205a906044016040805180830381865afa1580156108c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e59190613034565b909250905080156109625784811115610932576040517f9c08743a000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6109623383836101408801356109506101208a016101008b01612e89565b6106fc6101408b016101208c01612ded565b50505b336109766060840160408501612e89565b73ffffffffffffffffffffffffffffffffffffffff1683357f182e847dc18073123e8aa17e204b9e3874caf71387e52fe3083ffb98716d3d6b60c086013560a08701356109c96080890160608a01612e89565b6101608901356101408a01356109e76101208c016101008d01612e89565b6109f96101a08d016101808e01612e89565b60408051978852602088019690965273ffffffffffffffffffffffffffffffffffffffff9485169587019590955260608601929092526080850152811660a08401521660c08201526101a087013560e08201526101000160405180910390a450505050565b60408051601080825261022082019092526060916000919060208201610200803683370190505090506000467f000000000000000000000000000000000000000000000000000000000000000014610afb577f436861696e49644368616e6765640000000000000000000000000000000000008282610adc81613062565b935081518110610aee57610aee612fee565b6020026020010181815250505b6000610b0d6060860160408701612e89565b73ffffffffffffffffffffffffffffffffffffffff8082166000908152600560205260409020549192501615610b665773ffffffffffffffffffffffffffffffffffffffff908116600090815260056020526040902054165b610bec81610b7387612394565b6101e088018035906102008a013590610b90906101c08c0161309a565b604051602001610bd893929190928352602083019190915260f81b7fff0000000000000000000000000000000000000000000000000000000000000016604082015260410190565b6040516020818303038152906040526126ad565b610c3f577f556e617574686f72697a656400000000000000000000000000000000000000008383610c1c81613062565b945081518110610c2e57610c2e612fee565b602002602001018181525050610cf4565b610c4a81863561050d565b15610c7b577f4e6f6e6365416c726561647955736564000000000000000000000000000000008383610c1c81613062565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090205485351015610cf4577f4e6f6e6365546f6f4c6f770000000000000000000000000000000000000000008383610cd581613062565b945081518110610ce757610ce7612fee565b6020026020010181815250505b4285602001351015610d4b577f4f726465724578706972656400000000000000000000000000000000000000008383610d2c81613062565b945081518110610d3e57610d3e612fee565b6020026020010181815250505b6000610d5e610100870160e08801612e89565b73ffffffffffffffffffffffffffffffffffffffff1614158015610dbe575073ffffffffffffffffffffffffffffffffffffffff8616610da5610100870160e08801612e89565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610e0e577f53656e646572496e76616c6964000000000000000000000000000000000000008383610def81613062565b945081518110610e0157610e01612fee565b6020026020010181815250505b6000600981610e2561014089016101208a01612ded565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff16905080610ec4577f53656e646572546f6b656e4b696e64556e6b6e6f776e000000000000000000008484610ea181613062565b955081518110610eb357610eb3612fee565b602002602001018181525050611536565b7fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000016610f1961014088016101208901612ded565b7fffffffff000000000000000000000000000000000000000000000000000000001614610f6c577f53656e646572546f6b656e496e76616c696400000000000000000000000000008484610ea181613062565b60075460009061271090610f85906101608a013561301d565b610f8f9190612fc6565b905060006101a0880135610fa8836101608b01356130bd565b610fb291906130bd565b9050610fc761082a60808a0160608b01612e89565b1561108e576000610fde60808a0160608b01612e89565b6040517f2a55205a00000000000000000000000000000000000000000000000000000000815260a08b013560048201526101608b0135602482015273ffffffffffffffffffffffffffffffffffffffff9190911690632a55205a906044016040805180830381865afa158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c9190613034565b915061108a905081836130bd565b9150505b6040805160a0810190915273ffffffffffffffffffffffffffffffffffffffff8a168152600090602081016110cb6101208c016101008d01612e89565b73ffffffffffffffffffffffffffffffffffffffff1681526020016110f86101408c016101208d01612ded565b7fffffffff000000000000000000000000000000000000000000000000000000001681526101408b01356020820152604001839052905073ffffffffffffffffffffffffffffffffffffffff8a16156113a757604080517f3170f63d000000000000000000000000000000000000000000000000000000008152825173ffffffffffffffffffffffffffffffffffffffff9081166004830152602084015181166024830152918301517fffffffff00000000000000000000000000000000000000000000000000000000166044820152606083015160648201526080830151608482015290851690633170f63d9060a401602060405180830381865afa158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a91906130d0565b611279577f53656e646572416c6c6f77616e63654c6f770000000000000000000000000000878761125a81613062565b98508151811061126c5761126c612fee565b6020026020010181815250505b604080517fd1190df9000000000000000000000000000000000000000000000000000000008152825173ffffffffffffffffffffffffffffffffffffffff9081166004830152602084015181166024830152918301517fffffffff0000000000000000000000000000000000000000000000000000000016604482015260608301516064820152608083015160848201529085169063d1190df99060a401602060405180830381865afa158015611334573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135891906130d0565b6113a7577f53656e64657242616c616e63654c6f7700000000000000000000000000000000878761138881613062565b98508151811061139a5761139a612fee565b6020026020010181815250505b604080517f40944de9000000000000000000000000000000000000000000000000000000008152825173ffffffffffffffffffffffffffffffffffffffff9081166004830152602084015181166024830152918301517fffffffff000000000000000000000000000000000000000000000000000000001660448201526060830151606482015260808301516084820152908516906340944de99060a401602060405180830381865afa158015611462573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148691906130d0565b6114d5577f416d6f756e744f724944496e76616c696400000000000000000000000000000087876114b681613062565b9850815181106114c8576114c8612fee565b6020026020010181815250505b6101a08901356101608a01351015611532577f416666696c69617465416d6f756e74496e76616c696400000000000000000000878761151381613062565b98508151811061152557611525612fee565b6020026020010181815250505b5050505b600060098161154b60a08a0160808b01612ded565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040016000205473ffffffffffffffffffffffffffffffffffffffff169050806115ea577f5369676e6572546f6b656e4b696e64556e6b6e6f776e0000000000000000000085856115c781613062565b9650815181106115d9576115d9612fee565b602002602001018181525050611896565b604080517f3170f63d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831691633170f63d9161163e918b0190600401613174565b602060405180830381865afa15801561165b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167f91906130d0565b6116ce577f5369676e6572416c6c6f77616e63654c6f77000000000000000000000000000085856116af81613062565b9650815181106116c1576116c1612fee565b6020026020010181815250505b604080517fd1190df900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169163d1190df991611722918b0190600401613174565b602060405180830381865afa15801561173f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176391906130d0565b6117b2577f5369676e657242616c616e63654c6f7700000000000000000000000000000000858561179381613062565b9650815181106117a5576117a5612fee565b6020026020010181815250505b604080517f40944de900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316916340944de991611806918b0190600401613174565b602060405180830381865afa158015611823573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184791906130d0565b611896577f416d6f756e744f724944496e76616c6964000000000000000000000000000000858561187781613062565b96508151811061188957611889612fee565b6020026020010181815250505b845184146118a2578385525b50929695505050505050565b6118b661272a565b6118c060006127ab565b565b6118ca61272a565b6127108110611905576040517f52dadcf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60078190556040518181527fdc0410a296e1e33943a772020d333d5f99319d7fcad932a484c53889f7aaa2b19060200160405180910390a150565b600154339073ffffffffffffffffffffffffffffffffffffffff1681146119e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610929565b6119f2816127ab565b50565b6119fd61272a565b73ffffffffffffffffffffffffffffffffffffffff8116611a4a576040517f6b8df36300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f8b2a800ce9e2e7ccdf4741ae0e41b1f16983192291080ae3b78ac4296ddf598a90600090a250565b600060608082808083611aed7f000000000000000000000000000000000000000000000000000000000000000060026127dc565b611b187f000000000000000000000000000000000000000000000000000000000000000060036127dc565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b3360008181526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000008116909155905173ffffffffffffffffffffffffffffffffffffffff909116929183917fd7426110292f20fe59e73ccf52124e0f5440a756507c91c7b0a6c50e1eb1a23a9190a350565b73ffffffffffffffffffffffffffffffffffffffff8116611c28576040517fcd4b78cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917f30468de898bda644e26bab66e5a2241a3aa6aaf527257f5ca54e0f65204ba14a91a350565b611cab61272a565b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155611d0e60005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6000611d6161010083612fc6565b90506000611d7161010084612fda565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600460209081526040808320868452909152902054909150600181831c81169003611de7576040517f91cab50400000000000000000000000000000000000000000000000000000000815260048101859052602401610929565b73ffffffffffffffffffffffffffffffffffffffff909416600090815260046020908152604080832094835293905291909120600190911b9290921790915550565b467f000000000000000000000000000000000000000000000000000000000000000014611e82576040517fc614eff800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000016611ed761014083016101208401612ded565b7fffffffff000000000000000000000000000000000000000000000000000000001614611f30576040517fd0bd721a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101a08101356101608201351015611f74576040517f3b71bbca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611f866060830160408401612e89565b73ffffffffffffffffffffffffffffffffffffffff8082166000908152600560205260409020549192501615611fdf5773ffffffffffffffffffffffffffffffffffffffff908116600090815260056020526040902054165b61200981611fec84612394565b6101e0850180359061020087013590610b90906101c0890161309a565b61203f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61204a818335611d53565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260066020526040902054823510156120aa576040517fd24d82a400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428260200135116120e7576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526009602052604090205473ffffffffffffffffffffffffffffffffffffffff168061216a576040517f33c8207c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805173ffffffffffffffffffffffffffffffffffffffff89811660248301528881166044830152606482018890526084820187905285811660a4808401919091528351808403909101815260c490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f47338bc300000000000000000000000000000000000000000000000000000000179052915160009284169161221791613182565b600060405180830381855af49150503d8060008114612252576040519150601f19603f3d011682016040523d82523d6000602084013e612257565b606091505b50509050806122b2576040517f523c3aaa00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808a16600483015288166024820152604401610929565b5050505050505050565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f2a55205a00000000000000000000000000000000000000000000000000000000600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906301ffc9a790602401602060405180830381865afa925050508015612383575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612380918101906130d0565b60015b61056c57506000919050565b919050565b60007f00000000000000000000000000000000000000000000000000000000000000006040516020016124f4907f4f726465722875696e74323536206e6f6e63652c75696e74323536206578706981527f72792c75696e743235362070726f746f636f6c4665652c50617274792073696760208201527f6e65722c50617274792073656e6465722c6164647265737320616666696c696160408201527f746557616c6c65742c75696e7432353620616666696c69617465416d6f756e7460608201527f290000000000000000000000000000000000000000000000000000000000000060808201527f506172747928616464726573732077616c6c65742c6164647265737320746f6b60818201527f656e2c627974657334206b696e642c75696e743235362069642c75696e74323560a18201527f3620616d6f756e7429000000000000000000000000000000000000000000000060c182015260ca0190565b60405160208183030381529060405280519060200120836000013584602001356007547f224ed05dccb4f5c1e21e6e85fb29dd6c83074e33458fdfefb184d03fe8742f4f8760400160405160200161254d92919061319e565b604051602081830303815290604052805190602001207f224ed05dccb4f5c1e21e6e85fb29dd6c83074e33458fdfefb184d03fe8742f4f8860e00160405160200161259992919061319e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101206125e16101a08a016101808b01612e89565b6040805160208101989098528701959095526060860193909352608085019190915260a084015260c083015273ffffffffffffffffffffffffffffffffffffffff1660e08201526101a084013561010082015261012001604051602081830303815290604052805190602001206040516020016126909291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604051602081830303815290604052805190602001209050919050565b60008060006126bc8585612887565b909250905060008160048111156126d5576126d56131b2565b14801561270d57508573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061271e575061271e8686866128cc565b925050505b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146118c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610929565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556119f281612a29565b606060ff83146127f6576127ef83612a9e565b905061056c565b818054612802906131e1565b80601f016020809104026020016040519081016040528092919081815260200182805461282e906131e1565b801561287b5780601f106128505761010080835404028352916020019161287b565b820191906000526020600020905b81548152906001019060200180831161285e57829003601f168201915b5050505050905061056c565b60008082516041036128bd5760208301516040840151606085015160001a6128b187828585612add565b945094505050506128c5565b506000905060025b9250929050565b60008060008573ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b868660405160240161290392919061322e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161298c9190613182565b600060405180830381855afa9150503d80600081146129c7576040519150601f19603f3d011682016040523d82523d6000602084013e6129cc565b606091505b50915091508180156129e057506020815110155b801561271e575080517f1626ba7e0000000000000000000000000000000000000000000000000000000090612a1e908301602090810190840161324f565b149695505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60606000612aab83612bcc565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612b145750600090506003612bc3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612b68573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612bbc57600060019250925050612bc3565b9150600090505b94509492505050565b600060ff8216601f81111561056c576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811681146119f257600080fd5b60008060408385031215612c4257600080fd5b8235612c4d81612c0d565b946020939093013593505050565b60008060208385031215612c6e57600080fd5b823567ffffffffffffffff80821115612c8657600080fd5b818501915085601f830112612c9a57600080fd5b813581811115612ca957600080fd5b8660208260051b8501011115612cbe57600080fd5b60209290920196919550909350505050565b600060208284031215612ce257600080fd5b5035919050565b60006102208284031215612cfc57600080fd5b50919050565b60008060006102608486031215612d1857600080fd5b8335612d2381612c0d565b925060208401359150612d398560408601612ce9565b90509250925092565b6000806102408385031215612d5657600080fd5b8235612d6181612c0d565b9150612d708460208501612ce9565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612db157835183529284019291840191600101612d95565b50909695505050505050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461238f57600080fd5b600060208284031215612dff57600080fd5b61272382612dbd565b60005b83811015612e23578181015183820152602001612e0b565b50506000910152565b60008151808452612e44816020860160208601612e08565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006127236020830184612e2c565b600060208284031215612e9b57600080fd5b813561272381612c0d565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152612ee360e084018a612e2c565b8381036040850152612ef5818a612e2c565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015612f5657835183529284019291840191600101612f3a565b50909c9b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082612fd557612fd5612f68565b500490565b600082612fe957612fe9612f68565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b808202811582820484141761056c5761056c612f97565b6000806040838503121561304757600080fd5b825161305281612c0d565b6020939093015192949293505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361309357613093612f97565b5060010190565b6000602082840312156130ac57600080fd5b813560ff8116811461272357600080fd5b8082018082111561056c5761056c612f97565b6000602082840312156130e257600080fd5b8151801515811461272357600080fd5b80356130fd81612c0d565b73ffffffffffffffffffffffffffffffffffffffff908116835260208201359061312682612c0d565b1660208301527fffffffff0000000000000000000000000000000000000000000000000000000061315960408301612dbd565b16604083015260608181013590830152608090810135910152565b60a0810161056c82846130f2565b60008251613194818460208701612e08565b9190910192915050565b82815260c0810161272360208301846130f2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600181811c908216806131f557607f821691505b602082108103612cfc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b8281526040602082015260006132476040830184612e2c565b949350505050565b60006020828403121561326157600080fd5b505191905056fea2646970667358221220b1ca1e33580bf8fa9028f5451f5caaaa05116d8c26193b7169108ad944e789e364736f6c634300081700338b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f000000000000000000000000000000000000000000000000000000000000008036372b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000407c26c54fa3f1cfed3e4d61de93b9beabfbdaaf00000000000000000000000000000000000000000000000000000000000000030000000000000000000000003c80f5c353026790ffe9064079898df356cbf688000000000000000000000000ebf37f8cb2c2e58a8779146efbb83a6e76faa038000000000000000000000000779932e8d4fe3e5d211434cb67f372592551a586