320 txs
383 calls
constructor
constructor(address admin)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
RELAYER_EOA_ROLE
viewfunction RELAYER_EOA_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
claimAndKeep
nonpayablefunction claimAndKeep(tuple[] preCalls, address dp, tuple intent, tuple[] claimCalls, tuple[] postCalls, bytes32 swapAndTipHash)
fastFinish
nonpayablefunction fastFinish(tuple[] preCalls, address dp, tuple intent, tuple tokenIn, tuple[] calls, tuple[] postCalls, bytes32 swapAndTipHash)
grantRelayerEOARole
nonpayablefunction grantRelayerEOARole(address relayer)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
startIntent
payablefunction startIntent(tuple[] preCalls, address dp, tuple intent, address[] paymentTokens, tuple[] startCalls, bytes bridgeExtraData, tuple[] postCalls, bytes32 swapAndTipHash) payable
swapAndTip
payablefunction swapAndTip(tuple p) payable
uaClaimIntent
nonpayablefunction uaClaimIntent(tuple[] preCalls, address manager, tuple route, tuple[] calls, tuple bridgeTokenOut, bytes32 relaySalt, uint256 sourceChainId, tuple[] postCalls, bytes32 swapAndTipHash)
uaFastFinish
payablefunction uaFastFinish(tuple[] preCalls, address manager, tuple route, tuple tokenIn, tuple bridgeTokenOut, bytes32 relaySalt, tuple[] calls, uint256 sourceChainId, tuple[] postCalls, bytes32 swapAndTipHash) payable
uaSameChainFinish
payablefunction uaSameChainFinish(tuple[] preCalls, address manager, tuple route, address paymentToken, uint256 toAmount, tuple[] calls, tuple[] postCalls, bytes32 swapAndTipHash) payable
uaStartIntent
payablefunction uaStartIntent(tuple[] preCalls, address manager, tuple route, address paymentToken, tuple bridgeTokenOut, bytes32 relaySalt, tuple[] startCalls, bytes bridgeExtraData, tuple[] postCalls, bytes32 swapAndTipHash) payable
withdrawAmount
nonpayablefunction withdrawAmount(address token, uint256 amount)
withdrawBalance
nonpayablefunction withdrawBalance(address token) returns (uint256)
events
OverPaymentRefunded
event OverPaymentRefunded(address indexed refundAddress, address indexed token, uint256 amount)
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)
SwapAndTip
event SwapAndTip(address indexed caller, address indexed requiredTokenIn, address indexed requiredTokenOut, uint256 suppliedAmountIn, uint256 swapAmountOut, uint256 maxPreTip, uint256 maxPostTip, uint256 preTip, uint256 postTip)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60803461007657601f6134ea38819003918201601f19168301916001600160401b0383118484101761007b5780849260209460405283398101031261007657516001600160a01b0381168103610076578061005c61006292610091565b5061010d565b50600180556040516132e090816101ca8239f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811660009081526000805160206134ca833981519152602052604090205460ff16610107576001600160a01b031660008181526000805160206134ca83398151915260205260408120805460ff191660011790553391906000805160206134aa8339815191528180a4600190565b50600090565b6001600160a01b03811660009081527f20eb0dd28e4fa8d39893da6efac9845649636c00412910328fc6b615280454ba602052604090205460ff16610107576001600160a01b031660008181527f20eb0dd28e4fa8d39893da6efac9845649636c00412910328fc6b615280454ba60205260408120805460ff191660011790553391907f6880b0695dc1781908e2dac98c22ee7d9e1868075c008992d15588919f503af2906000805160206134aa8339815191529080a460019056fe608080604052600436101561001d575b50361561001b57600080fd5b005b600090813560e01c90816301ffc9a714612102575080630c726e4b146120ba578063248a9ca3146120665780632f2ff15d1461200757806336568abe14611f7e57806338606f0a14611f2557806339b0c6d314611d275780634343433c14611b2057806346e2da5f1461189f5780634ac8f44614610f14578063736fe56514610ec3578063756af45f14610e535780638ce5471d14610b8457806391d1485414610b0d578063a217fddf14610ad3578063c8f7140b1461071f578063d547741f146106b7578063e59f2e70146103ab5763fbde80530361000f57346103a8576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85760043567ffffffffffffffff81116103a45761014790369060040161222c565b906101506121e8565b60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601126103335760e43567ffffffffffffffff81116103a05761019a90369060040161222c565b909160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefc36011261039c576101843567ffffffffffffffff811161039857906101eb87949392369060040161222c565b9590966101f66129f5565b6101a435600155855b8181106103375750505073ffffffffffffffffffffffffffffffffffffffff1691823b1561033357610279928492836040518096819582947f37bf460c000000000000000000000000000000000000000000000000000000008452610266600485016124cf565b61014060a485015261014484019161266e565b61028560c48301612750565b610144356101048301526101643561012483015203925af180156103285761030f575b505b8181106102b957836001805580f35b8061030985806102cc60019587896122e1565b60206102d78261232a565b6102e4604084018461234b565b9290836040519485928337810186815203930135905af161030361240c565b506126eb565b016102aa565b816103199161239c565b6103245782386102a8565b8280fd5b6040513d84823e3d90fd5b8380fd5b61038b87849596979861034e8486600197986122e1565b60206103598261232a565b610366604084018461234b565b9290836040519485928337810186815203930135905af161038561240c565b5061246a565b01908895949392916101ff565b8680fd5b8580fd5b8480fd5b5080fd5b80fd5b506101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85760043567ffffffffffffffff81116103a4576103f790369060040161222c565b906104006121e8565b6044359067ffffffffffffffff82116103a0576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83360301126103a05760643567ffffffffffffffff811161039c5761046090369060040161222c565b919060843567ffffffffffffffff81116106b35761048290369060040161222c565b60a49291923567ffffffffffffffff81116106af576104a5903690600401612280565b93909460c43567ffffffffffffffff81116106ab576104c890369060040161222c565b99909a6104d36129f5565b60e4356001558c5b8d828210610692575050505073ffffffffffffffffffffffffffffffffffffffff1695863b1561068e57908a97969594939291602061054e604051997f775ece72000000000000000000000000000000000000000000000000000000008b52608060048c015260848b01906004016127ab565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8a82030160248b0152828152019390895b818110610649575050506105fb87958997956105cb868a968a98967ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8a80990301604489015261266e565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc85840301606486015261256e565b03925af1801561032857610634575b505b81811061061b57836001805580f35b8061062e85806102cc60019587896122e1565b0161060c565b8161063e9161239c565b61032457823861060a565b9195969798995091929360208060019273ffffffffffffffffffffffffffffffffffffffff6106778a61220b565b1681520196019101918c9998979695949392610580565b8a80fd5b906106a58260019361034e8487896122e1565b016104db565b8b80fd5b8980fd5b8780fd5b50346103a85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85761071b6004356106f56121e8565b9061071661071182600052600060205260016040600020015490565b612a80565b612cd8565b5080f35b50346103a8576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85760043567ffffffffffffffff81116103a45761077090369060040161222c565b6107786121e8565b916044359067ffffffffffffffff82116103a0576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83360301126103a05760407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126103a05760a43567ffffffffffffffff811161039c5761080390369060040161222c565b60c49391933567ffffffffffffffff81116106b35761082690369060040161222c565b9390956108316129f5565b60e435600155885b818110610aba5750505061087073ffffffffffffffffffffffffffffffffffffffff61086361292a565b9716968760843591612f22565b604093845190610880868361239c565b6001825260208201927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087013685376108b761292a565b835115610a8d5773ffffffffffffffffffffffffffffffffffffffff168452883b156106af576109558a959493926020926109258a51977f0bbc44c3000000000000000000000000000000000000000000000000000000008952606060048a015260648901906004016127ab565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc88840301602489015261266e565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8584030160448601525191828152019190845b818110610a5e57505050818084920381838a5af18015610a5457610a3f575b505b8181106109f15785856109bc61292a565b9073ffffffffffffffffffffffffffffffffffffffff82166109e1575b826001805580f35b6109ea91613123565b81806109d9565b80610a398780610a04600195878a6122e1565b6020610a0f8261232a565b610a1b8a84018461234b565b9290838c519485928337810186815203930135905af161030361240c565b016109ab565b81610a499161239c565b6103a05784386109a9565b84513d84823e3d90fd5b825173ffffffffffffffffffffffffffffffffffffffff1684528a95506020938401939092019160010161098a565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b80610acd8b8061034e60019587896122e1565b01610839565b50346103a857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a857602090604051908152f35b50346103a85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85773ffffffffffffffffffffffffffffffffffffffff6040610b5c6121e8565b92600435815280602052209116600052602052602060ff604060002054166040519015158152f35b506102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85760043567ffffffffffffffff81116103a457610bd090369060040161222c565b610bd86121e8565b9160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601126103335760407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126103335760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedc360112610333576101843567ffffffffffffffff81116103a057610c7890369060040161222c565b906101c43567ffffffffffffffff81116103985790610c9d879392369060040161222c565b949095610ca86129f5565b6101e435600155845b818110610e3157505050610ce973ffffffffffffffffffffffffffffffffffffffff610cdb612907565b971696876101043591612f22565b610cf1612907565b90863b1561033357610d5873ffffffffffffffffffffffffffffffffffffffff91604051947f109879da000000000000000000000000000000000000000000000000000000008652610d45600487016124cf565b61016060a487015261016486019161266e565b911660c4830152610124359073ffffffffffffffffffffffffffffffffffffffff821680920361033357828091859360e483015261014435610104830152610164356101248301526101a435610144830152038183895af1801561032857610e1c575b505b818110610e0357505050610dcf612907565b9073ffffffffffffffffffffffffffffffffffffffff8216610df357826001805580f35b610dfc91613123565b38806109d9565b80610e1686806102cc60019587896122e1565b01610dbd565b81610e269161239c565b610333578338610dbb565b610e47868495969761034e8486600197986122e1565b01908894939291610cb1565b50346103a85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a8576020610e8d6121c0565b610e95612989565b610e9f3082612dac565b908180610eb1575b5050604051908152f35b610ebc913390612f22565b8281610ea7565b50346103a85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a857610f11610efe6121c0565b610f06612989565b602435903390612f22565b80f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85760043567ffffffffffffffff81116103a457806004016101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83360301126103245760405190602082019260208452610f9c604084018361277f565b6044810192610fae608082018561277f565b6084820135948560c083015260a4830135908160e084015260c484019261104281610fee610fdc878a61263c565b610100808401526101408301906125ad565b73ffffffffffffffffffffffffffffffffffffffff61100f60e48a0161220b565b16610120830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261239c565b51902060015403611841576001805561106461105d8661232a565b3090612dac565b9573ffffffffffffffffffffffffffffffffffffffff6110838661232a565b166114d957879473ffffffffffffffffffffffffffffffffffffffff6110a88261232a565b1661147b576024850135803410611445575b60206110c686846122ae565b0135116113e757883496945b6110dc8884612e67565b73ffffffffffffffffffffffffffffffffffffffff6111036110fe83866122ae565b61232a565b1661132b575b50506111276111203061111b8a61232a565b612dac565b988961294d565b976111318261232a565b73ffffffffffffffffffffffffffffffffffffffff806111508b61232a565b169116146112ed575b60648a96013590818a106111eb575b5073ffffffffffffffffffffffffffffffffffffffff61119a81936110fe6111a1946111938d61232a565b3390612f22565b169761232a565b1696604051958652602086015260408501526060840152608083015260a08201527fca859a0385f905c81661afe8296a437676d201bf45432e4684a450bbfcd428d460c03392a480f35b95506111f7898261294d565b9584871161128f57811161120b5738611168565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4450523a2062616c616e6365206c657373207468616e2072657175697265642060448201527f6f757470757400000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4450523a2065786365737369766520706f7374207469700000000000000000006044820152fd5b978481018091116112fe5797611159565b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8061133a6110fe8493866122ae565b90611360611356602061134d84896122ae565b013592876122ae565b604081019061234b565b9190826040519384928337810185815203925af161137c61240c565b5015611389578838611109565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4450523a20696e6e65722073776170206661696c6564000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4450523a2077726f6e6720696e6e657220737761702076616c756500000000006044820152fd5b9550611451348761294d565b9561145e83881115613033565b6114768161146f3061111b8661232a565b1015613098565b6110ba565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4450523a206e6f74206e617469766520746f6b656e00000000000000000000006044820152fd5b879473ffffffffffffffffffffffffffffffffffffffff6114f98261232a565b16156117e35761151261150b8261232a565b3390612dac565b61151b8261232a565b9073ffffffffffffffffffffffffffffffffffffffff82161561175f5761158d8b92604051907f23b872dd0000000000000000000000000000000000000000000000000000000060208301523360248301523060448301528360648301526064825261158860848361239c565b61321f565b6024870135808210611730575b73ffffffffffffffffffffffffffffffffffffffff6115bc6110fe89876122ae565b166115ca575b5096946110d2565b6115d38461232a565b906115e16110fe89876122ae565b916020856040519361167085611644858201937f095ea7b300000000000000000000000000000000000000000000000000000000855289602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810187528661239c565b84519082855af185513d826116fe575b50501561168f575b50506115c2565b6115886116f69373ffffffffffffffffffffffffffffffffffffffff604051917f095ea7b3000000000000000000000000000000000000000000000000000000006020840152166024820152866044820152604481526116f060648261239c565b8261321f565b388080611688565b909150611728575073ffffffffffffffffffffffffffffffffffffffff81163b15155b3880611680565b600114611721565b975061173c818961294d565b97611749858a1115613033565b61175a8161146f3061111b8861232a565b61159a565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f546f6b656e5574696c733a20455448207472616e7366657246726f6d206d757360448201527f742062652063616c6c65720000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4450523a206e6f7420455243323020746f6b656e0000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4450523a2077726f6e67206861736800000000000000000000000000000000006044820152fd5b506101e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85760043567ffffffffffffffff81116103a4576118eb90369060040161222c565b6118f69291926121e8565b9260a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601126103245761192961225d565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefc360112610333576101643567ffffffffffffffff81116103a05761197490369060040161222c565b6101849291923567ffffffffffffffff811161039857611998903690600401612280565b6101a43567ffffffffffffffff8111611b1c576119b990369060040161222c565b9690976119c46129f5565b6101c435600155895b818110611b035750505073ffffffffffffffffffffffffffffffffffffffff8899989697981691823b15610398578694611ab5869273ffffffffffffffffffffffffffffffffffffffff94611a846040519a8b998a9889977f3e0d8f19000000000000000000000000000000000000000000000000000000008952611a5460048a016124cf565b1660a4880152611a6660c48801612750565b6101443561010488015261016061012488015261016487019161266e565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8584030161014486015261256e565b03925af1801561032857611aee575b505b818110611ad557836001805580f35b80611ae885806102cc60019587896122e1565b01611ac6565b81611af89161239c565b610324578238611ac4565b80611b168c8061034e60019587896122e1565b016119cd565b8880fd5b50346103a85760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85760043567ffffffffffffffff81116103a457611b7090369060040161222c565b90611b796121e8565b60443567ffffffffffffffff81116103a0576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103a05760643567ffffffffffffffff811161039c57611bd890369060040161222c565b909260843567ffffffffffffffff81116106b35790611bff8895949392369060040161222c565b969097611c0a6129f5565b60a435600155865b818110611d015750505073ffffffffffffffffffffffffffffffffffffffff16803b156103a057611c83858094611cb3604051978896879586947f13f167a50000000000000000000000000000000000000000000000000000000086526040600487015260448601906004016127ab565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc85840301602486015261266e565b03925af1801561032857611cec575b505b818110611cd357836001805580f35b80611ce685806102cc60019587896122e1565b01611cc4565b81611cf69161239c565b610324578238611cc2565b611d198884959697989961034e8486600197986122e1565b019089969594939291611c12565b506101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85760043567ffffffffffffffff81116103a457611d7390369060040161222c565b90611d7c6121e8565b60a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc36011261033357611dae61225d565b6101243567ffffffffffffffff811161039c57611dcf90369060040161222c565b9190926101443567ffffffffffffffff81116106b35790611df788949392369060040161222c565b969097611e026129f5565b61016435600155855b818110611f015750505073ffffffffffffffffffffffffffffffffffffffff1690813b15610333578373ffffffffffffffffffffffffffffffffffffffff91611ea8604051978896879586947fd133902d000000000000000000000000000000000000000000000000000000008652611e86600487016124cf565b1660a48501526101043560c485015261010060e485015261010484019161266e565b03925af18015611ef657611ee2575b50825b818110611ec957836001805580f35b80611edc85806102cc60019587896122e1565b01611eba565b83611eef9194929461239c565b9138611eb7565b6040513d86823e3d90fd5b611f1887849596979861034e8486600197986122e1565b0190899594939291611e0b565b50346103a857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85760206040517f6880b0695dc1781908e2dac98c22ee7d9e1868075c008992d15588919f503af28152f35b50346103a85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a857611fb66121e8565b3373ffffffffffffffffffffffffffffffffffffffff821603611fdf5761071b90600435612cd8565b6004827f6697b232000000000000000000000000000000000000000000000000000000008152fd5b50346103a85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85761071b6004356120456121e8565b9061206161071182600052600060205260016040600020015490565b612bf9565b50346103a85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85760206120b2600435600052600060205260016040600020015490565b604051908152f35b50346103a85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a85761071b6120f56121c0565b6120fd612989565b612aed565b9050346103a45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a4576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361032457602092507f7965db0b000000000000000000000000000000000000000000000000000000008114908115612196575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861218f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036121e357565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036121e357565b359073ffffffffffffffffffffffffffffffffffffffff821682036121e357565b9181601f840112156121e35782359167ffffffffffffffff83116121e3576020808501948460051b0101116121e357565b60e4359073ffffffffffffffffffffffffffffffffffffffff821682036121e357565b9181601f840112156121e35782359167ffffffffffffffff83116121e357602083818601950101116121e357565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603018212156121e3570190565b908210156122fb576122f89160051b8101906122ae565b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff811681036121e35790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156121e3570180359067ffffffffffffffff82116121e3576020019181360383136121e357565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176123dd57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3d15612465573d9067ffffffffffffffff82116123dd576040519161245960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461239c565b82523d6000602084013e565b606090565b1561247157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4450523a2070726543616c6c206661696c6564000000000000000000000000006044820152fd5b604435815260643573ffffffffffffffffffffffffffffffffffffffff81168091036121e357602082015260843573ffffffffffffffffffffffffffffffffffffffff81168091036121e357604082015260a43573ffffffffffffffffffffffffffffffffffffffff81168091036121e357606082015260c4359073ffffffffffffffffffffffffffffffffffffffff82168092036121e35760800152565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff6125cb8261220b565b1682526020810135602083015260408101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156121e357016020813591019067ffffffffffffffff81116121e35780360382136121e3576060838160406122f8960152019161256e565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1823603018112156121e3570190565b90602083828152019260208260051b82010193836000925b8484106126965750505050505090565b9091929394956020806126db837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030188526126d68b8861263c565b6125ad565b9801940194019294939190612686565b156126f257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4450523a20706f737443616c6c206661696c65640000000000000000000000006044820152fd5b6101043573ffffffffffffffffffffffffffffffffffffffff81168091036121e3578152602061012435910152565b6020809173ffffffffffffffffffffffffffffffffffffffff6127a18261220b565b1684520135910152565b9061014081018235825260208301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112156121e35783016020813591019167ffffffffffffffff82116121e3578160061b360383136121e357610140602085015281905261016083019060005b8181106128e7575050612856915061283c604084016040860161277f565b612849608085018561263c565b83820360808501526125ad565b9173ffffffffffffffffffffffffffffffffffffffff61287860a0830161220b565b1660a083015260c081013573ffffffffffffffffffffffffffffffffffffffff81168091036121e35761012091829160c085015273ffffffffffffffffffffffffffffffffffffffff6128cd60e0830161220b565b1660e0850152610100810135610100850152013591015290565b9091604080826128f96001948861277f565b01940191019291909261281e565b60e43573ffffffffffffffffffffffffffffffffffffffff811681036121e35790565b60643573ffffffffffffffffffffffffffffffffffffffff811681036121e35790565b9190820391821161295a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16156129c257565b7fe2517d3f0000000000000000000000000000000000000000000000000000000060005233600452600060245260446000fd5b3360009081527f20eb0dd28e4fa8d39893da6efac9845649636c00412910328fc6b615280454ba602052604090205460ff1615612a2e57565b7fe2517d3f00000000000000000000000000000000000000000000000000000000600052336004527f6880b0695dc1781908e2dac98c22ee7d9e1868075c008992d15588919f503af260245260446000fd5b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff331660005260205260ff6040600020541615612abc5750565b7fe2517d3f000000000000000000000000000000000000000000000000000000006000523360045260245260446000fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081527f20eb0dd28e4fa8d39893da6efac9845649636c00412910328fc6b615280454ba602052604090205460ff16612bf35773ffffffffffffffffffffffffffffffffffffffff1660008181527f20eb0dd28e4fa8d39893da6efac9845649636c00412910328fc6b615280454ba6020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790553391907f6880b0695dc1781908e2dac98c22ee7d9e1868075c008992d15588919f503af2907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50600090565b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615600014612cd157806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617905573ffffffffffffffffffffffffffffffffffffffff339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416600014612cd157806000526000602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416905573ffffffffffffffffffffffffffffffffffffffff339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b73ffffffffffffffffffffffffffffffffffffffff1680612dcc57503190565b9073ffffffffffffffffffffffffffffffffffffffff602460209260405194859384927f70a082310000000000000000000000000000000000000000000000000000000084521660048301525afa908115612e5b57600091612e2c575090565b90506020813d602011612e53575b81612e476020938361239c565b810103126121e3575190565b3d9150612e3a565b6040513d6000823e3d90fd5b9060e082019073ffffffffffffffffffffffffffffffffffffffff612e8b8361232a565b1615612f1d57602083013580821115612f175773ffffffffffffffffffffffffffffffffffffffff80612f0a612f04612ee76020957f4cfc6e7eef9170f5ac10331741bbedde754d86e10bfb40c9d81f79646632a2e09761294d565b966110fe88612ef58b61232a565b612efe8461232a565b90612f22565b9661232a565b16946040519485521692a3565b50505050565b505050565b9073ffffffffffffffffffffffffffffffffffffffff821615612fa4576040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff919091166024820152604480820193909352918252612fa2919061158860648361239c565b565b6000809381935073ffffffffffffffffffffffffffffffffffffffff8293165af1612fcd61240c565b5015612fd557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f546f6b656e5574696c733a20455448207472616e73666572206661696c6564006044820152fd5b1561303a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4450523a206578636573736976652070726520746970000000000000000000006044820152fd5b1561309f57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4450523a2062616c616e6365206c657373207468616e2072657175697265642060448201527f696e7075740000000000000000000000000000000000000000000000000000006064820152fd5b604051906020600073ffffffffffffffffffffffffffffffffffffffff828501957f095ea7b300000000000000000000000000000000000000000000000000000000875216948560248601528160448601526044855261318460648661239c565b84519082855af16000513d826131ed575b5050156131a157505050565b611588612fa293604051907f095ea7b3000000000000000000000000000000000000000000000000000000006020830152602482015260006044820152604481526116f060648261239c565b909150613217575073ffffffffffffffffffffffffffffffffffffffff81163b15155b3880613195565b600114613210565b906000602091828151910182855af115612e5b576000513d6132a1575073ffffffffffffffffffffffffffffffffffffffff81163b155b61325d5750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b6001141561325656fea2646970667358221220616ae9c3b77c96540b914843e32849b187c177df20bfbdea974366d4f23b9d6164736f6c634300081a00332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0dad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb50000000000000000000000002f321372e8a9755cd2ca6114eb8da32a14f8100b