0 txs
0 calls
constructor
No constructor.
functions
predictAddress
viewfunction predictAddress(address poolManager, bytes32 salt) view returns (address predicted)
deploy
nonpayablefunction deploy(address poolManager, bytes32 salt) returns (address hook)
events
No events.
errors
No errors.
creation bytecode
0x60808060405234601557614b41908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816332c02a1414610144575063cb19394214610032575f80fd5b3461014057602073ffffffffffffffffffffffffffffffffffffffff610057366101f4565b60405190916100e461488561006e87820185610245565b80845286840190610287823986604051938782860191168152818552610095604086610245565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610245565b51902060405190848201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610134607582610245565b51902016604051908152f35b5f80fd5b3461014057610152366101f4565b91906148859081830183811067ffffffffffffffff8211176101c75773ffffffffffffffffffffffffffffffffffffffff849260209461028785391681520301905ff580156101bc5760209073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60409101126101405760043573ffffffffffffffffffffffffffffffffffffffff81168103610140579060243590565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101c75760405256fe60a0604052346102b257604051601f61488538819003918201601f19168301916001600160401b038311848410176102b6578084926020946040528339810103126102b257516001600160a01b03811681036102b2576080525f6101a06100646102ca565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201525f6101a06100c26102ca565b600181528260208201528260408201528260608201528260808201528260a0820152600160c08201528260e082015282610100820152826101208201528261014082015282610160820152826101808201520152612000301615156001148015906102a5575b8015610298575b801561028b575b801561027e575b8015610271575b8015610261575b8015610255575b8015610249575b801561023d575b8015610231575b8015610225575b8015610219575b801561020d575b6101fa5760405161459a90816102eb8239608051818181610121015281816103060152818161042e01528181610655015281816106ce01528181610c9201528181610d140152818161123c015281816119cb01528181611a7a01528181611cdc01528181611e3b015281816135ed0152818161381501526141cc0152f35b630732d7b560e51b5f523060045260245ffd5b5060013016151561017c565b50600230161515610175565b5060043016151561016e565b50600830161515610167565b50601030161515610160565b50602030161515610159565b50604030161515610152565b506080301615156001141561014b565b5061010030161515610144565b506102003016151561013d565b5061040030161515610136565b506108003016151561012f565b5061100030161515610128565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051906101c082016001600160401b038111838210176102b65760405256fe6080806040526004361015610012575f80fd5b5f3560e01c9081631379c5d114611e895750806321d0ee7014611e1e578063259982e514611e1e5780633b63294614611cb25780634de0d32b14611a38578063575e24b41461192f5780635a5306411461128a5780636c2bbe7e14610c735780636fe7e6eb146111db57806379502c55146111415780638cebd942146110f257806391dd734614610ce05780639f063efc14610c73578063ac3267ff146106a3578063b47b2fb1146105b9578063b6a8b0fa14610103578063c4e833ce14610452578063dc4c90d31461040f578063dc98354e146102af578063e11822091461019b5763e1b4af6914610103575f80fd5b3461019757610111366127ee565b5050505050506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361016f577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fae18210a000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b3461019757600319360160c081126101975760a013610197576101bc61230a565b6001600160a01b0381161561022b5760a06101d6366124ff565b205f52600660205260405f20907fffffffffffffffffffff0000000000000000000000000000000000000000ffff75ffffffffffffffffffffffffffffffffffffffff000083549260101b1691161790555f80f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4d756c7469706c696572206d7573742062652067726561746572207468616e2060448201527f30000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101975760e0600319360112610197576102c86122de565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360112610197576102fb6122f4565b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361016f5760405161033881612484565b6024356001600160a01b03811681036101975781526044356001600160a01b038116810361019757602082015260643562ffffff811681036101975760408201526084358060020b810361019757606082015260a435906001600160a01b038216820361019757608081019190915260a090205f9081526006602090815260409182902080547fffffffffffffffffffff000000000000000000000000000000000000000000ff1663044c010017905590517fdc98354e000000000000000000000000000000000000000000000000000000008152f35b34610197575f6003193601126101975760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610197575f600319360112610197575f6101a060405161047281612467565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201528261018082015201526101c060206040516104d581612467565b60018152818101905f8252604081015f8152606082015f8152608083015f815260a084015f815260c085016001815260e08601905f82526101008701925f84526101208801945f86526101408901965f88526101608a01985f8a526101a06101808c019b5f8d52019b5f8d526040519d8e916001835251151591015251151560408d015251151560608c015251151560808b015251151560a08a015251151560c089015251151560e08801525115156101008701525115156101208601525115156101408501525115156101608401525115156101808301525115156101a0820152f35b3461019757610160600319360112610197576105d36122de565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101975760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610197576101443567ffffffffffffffff811161019757610649903690600401612334565b50506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361016f577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101975760e0600319360112610197576106bd366124ff565b60a43560c4359160a08120926107457f0000000000000000000000000000000000000000000000000000000000000000946fffffffffffffffffffffffffffffffff61070982886136ea565b1692610716841515612871565b6001600160a01b038551166001600160a01b03600354161495865f14610c6c5780965b15610c64575095612bdf565b5050506fffffffffffffffffffffffffffffffff61077b8686610766612c91565b94620d89b4956107758761302d565b9161339e565b16918211610be0576107926107db92600f0b6128fc565b6040519161079f83612402565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c83526020830152600f0b60408201525f606082015282613452565b8060801d5f81600f0b135f14610bd8576fffffffffffffffffffffffffffffffff16905b5f81600f0b135f14610bd0576fffffffffffffffffffffffffffffffff16935b60409361086183865161083288826124a0565b600981527f72656365697665643000000000000000000000000000000000000000000000006020820152613f94565b6108a081865161087188826124a0565b600781527f616d6f756e7430000000000000000000000000000000000000000000000000006020820152613f94565b6108df8686516108b088826124a0565b600981527f72656365697665643100000000000000000000000000000000000000000000006020820152613f94565b61091e8286516108ef88826124a0565b600781527f616d6f756e7431000000000000000000000000000000000000000000000000006020820152613f94565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610b20578210610b4d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111610b20578410610a9d576001600160a01b03602081845116930151169181610a22575b5050826109a057005b81517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810193909352602090839060449082905f905af1908115610a1957506109ef57005b610a109060203d602011610a12575b610a0881836124a0565b81019061292b565b005b503d6109fe565b513d5f823e3d90fd5b83517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526024810192909252602090829060449082905f905af18015610a9357610a74575b80610997565b610a8c9060203d602011610a1257610a0881836124a0565b5083610a6e565b83513d5f823e3d90fd5b608483517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f496e73756666696369656e7420746f6b656e31207769746864726177616c206160448201527f6d6f756e740000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b608484517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f496e73756666696369656e7420746f6b656e30207769746864726177616c206160448201527f6d6f756e740000000000000000000000000000000000000000000000000000006064820152fd5b505f9361081f565b505f906107ff565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f5769746864726177616c20616d6f756e74206578636565647320617661696c6160448201527f626c65206c6971756964697479000000000000000000000000000000000000006064820152fd5b905095612bdf565b8196610739565b3461019757610c81366125f7565b505050505050506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361016f577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101975760206003193601126101975760043567ffffffffffffffff811161019757610d11903690600401612334565b907f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b038316908133036110945782019282840361014081126101975760807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40610d9c60405197610d888961244b565b610d9188612320565b895260208801612586565b926020880193845201126101975761012060405194610dba86612402565b610dc660c082016124f1565b8652610dd460e082016124f1565b60208701526101008101356040870152013560608501528360408601528051946040602095815197610e06888a6124a0565b5f8952610e3f8351998a9384937f5a6bcfda0000000000000000000000000000000000000000000000000000000085526004850161296d565b03815f885af1958615610fde575f96611059575b506001600160a01b039051169051918560801d600f0b9286600f0b946001600160a01b0382511690878301926001600160a01b0384511696895f82125f146110315750610e9f90613f68565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052938a90859060449082905f905af1918215610fde57866001600160a01b0389928d97610f0e9661101b575b505116614294565b5f871215610fe957610f22610f7197613f68565b9586915f604051809a819582947f095ea7b300000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115610fde57610f95956001600160a01b0392610fc357505116614294565b6040519181830152808252610fab6040836124a0565b610fbf6040519282849384528301906127ab565b0390f35b610fd990883d8a11610a1257610a0881836124a0565b610f06565b6040513d5f823e3d90fd5b50509392505f8313610fff575b50505050610f95565b6001600160a01b0361101294511661421c565b82808080610ff6565b610fd990893d8b11610a1257610a0881836124a0565b93915086865f8313611047575b50505050610f0e565b6110509361421c565b8980868661103e565b6001600160a01b039196506110859060403d60401161108d575b61107d81836124a0565b810190612957565b509590610e53565b503d611073565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f6e6c79206d616e616765722063616e2063616c6c00000000000000000000006044820152fd5b34610197576020600319360112610197576004355f526006602052606060405f20546001600160a01b036040519160ff81161515835260ff8160081c161515602084015260101c166040820152f35b34610197575f600319360112610197576001600160a01b035f54166001600160a01b0360015416906001600160a01b03600254166111d16001600160a01b03600354166040519061119c82611195816126ee565b03836124a0565b6001600160a01b036005541693604051968796875260208701526040860152606085015260c0608085015260c08401906127ab565b9060a08301520390f35b3461019757610100600319360112610197576111f56122de565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360112610197576112286122f4565b506112316124e1565b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361016f577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101975760206003193601126101975760043567ffffffffffffffff81116101975780600401908036039060c0600319830112610197576001600160a01b036112d384612943565b16151580611912575b806118f5575b806118d8575b1561187a576040519260208401602081526001600160a01b0361130a83612320565b16604086015260248301906001600160a01b0361132683612320565b16606087015260448401926001600160a01b0361134285612320565b16608088015260648501916001600160a01b0361135e84612320565b1660a08901527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd608487013597018712156101975785870197602460048a0135990167ffffffffffffffff8a1161019757893603811361019757899060c0830160c0905281610100840152610120830137888101610120015f90528060a48801996113e88b612320565b6001600160a01b031660e0830152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810103610120017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101825261145190826124a0565b519020926040519360208501602081525f54956001600160a01b03871660408201526001546001600160a01b031660608201526002546001600160a01b031660808201526003546001600160a01b031660a082015260c0810160c090528061010081016114bd906126ee565b6005546001600160a01b031660e0830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810182526114fe90826124a0565b5190201461181c576001600160a01b039485611552611581936115b0977fffffffffffffffffffffffff0000000000000000000000000000000000000000846115478199612943565b169116175f55612943565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155612943565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006002541617600255612943565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060035416176003550160048101359067ffffffffffffffff82116101975781360360248201136101975761160760045461269d565b601f811161177b575b505f90601f83116001146116a85791806001600160a01b03949261166c945f9261169a575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617600455612943565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060055416176005555f80f35b016024013590508580611635565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083169160045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b925f5b818110611760575092600192859261166c966001600160a01b03989610611724575b505050811b01600455612943565b6024910101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600384901b60f8161c19169055858080611716565b602484840101358555600190940193602092830192016116f4565b60045f52601f830160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0190602084106117f4575b601f0160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905b8181106117e95750611610565b5f81556001016117dc565b7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b91506117b2565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f636f6e666967206e6f74206368616e67650000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f636f6e66696720686173207a65726f20616464726573730000000000000000006044820152fd5b506001600160a01b036118ed60648301612943565b1615156112e8565b506001600160a01b0361190a60448301612943565b1615156112e2565b506001600160a01b0361192760248301612943565b1615156112dc565b3461019757610140600319360112610197576119496122de565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101975760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610197576101243567ffffffffffffffff8111610197576119bf903690600401612334565b50506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361016f57606062ffffff6119ff6137ed565b907fffffffff00000000000000000000000000000000000000000000000000000000604094939451941684526020840152166040820152f35b346101975760c060031936011261019757611a52366124ff565b611a5a61230a565b9060a0812091611b356fffffffffffffffffffffffffffffffff611a9e857f00000000000000000000000000000000000000000000000000000000000000006136ea565b16611aaa811515612871565b845f52600660205260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff8154169055611aec620d89b491600f0b6128fc565b60405191611af983612402565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c83526020830152600f0b60408201525f606082015283613452565b916001600160a01b0360208183511692015116928060801d5f81600f0b135f14611caa576fffffffffffffffffffffffffffffffff16905b5f81600f0b135f14611ca2576fffffffffffffffffffffffffffffffff16915b81611c27575b505080611bab575b5f84815260066020526040812055005b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152602482015290602090829060449082905f905af18015610fde57611c08575b8080611b9b565b611c209060203d602011610a1257610a0881836124a0565b5081611c01565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024810192909252602090829060449082905f905af18015610fde57611c83575b80611b93565b611c9b9060203d602011610a1257610a0881836124a0565b5084611c7d565b505f91611b8d565b505f90611b6d565b3461019757610140600319360112610197576020611ccf366124ff565b611da460a08220611d00817f0000000000000000000000000000000000000000000000000000000000000000612bdf565b50505090805f52600685526001600160a01b0360405f205460101c1615611dad575b506fffffffffffffffffffffffffffffffff611d5a611d3f612c91565b620d89b493611d4d8561302d565b60c4359260a4359261339e565b169260405191611d6983612402565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c83528583015283600f0b60408301525f6060830152613452565b50604051908152f35b805f526006855260405f206303e800007fffffffffffffffffffff0000000000000000000000000000000000000000ffff8254161790555f526006845260405f206101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff82541617905584611d22565b3461019757611e2c36612362565b50505050506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361016f577f0a85dc29000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461019757608060031936011261019757611ea26122de565b602435916fffffffffffffffffffffffffffffffff831680930361019757821561228257506001600160a01b03169081156121fe57611ee3816064356129fe565b808311156121a057611efd6001600160a01b039184612864565b1690611f1f611f0c8483612ab7565b91611f1985604435612ab7565b90612864565b908115612142576001600160a01b0391611f38916129fe565b1691808210156120bf5782111561203b576401000276a38110611fdd5773fffd8963efd1fc6a506488495d951d5263988d268211611f7f5760409182519182526020820152f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f557070657220626f756e642061626f7665206d6178696d756d000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4c6f77657220626f756e642062656c6f77206d696e696d756d000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f557070657220626f756e64206d7573742062652067726561746572207468616e60448201527f20746172676574000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4c6f77657220626f756e64206d757374206265206c657373207468616e20746160448201527f72676574000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f496e76616c696420757070657220626f756e642064656e6f6d696e61746f72006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c6964206c6f77657220626f756e64000000000000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f546172676574207072696365206d75737420626520677265617465722074686160448201527f6e203000000000000000000000000000000000000000000000000000000000006064820152fd5b807f08c379a0000000000000000000000000000000000000000000000000000000006064925260206004820152602060248201527f4c6971756964697479206d7573742062652067726561746572207468616e20306044820152fd5b600435906001600160a01b038216820361019757565b60c435906001600160a01b038216820361019757565b60a435906001600160a01b038216820361019757565b35906001600160a01b038216820361019757565b9181601f840112156101975782359167ffffffffffffffff8311610197576020838186019501011161019757565b90610160600319830112610197576004356001600160a01b0381168103610197579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8201126101975760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c8301126101975760c491610144359067ffffffffffffffff8211610197576123fe91600401612334565b9091565b6080810190811067ffffffffffffffff82111761241e57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761241e57604052565b6101c0810190811067ffffffffffffffff82111761241e57604052565b60a0810190811067ffffffffffffffff82111761241e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761241e57604052565b60e435908160020b820361019757565b35908160020b820361019757565b60031960a0910112610197576040519061251882612484565b816004356001600160a01b03811681036101975781526024356001600160a01b038116810361019757602082015260443562ffffff811681036101975760408201526064358060020b8103610197576060820152608435906001600160a01b03821682036101975760800152565b91908260a09103126101975760405161259e81612484565b80926125a981612320565b82526125b760208201612320565b602083015260408101359062ffffff821682036101975760806125f291819360408601526125e7606082016124f1565b606086015201612320565b910152565b906101a0600319830112610197576004356001600160a01b0381168103610197579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8201126101975760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c8301126101975760c49161014435916101643591610184359067ffffffffffffffff8211610197576123fe91600401612334565b90600182811c921680156126e4575b60208310146126b757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916126ac565b6004545f92916126fd8261269d565b80825291600181169081156127715750600114612718575050565b60045f9081529293509091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b838310612757575060209250010190565b600181602092949394548385870101520191019190612746565b60209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b610120600319820112610197576004356001600160a01b0381168103610197579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301126101975760249160c4359160e43591610104359067ffffffffffffffff8211610197576123fe91600401612334565b91908203918211610b2057565b1561287857565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4e6f206c697175696469747920617661696c61626c6520666f7220776974686460448201527f726177616c0000000000000000000000000000000000000000000000000000006064820152fd5b600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008114610b20575f0390565b90816020910312610197575180151581036101975790565b356001600160a01b03811681036101975790565b9190826040910312610197576020825192015190565b6129ed6129fb94936129bf83610140956001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051600290810b60a08501526020820151900b60c0840152604081015160e084015260600151610100830152565b8161012082015201906127ab565b90565b908160601b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6c010000000000000000000000008409928280851094039380850394858411156101975714612ab0576c0100000000000000000000000082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5091500490565b90808202917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828209918380841093039280840393846c0100000000000000000000000011156101975714612b28576c01000000000000000000000000910990828211900360a01b910360601c1790565b50505060601c90565b91818302917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818509938380861095039480860395868511156101975714612bc8579082910981805f03168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b505091500490565b90816020910312610197575190565b6020906024612bf66001600160a01b039594614025565b60405195869384927f1e2eaeaf0000000000000000000000000000000000000000000000000000000084526004840152165afa918215610fde575f92612c5d575b506001600160a01b038216918060a01c60020b9162ffffff808360b81c169260d01c1690565b9091506020813d602011612c89575b81612c79602093836124a0565b810103126101975751905f612c37565b3d9150612c6c565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c60ff1d7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c810118620d89e88111612fe15763ffffffff90600181167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189060028116612fc5575b60048116612fa9575b60088116612f8d575b60108116612f71575b60208116612f55575b60408116612f39575b60808116612f1d575b6101008116612f01575b6102008116612ee5575b6104008116612ec9575b6108008116612ead575b6110008116612e91575b6120008116612e75575b6140008116612e59575b6180008116612e3d575b620100008116612e21575b620200008116612e06575b620400008116612deb575b6208000016612dd5575b0160201c90565b6b048a170391f7dc42444e8fa20260801c612dce565b6d2216e584f5fa1ea926041bedfe9890910260801c90612dc4565b906e5d6af8dedb81196699c329225ee6040260801c90612db9565b906f09aa508b5b7a84e1c677de54f3e99bc90260801c90612dae565b906f31be135f97d08fd981231505542fcfa60260801c90612da3565b906f70d869a156d2a1b890bb3df62baf32f70260801c90612d99565b906fa9f746462d870fdf8a65dc1f90e061e50260801c90612d8f565b906fd097f3bdfd2022b8845ad8f792aa58250260801c90612d85565b906fe7159475a2c29b7443b29c7fa6e889d90260801c90612d7b565b906ff3392b0822b70005940c7a398e4b70f30260801c90612d71565b906ff987a7253ac413176f2b074cf7815e540260801c90612d67565b906ffcbe86c7900a88aedcffc83b479aa3a40260801c90612d5d565b906ffe5dee046a99a2a811c461f1969c30530260801c90612d53565b906fff2ea16466c96a3843ec78b326b528610260801c90612d4a565b906fff973b41fa98c081472e6896dfb254c00260801c90612d41565b906fffcb9843d60f6159c9db58835c9266440260801c90612d38565b906fffe5caca7e10e4e61c3624eaa0941cd00260801c90612d2f565b906ffff2e50f5f656932ef12357cf3c7fdcc0260801c90612d26565b906ffff97272373d413259a46990580e213a0260801c90612d1d565b7f8b86327a000000000000000000000000000000000000000000000000000000005f527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c60045260245ffd5b60020b908160ff1d82810118620d89e881116133725763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189160028116613356575b6004811661333a575b6008811661331e575b60108116613302575b602081166132e6575b604081166132ca575b608081166132ae575b6101008116613292575b6102008116613276575b610400811661325a575b610800811661323e575b6110008116613222575b6120008116613206575b61400081166131ea575b61800081166131ce575b6201000081166131b2575b620200008116613197575b62040000811661317c575b6208000016613163575b5f1261313c570160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04612dce565b6b048a170391f7dc42444e8fa290910260801c9061312f565b6d2216e584f5fa1ea926041bedfe9890920260801c91613125565b916e5d6af8dedb81196699c329225ee6040260801c9161311a565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161310f565b916f31be135f97d08fd981231505542fcfa60260801c91613104565b916f70d869a156d2a1b890bb3df62baf32f70260801c916130fa565b916fa9f746462d870fdf8a65dc1f90e061e50260801c916130f0565b916fd097f3bdfd2022b8845ad8f792aa58250260801c916130e6565b916fe7159475a2c29b7443b29c7fa6e889d90260801c916130dc565b916ff3392b0822b70005940c7a398e4b70f30260801c916130d2565b916ff987a7253ac413176f2b074cf7815e540260801c916130c8565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c916130be565b916ffe5dee046a99a2a811c461f1969c30530260801c916130b4565b916fff2ea16466c96a3843ec78b326b528610260801c916130ab565b916fff973b41fa98c081472e6896dfb254c00260801c916130a2565b916fffcb9843d60f6159c9db58835c9266440260801c91613099565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91613090565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91613087565b916ffff97272373d413259a46990580e213a0260801c9161307e565b827f8b86327a000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b936001600160a01b0383166001600160a01b0383161161344a575b6001600160a01b038581169590831686116133dc5750506129fb93506140a1565b565b92909391946001600160a01b038216115f1461343e5782916134029161340895946140a1565b9361406b565b6fffffffffffffffffffffffffffffffff81166fffffffffffffffffffffffffffffffff8316105f14613439575090565b905090565b9150506129fb9261406b565b9091906133b9565b5f6135e092613595604051916134678361244b565b33835260208301948552604083019081526135646040956134be875161348d89826124a0565b600681527f73656e6465720000000000000000000000000000000000000000000000000000602082015233906140f1565b61350b6001600160a01b036080835101511688516134dc8a826124a0565b600d81527f61646472657373546f457463680000000000000000000000000000000000000060208201526140f1565b6001600160a01b038751955116602086015251868501906001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b518051600290810b60e08501526020820151900b610100840152604081015161012084015260600151610140830152565b61014081526135a6610160826124a0565b8251809481927f48c894910000000000000000000000000000000000000000000000000000000083526020600484015260248301906127ab565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156136e0575f92613637575b505060208151918180820193849201010312610197575190565b9091503d805f833e61364981836124a0565b8101906020818303126101975780519067ffffffffffffffff8211610197570181601f820112156101975780519167ffffffffffffffff831161241e576136bb60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601945194856124a0565b8284526020838301011161019757815f9260208093018386015e830101525f8061361d565b50513d5f823e3d90fd5b906136f490614025565b60038101809111610b20576001600160a01b0391602460209260405194859384927f1e2eaeaf0000000000000000000000000000000000000000000000000000000084526004840152165afa8015610fde575f90613764575b6fffffffffffffffffffffffffffffffff91501690565b506020813d60201161379e575b8161377e602093836124a0565b81010312610197576fffffffffffffffffffffffffffffffff905161374d565b3d9150613771565b90600f0b90600f0b01907fffffffffffffffffffffffffffffffff8000000000000000000000000000000082126f7fffffffffffffffffffffffffffffff831317610b2057565b60a06137fa366024612586565b20805f52600660205260ff60405f205460081c1615613f3f577f00000000000000000000000000000000000000000000000000000000000000006fffffffffffffffffffffffffffffffff61384f83836136ea565b16918215613f14576138618183612bdf565b505091805f5260066020526001600160a01b0360405f205460101c16155f14613ef457506001600160a01b038061044c925b16911692838202938285041482151715610b20576001600160a01b036103e8819504169261391e6138ca620d89b497600f0b6128fc565b604051906138d782612402565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c8252886020830152600f0b60408201525f6060820152613919366024612586565b614174565b908561392b366024612586565b9316926040519461393b8661244b565b861085526139fd60208601917f80000000000000000000000000000000000000000000000000000000000000008352613a26604088019389855260209a8b956040519261398888856124a0565b5f84526040519b8c9788977ff3cd914c00000000000000000000000000000000000000000000000000000000895260048901906001600160a01b036080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b51151560a48701525160c4860152511660e48401526101206101048401526101248301906127ab565b03815f875af1938415610fde575f94613ec4575b50603c9060401b600a0b057fffffffffffffffffffffffffffffffff8000000000000000000000000000000081121580613eaa575b1561019757600f0b678000000000000000680100000000000000008260401d600f0b9207600f0b1215613e3e575b603c9060020b028060020b908103610b2057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618811215613dd0575060020b603c01627fffff81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000821217610b2057935b608435968760020b958689036101975760020b9286840393627fffff85137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000861217610b205787017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008112627fffff821317610b2057613c6e613c638a6fffffffffffffffffffffffffffffffff613c8596613c7895613c8f9a7f12519fb38f6e5af830d800923f1b4e756174c53a1a5fbd5384706bef6bc3ded75d7f334352b7316c99b5eb1590419dc5053fce159a8f4a83ecf755d907286540c5445d613c15613bf8612c91565b613c018361302d565b9a8960801d9b8c9286808d1694169261339e565b9060405193613c2385612402565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2764c855284015216600f0b60408201525f6060820152613919366024612586565b948860801d906137a6565b8460801d906137a6565b95600f0b90600f0b6137a6565b90600f0b906137a6565b9260405190613c9e86836124a0565b5f8252604051967f234266d70000000000000000000000000000000000000000000000000000000088526024356001600160a01b0381168091036101975760048901526044356001600160a01b03811680910361019757602489015260643562ffffff811680910361019757604489015250606487015260a435926001600160a01b0384168094036101975786613d6d8195936fffffffffffffffffffffffffffffffff8998815f96869860848801521660a48601521660c484015261010060e48401526101048301906127ab565b03925af18015610fde57613da6575b50507f575e24b400000000000000000000000000000000000000000000000000000000905f905f90565b81813d8311613dc9575b613dba81836124a0565b8101031261019757515f613d7c565b503d613db0565b620d89e88196929613613de4575b50613b0f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc491955001627fffff81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000821217610b2057935f613dde565b6001017fffffffffffffffffffffffffffffffff8000000000000000000000000000000081126f7fffffffffffffffffffffffffffffff82131715613a9d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b506f7fffffffffffffffffffffffffffffff811315613a6f565b9093508581813d8311613eed575b613edc81836124a0565b81010312610197575192603c613a3a565b503d613ed2565b5f5260066020526001600160a01b03808060405f205460101c1692613893565b5050507f575e24b400000000000000000000000000000000000000000000000000000000905f905f90565b507f575e24b400000000000000000000000000000000000000000000000000000000905f905f90565b7f80000000000000000000000000000000000000000000000000000000000000008114610b20575f0390565b613fdc61400e5f939284936040519384927fb60e72cc0000000000000000000000000000000000000000000000000000000060208501526040602485015260648401906127ab565b906044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826124a0565b6020815191016a636f6e736f6c652e6c6f675afa50565b6040516020810191825260066040820152604081526140456060826124a0565b51902090565b906001600160a01b03809116911603906001600160a01b038211610b2057565b916001600160a01b0361408f6129fb94614096948381168483161161409b5761404b565b16906129fe565b6144e9565b9061404b565b91614096916129fb936001600160a01b0382166001600160a01b038216116140eb575b6140e46001600160a01b03916140de838516848316612ab7565b9361404b565b1691612b31565b906140c4565b61414161400e5f939284936001600160a01b036040519485937f319af3330000000000000000000000000000000000000000000000000000000060208601526040602486015260648501906127ab565b91166044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826124a0565b906040908151926141866020856124a0565b5f84526141bf835194859384937f5a6bcfda0000000000000000000000000000000000000000000000000000000085526004850161296d565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610fde575f916141ff575090565b614218915060403d60401161108d5761107d81836124a0565b5090565b9192906001600160a01b0316803b15610197575f92836064926001600160a01b03948560405198899788967f0b0d9c0900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401525af18015610fde5761428a5750565b5f6133da916124a0565b9091906001600160a01b03168061431a5750506001600160a01b03600460209260405194859384927f11da60b4000000000000000000000000000000000000000000000000000000008452165af18015610fde576142ef5750565b6143109060203d602011614313575b61430881836124a0565b810190612bd0565b50565b503d6142fe565b9092916001600160a01b031691823b1561019757604051937fa58411940000000000000000000000000000000000000000000000000000000085528260048601525a945f816024818389819bf18015610fde576144cd575b506001600160a01b03168430821461444c576020929160649160405195869485937f23b872dd000000000000000000000000000000000000000000000000000000008552600485015288602485015260448401525af1801561444157916020918493614424575b505b6004604051809581937f11da60b40000000000000000000000000000000000000000000000000000000083525af190811561441857506142ef5750565b604051903d90823e3d90fd5b61443a90833d8511610a1257610a0881836124a0565b505f6143d9565b6040513d85823e3d90fd5b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602481019390935291926020928492506044918391905af18015614441579160209184936144b0575b506143db565b6144c690833d8511610a1257610a0881836124a0565b505f6144aa565b6144da9195505f906124a0565b5f936001600160a01b03614372565b906fffffffffffffffffffffffffffffffff821691820361450657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6c6971756964697479206f766572666c6f7700000000000000000000000000006044820152fdfea264697066735822122003cfbb786e63f5e9f5d798da2b171ccf4c8d7f8dce6ed28278c8106be2868bec64736f6c634300081a0033a2646970667358221220e1dd0e9fff3a4c81dbf7a3a4af5b93a12fc3b0ce3ed75be0a3e100698fbaa90b64736f6c634300081a0033