@uniswap/universal-router
Version:
Smart contracts for Universal Router
449 lines • 68 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "UniversalRouter",
"sourceName": "contracts/UniversalRouter.sol",
"abi": [
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "permit2",
"type": "address"
},
{
"internalType": "address",
"name": "weth9",
"type": "address"
},
{
"internalType": "address",
"name": "v2Factory",
"type": "address"
},
{
"internalType": "address",
"name": "v3Factory",
"type": "address"
},
{
"internalType": "bytes32",
"name": "pairInitCodeHash",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "poolInitCodeHash",
"type": "bytes32"
},
{
"internalType": "address",
"name": "v4PoolManager",
"type": "address"
},
{
"internalType": "address",
"name": "v3NFTPositionManager",
"type": "address"
},
{
"internalType": "address",
"name": "v4PositionManager",
"type": "address"
}
],
"internalType": "struct RouterParameters",
"name": "params",
"type": "tuple"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "BalanceTooLow",
"type": "error"
},
{
"inputs": [],
"name": "ContractLocked",
"type": "error"
},
{
"inputs": [
{
"internalType": "Currency",
"name": "currency",
"type": "address"
}
],
"name": "DeltaNotNegative",
"type": "error"
},
{
"inputs": [
{
"internalType": "Currency",
"name": "currency",
"type": "address"
}
],
"name": "DeltaNotPositive",
"type": "error"
},
{
"inputs": [],
"name": "ETHNotAccepted",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "commandIndex",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "message",
"type": "bytes"
}
],
"name": "ExecutionFailed",
"type": "error"
},
{
"inputs": [],
"name": "FromAddressIsNotOwner",
"type": "error"
},
{
"inputs": [],
"name": "InputLengthMismatch",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientBalance",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientETH",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientToken",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "action",
"type": "bytes4"
}
],
"name": "InvalidAction",
"type": "error"
},
{
"inputs": [],
"name": "InvalidBips",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "commandType",
"type": "uint256"
}
],
"name": "InvalidCommandType",
"type": "error"
},
{
"inputs": [],
"name": "InvalidEthSender",
"type": "error"
},
{
"inputs": [],
"name": "InvalidPath",
"type": "error"
},
{
"inputs": [],
"name": "InvalidReserves",
"type": "error"
},
{
"inputs": [],
"name": "LengthMismatch",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "NotAuthorizedForToken",
"type": "error"
},
{
"inputs": [],
"name": "NotPoolManager",
"type": "error"
},
{
"inputs": [],
"name": "OnlyMintAllowed",
"type": "error"
},
{
"inputs": [],
"name": "SliceOutOfBounds",
"type": "error"
},
{
"inputs": [],
"name": "TransactionDeadlinePassed",
"type": "error"
},
{
"inputs": [],
"name": "UnsafeCast",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "action",
"type": "uint256"
}
],
"name": "UnsupportedAction",
"type": "error"
},
{
"inputs": [],
"name": "V2InvalidPath",
"type": "error"
},
{
"inputs": [],
"name": "V2TooLittleReceived",
"type": "error"
},
{
"inputs": [],
"name": "V2TooMuchRequested",
"type": "error"
},
{
"inputs": [],
"name": "V3InvalidAmountOut",
"type": "error"
},
{
"inputs": [],
"name": "V3InvalidCaller",
"type": "error"
},
{
"inputs": [],
"name": "V3InvalidSwap",
"type": "error"
},
{
"inputs": [],
"name": "V3TooLittleReceived",
"type": "error"
},
{
"inputs": [],
"name": "V3TooMuchRequested",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "minAmountOutReceived",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountReceived",
"type": "uint256"
}
],
"name": "V4TooLittleReceived",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "maxAmountInRequested",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amountRequested",
"type": "uint256"
}
],
"name": "V4TooMuchRequested",
"type": "error"
},
{
"inputs": [],
"name": "V3_POSITION_MANAGER",
"outputs": [
{
"internalType": "contract INonfungiblePositionManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "V4_POSITION_MANAGER",
"outputs": [
{
"internalType": "contract IPositionManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "commands",
"type": "bytes"
},
{
"internalType": "bytes[]",
"name": "inputs",
"type": "bytes[]"
}
],
"name": "execute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "commands",
"type": "bytes"
},
{
"internalType": "bytes[]",
"name": "inputs",
"type": "bytes[]"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "execute",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "msgSender",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "poolManager",
"outputs": [
{
"internalType": "contract IPoolManager",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "amount0Delta",
"type": "int256"
},
{
"internalType": "int256",
"name": "amount1Delta",
"type": "int256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "uniswapV3SwapCallback",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "unlockCallback",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x6101a0604052346102d657604051601f613ada38819003918201601f19168301916001600160401b038311848410176102c257808492610120946040528339810103126102d6576040519061012082016001600160401b038111838210176102c25760405261006d816102f9565b825261007b602082016102f9565b6020830190815261008e604083016102f9565b604084019081526100a1606084016102f9565b93606081019485526080840151946080820195865260a08501519560a083019687526100cf60c087016102f9565b9660c084019788526100f66101006100e960e08a016102f9565b988960e0880152016102f9565b97886101008601526101066102da565b6001600160a01b03988916815298881660208a0190815290519451965190989796871696908116959416936101396102da565b968752602087019586525192519151905160405190936001600160a01b0393841693169060808101906001600160401b038211818310176102c257604091825282815260208101948552808201938452606001948552608091909152905160a05290516001600160a01b0390811660c052915160e0526101009290925291518216610120529151811661014052915182166101605291511661018052516137cc908161030e8239608051818181610f9e01528181611156015261287f015260a051818181610f7d01528181611178015261285e015260c051816121d1015260e051816121af0152610100518181816064015281816102fe015281816103d50152818161191801528181611d0e015281816130b001528181613109015281816131c8015281816132fb0152613606015261012051818181601b015281816114630152611582015261014051818181610caf0152818161172001526124f80152610160518181816104a801528181611a0d0152611ab00152610180518181816103740152611dab0152f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60408051919082016001600160401b038111838210176102c257604052565b51906001600160a01b03821682036102d65756fe60c06040526004361015610093575b3615610018575f80fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610060575b61005157005b631c5deabb60e11b5f5260045ffd5b50337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141561004b565b5f3560e01c806324856bc3146105a05780633593564c146104d7578063817122dc1461049357806391dd7346146103a3578063d0c9f6cb1461035f578063d737d0c71461032d578063dc4c90d3146102e95763fa461e330361000e573461025a57606036600319011261025a576024356004356044356001600160401b03811161025a57610125903690600401610627565b5f8313918215806102df575b6102d05781810160408282031261025a5781356001600160401b03811161025a57820181601f8201121561025a57803561016a81611f97565b926101786040519485611f74565b8184526020828401011161025a575f928160208094018483013701015260208101356001600160a01b038116929083900361025a576101b6916120c3565b90601790602b83106102c1578035968760601c956101e462ffffff8585013560601c9a60481c168a8961214c565b336001600160a01b03909116036102b257156102a857508685105b156102155750505061021393503391612229565b005b91935091939482602b0180602b1161029457841061025e575082821161025a57918190039101600160ff1b84101561025a57610213936102553391611fb2565b61227b565b5f80fd5b925050505f805160206137a08339815191529291925c821161028557610213923391612229565b6339cedf2960e11b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b95508487106101ff565b6332b13d9160e01b5f5260045ffd5b633b99b53d60e01b5f5260045ffd5b63316cf0eb60e01b5f5260045ffd5b505f851315610131565b3461025a575f36600319011261025a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461025a575f36600319011261025a576040516001600160a01b035f805160206137808339815191525c168152602090f35b3461025a575f36600319011261025a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461025a57602036600319011261025a576004356001600160401b03811161025a576103d3903690600401610627565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036104845761040c91612582565b90818303610475575f5b8381106104495761044560405161042e602082611f74565b5f8152604051918291602083526020830190610684565b0390f35b8061046f61045a60019387896106a8565b3560f81c6104698387876106fa565b91612a80565b01610416565b63aaad13f760e01b5f5260045ffd5b63570c108560e11b5f5260045ffd5b3461025a575f36600319011261025a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b606036600319011261025a576004356001600160401b03811161025a57610502903690600401610627565b6024356001600160401b03811161025a57610521903690600401610654565b91604435421161059157333014610588575f805160206137808339815191525c6001600160a01b03166105795761056793335f805160206137808339815191525d610715565b5f5f805160206137808339815191525d005b6337affdbf60e11b5f5260045ffd5b61021393610715565b632dfb7c8b60e11b5f5260045ffd5b604036600319011261025a576004356001600160401b03811161025a576105cb903690600401610627565b6024356001600160401b03811161025a576105ea903690600401610654565b91333014610588575f805160206137808339815191525c6001600160a01b03166105795761056793335f805160206137808339815191525d610715565b9181601f8401121561025a578235916001600160401b03831161025a576020838186019501011161025a57565b9181601f8401121561025a578235916001600160401b03831161025a576020808501948460051b01011161025a57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b908210156106b4570190565b634e487b7160e01b5f52603260045260245ffd5b903590601e198136030182121561025a57018035906001600160401b03821161025a5760200191813603831361025a57565b908210156106b4576107119160051b8101906106c8565b9091565b909392848103611f3657919293905f925b828410610734575050505050565b61074484848495969798946106a8565b35936107518683896106fa565b919093606098603f8860f81c1696600197602181105f14611e305760108110156118d2576008811015610efc5780610a8a5750610793602088013595886120eb565b909690608089013515610a83575f805160206137808339815191525c975b6107bb8a356123ef565b9891806080528160a05288600160ff1b14610a0e575b50505b604296602b9190600160ff1b81101561025a576080518911610a075730915b608051841161025a57610862936040925f60a05135956108808760601c97610839601760a051013560601c998a81109a62ffffff60018060a01b039460481c169161214c565b16948884146109ec576401000276a4965b88519a8b928a6020850152606084019060a051611fc2565b6001600160a01b03919091168983015203601f1981018a5289611f74565b8551630251596160e31b81526001600160a01b039182166004820152602481018890526044810193909352909316606482015260a06084820152948592839182906108cf9060a4830190610684565b03925af19081156109e1575f905f926109a5575b6108f393501561099e5750611fb2565b608051909611610920573060805160171161025a57601760a051016017608051039060a0526080526107d4565b969198939a9460409198939a96509101351161098f575b159081610980575b5061095257506001019293949190610726565b9061097c604051928392632c4029e960e01b84526004840152604060248401526044830190610684565b0390fd5b600160ff1b161590505f61093f565b631ce9aa4b60e11b5f5260045ffd5b9050611fb2565b9150506040823d82116109d9575b816109c060409383611f74565b8101031261025a578160206108f39351910151916108e3565b3d91506109b3565b6040513d5f823e3d90fd5b73fffd8963efd1fc6a506488495d951d5263988d259661084a565b89916107f3565b601491929850106102c1576020602491604051928380926370a0823160e01b82523060048301523560601c5afa9081156109e1575f91610a52575b50955f806107d1565b90506020813d8211610a7b575b81610a6c60209383611f74565b8101031261025a57515f610a49565b3d9150610a5f565b30976107b1565b6001819c969299949b9798939a959c145f14610b55575090610ab1602082013592826120eb565b608083013515610b4e575f805160206137808339815191525c915b6040610ad885356123ef565b9401355f805160206137a08339815191525d600160ff1b85101561025a57610b039361025586611fb2565b90919015610b3f5750610b1590611fb2565b03610b30575f5f805160206137a08339815191525d5b610937565b636a70124760e11b5f5260045ffd5b610b499150611fb2565b610b15565b3091610acc565b60028103610b8c5750610b2b91604081013591505f805160206137808339815191525c610b8560208301356123ef565b91356124f4565b9394919390929060038103610d13575050508135820163ffffffff60208401351683019163ffffffff83351693602080850194860101910110610d0657604051632a2d80d160e01b602082019081526001600160a01b035f805160206137808339815191525c1660248301526060604483015293909260e4840192803536829003601e190181121561025a57810160208101949035906001600160401b03821161025a578160071b3603861361025a5781906060608489015252610104860194905f905b808210610ce85750505093610c9c5f96948294610caa9460408a9960018060a01b03610c7e60208301612011565b1660a4880152013560c4860152848303602319016064860152611fc2565b03601f198101835282611f74565b5190827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190610ce2611fe2565b91610937565b90919560808082610cfb6001948b612065565b019701920190610c50565b633b99b53d5f526004601cfd5b9194939092509060048103610e115750610d3060208201356123ef565b906001600160a01b036040820135811691351680610d7d575047908110610d6e5780610d5e575b5050610937565b610d6791612639565b5f80610d57565b631a84bc4160e21b5f5260045ffd5b91604051916370a0823160e01b8352306004840152602083602481875afa9283156109e1575f93610dde575b508210610dcf5781610dbe575b505050610937565b610dc792612a11565b5f8080610db6565b630ceb95c760e31b5f5260045ffd5b9092506020813d8211610e09575b81610df960209383611f74565b8101031261025a5751915f610da9565b3d9150610dec565b60058103610e385750806040610b2b92013590610e3160208201356123ef565b9035612459565b60068103610eea5750604081013590610e5460208201356123ef565b90356001600160a01b031680610e785750610e72610b2b92476129e8565b90612639565b906040516370a0823160e01b8152306004820152602081602481865afa9081156109e1575f91610eb7575b50610b2b93610eb1916129e8565b91612a11565b90506020813d8211610ee2575b81610ed160209383611f74565b8101031261025a5751610b2b610ea3565b3d9150610ec4565b636bb50f4f60e11b5f5260045260245ffd5b6008819c969299949b9798939a959c145f1461111b5750610f22602083013591836123b7565b90608084013515611114575f805160206137808339815191525c915b610f4885356123ef565b9282156106b457610f58826123db565b83600110156106b457610f7a610fc291610f74602086016123db565b90613025565b907f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061303c565b9485816110fa575b5050505f198201828111610294576001600160a01b0390610ff590610ff090858561243c565b6123db565b1693604051926370a0823160e01b845260018060a01b038516928360048601526020856024818a5afa9485156109e1575f956110bd575b509461103c9291602095966126cd565b6024604051809581936370a0823160e01b835260048301525afa9182156109e1575f92611089575b506040611074929301359261244c565b101561093757631093d5f360e31b5f5260045ffd5b91506020823d82116110b5575b816110a360209383611f74565b8101031261025a579051906040611064565b3d9150611096565b92919450946020833d82116110f2575b816110da60209383611f74565b8101031261025a57915191949193909161103c61102c565b3d91506110cd565b61110c92611107856123db565b612229565b5f8085610fca565b3091610f3e565b60098103611367575061112e90826123b7565b608083013515611360575f805160206137808339815191525c915b61115384356123ef565b917f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000955f9560028510611351576020820135975f198601868111610294579190825b6111f4575050506040013586116111e55782156106b457610b2b95856111e092611107856123db565b6126cd565b6345585e0b60e11b5f5260045ffd5b90919897505f1989019789891161029457611216610ff06112389a898961243c565b61122d611227610ff08d8b8b61243c565b82613025565b8185879d939d61303c565b604051630240bc6b60e21b815290916060826004816001600160a01b0387165afa9182156109e1575f905f9361131d575b506001600160701b039283169c9216916001600160a01b039182169116036113175799905b998015801561130f575b61130057826112a6916129b7565b916103e88302928084046103e81490151715610294576112c59161244c565b6103e58102908082046103e51490151715610294576112e3916129ca565b6001810180911161029457988015610294575f19019190826111b7565b633dce448b60e11b5f5260045ffd5b508115611298565b9061128e565b905061134191925060603d811161134a575b6113398183611f74565b810190612697565b5091905f611269565b503d61132f565b6320db826760e01b5f5260045ffd5b3091611149565b93949193909290600a81036114245750505063ffffffff60c08301351682019063ffffffff8235169083602080850194840101910110610d06576040516302b67b5760e41b602082019081526001600160a01b035f805160206137808339815191525c1660248301525f9485949193610caa928492610c9c929060a0906113f16044870182612065565b600180831b0361140360808301612011565b1660c4870152013560e4850152610100610104850152610124840191611fc2565b91949390929091600b8103611557575050611444602082013591356123ef565b9080600160ff1b8103611541575050475b80611461575050610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691823b1561025a57604051630d0e30db60e41b81525f8160048186885af180156109e157611531575b506001600160a01b0316903082036114cd575b50610d57565b60446020925f604051958694859363a9059cbb60e01b8552600485015260248401525af180156109e157611503575b80806114c7565b6115239060203d811161152a575b61151b8183611f74565b810190612424565b505f6114fc565b503d611511565b5f61153b91611f74565b5f6114b4565b47101561145557631a84bc4160e21b5f5260045ffd5b600c810361167657505061156b81356123ef565b6040516370a0823160e01b815230600482015290917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602083602481855afa9283156109e1575f93611642575b50602001358210610d6e57816115da57505050610937565b803b1561025a575f8091602460405180948193632e1a7d4d60e01b83528760048401525af180156109e157611632575b50306001600160a01b03831603611622575b80610db6565b61162b91612639565b5f8061161c565b5f61163c91611f74565b5f61160a565b9092506020813d821161166e575b8161165d60209383611f74565b8101031261025a57519160206115c2565b3d9150611650565b600d819c939c9b929597989b99949699145f1461181957508a358b01988935946116a86020808d019e8d03018761221c565b116102c1576001600160a01b035f805160206137808339815191525c169a935f5b86811015611709578c6001600160a01b036116ec600784901b8f016020016123db565b16036116fa576001016116c9565b63e700287760e01b5f5260045ffd5b50989593979694929b919a50985060018060a01b037f00000000000000000000000000000000000000000000000000000000000000001690813b1561025a57604051630d58b1db60e01b8152602060048201526024810184905292839160448301915f905b8082106117a35750505091815f81819503925af180156109e157611793575b50610937565b5f61179d91611f74565b5f61178d565b9193509160019060809081906001600160a01b036117c088612011565b168152838060a01b036117d560208901612011565b166020820152838060a01b036117ed60408901612011565b166040820152838060a01b0361180560608901612011565b16606082015201940192018593929161176e565b80929b93989550600e919a97969450145f14610eea57506040516370a0823160e01b81526001600160a01b038235811660048301529091906020908390602490829084860135165afa9182156109e1575f9261189e575b5060400135111580610b2b576040516351940b3960e11b602082015260048152909250610ce2602482611f74565b9091506020813d82116118ca575b816118b960209383611f74565b8101031261025a5751906040611870565b3d91506118ac565b6010819c969299949b9798939a959c145f146119c757506040516348c8949160e01b815260206004820152915f918391829161191391602484019190611fc2565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156109e1576119525750610937565b3d805f833e6119618183611f74565b81019060208183031261025a578051906001600160401b03821161025a570181601f8201121561025a57805161199681611f97565b926119a46040519485611f74565b8184526020828401011161025a575f928160208094018483015e0101525f61178d565b80929495506011919350145f14611a5257509080356001600160e01b03191663853d008560e01b8101611a405750815f92918392604051928392833781018381520390827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190610ce2611fe2565b63f801e52560e01b5f5260045260245ffd5b60128103611c5057505f805160206137808339815191525c9180356001600160e01b031916630624e65f60e11b81148015611c40575b8015611c30575b15611a4057506040516331a9108f60e11b81526004828101359082018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316949091602081602481895afa9081156109e1575f91611c12575b506001600160a01b039182169116818114918215611ba6575b8215611b4d575b505015611b3b575091815f809481946040519384928337810182815203925af190610ce2611fe2565b63bb25d4c560e01b5f5260045260245ffd5b60405163e985e9c560e01b8152600481019290925260248201529050602081604481885afa9081156109e1575f91611b88575b505f80611b12565b611ba0915060203d811161152a5761151b8183611f74565b5f611b80565b915060405163020604bf60e21b81528360048201526020816024818a5afa80156109e15783915f91611be4575b506001600160a01b03161491611b0b565b611c05915060203d8111611c0b575b611bfd8183611f74565b81019061261a565b5f611bd3565b503d611bf3565b611c2a915060203d8111611c0b57611bfd8183611f74565b5f611af2565b50630852cd8d60e31b8114611a8f565b5063fc6f786560e01b8114611a88565b60138103611d4157505060405163313b65df60e11b602082019081525f928392906001600160a01b03611c8282612011565b1660248301526001600160a01b03611c9c60208301612011565b16604483015262ffffff611cb260408301612025565b166064830152611cc460608201612035565b60020b60848301526001600160a01b03611ce060808301612011565b1660a483015260a001356001600160a01b031660c4808301919091528152611d0960e482611f74565b5190827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190610ce2611fe2565b60148103610eea575081356001600160e01b0319166322b9af7160e01b8101611a4057508060041161025a57611d87611d816003198301600485016120c3565b906120c3565b5f5b818110611dde575050505f9182914791816040519283928337810184815203917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190610ce2611fe2565b611de98183856106a8565b3560f81c8015908115611e25575b8115611e1a575b50611e0b57600101611d89565b635d1d0f9f60e01b5f5260045ffd5b60039150145f611dfe565b600181149150611df7565b9097939a506021819a9697929995939a145f14610eea575090611e5291612582565b611e7c6040959395519460208601966324856bc360e01b8852604060248801526064870191611fc2565b92602319858503016044860152818452602084019160208160051b86010194845f90601e19813603015b848310611edc5750505050505050509181611ecd5f9493859403601f198101835282611f74565b519082305af190610ce2611fe2565b9091929394959697601f1985820301885288358281121561025a578301602081019190356001600160401b03811161025a57803603831361025a57611f2660209283928b95611fc2565b9a01980196959493019190611ea6565b631fec674760e31b5f5260045ffd5b60a081019081106001600160401b03821117611f6057604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b03821190821017611f6057604052565b6001600160401b038111611f6057601f01601f191660200190565b600160ff1b8114610294575f0390565b908060209392818452848401375f828201840152601f01601f1916010190565b3d1561200c573d90611ff382611f97565b916120016040519384611f74565b82523d5f602084013e565b606090565b35906001600160a01b038216820361025a57565b359062ffffff8216820361025a57565b35908160020b820361025a57565b9081602091031261025a575190565b359065ffffffffffff8216820361025a57565b60609065ffffffffffff906120bd9083906001600160a01b0361208782612011565b1686526001600160a01b0361209e60208301612011565b166020870152836120b160408301612052565b16604087015201612052565b16910152565b909163ffffffff82351682019263ffffffff84351692602080860195850101910110610d0657565b909163ffffffff60608301351682019263ffffffff84351692602080860195850101910110610d0657565b6001600160f81b0319815260609190911b6001600160601b03191660018201526015810191909152603581019190915260550190565b916001600160a01b0382811690841611612214575b604080516001600160a01b0394851660208201908152949093169083015262ffffff16606080830191909152815261219a608082611f74565b51902060405190612204826121f660208201937f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000086612116565b03601f198101845283611f74565b905190206001600160a01b031690565b909190612161565b9190820180921161029457565b909291906001600160a01b0384163003612249576122479350612459565b565b91926001600160a01b03841161226c57612247936001600160a01b0316926124f4565b63c4bd89a960e01b5f5260045ffd5b9092602b81106102c157825f604094359561234e8760601c93612306601782013560601c996122bf878c1097889c62ffffff60018060a01b039460481c169161214c565b169686861461239c576401000276a49b5b6122e88b519485938d60208601526060850191611fc2565b6001600160a01b03919091168b83015203601f198101835282611f74565b8751998a9788968795630251596160e31b875260018060a01b031660048701526024860152604485015260018060a01b0316606484015260a0608484015260a4830190610684565b03925af180156109e1575f925f9161236557509192565b9250506040823d604011612394575b8161238160409383611f74565b8101031261025a57602082519201519192565b3d9150612374565b73fffd8963efd1fc6a506488495d951d5263988d259b6122d0565b9160608301358301916123d460208435958186019503018561221c565b116102c157565b356001600160a01b038116810361025a5790565b6001600160a01b038116600181036124155750505f805160206137808339815191525c90565b60020361242157503090565b90565b9081602091031261025a5751801515810361025a5790565b91908110156106b45760051b0190565b9190820391821161029457565b9091906001600160a01b031680612474575061224791612639565b600160ff1b821461248a575b9161224792612a11565b6040516370a0823160e01b815230600482015292909150602083602481855afa80156109e1575f906124c0575b90925090612480565b506020833d6020116124ec575b816124da60209383611f74565b8101031261025a5761224792516124b7565b3d91506124cd565b91907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b1561025a57604051631b63c28b60e11b81526001600160a01b039182166004820152928116602484015293841660448301529190921660648301525f908290608490829084905af180156109e1576125785750565b5f61224791611f74565b604081351891606082019363ffffffff6040840135169363ffffffe0601f8601169060608201602086013518179084019260608401359463ffffffff861694641fffffffe0608082019760051b1680915f925b8084106125ed575060809250010191011017610d0657565b90916020809163ffffffe0601f60808089890101359b848d18179b880101350116010193019291906125d5565b9081602091031261025a57516001600160a01b038116810361025a5790565b5f80809381935af11561264857565b60405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606490fd5b51906001600160701b038216820361025a57565b9081606091031261025a576126ab81612683565b9160406126ba60208401612683565b92015163ffffffff8116810361025a5790565b91600282106129a85781156106b4576126e5836123db565b82600110156106b45761270190610f74602086979596016123db565b506001198401945f198501945f9460209392869290915b88841061272b5750505050505050505050565b612739610ff085848661243c565b61274a610ff060018701858761243c565b604051630240bc6b60e21b81526001600160a01b03909316969092916060836004818b5afa9283156109e15789905f905f95612981575b506001600160a01b03928316939092168314936024926001600160701b03918216929116851561297b5791935b604051938480926370a0823160e01b82528d60048301525afa9182156109e1575f9261294c575b5080820392811592838015612944575b61130057826103e586029586046103e514911417156102945761280890846129b7565b916103e882029182046103e81417156102945761282e926128289161221c565b906129ca565b901561293d575f90915b8b86101561293457906128596128a392610f74610ff060028a01888a61243c565b8193917f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061303c565b915b96604051906128b48a83611f74565b5f82528b368b840137803b1561025a57612908945f80946040519788958694859363022c0d9f60e01b85526004850152602484015260018060a01b0389166044840152608060648401526084830190610684565b03925af19182156109e157600192612924575b50930192612718565b5f61292e91611f74565b5f61291b565b5087905f6128a5565b5f91612838565b5081156127e5565b9091508981813d8311612974575b6129648183611f74565b8101031261025a5751905f6127d5565b503d61295a565b936127ae565b60249392955061299f915060603d811161134a576113398183611f74565b50949192612781565b632b94ab4360e21b5f5260045ffd5b8181029291811591840414171561029457565b81156129d4570490565b634e487b7160e01b5f52601260045260245ffd5b6127108211612a0257612710916129fe916129b7565b0490565b636f5500f360e11b5f5260045ffd5b5f91826044926020956040519363a9059cbb60e01b8552600485015260248401525af13d15601f3d1160015f511416171615612a4957565b60405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606490fd5b929190600b841015612ebe5760078403612bbd57612a9f9293506133ea565b6020810190612aae82826133f8565b90505f92612abb836123db565b90612ac860408501613360565b906001600160801b03821615612ba4575b92915f915b838310612b3a57505050505060600160018060801b03612afd82613360565b6001600160801b0390931692168210612b14575050565b612b1d90613360565b638b063d7360e01b5f5260018060801b031660045260245260445ffd5b849650612b8890612b65612b5e85612b58612b8d969798998b6133f8565b9061342d565b94856136a1565b9190612b7460808701876106c8565b9390926001600160801b03165f0391613531565b613769565b946001612b9a87936123db565b9194930191612ade565b9050612bb7612bb2836130a9565b61350d565b90612ad9565b60068403612c9857612bd0929350613351565b612bdc60c08201613360565b6001600160801b03811615612c47575b612c34612b8860e092612c13612c0460a08701613374565b916001600160801b0316611fb2565b90612c226101008701876106c8565b929091612c2f3689613381565b613531565b91016001600160801b03612afd82613360565b50612c5460a08201613374565b15612c7e5760e0612c34612b88612c75612bb2612c70866123db565b6130a9565b92505050612bec565b60e0612c34612b88612c75612bb2612c70602087016123db565b60098403612dc857612cab9293506133ea565b6020810190612cba82826133f8565b5f939150612cca60408401613360565b612cd3846123db565b916001600160801b03821615612db4575b92919290815b612d42575050505060600160018060801b03612d0582613360565b6001600160801b0390931692168211612d1c575050565b612d2590613360565b6312bacdd360e01b5f5260018060801b031660045260245260445ffd5b82939550612d9390612d6f612d68612d5e612d9d9596896133f8565b5f1988019161342d565b97886136a1565b612d7f60808a949394018a6106c8565b9390926001600160801b0316911590613531565b600f0b5f0361350d565b93612da885916123db565b92915f19019081612cea565b9050612dc2612bb2836132f4565b90612ce4565b60088414612de6575050505b635cda29d760e01b5f5260045260245ffd5b612df1929350613351565b612dfd60c08201613360565b6001600160801b03811615612e66575b612e53612bb2612e4b60e093612e2560a08701613374565b90612e346101008801886106c8565b9290916001600160801b031690612c2f368a613381565b600f0b611fb2565b91016001600160801b03612d0582613360565b50612e7360a08201613374565b15612ea45760e0612e53612bb2612e4b612e9a612bb2612e95602088016123db565b6132f4565b9350505050612e0d565b60e0612e53612bb2612e4b612e9a612bb2612e95876123db565b92600c8103612f165750612ed291926132e1565b90612edc816132f4565b91808311612eff575090612247915f805160206137808339815191525c906131be565b90506312bacdd360e01b5f5260045260245260445ffd5b600f8103612f6d5750612f2991926132e1565b90612f33816130a9565b91808310612f56575090612247915f805160206137808339815191525c90613100565b9050638b063d7360e01b5f5260045260245260445ffd5b600b8103612fb35750612f84906122479293613091565b15612fa857612fa2825f805160206137808339815191525c92613199565b916131be565b612fa2823092613199565b600e8103612fe65750612fda612fd0612fe0926122479495613091565b92829492916123ef565b92613185565b91613100565b9260108414612ff757505050612dd4565b61224792935061300d61301692612fe092613091565b929193906123ef565b91613020846130a9565b6129e8565b6001600160a01b0382811690821610156107115791565b6040516001600160601b0319606094851b8116602083019081529590941b90931660348401526028835290929091612204919061307a604882611f74565b5190206121f6604051948592602084019586612116565b90606011610d06578035916040602083013592013590565b6130d481307f000000000000000000000000000000000000000000000000000000000000000061344f565b905f82126130e0575090565b634c085bf160e01b5f9081526001600160a01b0391909116600452602490fd5b908215613180577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b1561025a57604051630b0d9c0960e01b81526001600160a01b03938416600482015291909216602482015260448101929092525f908290606490829084905af180156109e1576125785750565b505050565b90816131955761242191506130a9565b5090565b90600160ff1b82036131af5761242191506134cb565b816131955761242191506132f4565b5f9183156132db577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691823b1561025a57604051632961046560e21b81526001600160a01b0390911660048201819052905f8160248183885af180156109e1576132c6575b5080613292575050602090600460405180958193630476982d60e21b83525af1908115613286575061325b5750565b61327c9060203d60201161327f575b6132748183611f74565b810190612043565b50565b503d61326a565b604051903d90823e3d90fd5b839483602094936132a293612229565b600460405180958193630476982d60e21b83525af1908115613286575061325b5750565b6132d39194505f90611f74565b5f925f61322c565b50505050565b9190604011610d06576020823592013590565b61331f81307f000000000000000000000000000000000000000000000000000000000000000061344f565b905f8213613331575061242190611fb2565b63019a8d9360e51b5f9081526001600160a01b0391909116600452602490fd5b9061014011610d065780350190565b356001600160801b038116810361025a5790565b35801515810361025a5790565b91908260a091031261025a5760405161339981611f45565b60806133e58183956133aa81612011565b85526133b860208201612011565b60208601526133c960408201612025565b60408601526133da60608201612035565b606086015201612011565b910152565b9060a011610d065780350190565b903590601e198136030182121561025a57018035906001600160401b03821161025a57602001918160051b3603831361025a57565b91908110156106b45760051b81013590609e198136030182121561025a570190565b6001600160a01b039182165f9081529282166020908152604093849020935163789add5560e11b815260048101949094529183916024918391165afa9081156109e1575f9161349c575090565b90506020813d6020116134c3575b816134b760209383611f74565b8101031261025a575190565b3d91506134aa565b6001600160a01b0316806134de57504790565b6020602491604051928380926370a0823160e01b82523060048301525afa9081156109e1575f9161349c575090565b6001600160801b038116919082900361352257565b6393dafdf160e01b5f5260045ffd5b93928115613686576401000276a4945b6040519160608301906001600160401b03821184831017611f6057604091825293151580845260208481018781526001600160a01b03998a168685019081528451633cf3645360e21b815286518c166004820152868401518c1660248201529486015162ffffff166044860152606086015160020b60648601526080909501518a1660848501529451151560a4840152935160c4830152915190961660e48701526101206101048701529390918591829161360191610124840191611fc2565b03815f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19283156109e1575f93613652575b505f130361364c57600f0b90565b60801d90565b9092506020813d60201161367e575b8161366e60209383611f74565b8101031261025a5751915f61363e565b3d9150613661565b73fffd8963efd1fc6a506488495d951d5263988d2594613541565b905f60806040516136b181611f45565b82815282602082015282604082015282606082015201526136d1826123db565b6001600160a01b03828116929082168084101561375f57505b6001600160a01b031691821492602081013562ffffff81169081900361025a576040820135918260020b80930361025a57606001359260018060a01b03841680940361025a576040519461373d86611f45565b85526001600160a01b0316602085015260408401526060830152608082015291565b91505081906136ea565b5f81600f0b12613522576001600160801b03169056fe0e87e1788ebd9ed6a7e63c70a374cd3283e41cad601d21fbe27863899ed4a708af28d9864a81dfdf71cab65f4e5d79a0cf9b083905fb8971425e6cb581b3f692a164736f6c634300081a000a",
"deployedBytecode": "0x60c06040526004361015610093575b3615610018575f80fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610060575b61005157005b631c5deabb60e11b5f5260045ffd5b50337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141561004b565b5f3560e01c806324856bc3146105a05780633593564c146104d7578063817122dc1461049357806391dd7346146103a3578063d0c9f6cb1461035f578063d737d0c71461032d578063dc4c90d3146102e95763fa461e330361000e573461025a57606036600319011261025a576024356004356044356001600160401b03811161025a57610125903690600401610627565b5f8313918215806102df575b6102d05781810160408282031261025a5781356001600160401b03811161025a57820181601f8201121561025a57803561016a81611f97565b926101786040519485611f74565b8184526020828401011161025a575f928160208094018483013701015260208101356001600160a01b038116929083900361025a576101b6916120c3565b90601790602b83106102c1578035968760601c956101e462ffffff8585013560601c9a60481c168a8961214c565b336001600160a01b03909116036102b257156102a857508685105b156102155750505061021393503391612229565b005b91935091939482602b0180602b1161029457841061025e575082821161025a57918190039101600160ff1b84101561025a57610213936102553391611fb2565b61227b565b5f80fd5b925050505f805160206137a08339815191529291925c821161028557610213923391612229565b6339cedf2960e11b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b95508487106101ff565b6332b13d9160e01b5f5260045ffd5b633b99b53d60e01b5f5260045ffd5b63316cf0eb60e01b5f5260045ffd5b505f851315610131565b3461025a575f36600319011261025a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461025a575f36600319011261025a576040516001600160a01b035f805160206137808339815191525c168152602090f35b3461025a575f36600319011261025a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461025a57602036600319011261025a576004356001600160401b03811161025a576103d3903690600401610627565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036104845761040c91612582565b90818303610475575f5b8381106104495761044560405161042e602082611f74565b5f8152604051918291602083526020830190610684565b0390f35b8061046f61045a60019387896106a8565b3560f81c6104698387876106fa565b91612a80565b01610416565b63aaad13f760e01b5f5260045ffd5b63570c108560e11b5f5260045ffd5b3461025a575f36600319011261025a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b606036600319011261025a576004356001600160401b03811161025a57610502903690600401610627565b6024356001600160401b03811161025a57610521903690600401610654565b91604435421161059157333014610588575f805160206137808339815191525c6001600160a01b03166105795761056793335f805160206137808339815191525d610715565b5f5f805160206137808339815191525d005b6337affdbf60e11b5f5260045ffd5b61021393610715565b632dfb7c8b60e11b5f5260045ffd5b604036600319011261025a576004356001600160401b03811161025a576105cb903690600401610627565b6024356001600160401b03811161025a576105ea903690600401610654565b91333014610588575f805160206137808339815191525c6001600160a01b03166105795761056793335f805160206137808339815191525d610715565b9181601f8401121561025a578235916001600160401b03831161025a576020838186019501011161025a57565b9181601f8401121561025a578235916001600160401b03831161025a576020808501948460051b01011161025a57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b908210156106b4570190565b634e487b7160e01b5f52603260045260245ffd5b903590601e198136030182121561025a57018035906001600160401b03821161025a5760200191813603831361025a57565b908210156106b4576107119160051b8101906106c8565b9091565b909392848103611f3657919293905f925b828410610734575050505050565b61074484848495969798946106a8565b35936107518683896106fa565b919093606098603f8860f81c1696600197602181105f14611e305760108110156118d2576008811015610efc5780610a8a5750610793602088013595886120eb565b909690608089013515610a83575f805160206137808339815191525c975b6107bb8a356123ef565b9891806080528160a05288600160ff1b14610a0e575b50505b604296602b9190600160ff1b81101561025a576080518911610a075730915b608051841161025a57610862936040925f60a05135956108808760601c97610839601760a051013560601c998a81109a62ffffff60018060a01b039460481c169161214c565b16948884146109ec576401000276a4965b88519a8b928a6020850152606084019060a051611fc2565b6001600160a01b03919091168983015203601f1981018a5289611f74565b8551630251596160e31b81526001600160a01b039182166004820152602481018890526044810193909352909316606482015260a06084820152948592839182906108cf9060a4830190610684565b03925af19081156109e1575f905f926109a5575b6108f393501561099e5750611fb2565b608051909611610920573060805160171161025a57601760a051016017608051039060a0526080526107d4565b969198939a9460409198939a96509101351161098f575b159081610980575b5061095257506001019293949190610726565b9061097c604051928392632c4029e960e01b84526004840152604060248401526044830190610684565b0390fd5b600160ff1b161590505f61093f565b631ce9aa4b60e11b5f5260045ffd5b9050611fb2565b9150506040823d82116109d9575b816109c060409383611f74565b8101031261025a578160206108f39351910151916108e3565b3d91506109b3565b6040513d5f823e3d90fd5b73fffd8963efd1fc6a506488495d951d5263988d259661084a565b89916107f3565b601491929850106102c1576020602491604051928380926370a0823160e01b82523060048301523560601c5afa9081156109e1575f91610a52575b50955f806107d1565b90506020813d8211610a7b575b81610a6c60209383611f74565b8101031261025a57515f610a49565b3d9150610a5f565b30976107b1565b6001819c969299949b9798939a959c145f14610b55575090610ab1602082013592826120eb565b608083013515610b4e575f805160206137808339815191525c915b6040610ad885356123ef565b9401355f805160206137a08339815191525d600160ff1b85101561025a57610b039361025586611fb2565b90919015610b3f5750610b1590611fb2565b03610b30575f5f805160206137a08339815191525d5b610937565b636a70124760e11b5f5260045ffd5b610b499150611fb2565b610b15565b3091610acc565b60028103610b8c5750610b2b91604081013591505f805160206137808339815191525c610b8560208301356123ef565b91356124f4565b9394919390929060038103610d13575050508135820163ffffffff60208401351683019163ffffffff83351693602080850194860101910110610d0657604051632a2d80d160e01b602082019081526001600160a01b035f805160206137808339815191525c1660248301526060604483015293909260e4840192803536829003601e190181121561025a57810160208101949035906001600160401b03821161025a578160071b3603861361025a5781906060608489015252610104860194905f905b808210610ce85750505093610c9c5f96948294610caa9460408a9960018060a01b03610c7e60208301612011565b1660a4880152013560c4860152848303602319016064860152611fc2565b03601f198101835282611f74565b5190827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af190610ce2611fe2565b91610937565b90919560808082610cfb6001948b612065565b019701920190610c50565b633b99b53d5f526004601cfd5b9194939092509060048103610e115750610d3060208201356123ef565b906001600160a01b036040820135811691351680610d7d575047908110610d6e5780610d5e575b5050610937565b610d6791612639565b5f80610d57565b631a84bc4160e21b5f5260045ffd5b91604051916370a0823160e01b8352306004840152602083602481875afa9283156109e1575f93610dde575b508210610dcf5781610dbe575b505050610937565b610dc792612a11565b5f8080610db6565b630ceb95c760e31b5f5260045ffd5b9092506020813d8211610e09575b81610df960209383611f74565b8101031261025a5751915f610da9565b3d9150610dec565b60058103610e385750806040610b2b92013590610e3160208201356123ef565b9035612459565b60068103610eea5750604081013590610e5460208201356123ef565b90356001600160a01b031680610e785750610e72610b2b92476129e8565b90612639565b906040516370a0823160e01b8152306004820152602081602481865afa9081156109e1575f91610eb7575b50610b2b93610eb1916129e8565b91612a11565b90506020813d8211610ee2575b81610ed160209383611f74565b8101031261025a5751610b2b610ea3565b3d9150610ec4565b636bb50f4f60e11b5f5260045260245ffd5b6008819c969299949b9798939a959c145f1461111b5750610f22602083013591836123b7565b90608084013515611114575f805160206137808339815191525c915b610f4885356123ef565b9282156106b457610f58826123db565b83600110156106b457610f7a610fc291610f74602086016123db565b90613025565b907f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061303c565b9485816110fa575b5050505f198201828111610294576001600160a01b0390610ff590610ff090858561243c565b6123db565b1693604051926370a0823160e01b845260018060a01b038516928360048601526020856024818a5afa9485156109e1575f956110bd575b509461103c9291602095966126cd565b6024604051809581936370a0823160e01b835260048301525afa9182156109e1575f92611089575b506040611074929301359261244c565b101561093757631093d5f360e31b5f5260045ffd5b91506020823d82116110b5575b816110a360209383611f74565b8101031261025a579051906040611064565b3d9150611096565b92919450946020833d82116110f2575b816110da60209383611f74565b8101031261025a57915191949193909161103c61102c565b3d91506110cd565b61110c92611107856123db565b612229565b5f8085610fca565b3091610f3e565b60098103611367575061112e90826123b7565b608083013515611360575f805160206137808339815191525c915b61115384356123ef565b917f0000000000000000000000000000000000000000000000000000000000000000937f0000000000000000000000000000000000000000000000000000000000000000955f9560028510611351576020820135975f198601868111610294579190825b6111f4575050506040013586116111e55782156106b457610b2b95856111e092611107856123db565b6126cd565b6345585e0b60e11b5f5260045ffd5b90919897505f1989019789891161029457611216610ff06112389a898961243c565b61122d611227610ff08d8b8b61243c565b82613025565b8185879d939d61303c565b604051630240bc6b60e21b815290916060826004816001600160a01b0387165afa9182156109e1575f905f9361131d575b506001600160701b039283169c9216916001600160a01b039182169116036113175799905b998015801561130f575b61130057826112a6916129b7565b916103e88302928084046103e81490151715610294576112c59161244c565b6103e58102908082046103e51490151715610294576112e3916129ca565b6001810180911161029457988015610294575f19019190826111b7565b633dce448b60e11b5f5260045ffd5b508115611298565b9061128e565b905061134191925060603d811161134a575b6113398183611f74565b810190612697565b5091905f611269565b503d61132f565b6320db826760e01b5f5260045ffd5b3091611149565b93949193909290600a81036114245750505063ffffffff60c08301351682019063ffffffff8235169083602080850194840101910110610d06576040516302b67b5760e41b602082019081526001600160a01b035f805160206137808339815191525c1660248301525f9485949193610caa928492610c9c929060a0906113f16044870182612065565b600180831b0361140360808301612011565b1660c4870152013560e4850152610100610104850152610124840191611fc2565b91949390929091600b8103611557575050611444602082013591356123ef565b9080600160ff1b8103611541575050475b80611461575050610937565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691823b1561025a57604051630d0e30db60e41b81525f8160048186885af180156109e157611531575b506001600160a01b0316903082036114cd575b5