@across-protocol/contracts 5.0.8 → 5.0.10-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. package/contracts/interfaces/SponsoredCCTPInterface.sol +19 -0
  2. package/contracts/interfaces/SponsoredOFTInterface.sol +21 -2
  3. package/contracts/periphery/mintburn/BaseModuleHandler.sol +1 -0
  4. package/contracts/periphery/mintburn/HyperCoreFlowRoles.sol +1 -0
  5. package/contracts/periphery/mintburn/sponsored-cctp/SponsoredCCTPDstPeriphery.sol +24 -2
  6. package/contracts/periphery/mintburn/sponsored-cctp/SponsoredCCTPSrcPeriphery.sol +64 -37
  7. package/contracts/periphery/mintburn/sponsored-oft/DstOFTHandler.sol +28 -2
  8. package/contracts/periphery/mintburn/sponsored-oft/SponsoredOFTSrcPeriphery.sol +66 -33
  9. package/dist/broadcast/deployed-addresses.json +17 -12
  10. package/dist/evm/artifacts/BaseModuleHandler.sol/BaseModuleHandler.json +1 -1
  11. package/dist/evm/artifacts/CounterfactualDepositCCTP.sol/CounterfactualDepositCCTP.json +1 -1
  12. package/dist/evm/artifacts/CounterfactualDepositOFT.sol/CounterfactualDepositOFT.json +1 -1
  13. package/dist/evm/artifacts/DstOFTHandler.sol/DstOFTHandler.json +1 -1
  14. package/dist/evm/artifacts/HyperCoreFlowExecutor.sol/HyperCoreFlowExecutor.json +1 -1
  15. package/dist/evm/artifacts/HyperCoreFlowRoles.sol/HyperCoreFlowRoles.json +1 -1
  16. package/dist/evm/artifacts/SponsoredCCTPDstPeriphery.sol/SponsoredCCTPDstPeriphery.json +1 -1
  17. package/dist/evm/artifacts/SponsoredCCTPInterface.sol/SponsoredCCTPInterface.json +1 -1
  18. package/dist/evm/artifacts/SponsoredCCTPSrcPeriphery.sol/SponsoredCCTPSrcPeriphery.json +1 -1
  19. package/dist/evm/artifacts/SponsoredOFTInterface.sol/SponsoredOFTInterface.json +1 -1
  20. package/dist/evm/artifacts/SponsoredOFTSrcPeriphery.sol/SponsoredOFTSrcPeriphery.json +1 -1
  21. package/package.json +1 -1
@@ -1 +1 @@
1
- {"abi":[{"type":"constructor","inputs":[{"name":"_oftEndpoint","type":"address","internalType":"address"},{"name":"_ioft","type":"address","internalType":"address"},{"name":"_donationBox","type":"address","internalType":"address"},{"name":"_baseToken","type":"address","internalType":"address"},{"name":"_multicallHandler","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"AUTHORIZED_FUNDED_FLOW_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FUNDS_SWEEPER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"IOFT_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"OFT_ENDPOINT_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"PERMISSIONED_BOT_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"authorizedSrcPeripheryContracts","inputs":[{"name":"srcEid","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"baseToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"decimalConversionRate","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"hyperCoreModule","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"lzCompose","inputs":[{"name":"_oApp","type":"address","internalType":"address"},{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"multicallHandler","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAuthorizedPeriphery","inputs":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"srcPeriphery","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"usedNonces","inputs":[{"name":"nonce","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"ArbitraryActionsExecuted","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"initialToken","type":"address","indexed":true,"internalType":"address"},{"name":"initialAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"address","indexed":true,"internalType":"address"},{"name":"finalAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SetAuthorizedPeriphery","inputs":[{"name":"srcEid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"srcPeriphery","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AmountSDOverflowed","inputs":[{"name":"amountSD","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"AuthorizedPeripheryNotSet","inputs":[{"name":"_srcEid","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"FundedFlowNotAuthorized","inputs":[]},{"type":"error","name":"IOFTEndpointMismatch","inputs":[]},{"type":"error","name":"InvalidBytes32","inputs":[]},{"type":"error","name":"InvalidComposeMsgFormat","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidLocalDecimals","inputs":[]},{"type":"error","name":"InvalidOApp","inputs":[]},{"type":"error","name":"NonceAlreadyUsed","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OutOfBounds","inputs":[]},{"type":"error","name":"TokenIOFTMismatch","inputs":[]},{"type":"error","name":"UnauthorizedEndpoint","inputs":[]},{"type":"error","name":"UnauthorizedSrcPeriphery","inputs":[{"name":"_srcEid","type":"uint32","internalType":"uint32"}]}],"bytecode":"0x610140806040523461036e5760a0816185b580380380916100208285610455565b83398101031261036e5761003381610478565b61003f60208301610478565b9161004c60408201610478565b90610065608061005e60608401610478565b9201610478565b60405163313ce56760e01b81526001600160a01b038316929190602081600481875afa90811561037a575f91610436575b50604051630857749b60e41b81526001600160a01b038816956020826004818a5afa91821561037a575f92610405575b5060015f55604051906162b38083016001600160401b038111848210176103f15760409284926122a284396001600160a01b03168152602081018990520301905ff0801561037a576001600160a01b03166080527f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef65f8181525f5160206185955f395f51905f526020527fcf7720576cdb70176b3017d893bcb89ba0f36ed0261d4350fd0180e938b3bace80549082905560ff938493909291905f5160206185555f395f51905f528380a47f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f5f8181525f5160206185955f395f51905f526020527f176c3a4e1b4d1d61213187c0dde7f83e2e2c933a339cb5403b4090bc2f0aa49b80549082905590915f5160206185555f395f51905f528380a41691168181106103e2570360ff81116103ce5760ff16604d81116103ce57600a0a60a05260c05261012052604051637e062a3560e11b8152602081600481865afa90811561037a575f91610394575b506001600160a01b0316036103855760049260209260e0526101005260405192838092635e280f1160e01b82525afa90811561037a575f91610334575b5060e0516001600160a01b03908116911603610325576102ac336104a5565b50604051611d73908161052f823960805181818161023101526111d4015260a051818181610631015261109d015260c051818181610597015281816115f60152611b5d015260e0518181816102740152610edb0152610100518181816101ee0152610eaa01526101205181818161068d01526109620152f35b6312354ac760e21b5f5260045ffd5b90506020813d602011610372575b8161034f60209383610455565b8101031261036e57516001600160a01b038116810361036e575f61028d565b5f80fd5b3d9150610342565b6040513d5f823e3d90fd5b633722464560e11b5f5260045ffd5b90506020813d6020116103c6575b816103af60209383610455565b8101031261036e576103c090610478565b5f610250565b3d91506103a2565b634e487b7160e01b5f52601160045260245ffd5b6301e9714b60e41b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b61042891925060203d60201161042f575b6104208183610455565b81019061048c565b905f6100c6565b503d610416565b61044f915060203d60201161042f576104208183610455565b5f610096565b601f909101601f19168101906001600160401b038211908210176103f157604052565b51906001600160a01b038216820361036e57565b9081602091031261036e575160ff8116810361036e5790565b6001600160a01b0381165f9081525f5160206185755f395f51905f52602052604090205460ff16610529576001600160a01b03165f8181525f5160206185755f395f51905f5260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f9056fe60806040526004361015610030575b361561002e573461002a5761002236610c69565b602081519101f35b5f80fd5b005b5f3560e01c806301ffc9a71461016f57806305b513bf1461016a57806309cfd675146101655780630b2969841461016057806318f794991461015b57806321081d3c14610156578063248a9ca3146101515780632f2ff15d1461014c57806336568abe14610147578063490e662f146101425780634b3b029b1461013d57806352e12a1414610138578063657cad8a1461013357806391d148541461012e578063963efcaa14610129578063a217fddf14610124578063c55dae631461011f578063d0a102601461011a578063d547741f146101155763feb617240361000e57610a8f565b610a42565b6106df565b61066e565b610654565b61061a565b6105bb565b610578565b610499565b610451565b610417565b6103cf565b61037d565b61032d565b6102f3565b610298565b610255565b610212565b6101cf565b3461002a57602036600319011261002a5760043563ffffffff60e01b811680910361002a57602090637965db0b60e01b81149081156101b4575b506040519015158152f35b6301ffc9a760e01b1490505f6101a9565b5f91031261002a57565b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a57602036600319011261002a5760043567ffffffffffffffff811680910361002a575f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de00602052602060405f2054604051908152f35b3461002a575f36600319011261002a5760206040517f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f8152f35b3461002a57602036600319011261002a5760206103646004355f525f516020611d1e5f395f51905f52602052600160405f20015490565b604051908152f35b6001600160a01b0381160361002a57565b3461002a57604036600319011261002a5761002e6024356004356103a08261036c565b6103ca6103c5825f525f516020611d1e5f395f51905f52602052600160405f20015490565b610cd9565b610d2d565b3461002a57604036600319011261002a576004356024356103ef8161036c565b336001600160a01b038216036104085761002e91610ddf565b63334bd91960e11b5f5260045ffd5b3461002a575f36600319011261002a5760206040517fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1008152f35b3461002a575f36600319011261002a5760206040517f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef68152f35b63ffffffff81160361002a57565b3461002a57604036600319011261002a576004356104b68161048b565b602435906104c2610e90565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615610561577ff3adc8db618887d7b76838e244efb05fc99475bb5a904a914d939fbdc41b7e8d9163ffffffff6040921690815f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de0060205280835f205582519182526020820152a160015f55005b63e2517d3f60e01b5f52336004525f60245260445ffd5b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a57604036600319011261002a57602060ff61060e6024356004356105e28261036c565b5f525f516020611d1e5f395f51905f52845260405f20906001600160a01b03165f5260205260405f2090565b54166040519015158152f35b3461002a575f36600319011261002a5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461002a575f36600319011261002a5760206040515f8152f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b9181601f8401121561002a5782359167ffffffffffffffff831161002a576020838186019501011161002a57565b60a036600319011261002a576004356106f78161036c565b60443567ffffffffffffffff811161002a576107179036906004016106b1565b9161072360643561036c565b6084359067ffffffffffffffff821161002a5782849161074a61077d9436906004016106b1565b5050610754610e90565b60017fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10055610e9f565b610787828261102a565b9061079d610799836101609051101590565b1590565b610a34576107aa826112b6565b926107e66107df855f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de0160205260405f2090565b5460ff1690565b610a26576108349161082f610822865f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de0160205260405f2090565b805460ff19166001179055565b611065565b91610856610851610844846112d5565b67ffffffffffffffff1690565b61108e565b91835f93818111610a13575b505061086d816112e5565b92610877826112f5565b9361088183611305565b61088a906110c3565b9361089484611315565b61089d906110c3565b6108a685611325565b63ffffffff16906108b686611335565b60ff16966108c387611347565b60ff16966108d09061113a565b9760ff16936108de85610b25565b6108e6610b8b565b9a8b5260208b01526001600160a01b031660408a01526001600160a01b0316606089015263ffffffff1660808801526109229060a08801610bca565b60c086015260e085015260ff16916001831480938115610a08575b50156109c6575061099a929161099591610955610b9d565b9384526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020850152604084015215156060830152565b61121f565b5f7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1005561002e60015f55565b9150506109fd610a02926109ef604051938492632498b83f60e21b602085015260248401610c4e565b03601f198101835282610b69565b6111c9565b5061099a565b60029150145f61093d565b610a1e929450610b04565b91835f610862565b623f613760e71b5f5260045ffd5b62dae46b60e61b5f5260045ffd5b3461002a57604036600319011261002a5761002e602435600435610a658261036c565b610a8a6103c5825f525f516020611d1e5f395f51905f52602052600160405f20015490565b610ddf565b3461002a57602036600319011261002a576004355f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de01602052602060ff60405f2054166040519015158152f35b634e487b7160e01b5f52601160045260245ffd5b5f19810191908211610aff57565b610add565b91908203918211610aff57565b634e487b7160e01b5f52602160045260245ffd5b60021115610b2f57565b610b11565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117610b6457604052565b610b34565b90601f8019910116810190811067ffffffffffffffff821117610b6457604052565b60405190610b9b61010083610b69565b565b60405190610b9b608083610b69565b60405190610b9b606083610b69565b60405190610b9b604083610b69565b6002821015610b2f5752565b906002821015610b2f5752565b60e0809180518452602081015160208501526001600160a01b0360408201511660408501526001600160a01b03606082015116606085015263ffffffff6080820151166080850152610c3d60a082015160a0860190610bd6565b60c081015160c08501520151910152565b6101009093929193610c6581610120810196610be3565b0152565b6109fd610c8091610c78610e90565b36905f610ca3565b9060015f55565b67ffffffffffffffff8111610b6457601f01601f191660200190565b929192610caf82610c87565b91610cbd6040519384610b69565b82948184528183011161002a578281602093845f960137010152565b805f525f516020611d1e5f395f51905f5260205260ff610d0d3360405f20906001600160a01b03165f5260205260405f2090565b541615610d175750565b63e2517d3f60e01b5f523360045260245260445ffd5b805f525f516020611d1e5f395f51905f5260205260ff610d618360405f20906001600160a01b03165f5260205260405f2090565b5416610dd957805f525f516020611d1e5f395f51905f52602052610d998260405f20906001600160a01b03165f5260205260405f2090565b805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f525f516020611d1e5f395f51905f5260205260ff610e138360405f20906001600160a01b03165f5260205260405f2090565b541615610dd957805f525f516020611d1e5f395f51905f52602052610e4c8260405f20906001600160a01b03165f5260205260405f2090565b805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b1561002a57565b60025f541461002a5760025f55565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691160361100a576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610ffb57610f0b8282611019565b7fffffffff0000000000000000000000000000000000000000000000000000000091359182169160048210610fc3575b505060e01c91610f788363ffffffff165f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de0060205260405f2090565b54918215610faa5790610f8a916118c1565b03610f925750565b635f45fa3b60e11b5f5263ffffffff1660045260245ffd5b634f1c97f160e11b5f5263ffffffff841660045260245ffd5b7fffffffff0000000000000000000000000000000000000000000000000000000060049290920360031b82901b161690505f80610f3b565b63088b800b60e41b5f5260045ffd5b630919067560e41b5f5260045ffd5b90600c1161002a5760080190600490565b9080604c1161002a57611046913691604b190190604c01610ca3565b90565b359060208110611057575090565b5f199060200360031b1b1690565b90602c1161002a576020600c6110469201611049565b81810292918115918404141715610aff57565b6110469067ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000911661107b565b8060a01c6110d7576001600160a01b031690565b6379ec0ed760e11b5f5260045ffd5b519060ff8216820361002a57565b81601f8201121561002a5780519061110b82610c87565b926111196040519485610b69565b8284526020838301011161002a57815f9260208093018386015e8301015290565b80518101906101408183031261002a5761115760e082015161048b565b61116461010082016110e6565b5061117261012082016110e6565b506101408101519167ffffffffffffffff831161002a576110469260208092019201016110f4565b3d156111c4573d906111ab82610c87565b916111b96040519384610b69565b82523d5f602084013e565b606090565b5f80916020815191017f00000000000000000000000000000000000000000000000000000000000000005af46111fd61119a565b90156112065790565b602081519101fd5b61010081019291610b9b9190610be3565b6112288161150f565b908181528151156112975761126f916112446060830151151590565b15611272575051604051635956364d60e01b6020820152906109fd9082906109ef906024830161120e565b50565b60405163f7e02c2160e01b602082015291506109fd9082906109ef906024830161120e565b5050565b9060018201809211610aff57565b91908201809211610aff57565b60208151106112c6576020015190565b632d0483c560e21b5f5260045ffd5b60408151106112c6576040015190565b60608151106112c6576060015190565b60808151106112c6576080015190565b60a08151106112c65760a0015190565b60c08151106112c65760c0015190565b60e08151106112c65760e0015190565b6101008151106112c657610100015190565b6101208151106112c657610120015190565b60405190610100820182811067ffffffffffffffff821117610b64576040525f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b67ffffffffffffffff8111610b645760051b60200190565b60208183031261002a5780519067ffffffffffffffff821161002a57019080601f8301121561002a578151916113f4836113a7565b926114026040519485610b69565b80845260208085019160051b8301019183831161002a5760208101915b83831061142e57505050505090565b825167ffffffffffffffff811161002a578201906040828703601f19011261002a576040519061145d82610b48565b602083015161146b8161036c565b825260408301519167ffffffffffffffff831161002a57611494886020809695819601016110f4565b8382015281520192019161141f565b9081602091031261002a575190565b6040513d5f823e3d90fd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9061104694936080936001600160a01b038093168452602084015216604082015281606082015201906114bd565b611517611359565b5061152f6040820151602080825183010191016113bf565b602082019061155761154b61154b84516001600160a01b031690565b6001600160a01b031690565b6040516370a0823160e01b815230600482015290602090829060249082905afa908115611841575f916118a2575b506115a161154b61154b6060875101516001600160a01b031690565b6040516370a0823160e01b81523060048201529290602090849060249082905afa928315611841575f93611881575b506001600160a01b036116386115f061154b87516001600160a01b031690565b926116207f000000000000000000000000000000000000000000000000000000000000000094858a5151916118d7565b8751606001513091906001600160a01b031690611ae1565b911661164b85516001600160a01b031690565b9186515191803b1561002a5761167d935f809460405196879586948593633a5be8cb60e01b85523091600486016114e1565b03925af1801561184157611867575b506116a461154b61154b85516001600160a01b031690565b6040516370a0823160e01b81523060048201529190602090839060249082905afa918215611841575f92611846575b50036117a557506117016116ee82516001600160a01b031690565b6060845101906001600160a01b03169052565b815151905b61171982845160e0815191015190611c53565b60e084510152818351528251907fb88fc27be67e678ffb77faf8f8bb00d39b66b4845e4f7ec1e623b0f15abd52136001600160a01b03611765602085015193516001600160a01b031690565b9461179e61177f606087519701516001600160a01b031690565b9183604051948594169816968360209093929193604081019481520152565b0390a45190565b6117c161154b61154b60608651016001600160a01b0390511690565b6040516370a0823160e01b81523060048201529190602090839060249082905afa918215611841575f92611810575b508082106118075761180191610b04565b90611706565b50505f90611706565b61183391925060203d60201161183a575b61182b8183610b69565b8101906114a3565b905f6117f0565b503d611821565b6114b2565b61186091925060203d60201161183a5761182b8183610b69565b905f6116d3565b806118755f61187b93610b69565b806101c5565b5f61168c565b61189b91935060203d60201161183a5761182b8183610b69565b915f6115d0565b6118bb915060203d60201161183a5761182b8183610b69565b5f611585565b90604c1161002a576020602c6110469201611049565b905f806001600160a01b0361196495946040519582602088019663a9059cbb60e01b8852166024880152604487015260448652611915606487610b69565b169260405194611926604087610b69565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af161195e61119a565b91611cf2565b8051801590811561197b575b50610b9b9150610e89565b6020915082908101031261002a5760200151801515810361002a57610b9b905f611970565b906119aa826113a7565b6119b76040519182610b69565b82815280926119c8601f19916113a7565b015f5b8181106119d757505050565b60405190606082019180831067ffffffffffffffff841117610b64576020926040525f81526060838201525f6040820152828286010152016119cb565b8051821015611a285760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b6020815260608101918051926040602084015283518091526080830190602060808260051b8601019501915f905b828210611a90575050505090604060206110469301519101906001600160a01b03169052565b90919295602080600192607f198982030185528951906001600160a01b038251168152604080611acd8585015160608786015260608501906114bd565b930151910152980192019201909291611a6a565b92918351611af6611af18261129b565b6119a0565b925f5b828110611bc7575060405163ef8738d360e01b60208201526001600160a01b03918216602482015290831660448201529394506109ef936110469392611bb8929091611b9c9190611b4b81606481018a565b611b53610bac565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681529060208201525f6040820152611b958287611a14565b5284611a14565b50611ba5610bbb565b9283526001600160a01b03166020830152565b60405192839160208301611a3c565b80611be5611bd76001938a611a14565b51516001600160a01b031690565b6020611bf1838b611a14565b510151611c0e611bff610bac565b6001600160a01b039093168352565b60208201525f6040820152611c238288611a14565b52611c2e8187611a14565b5001611af9565b8115611c3f570490565b634e487b7160e01b5f52601260045260245ffd5b818101809111610aff57670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610aff57808201809211610aff575f198201918211610aff57611c9c91611c35565b670de0b6b3a76400000390670de0b6b3a76400008211610aff57670de0b6b3a7640000808202908282041482151715610aff5782611ce8611ce361104695611ced946112a9565b610af1565b611c35565b610b04565b91925015611d0e57815115611d05575090565b3b1561002a5790565b50805190811561002a57602001fdfe02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220b188a0737e75a6fbcb08abfd746669c92871191880ff77de1912a15144a9a28164736f6c634300081e003360c0346100d157601f6162b338819003918201601f19168301916001600160401b038311848410176100d55780849260409485528339810103126100d157610052602061004b836100e9565b92016100e9565b6001600160a01b0390911660805260a0526040516161b590816100fe823960805181818161087801528181610b680152818161170e01528181611949015281816129f701528181613fc3015281816140b90152818161509c01526152d4015260a051818181610632015281816107aa01528181610d1701526142c20152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100d15756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146125b557508063037a06a41461236a57806304c73f601461234c578063057f0370146122925780631f74a0b51461222057806321081d3c146121e5578063248a9ca3146121a55780632e748b21146120495780632f2ff15d14611ffe578063319adf9f14611c3657806336568abe14611bf157806337710e2014611b9c5780633b1c6a01146118455780633cf3a02514611810578063490e662f146117d55780634b3b029b1461179a578063502a82e2146116dd578063521c98ba14610fa35780635956364d14610f5757806369b97ac714610f3957806379c7b60b14610ee457806379c7f28914610de557806390a0827b14610dac57806391d1485414610d555780639262e0fc14610cbc57806396cc2cfb14610a68578063a217fddf14610a4c578063a38d8fa61461089c578063a4b672b614610858578063af5de6f9146107ce578063c55dae631461078a578063ccbedaec1461050b578063d06e28ed1461041e578063d547741f146103ca578063e38b73a9146103ae578063ea0aaf2414610350578063eb84e7f2146102205763f7e02c21146101c0575f80fd5b3461021d5761010036600319011261021d576101db36612777565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d100541561020e5761020b90614f6d565b80f35b63cd6d8f7d60e01b8252600482fd5b80fd5b503461021d57602036600319011261021d5760408160e09260c083516102458161273b565b82815282602082015282858201528260608201528260808201528260a0820152015260043581527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b03602052206040519061029e8261273b565b6001600160a01b03815416918281526001600160401b0360018301548160208401916001600160a01b038116835263ffffffff60026040870197828460a01c168952606088019360c01c84520154966001600160a01b036080880195858a16875260ff60c060a08b019a828d60401c1615158c52019a60481c1615158a526040519a8b52511660208a015251166040880152511660608601525116608084015251151560a083015251151560c0820152f35b503461021d57602036600319011261021d5760206103a561036f612608565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0560205260405f2090565b54604051908152f35b503461021d578060031936011261021d57602060405160068152f35b503461021d57604036600319011261021d5761041a6004356103ea61261e565b90610415610410825f525f5160206161605f395f51905f52602052600160405f20015490565b613063565b61383f565b5080f35b503461021d57604036600319011261021d57610438612608565b602435906fffffffffffffffffffffffffffffffff82168092036104fc5761045e612ff4565b826104688261317f565b63ffffffff6001600160a01b03608083015116915116813b156104fc57829160448392604051948593849263435354d360e01b845260048401528960248401525af18015610500576104e7575b50506001600160a01b03167f02366c0d102495be1ee805b749be7baebab4fc0710c6d3f38751f1a22bd711648380a380f35b816104f191612756565b6104fc57825f6104b5565b8280fd5b6040513d84823e3d90fd5b503461021d57606036600319011261021d5780610526612608565b61052e612699565b6105366126af565b9061053f612f85565b610579836001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b544311156106de57436105bc846001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b556001600160a01b036001610601856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b015416926001600160401b0382166106e3575b50506001600160401b038116610628575050f35b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683525f5160206161405f395f51905f526020526001600160401b0360046040852001541690823b156106de57604051633ded719760e11b81526001600160401b0392831660048201523360248201529116604482015263ffffffff60648201529082908290608490829084905af18015610500576106cd5750f35b816106d791612756565b61021d5780f35b505050fd5b6001600160a01b031684525f5160206161405f395f51905f526020526001600160401b03600460408620015416833b1561078657604051633ded719760e11b81526001600160401b0391821660048201523360248201529116604482015263ffffffff6064820152838160848183875af190811561077b57849115610614578161076c91612756565b61077757825f610614565b5050fd5b6040513d86823e3d90fd5b8480fd5b503461021d578060031936011261021d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461021d57602036600319011261021d5760206001600160a01b036107fa6107f5612608565b6130b0565b610c2360405161080c85830182612756565b8181528481019161551d8339519020604051908482019260ff60f81b84523060601b6021840152603583015260558201526055815261084c607582612756565b51902016604051908152f35b503461021d578060031936011261021d5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461021d57608036600319011261021d57806108b7612608565b6108bf612699565b60443563ffffffff81168091036106de576001600160a01b036108e0612647565b936108e9612f85565b1684525f5160206161405f395f51905f5260205263ffffffff6001600160401b03600460408720015416931663ffffffff811480610a3f575b156109e657505061096c916001600160401b0361097a926040519233602085015260408401521660608201526060815261095d608082612756565b60405192839160208301614f4b565b03601f198101835282612756565b7333333333333333333333333333333333333333333b156109e357816109bc91604051809381926317938e1360e01b83526020600484015260248301906126c5565b0381837333333333333333333333333333333333333333335af18015610500576106cd5750f35b50fd5b610a3a9261096c946001600160401b0392604051943360208701528860408701526060860152608085015260a08401521660c082015260c08152610a2b60e082612756565b60405192839160208301614f28565b61097a565b5063ffffffff8214610922565b503461021d578060031936011261021d57602090604051908152f35b503461021d57604036600319011261021d57610a82612608565b90610a8b612ff4565b610a9482612cf6565b610a9d8361317f565b92610ab160e083510151840b602435614ea3565b946020840190610ada6001600160401b03835116886001600160401b0360a0890151169161376a565b15610c9357859650610b1c846001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b610b2784825461285f565b90556001600160a01b038416807f410b9a8c926b6c439cdceb39c0bb8f829838a25bc5a26af9d4c263d1313cc46b6020604051878152a26001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610c8f5760405163f3fef3a360e01b81526001600160a01b0383166004820152602481018690529088908290604490829084905af18015610c845785918991610c67575b50506001600160401b0391610bf76001600160a01b0392608060e096019284845116906131e3565b511692511694510151850b93813b15610c6357604051639c45c34b60e01b81526001600160a01b039490941660048501526001600160401b0316602484015260448301919091525f9290920b60648201529082908290608490829084905af18015610500576106cd5750f35b8580fd5b81925090610c7491612756565b610c805783875f610bcf565b8680fd5b6040513d8a823e3d90fd5b8780fd5b6377e88bc960e11b86526001600160a01b0384166004526001600160401b038716602452604486fd5b503461021d5761012036600319011261021d57610cd836612777565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d100541561020e576001600160a01b036060820151166001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145f14610d475761020b906138f2565b61020b9061010435906142c0565b503461021d57604036600319011261021d576001600160a01b036040610d7961261e565b9260043581525f5160206161605f395f51905f526020522091165f52602052602060ff60405f2054166040519015158152f35b503461021d57604036600319011261021d5761020b610dc9612608565b610dd1612f85565b602435906001600160a01b033391166131e3565b503461021d57602036600319011261021d5760a0610e43610e04612608565b610e0c612ccc565b506001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b6001600160a01b03600160405192610e5a846126e9565b63ffffffff8154818116865260ff8160201c1615156020870152818160281c16604087015260481c1660608501520154166080820152610ee260405180926001600160a01b036080809263ffffffff815116855260208101511515602086015263ffffffff604082015116604086015263ffffffff6060820151166060860152015116910152565bf35b503461021d57602036600319011261021d5760206103a5610f03612608565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b503461021d578060031936011261021d576020604051620f42408152f35b503461021d5761010036600319011261021d57610f7336612777565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d100541561020e5761020b906138f2565b503461021d5760a036600319011261021d57610fbd612608565b610fc5612634565b90610fce61265a565b6064356001600160401b038116810361078657608435916001600160401b0383168303610c6357610ffd612f36565b611005612c13565b5061100e612bd5565b508580604051602081019063ffffffff8916825260208152611031604082612756565b519061080c5afa611040612c9d565b90156116ce578051810160208101916020818303126116aa576020810151906001600160401b0382116116ca5701906101009082900312610c8f57604051916110888361271f565b60208201516001600160401b0381116116ca5760209083010181601f820112156116ca57898151916110b983612c82565b926110c76040519485612756565b80845284602082840101116104fc578060208093018386015e83010152835260408201516001600160401b0381116116ca576020908301019080601f830112156116ca578151916001600160401b038311611696578260051b90604051936111326020840186612756565b84526020808501928201019283116116c657602001905b8282106116ae5750505060208301526101009061116860608201613261565b60408401526111796080820161545c565b606084015261118a60a0820161545c565b608084015261119b60c08201615470565b60a08401526111ac60e08201615470565b60c0840152015180880b8082036116aa576111cc9160e0840152846136c8565b50604051916111da83612704565b825263ffffffff87166020830152821515604083015260608201526001600160401b03831660808201526001600160401b03841660a08201526001600160a01b03851687525f5160206161405f395f51905f5260205260408720815180518051906001600160401b0382116116965781908b6112568654612c4a565b601f811161165b575b5050602090601f83116001146115f9578c926115ee575b50508160011b915f199060031b1c19161782555b6001820160208201518051906001600160401b0382116115da576801000000000000000082116115da576020908c845484865580851061158e575b505001918b5260208b20908b5b8160021c8110611549575060031981168103806114ed575b505050506001600160a01b03947f12cf3d04179e82c834f3ee7169a5df80651aa65530127f9ddb04c8cd8224435397946001600160401b039460a06006868896600260809d9901888060408401511616891982541617815560608201517fffffffff0000000000000000000000000000000000000000ffffffffffffffff7bffffffffffffffffffffffffffffffffffffffff000000000000000083549260401b16911617905560038201908c808f83015116166001600160a01b0319835416178255848101519082547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff74ff000000000000000000000000000000000000000060e075ff00000000000000000000000000000000000000000060c086015160a81b1694015160b01b76ff000000000000000000000000000000000000000000001694891b169116171717905561147b6004820188806020880151161689198254161781556040860151151568ff0000000000000000825491151560401b169068ff00000000000000001916179055565b60608401516005820155019185808c8301511616861984541617835501516fffffffffffffffff000000000000000082549160401b16906fffffffffffffffff0000000000000000191617905563ffffffff6040519a168a52151560208a01521660408801521660608601521692a280f35b928c938d5b81811061150b5750505060021c015584848460a06112ea565b909194602061153f6001926001600160401b03895116908560031b6001600160401b03809160031b9316831b921b19161790565b96019291016114f2565b8c8d5b600481106115615750838201556001016112d2565b85519095916001916020916001600160401b0360068a901b81811b199092169216901b179201950161154c565b8382876115ba945220600380870160021c820192601888831b16806115c1575b500160021c01906138dc565b8c5f6112c5565b5f198501908154905f19908a03851b1c1690555f6115ae565b634e487b7160e01b8c52604160045260248cfd5b015190505f80611276565b858d52818d209250601f1984168d5b818110611643575090846001959493921061162b575b505050811b01825561128a565b01515f1960f88460031b161c191690555f808061161e565b92936020600181928786015181550195019301611608565b60208288611685945220601f850160051c8101916020861061168c575b601f0160051c01906138dc565b8b5f61125f565b9091508190611678565b634e487b7160e01b8b52604160045260248bfd5b8880fd5b602080916116bb84613261565b815201910190611149565b8b80fd5b8980fd5b639b0c335d60e01b8752600487fd5b503461021d57604036600319011261021d576116f7612608565b602435611702612f85565b826001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016931692803b156117965760405163f3fef3a360e01b81526001600160a01b0385166004820152602481018490529082908290604490829084905af1801561050057611781575b505061020b9133906131e3565b8161178b91612756565b6104fc57825f611774565b5080fd5b503461021d578060031936011261021d5760206040517f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef68152f35b503461021d578060031936011261021d5760206040517fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1008152f35b503461021d57602036600319011261021d5761182a612f85565b80808080600435335af161183c612c9d565b501561021d5780f35b503461021d57606036600319011261021d5761185f61261e565b6044356001600160a01b03811691828203611a905761187c612ff4565b61188582612cf6565b9161188f826130f8565b610786576040830151156107865760016001600160401b0360808501511601906001600160401b038211611b88579085916118f36118d460e087510151850b846136c8565b509560208101936001600160401b0360a081875116930151169161376a565b156104fc57611932906001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0560205260405f2090565b61193d85825461285f565b90556001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156104fc5760405163f3fef3a360e01b81526001600160a01b0387166004820152602481018690529083908290604490829084905af1908115611b7d578391611b68575b5050516001600160401b031680611a945750506119cc82846151be565b736b9e773128f453f5c2c60935ee2de2cbc5390a243b15611a90578360405163611e2a2d60e11b81526001600160a01b038316600482015283602482015263ffffffff6044820152818160648183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561050057611a7b575b50506001600160a01b03905b60405192835216907f2b348084e891b20d449a69f90114c5ab7bf7c84d64c25445c8ab440d469a6b4d602060043592a480f35b81611a8591612756565b611a9057835f611a3c565b8380fd5b611adc81611aae86611aa861096c95615157565b8961517d565b604051906001600160a01b03861660208301526040820152600160608201526060815261095d608082612756565b7333333333333333333333333333333333333333333b156117965781611b1e91604051809381926317938e1360e01b83526020600484015260248301906126c5565b0381837333333333333333333333333333333333333333335af1801561050057611b53575b50506001600160a01b0390611a48565b81611b5d91612756565b611a9057835f611b43565b81611b7291612756565b61179657815f6119af565b6040513d85823e3d90fd5b634e487b7160e01b86526011600452602486fd5b503461021d57602036600319011261021d5760206103a5611bbb612608565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b503461021d57604036600319011261021d57611c0b61261e565b336001600160a01b03821603611c275761041a9060043561383f565b63334bd91960e11b8252600482fd5b503461021d57602036600319011261021d576001600160a01b03611c58612608565b611c60612c13565b501681525f5160206161405f395f51905f52602052604081209060405190611c8782612704565b604051611c938161271f565b60405184548184611ca383612c4a565b8083529260018116908115611fdf5750600114611f9e575b611cc792500382612756565b815260018401604051808260208294549384815201908652602086209286905b806003830110611f4c57611d1d945491818110611f32575b818110611f15575b818110611ef8575b10611eea575b500382612756565b60208201526001600160a01b0360028501546001600160401b038116604084015260401c16606082015260038401546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c820b60e0820152825260048301549260208301906001600160401b038516825260ff604085019560401c161515855260066005820154916060860192835201549460808501926001600160401b03871684526001600160401b0360a087019760401c1687526040519560208752519460c06020880152611e04865161010060e08a01526101e08901906126c5565b60208088015189830360df19016101008b015280518084529282019892910190835b818110611ecb57505050926001600160401b03809693899a969360e0878c610120866040819c0151169101528c6101406001600160a01b036060840151169101528c6101606001600160a01b036080840151169101528c61018060ff60a0840151169101528c6101a060ff60c0840151169101520151900b6101c08b0152511660408901525115156060880152516080870152511660a0850152511660c08301520390f35b82516001600160401b03168a526020998a019990920191600101611e26565b60c01c81526020015f611d15565b9260206001916001600160401b038560801c168152019301611d0f565b9260206001916001600160401b038560401c168152019301611d07565b9260206001916001600160401b0385168152019301611cff565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019401920184929391611ce7565b5090868552602085209085915b818310611fc3575050906020611cc792820101611cbb565b6020919350806001915483858801015201910190918392611fab565b60209250611cc794915060ff191682840152151560051b820101611cbb565b503461021d57604036600319011261021d5761041a60043561201e61261e565b90612044610410825f525f5160206161605f395f51905f52602052600160405f20015490565b613798565b503461021d57608036600319011261021d57612063612608565b61206b612699565b6120736126af565b90606435926fffffffffffffffffffffffffffffffff84168094036107865761209a612ff4565b846120a48261317f565b926001600160a01b0360808501511693843b156104fc5761212e6101048492836001600160401b03806040519788968795636f0d192560e11b875260048701906001600160a01b036080809263ffffffff815116855260208101511515602086015263ffffffff604082015116604086015263ffffffff6060820151166060860152015116910152565b169a8b60a485015216988960c48401528b60e48401525af1801561050057612190575b50506001600160a01b036040917f500d805a349357fe5d4759fe052d79bd744b82c8452837f52a7456ec7d3d751c93835195865260208601521692a380f35b8161219a91612756565b61078657845f612151565b503461021d57602036600319011261021d5760206121dd6004355f525f5160206161605f395f51905f52602052600160405f20015490565b604051908152f35b503461021d578060031936011261021d5760206040517f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f8152f35b503461021d57606036600319011261021d5761223a612608565b6024356001600160401b0381116104fc57612259903690600401612669565b9092604435906001600160401b03821161021d5760206121dd8686866122823660048901612669565b93909261228d612ff4565b61286c565b5034612348576040366003190112612348576122ac612608565b906024356122b8612f85565b6001600160a01b0360806122cb8561317f565b015116803b15612348576040516390a0827b60e01b81526001600160a01b038516600482015260248101839052905f908290604490829084905af1801561233d57612327575b5061020b91926001600160a01b033391166131e3565b61020b92505f61233691612756565b5f91612311565b6040513d5f823e3d90fd5b5f80fd5b34612348575f3660031901126123485760206040516305f5e1008152f35b346123485760a036600319011261234857612383612608565b61238b612634565b61239361265a565b9161239c612647565b926084359163ffffffff8316809303612348576123b881612cf6565b506123c1612f36565b6001600160a01b036001612405836001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b015416908115612564575b63ffffffff60405195612422876126e9565b16948581526001600160a01b03600181602084019615159586885263ffffffff604086019b1697888c52606086018a8152836080880193169c8d845263ffffffff61249d8a6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b985116926cffffffff00000000000000000068ffffffff000000000064ff000000008b549351151560201b16935160281b16935160481b16936cffffffff000000000000000000199168ffffffffffffffffff1916171617171785555116920191166001600160a01b0319825416179055612517866130f8565b15612348577ff0dcc8957a27613dd82c92382ad37254b9744169d0caa5f3873cfec7ba794eb9936080936001600160a01b03936040519788526020880152604087015260608601521692a3005b905061256f816130b0565b604051610c238082018281106001600160401b038211176125a157829161551d833903905ff5801561233d5790612410565b634e487b7160e01b5f52604160045260245ffd5b34612348576020366003190112612348576004359063ffffffff60e01b821680920361234857602091637965db0b60e01b81149081156125f7575b5015158152f35b6301ffc9a760e01b149050836125f0565b600435906001600160a01b038216820361234857565b602435906001600160a01b038216820361234857565b6024359063ffffffff8216820361234857565b6064359063ffffffff8216820361234857565b60443590811515820361234857565b9181601f84011215612348578235916001600160401b038311612348576020808501948460051b01011161234857565b602435906001600160401b038216820361234857565b604435906001600160401b038216820361234857565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b60a081019081106001600160401b038211176125a157604052565b60c081019081106001600160401b038211176125a157604052565b61010081019081106001600160401b038211176125a157604052565b60e081019081106001600160401b038211176125a157604052565b90601f801991011681019081106001600160401b038211176125a157604052565b61010090600319011261234857604051906127918261271f565b81600435815260243560208201526044356001600160a01b03811681036123485760408201526064356001600160a01b038116810361234857606082015260843563ffffffff8116810361234857608082015260a43560028110156123485760a082015260c43560c082015260e060e435910152565b91908110156128175760051b0190565b634e487b7160e01b5f52603260045260245ffd5b906001600160401b03809116911601906001600160401b03821161284b57565b634e487b7160e01b5f52601160045260245ffd5b9190820180921161284b57565b9194935f935f96828103612348576128b4856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b544311156123485792906128c785612cf6565b9160806128d38761317f565b01916001600160a01b03835116946128fa60208601966001600160401b0388511690613275565b965f975b818d10612b6a575b50508a159250612b5f915050574361294e866001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b556001600160401b03841680612968575b50505050505050565b61297d6129a09560e0855101515f0b906136c8565b6001600160401b03869792975116906001600160401b0360a0870151169161376a565b15612b4057506129e0856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b6129eb85825461285f565b90556001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166001600160a01b03861690803b156123485760405163f3fef3a360e01b81526001600160a01b038316600482015260248101879052905f908290604490829084905af1801561233d57612b14575b506001600160a01b0382612a88876001600160401b03948460e0975116906131e3565b511693511691510151850b93823b15610c6357604051639c45c34b60e01b81526001600160a01b0390911660048201526001600160401b03909116602482015260448101929092525f9290920b606482015290829082908183816084810103925af1801561050057612aff575b808080808061295f565b612b0a828092612756565b61021d5780612af5565b6001600160401b0391975060e092612b345f6001600160a01b0393612756565b5f989093509150612a65565b6001600160a01b03866377e88bc960e11b5f521660045260245260445ffd5b505f96505050505050565b612b798d83879f9b9697612807565b3590612b868a8588612807565b356001600160401b038116810361234857612baf92898d926001600160a01b038b511692613357565b94909115612bcd57600191612bc39161282b565b98019b93926128fe565b989c50612906565b60405190612be28261271f565b5f60e08360608152606060208201528260408201528260608201528260808201528260a08201528260c08201520152565b60405190612c2082612704565b5f60a083612c2c612bd5565b81528260208201528260408201528260608201528260808201520152565b90600182811c92168015612c78575b6020831014612c6457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612c59565b6001600160401b0381116125a157601f01601f191660200190565b3d15612cc7573d90612cae82612c82565b91612cbc6040519384612756565b82523d5f602084013e565b606090565b60405190612cd9826126e9565b5f6080838281528260208201528260408201528260608201520152565b6001600160a01b0390612d07612c13565b50165f525f5160206161405f395f51905f5260205260405f2060405191612d2d83612704565b60405191612d3a8361271f565b6040518154815f612d4a83612c4a565b8083529260018116908115612f175750600114612ed6575b612d6e92500382612756565b8352600181019360405180602087549182815201965f5260205f20905f915b816003840110612e8a5797612dce9284926001600160a01b039798999a5491818110611f3257818110611f1557818110611ef85710611eea57500382612756565b60208601528160028401546001600160401b038116604088015260401c1660608601526001600160401b0360066003850154946080880197858716895260ff8760a01c1660a082015260c081019660ff8160a81c16885260b01c5f0b60e0820152845260ff6004820154848116602087015260401c1615156040850152600581015460608501520154818116608084015260401c1660a082015293511615159081612e7c575b501561234857565b60ff9150511615155f612e74565b97600160806004928b546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019901920191612d8d565b5090835f5260205f20905f915b818310612efb575050906020612d6e92820101612d62565b6020919350806001915483858801015201910190918392612ee3565b60209250612d6e94915060ff191682840152151560051b820101612d62565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615612f6e57565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527f176c3a4e1b4d1d61213187c0dde7f83e2e2c933a339cb5403b4090bc2f0aa49a602052604090205460ff1615612fbd57565b63e2517d3f60e01b5f52336004527f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f60245260445ffd5b335f9081527fcf7720576cdb70176b3017d893bcb89ba0f36ed0261d4350fd0180e938b3bacd602052604090205460ff161561302c57565b63e2517d3f60e01b5f52336004527f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef660245260445ffd5b805f525f5160206161605f395f51905f5260205260405f206001600160a01b0333165f5260205260ff60405f2054161561309a5750565b63e2517d3f60e01b5f523360045260245260445ffd5b60405160208101913060601b83526bffffffffffffffffffffffff199060601b166034820152602881526130e5604882612756565b51902090565b5190811515820361234857565b5f80916040516001600160a01b0360208201921682526020815261311d604082612756565b51906108105afa61312c612c9d565b9015613170576020818051810103126123485760405190602082018281106001600160401b038211176125a157604052613168906020016130eb565b809152151590565b6313dd7ccd60e31b5f5260045ffd5b61318b90610e0c612ccc565b906001600160a01b036001604051936131a3856126e9565b63ffffffff8154818116875260ff8160201c1615156020880152818160281c16604088015260481c16606086015201541691826080820152911561234857565b916001600160a01b036040519263a9059cbb60e01b5f521660045260245260205f60448180865af19060015f5114821615613240575b604052156132245750565b6001600160a01b0390635274afe760e01b5f521660045260245ffd5b90600181151661325857823b15153d15161690613219565b503d5f823e3d90fd5b51906001600160401b038216820361234857565b5f919082916001600160401b03604051916001600160a01b036020840194168452166040820152604081526132ab606082612756565b51906108015afa6132ba612c9d565b901561332857606081805181010312612348576040519060608201918083106001600160401b038411176125a1576001600160401b03926040526040613321606061330760208601613261565b94858552613316848201613261565b602086015201613261565b9101521690565b639d2c8fcb60e01b5f5260045ffd5b906001600160401b03809116911603906001600160401b03821161284b57565b959291909395805f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205260405f206001600160a01b0381541695861561365057600282019889549860ff8a60481c166136415760018401956001600160a01b03875493166001600160a01b0384160361362e575f916133d88b6130f8565b1561360e575b8360c01c9c8c60ff6001600160401b0382169160401c165f146135b457508d8e966001600160401b03811682115f146135ac5761341a91613337565b9c5b6001600160401b0380861697169287841115612348578f8f966134429061344a92613337565b969f8261282b565b936001600160401b03851610613597575069ff0000000000000000001916690100000000000000000017905560019c61348291613337565b99815160e001515f0b613495908d6136c8565b50986001600160a01b031691602001516001600160401b031691803b15612348575f928360849263ffffffff6001600160401b036040519889978896633ded719760e11b885260048801526024870152169889604486015260a01c1660648401525af1801561233d577f53b9d5645f8b7ccd861ebd6036860fd21716451d1f238cb3720f12f3c49b0c43946040946001600160a01b03938493613587575b508061354e575b5054169554169582519182526020820152a4565b82825416887f5adc50a7f1e65d6b397176e0807a39bd0ba27293997500a57ca2cc1359583ccb6020868d5416948a51908152a45f61353a565b5f61359191612756565b5f613533565b5f9f508f9e509c505050505050505050505050565b50505f61341a565b909d95809d96806001600160401b038316105f14613603576135e0916135d991613337565b809e61282b565b816001600160401b038216115f146135fc57505b9c8d9561341c565b90506135f4565b50506135e05f6135d9565b9150604081015115612348576001600160401b03608082015116916133de565b8563358d72d160e01b5f5260045260245ffd5b63f7348a7960e01b5f5260045ffd5b631a40316d60e01b5f5260045ffd5b60ff16604d811161284b57600a0a90565b9190820391821161284b57565b8115613687570490565b634e487b7160e01b5f52601260045260245ffd5b90620f4240820291808304620f4240149015171561284b57565b8181029291811591840414171561284b57565b9190805f0b80155f146136e65750506001600160401b03821691905b565b5f81131561371157506136fe61370d9160ff1661365f565b6001600160401b0384166136b5565b9190565b9050607f19811461284b576001600160401b039261373661373f925f0360ff1661365f565b9384911661285f565b5f19810190811161284b5761376661375f846001600160401b039361367d565b93846136b5565b1690565b6137906001600160401b03929361378a849361378581615157565b613275565b9461282b565b169116101590565b805f525f5160206161605f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f205416155f1461383957805f525f5160206161605f395f51905f5260205260405f206001600160a01b0383165f5260205260405f20600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f525f5160206161605f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f2054165f1461383957805f525f5160206161605f395f51905f5260205260405f206001600160a01b0383165f5260205260405f2060ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b8181106138e7575050565b5f81556001016138dc565b6060810151906001600160a01b035f921691825f525f5160206161405f395f51905f5260205260405f206040519061392982612704565b6040516139358161271f565b6040518254815f61394583612c4a565b80835292600181169081156142a15750600114614260575b61396992500382612756565b815260018201604051808260208294549384815201905f5260205f20925f905b80600383011061420e576139bb945491818110611f3257818110611f1557818110611ef85710611eea57500382612756565b60208201526001600160a01b0360028301546001600160401b038116604084015260401c16606082015260038201546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e08201528252600481015492600660208401926001600160401b038616845260ff604086019660401c16151586526005810154606086015201549260808101936001600160401b03811685526001600160401b0360a083019160401c1681525f946040880196613a906001600160a01b038951166130f8565b15614141575b5050865192612710613abc613ab160e08b019687519061285f565b60c08b0151906136b5565b0494845195808711614139575b5085614097575b613b08613aef613ae1888c5161285f565b60e0875101515f0b90614ea3565b919094826001600160401b03808651169251169161376a565b15614048575085613fb9575b6001600160401b0390613b578b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b613b6288825461285f565b9055511692613b8e60e06001600160a01b038a511692510151830b63ffffffff60808c01511694614ea3565b9390916001600160401b03891695866001600160401b0387161115613faa57908392918d97969594613c70575b50505050507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613beb91613337565b5080613c2e575b5050613c296001600160a01b0360208701519551169551915192604051938493846040919493926060820195825260208201520152565b0390a4565b60208701517f5adc50a7f1e65d6b397176e0807a39bd0ba27293997500a57ca2cc1359583ccb60206001600160a01b0389511693604051908152a4855f613bf2565b809791929394959697155f14613e01575083613c8b916151be565b308103613d4a5750736b9e773128f453f5c2c60935ee2de2cbc5390a243b156104fc5760405191630acb7f4b60e21b835260048301526024820152818160448183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561050057908a94939291613d27575b50507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613beb915b9181975f80613bbb565b818093949697989550613d3991612756565b61021d579081899396959492613cf4565b91736b9e773128f453f5c2c60935ee2de2cbc5390a243b15611a90576040519263611e2a2d60e11b8452600484015260248301526044820152818160648183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561050057908a94939291613dde575b50507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613beb91613d1d565b818093949697989550613df091612756565b61021d579081899396959492613db1565b9096959493613e1690611aa883959495615157565b308314801590613f9c575b613e55575b505050507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613beb91613d1d565b90919293949550613e668986613337565b9163ffffffff811480613f94575b15613f455750916001600160401b03613eae9261096c9460405193602085015260408401521660608201526060815261095d608082612756565b7333333333333333333333333333333333333333333b156117965781613ef091604051809381926317938e1360e01b83526020600484015260248301906126c5565b0381837333333333333333333333333333333333333333335af1801561050057908a94939291613f22575b8080613e26565b818093949697989550613f3491612756565b61021d579081899396959492613f1b565b613f8f9261096c94926001600160401b039260405194602086015287604086015263ffffffff6060860152608085015260a08401521660c082015260c08152610a2b60e082612756565b613eae565b506001613e74565b5063ffffffff821415613e21565b6306506d5560e11b8552600485fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156123485760405163f3fef3a360e01b81526001600160a01b038c16600482015260248101889052905f908290604490829084905af1801561233d5761402c575b50613b14565b6140399192505f90612756565b5f906001600160401b03614026565b989450505050507f8d61555dcf69ba745e97fdea78e2652d9cdd464ca521faad482fe796f6d5841c93506020925082915061408281614f6d565b0151926001600160401b0360405191168152a3565b6140a6868b60208c01516152c5565b613ad0576040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048201529095506020816024818d5afa90811561233d575f91614107575b5094613ad0565b90506020813d602011614131575b8161412260209383612756565b8101031261234857515f614100565b3d9150614115565b95505f613ac9565b9091955060a088015160028110156141fa57159081806141ed575b6141d05781156141c6575b5061417e57516001600160401b0316935f80613a96565b50505050506136e492507f31604f5790fbed7a37471cea010a8f08483441a6e1235ac48bb59337439a630d60206001600160a01b0381850151935116604051908152a2614f6d565b905051155f614167565b6001600160a01b038851166320a2097d60e11b5f5260045260245ffd5b5060c0890151151561415c565b634e487b7160e01b5f52602160045260245ffd5b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019401920184929391613989565b5090845f5260205f20905f915b8183106142855750509060206139699282010161395d565b602091935080600191548385880101520191019091839261426d565b6020925061396994915060ff191682840152151560051b82010161395d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811691825f525f5160206161405f395f51905f5260205260405f206040519361431185612704565b60405161431d8161271f565b6040518354815f61432d83612c4a565b8083529260018116908115614e845750600114614e43575b61435192500382612756565b815260018301604051808260208294549384815201905f5260205f20925f905b806003830110614df1576143a3945491818110611f3257818110611f1557818110611ef85710611eea57500382612756565b60208201526001600160a01b0360028401546001600160401b038116604084015260401c16606082015260038301546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e08201528552600660048301549260ff60208801946001600160401b038116865260401c1615156040880152600581015460608801520154956001600160401b03871660808701526001600160401b0360a087019760401c16875260608401936001600160a01b038551165f525f5160206161405f395f51905f5260205260405f20946040519561448f87612704565b60405161449b8161271f565b6040518254815f6144ab83612c4a565b8083529260018116908115614dd25750600114614d91575b6144cf92500382612756565b815260018201604051808260208294549384815201905f5260205f20925f905b806003830110614d3f57614521945491818110611f3257818110611f1557818110611ef85710611eea57500382612756565b60208201526001600160a01b0360028301546001600160401b038116604084015260401c16606082015260038201546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e082015287526001600160401b03600660048301549282841660208b015260ff60408b019460401c1615158452600581015460608b0152015481811660808a015260401c1660a08801526145da6001600160a01b0383511661317f565b9360408401916145f36001600160a01b038451166130f8565b15614c90575b5083519760e085019182519160c087019a8b511515936146189161285f565b8d5160e001515f0b61462991614ea3565b90508d5160c0015160ff16825160c0015160ff169061464792615492565b9215614c625782915b5f8063ffffffff8b51166040516020810191825260208152614673604082612756565b51906108085afa614682612c9d565b9015614c535760208180518101031261234857898f9360ff60a06146d09260206001600160401b036146b8826146d69901613261565b16950197885115155f14614c4857505101511661365f565b906136b5565b825115614bfe5763ffffffff6146f18160608d0151166153a8565b16620f4240019081620f42401161284b57614727620f4240916146d06001600160401b039463ffffffff8f60400151169061285f565b0416908c51908115155f14614bf65750915b5115614bb5576305f5e100811015614b7557505f5b61476e61475b865161369b565b6147688a5188519061285f565b9061285f565b5f1981019190821161284b576147686147949261478e8b5189519061285f565b9061367d565b606480830283810482148415171561284b578211614afb5750505085518c5160e001515f0b6147c291614ea3565b9d8e8b9c929c516001600160401b031691516001600160401b0316906147e79261376a565b15614aab579c8a9b9c9d85516001600160a01b03169287516001600160a01b03169460808a015163ffffffff1692511515604051956148258761273b565b8652602086019687526040860193845260608601916001600160401b03169586835260808101936001600160401b03169788855260a0820192835260c08201938d5f86526020019687515f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205260405f2093516001600160a01b03166001600160a01b031684546001600160a01b0319161784556001840192516001600160a01b03166001600160a01b031683546001600160a01b03191617835551908254905160c01b7fffffffffffffffff000000000000000000000000000000000000000000000000169160a01b77ffffffff000000000000000000000000000000000000000016906001600160a01b03161717905560020192516001600160401b03166001600160401b03166001600160401b031984541617835551151561498e90839068ff0000000000000000825491151560401b169068ff00000000000000001916179055565b51151581549060481b69ff000000000000000000169069ff00000000000000000019161790555194516001600160a01b031695516001600160a01b03169651935160405194855260208501526001600160401b031660408401526060830152608082015260a07f550576b2f9e0ac12dfd5dd2d5743b5b7f11f34302b5f6bec6ad60db81bd6a91891a4608001516001600160a01b03169283614a2f926131e3565b516001600160401b0316935160e001515f0b93813b1561234857604051639c45c34b60e01b81526001600160a01b039490941660048501526001600160401b0316602484015260448301919091525f92830b60648301529091908290608490829084905af1801561233d57614aa15750565b5f6136e491612756565b50505050509450955050925050816136e4947f8d61555dcf69ba745e97fdea78e2652d9cdd464ca521faad482fe796f6d5841c602080870151926001600160401b0360405191168152a352614f6d565b999c5099509c50505050509450809650602091500151906001600160a01b038451169281810180911161284b575f19810190811161284b578115613687576136e4977fc8f90125c6a36c77a571201afc10310420481ab4895fadabb596d0ba71c22e3e92604092049082519182526020820152a3526138f2565b6305f5e0ff19016001600160401b03811161284b57614baf614ba46001600160401b036305f5e100931661369b565b6305f5e0ff9061285f565b0461474e565b6305f5e100811115614bc857505f61474e565b6305f5e100036001600160401b03811161284b57614baf614ba46001600160401b036305f5e100931661369b565b905091614739565b63ffffffff614c128160608d0151166153a8565b16620f42400390620f4240821161284b57614727620f4240916146d06001600160401b039463ffffffff8f604001511690613670565b90505101511661365f565b635cffc5fb60e11b5f5260045ffd5b8161271003612710811161284b57612710614c876001600160401b03928387166136b5565b04169291614650565b60a085015160028110156141fa5715908180614d32575b614d15578115614d0b575b50614cbd575f6145f9565b509450945095505092506136e494507f31604f5790fbed7a37471cea010a8f08483441a6e1235ac48bb59337439a630d60206001600160a01b0381870151935116604051908152a252614f6d565b905051155f614cb2565b6001600160a01b038451166320a2097d60e11b5f5260045260245ffd5b5060c08601511515614ca7565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c60608201520194019201849293916144ef565b5090845f5260205f20905f915b818310614db65750509060206144cf928201016144c3565b6020919350806001915483858801015201910190918392614d9e565b602092506144cf94915060ff191682840152151560051b8201016144c3565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019401920184929391614371565b5090855f5260205f20905f915b818310614e6857505090602061435192820101614345565b6020919350806001915483858801015201910190918392614e50565b6020925061435194915060ff191682840152151560051b820101614345565b9190805f0b9081155f14614ecf575050815b6001600160401b038111612348576001600160401b031690565b5f821315614f0757614ee4915060ff1661365f565b91821561368757614efb8184614f02930690613670565b928361367d565b614eb5565b505f0380805f0b0361284b57614f22614f029160ff1661365f565b836136b5565b630100000d60e01b8152815160049290919082906020018483015e01015f815290565b6280000360e11b8152815160049290919082906020018483015e01015f815290565b8051612710614f90614f8560e085019384519061285f565b60c0850151906136b5565b0481518181115f1461514f5750905b81906020840191614fc283519460608701956001600160a01b03875116906152c5565b15615148575b80615092575b7f4755f239bb1b047245415cb917deced72a3ca8baebcef109c396ff332ea6f50f91613c296001600160a01b0380615007858a5161285f565b9661501f828a51169860408c0199848b5116906131e3565b61505c828a51166001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b61506787825461285f565b9055519651169651169651915192604051938493846040919493926060820195825260208201520152565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0385511692803b156123485760405163f3fef3a360e01b81526001600160a01b03949094166004850152602484018390525f908490604490829084905af192831561233d577f4755f239bb1b047245415cb917deced72a3ca8baebcef109c396ff332ea6f50f93615138575b509150614fce565b5f61514291612756565b5f615130565b505f614fc8565b905090614f9f565b6001600160401b03166001609d1b01806001609d1b1161284b576001600160a01b031690565b60405163a9059cbb60e01b60208201526001600160a01b039290921660248301526044808301939093529181526136e4916151b9606483612756565b6153c3565b9060405190602082019063095ea7b360e01b8252736b9e773128f453f5c2c60935ee2de2cbc5390a246024840152604483015260448252615200606483612756565b5f806001600160a01b0385169284519082855af19061521d612c9d565b8261528b575b5081615280575b5015615234575050565b6136e4916151b960405163095ea7b360e01b6020820152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248201525f60448201526044815261527a606482612756565b826153c3565b90503b15155f61522a565b805191925081159182156152a3575b5050905f615223565b81925090602091810103126123485760206152be91016130eb565b5f8061529a565b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811660048301529092169392909190602082602481885afa91821561233d575f92615374575b5080821094851595615335575b50505050565b7f5180f0ad9e9bd2296de2ee38c85d11c56613fa73f8ee66792f26ac318f1274749260609260405192835260208301526040820152a25f80808061532f565b9091506020813d6020116153a0575b8161539060209383612756565b810103126123485751905f615322565b3d9150615383565b63ffffffff60649116029063ffffffff821691820361284b57565b906001600160a01b0361542492165f80604051936153e2604086612756565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af161541e612c9d565b916154f1565b805190811591821561543a575b50501561234857565b819250906020918101031261234857602061545591016130eb565b5f80615431565b51906001600160a01b038216820361234857565b519060ff8216820361234857565b9060ff8091169116039060ff821161284b57565b9160ff811660ff83168181145f146154ab575050505090565b6001600160401b0394929111156154d9576154d26154cd61376694869361547e565b61365f565b91166136b5565b6154ea6154cd85926137669561547e565b911661367d565b9192501561550d57815115615504575090565b3b156123485790565b50805190811561234857602001fdfe60a080604052346100455733608052610bd9908161004a8239608051818181607b01528181610187015281816103590152818161065a0152818161070101526108d20152f35b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c8063435354d3146108905780637bdae32e1461069b57806390a0827b146106365780639c45c34b1461030d578063de1a324a146100a25763eba61c0e1461005c575f80fd5b3461009f578060031936011261009f5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b503461009f57366003190161010081126102f55760a01361009f5760405160a0810181811067ffffffffffffffff8211176102f9576040526100e2610961565b918282526024359182151583036102f5576020810192835260443563ffffffff811681036102f1576040820152610117610974565b6060820152608435906001600160a01b03821682036102f1576080015260a43567ffffffffffffffff81168091036102f55760c4359067ffffffffffffffff82168092036102f15760e435946fffffffffffffffffffffffffffffffff86168096036102ed576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102ed5763ffffffff6101bc91166109d3565b935115159281156102de5782156102cf57916102509391600493506040519263ffffffff60208501971687526040840152606083015260808201525f945f60a0830152600260c083015260e082015260e0815261021b6101008261099d565b6020604051948592630100000160e01b83850152518091602485015e8201018281015f8152500301601f19810183528261099d565b7333333333333333333333333333333333333333333b156102cb575f61028a91604051809381926317938e1360e01b835260048301610a00565b0381837333333333333333333333333333333333333333335af180156102c0576102b2575080f35b6102be91505f9061099d565b005b6040513d5f823e3d90fd5b5f80fd5b6313c0a8df60e01b8152600490fd5b63017461b760e71b8152600490fd5b8380fd5b8280fd5b5080fd5b634e487b7160e01b83526041600452602483fd5b503461009f57608036600319011261009f57610327610987565b6024359067ffffffffffffffff82168092036102f1576044359060643580850b90818103610632576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361063257816105b4575050815b67ffffffffffffffff81116105b05767ffffffffffffffff169283156105a15790829185936103c0575b836103bc86610b0c565b5080f35b8061055857506001600160a01b031660405183806020830163095ea7b360e01b8152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248501528560448501526044845261041160648561099d565b83519082865af1610420610b28565b81610529575b508061051f575b156104c7575b5050736b9e773128f453f5c2c60935ee2de2cbc5390a243b156102f55760405190630acb7f4b60e21b8252600482015263ffffffff6024820152818160448183736b9e773128f453f5c2c60935ee2de2cbc5390a245af180156104bc576104a7575b50506103bc905b9050815f80806103b2565b816104b19161099d565b6102f557815f610495565b6040513d84823e3d90fd5b6105189161051360405163095ea7b360e01b6020820152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248201528660448201526044815261050d60648261099d565b82610a7b565b610a7b565b5f80610433565b50813b151561042d565b805180159250821561053e575b50505f610426565b6105519250602080918301019101610a63565b5f80610536565b909192506001609d1b01806001609d1b1161058d5791610588916001600160a01b03806103bc9695169116610a2a565b61049c565b634e487b7160e01b85526011600452602485fd5b6306506d5560e11b8552600485fd5b8480fd5b858213156105f6576105c9915060ff16610b67565b80156105e257808306830392831161058d578204610388565b634e487b7160e01b85526012600452602485fd5b5084038080860b0361058d5761060e9060ff16610b67565b82818102918183041490151761038857634e487b7160e01b85526011600452602485fd5b8580fd5b503461009f57604036600319011261009f57610650610987565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102f55761069890602435906001600160a01b03339116610a2a565b80f35b503461009f57608036600319011261009f578060043567ffffffffffffffff811680910361080d57602435906001600160a01b03821680920361088c576044359167ffffffffffffffff831680930361088a576106f6610974565b926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036105b05763ffffffff602094169263ffffffff841480610882575b156108105761079b93506040519285840152604083015260608201526060815261076960808261099d565b6004604051938492818401906280000360e11b82528051928391018483015e01015f815203601f19810183528261099d565b7333333333333333333333333333333333333333333b1561080d57816107d591604051809381926317938e1360e01b835260048301610a00565b0381837333333333333333333333333333333333333333335af180156104bc576107fc5750f35b816108069161099d565b61009f5780f35b50fd5b61087d93604051938685015286604085015263ffffffff6060850152608084015260a083015260c082015260c0815261084a60e08261099d565b600460405193849281840190630100000d60e01b82528051928391018483015e01015f815203601f19810183528261099d565b61079b565b50600161073e565b505b5050fd5b50346102cb5760403660031901126102cb576108aa610961565b602435906fffffffffffffffffffffffffffffffff82168092036102cb576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102cb576004610906610250926109d3565b926040519063ffffffff602083019516855260408201526040815261092c60608261099d565b6020604051948592630100000b60e01b83850152518091602485015e8201018281015f8152500301601f19810183528261099d565b6004359063ffffffff821682036102cb57565b6064359063ffffffff821682036102cb57565b600435906001600160a01b03821682036102cb57565b90601f8019910116810190811067ffffffffffffffff8211176109bf57604052565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff6127109116019063ffffffff82116109ec57565b634e487b7160e01b5f52601160045260245ffd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b610a61926001600160a01b036040519363a9059cbb60e01b602086015216602484015260448301526044825261051360648361099d565b565b908160209103126102cb575180151581036102cb5790565b906001600160a01b03610adc92165f8060405193610a9a60408661099d565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1610ad6610b28565b91610b78565b8051908115918215610af2575b5050156102cb57565b610b059250602080918301019101610a63565b5f80610ae9565b67ffffffffffffffff169067ffffffffffffffff82116109ec57565b3d15610b62573d9067ffffffffffffffff82116109bf5760405191610b57601f8201601f19166020018461099d565b82523d5f602084013e565b606090565b60ff16604d81116109ec57600a0a90565b91925015610b9457815115610b8b575090565b3b156102cb5790565b5080519081156102cb57602001fdfea2646970667358221220957eb92bf34977f1dbc400ded4a4688729e475d059af2473160b1dcd76c46a2064736f6c634300081e00336c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220a4585ce27249e5aced6f7fb67b49145c526d0fb9b1c245b8ddbbc9d72f4aac4364736f6c634300081e0033bd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ffb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800"}
1
+ {"abi":[{"type":"constructor","inputs":[{"name":"_oftEndpoint","type":"address","internalType":"address"},{"name":"_ioft","type":"address","internalType":"address"},{"name":"_donationBox","type":"address","internalType":"address"},{"name":"_baseToken","type":"address","internalType":"address"},{"name":"_multicallHandler","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"AUTHORIZED_FUNDED_FLOW_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DIRECT_CALLER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"FUNDS_SWEEPER_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"IOFT_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"OFT_ENDPOINT_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"PERMISSIONED_BOT_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"authorizedSrcPeripheryContracts","inputs":[{"name":"srcEid","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"baseToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"decimalConversionRate","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"executeDirect","inputs":[{"name":"tokenSent","type":"address","internalType":"address"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"composeMsg","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"hyperCoreModule","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"lzCompose","inputs":[{"name":"_oApp","type":"address","internalType":"address"},{"name":"","type":"bytes32","internalType":"bytes32"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"multicallHandler","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAuthorizedPeriphery","inputs":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"srcPeriphery","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"usedNonces","inputs":[{"name":"nonce","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"ArbitraryActionsExecuted","inputs":[{"name":"quoteNonce","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"initialToken","type":"address","indexed":true,"internalType":"address"},{"name":"initialAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"finalToken","type":"address","indexed":true,"internalType":"address"},{"name":"finalAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SetAuthorizedPeriphery","inputs":[{"name":"srcEid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"srcPeriphery","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AmountSDOverflowed","inputs":[{"name":"amountSD","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"AuthorizedPeripheryNotSet","inputs":[{"name":"_srcEid","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"FundedFlowNotAuthorized","inputs":[]},{"type":"error","name":"IOFTEndpointMismatch","inputs":[]},{"type":"error","name":"InvalidBytes32","inputs":[]},{"type":"error","name":"InvalidComposeMsgFormat","inputs":[]},{"type":"error","name":"InvalidDirectToken","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"InvalidLocalDecimals","inputs":[]},{"type":"error","name":"InvalidOApp","inputs":[]},{"type":"error","name":"NonceAlreadyUsed","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"OutOfBounds","inputs":[]},{"type":"error","name":"TokenIOFTMismatch","inputs":[]},{"type":"error","name":"UnauthorizedEndpoint","inputs":[]},{"type":"error","name":"UnauthorizedSrcPeriphery","inputs":[{"name":"_srcEid","type":"uint32","internalType":"uint32"}]}],"bytecode":"0x61014080604052346103e55760a08161888a803803809161002082856104cc565b8339810103126103e557610033816104ef565b61003f602083016104ef565b9161004c604082016104ef565b90610065608061005e606084016104ef565b92016104ef565b60405163313ce56760e01b81526001600160a01b038316929190602081600481875afa9081156103f1575f916104ad575b50604051630857749b60e41b81526001600160a01b038816956020826004818a5afa9182156103f1575f9261047c575b5060015f55604051906162f98083016001600160401b0381118482101761046857604092849261253184396001600160a01b03168152602081018990520301905ff080156103f1576001600160a01b03166080527f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef65f8181525f51602061886a5f395f51905f526020527fcf7720576cdb70176b3017d893bcb89ba0f36ed0261d4350fd0180e938b3bace80549082905560ff938493909291905f51602061882a5f395f51905f528380a47f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f5f8181525f51602061886a5f395f51905f526020527f176c3a4e1b4d1d61213187c0dde7f83e2e2c933a339cb5403b4090bc2f0aa49b80549082905590915f51602061882a5f395f51905f528380a47f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d8794995f8181525f51602061886a5f395f51905f526020527fc2bbb88da029d1ef2e193d87ca6c1679455bd9c1e99d2e95c312005c0bf4d1d880549082905590915f51602061882a5f395f51905f528380a4169116818110610459570360ff81116104455760ff16604d811161044557600a0a60a05260c05261012052604051637e062a3560e11b8152602081600481865afa9081156103f1575f9161040b575b506001600160a01b0316036103fc5760049260209260e0526101005260405192838092635e280f1160e01b82525afa9081156103f1575f916103ab575b5060e0516001600160a01b0390811691160361039c5761031c3361051c565b50604051611f8b90816105a6823960805181818161025101526112d0015260a05181818161065101526113ea015260c0518181816105b70152818161180e0152611d75015260e051818181610294015261098801526101005181818161020e01526109570152610120518181816107200152818161089501526111a40152f35b6312354ac760e21b5f5260045ffd5b90506020813d6020116103e9575b816103c6602093836104cc565b810103126103e557516001600160a01b03811681036103e5575f6102fd565b5f80fd5b3d91506103b9565b6040513d5f823e3d90fd5b633722464560e11b5f5260045ffd5b90506020813d60201161043d575b81610426602093836104cc565b810103126103e557610437906104ef565b5f6102c0565b3d9150610419565b634e487b7160e01b5f52601160045260245ffd5b6301e9714b60e41b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b61049f91925060203d6020116104a6575b61049781836104cc565b810190610503565b905f6100c6565b503d61048d565b6104c6915060203d6020116104a65761049781836104cc565b5f610096565b601f909101601f19168101906001600160401b0382119082101761046857604052565b51906001600160a01b03821682036103e557565b908160209103126103e5575160ff811681036103e55790565b6001600160a01b0381165f9081525f51602061884a5f395f51905f52602052604090205460ff166105a0576001600160a01b03165f8181525f51602061884a5f395f51905f5260205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f9056fe60806040526004361015610030575b361561002e573461002a5761002236610d20565b602081519101f35b5f80fd5b005b5f3560e01c806301ffc9a71461018f57806305b513bf1461018a57806309cfd675146101855780630b2969841461018057806318f794991461017b57806321081d3c14610176578063248a9ca3146101715780632f2ff15d1461016c57806336568abe14610167578063490e662f146101625780634b3b029b1461015d57806352e12a1414610158578063657cad8a1461015357806391d148541461014e578063963efcaa14610149578063a169826714610144578063a217fddf1461013f578063c55dae631461013a578063d0a1026014610135578063d4d35af814610130578063d547741f1461012b5763feb617240361000e57610bea565b610b9d565b610b63565b6108b9565b610876565b61085c565b6106a2565b61063a565b6105db565b610598565b6104b9565b610471565b610437565b6103ef565b61039d565b61034d565b610313565b6102b8565b610275565b610232565b6101ef565b3461002a57602036600319011261002a5760043563ffffffff60e01b811680910361002a57602090637965db0b60e01b81149081156101d4575b506040519015158152f35b6301ffc9a760e01b1490505f6101c9565b5f91031261002a57565b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a57602036600319011261002a5760043567ffffffffffffffff811680910361002a575f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de00602052602060405f2054604051908152f35b3461002a575f36600319011261002a5760206040517f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f8152f35b3461002a57602036600319011261002a5760206103846004355f525f516020611f365f395f51905f52602052600160405f20015490565b604051908152f35b6001600160a01b0381160361002a57565b3461002a57604036600319011261002a5761002e6024356004356103c08261038c565b6103ea6103e5825f525f516020611f365f395f51905f52602052600160405f20015490565b610db2565b610e06565b3461002a57604036600319011261002a5760043560243561040f8161038c565b336001600160a01b038216036104285761002e91610eb8565b63334bd91960e11b5f5260045ffd5b3461002a575f36600319011261002a5760206040517fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1008152f35b3461002a575f36600319011261002a5760206040517f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef68152f35b63ffffffff81160361002a57565b3461002a57604036600319011261002a576004356104d6816104ab565b602435906104e2610f69565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615610581577ff3adc8db618887d7b76838e244efb05fc99475bb5a904a914d939fbdc41b7e8d9163ffffffff6040921690815f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de0060205280835f205582519182526020820152a160015f55005b63e2517d3f60e01b5f52336004525f60245260445ffd5b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461002a57604036600319011261002a57602060ff61062e6024356004356106028261038c565b5f525f516020611f365f395f51905f52845260405f20906001600160a01b03165f5260205260405f2090565b54166040519015158152f35b3461002a575f36600319011261002a5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b9181601f8401121561002a5782359167ffffffffffffffff831161002a576020838186019501011161002a57565b3461002a57606036600319011261002a576004356106bf8161038c565b60443567ffffffffffffffff811161002a576106df903690600401610674565b90916106e9610f69565b60017fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10055610715610d43565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691160361084d57610160610755368385610cea565b511061083f5761076e610769368385610cea565b611325565b6107a96107a2825f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de0160205260405f2090565b5460ff1690565b61083157610805926107f56107e8610800935f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de0160205260405f2090565b805460ff19166001179055565b602435923691610cea565b61106e565b5f7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1005561002e60015f55565b623f613760e71b5f5260045ffd5b62dae46b60e61b5f5260045ffd5b638e13f75160e01b5f5260045ffd5b3461002a575f36600319011261002a5760206040515f8152f35b3461002a575f36600319011261002a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a036600319011261002a576004356108d18161038c565b60443567ffffffffffffffff811161002a576108f1903690600401610674565b90916108fe60643561038c565b60843567ffffffffffffffff811161002a5761091e903690600401610674565b5050610928610f69565b60017fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d100556001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016911603610b54576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610b45576109b88183611234565b7fffffffff0000000000000000000000000000000000000000000000000000000091359182169160048210610b0d575b505060e01c5f8181527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de0060205260409020548015610af457610a2a8385611ad9565b03610adc5750610a3a8183611245565b90610a50610a4c836101609051101590565b1590565b61083f57610a5d82611325565b90610a926107a2835f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de0160205260405f2090565b6108315761080593610ad16107e8610ad6945f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de0160205260405f2090565b611280565b9061106e565b635f45fa3b60e11b5f5263ffffffff1660045260245ffd5b634f1c97f160e11b5f5263ffffffff821660045260245ffd5b7fffffffff0000000000000000000000000000000000000000000000000000000060049290920360031b82901b161690505f806109e8565b63088b800b60e41b5f5260045ffd5b630919067560e41b5f5260045ffd5b3461002a575f36600319011261002a5760206040517f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d8794998152f35b3461002a57604036600319011261002a5761002e602435600435610bc08261038c565b610be56103e5825f525f516020611f365f395f51905f52602052600160405f20015490565b610eb8565b3461002a57602036600319011261002a576004355f527fe61a4c968926ec08fb0c5bf5be95077bf8b3ddd75ead66c94187ce8d5509de01602052602060ff60405f2054166040519015158152f35b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117610c6857604052565b610c38565b90601f8019910116810190811067ffffffffffffffff821117610c6857604052565b60405190610c9f61010083610c6d565b565b60405190610c9f608083610c6d565b60405190610c9f606083610c6d565b60405190610c9f604083610c6d565b67ffffffffffffffff8111610c6857601f01601f191660200190565b929192610cf682610cce565b91610d046040519384610c6d565b82948184528183011161002a578281602093845f960137010152565b610d37610d3c91610d2f610f69565b36905f610cea565b6112c5565b9060015f55565b335f9081527fc2bbb88da029d1ef2e193d87ca6c1679455bd9c1e99d2e95c312005c0bf4d1d7602052604090205460ff1615610d7b57565b63e2517d3f60e01b5f52336004527f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d87949960245260445ffd5b805f525f516020611f365f395f51905f5260205260ff610de63360405f20906001600160a01b03165f5260205260405f2090565b541615610df05750565b63e2517d3f60e01b5f523360045260245260445ffd5b805f525f516020611f365f395f51905f5260205260ff610e3a8360405f20906001600160a01b03165f5260205260405f2090565b5416610eb257805f525f516020611f365f395f51905f52602052610e728260405f20906001600160a01b03165f5260205260405f2090565b805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f525f516020611f365f395f51905f5260205260ff610eec8360405f20906001600160a01b03165f5260205260405f2090565b541615610eb257805f525f516020611f365f395f51905f52602052610f258260405f20906001600160a01b03165f5260205260405f2090565b805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b1561002a57565b60025f541461002a5760025f55565b634e487b7160e01b5f52601160045260245ffd5b5f19810191908211610f9a57565b610f78565b91908203918211610f9a57565b634e487b7160e01b5f52602160045260245ffd5b60021115610fca57565b610fac565b6002821015610fca5752565b906002821015610fca5752565b60e0809180518452602081015160208501526001600160a01b0360408201511660408501526001600160a01b03606082015116606085015263ffffffff608082015116608085015261104260a082015160a0860190610fdb565b60c081015160c08501520151910152565b610100909392919361106a81610120810196610fe8565b0152565b61107781611325565b61109861109361108684611344565b67ffffffffffffffff1690565b6113db565b91835f93818111611221575b50506110af81611354565b926110b982611364565b936110c383611374565b6110cc90611410565b936110d684611384565b6110df90611410565b6110e885611394565b63ffffffff16906110f8866113a4565b60ff1696611105876113b6565b60ff169661111290611487565b9760ff169361112085610fc0565b611128610c8f565b9a8b5260208b01526001600160a01b031660408a01526001600160a01b0316606089015263ffffffff1660808801526111649060a08801610fcf565b60c086015260e085015260ff16916001831480938115611216575b50156111dc5750610c9f92916111d791611197610ca1565b9384526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020850152604084015215156060830152565b6114f8565b915050610d3761121392611205604051938492632498b83f60e21b602085015260248401611053565b03601f198101835282610c6d565b50565b60029150145f61117f565b61122c929450610f9f565b91835f6110a4565b90600c1161002a5760080190600490565b9080604c1161002a57611261913691604b190190604c01610cea565b90565b359060208110611272575090565b5f199060200360031b1b1690565b90602c1161002a576020600c6112619201611264565b3d156112c0573d906112a782610cce565b916112b56040519384610c6d565b82523d5f602084013e565b606090565b5f80916020815191017f00000000000000000000000000000000000000000000000000000000000000005af46112f9611296565b90156113025790565b602081519101fd5b9060018201809211610f9a57565b91908201809211610f9a57565b6020815110611335576020015190565b632d0483c560e21b5f5260045ffd5b6040815110611335576040015190565b6060815110611335576060015190565b6080815110611335576080015190565b60a08151106113355760a0015190565b60c08151106113355760c0015190565b60e08151106113355760e0015190565b61010081511061133557610100015190565b61012081511061133557610120015190565b81810292918115918404141715610f9a57565b6112619067ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000091166113c8565b8060a01c611424576001600160a01b031690565b6379ec0ed760e11b5f5260045ffd5b519060ff8216820361002a57565b81601f8201121561002a5780519061145882610cce565b926114666040519485610c6d565b8284526020838301011161002a57815f9260208093018386015e8301015290565b80518101906101408183031261002a576114a460e08201516104ab565b6114b16101008201611433565b506114bf6101208201611433565b506101408101519167ffffffffffffffff831161002a57611261926020809201920101611441565b61010081019291610c9f9190610fe8565b61150181611727565b9081815281511561156d576112139161151d6060830151151590565b15611548575051604051635956364d60e01b602082015290610d3790829061120590602483016114e7565b60405163f7e02c2160e01b60208201529150610d3790829061120590602483016114e7565b5050565b60405190610100820182811067ffffffffffffffff821117610c68576040525f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b67ffffffffffffffff8111610c685760051b60200190565b60208183031261002a5780519067ffffffffffffffff821161002a57019080601f8301121561002a5781519161160c836115bf565b9261161a6040519485610c6d565b80845260208085019160051b8301019183831161002a5760208101915b83831061164657505050505090565b825167ffffffffffffffff811161002a578201906040828703601f19011261002a576040519061167582610c4c565b60208301516116838161038c565b825260408301519167ffffffffffffffff831161002a576116ac88602080969581960101611441565b83820152815201920191611637565b9081602091031261002a575190565b6040513d5f823e3d90fd5b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9061126194936080936001600160a01b038093168452602084015216604082015281606082015201906116d5565b61172f611571565b506117476040820151602080825183010191016115d7565b602082019061176f61176361176384516001600160a01b031690565b6001600160a01b031690565b6040516370a0823160e01b815230600482015290602090829060249082905afa908115611a59575f91611aba575b506117b96117636117636060875101516001600160a01b031690565b6040516370a0823160e01b81523060048201529290602090849060249082905afa928315611a59575f93611a99575b506001600160a01b0361185061180861176387516001600160a01b031690565b926118387f000000000000000000000000000000000000000000000000000000000000000094858a515191611aef565b8751606001513091906001600160a01b031690611cf9565b911661186385516001600160a01b031690565b9186515191803b1561002a57611895935f809460405196879586948593633a5be8cb60e01b85523091600486016116f9565b03925af18015611a5957611a7f575b506118bc61176361176385516001600160a01b031690565b6040516370a0823160e01b81523060048201529190602090839060249082905afa918215611a59575f92611a5e575b50036119bd575061191961190682516001600160a01b031690565b6060845101906001600160a01b03169052565b815151905b61193182845160e0815191015190611e6b565b60e084510152818351528251907fb88fc27be67e678ffb77faf8f8bb00d39b66b4845e4f7ec1e623b0f15abd52136001600160a01b0361197d602085015193516001600160a01b031690565b946119b6611997606087519701516001600160a01b031690565b9183604051948594169816968360209093929193604081019481520152565b0390a45190565b6119d961176361176360608651016001600160a01b0390511690565b6040516370a0823160e01b81523060048201529190602090839060249082905afa918215611a59575f92611a28575b50808210611a1f57611a1991610f9f565b9061191e565b50505f9061191e565b611a4b91925060203d602011611a52575b611a438183610c6d565b8101906116bb565b905f611a08565b503d611a39565b6116ca565b611a7891925060203d602011611a5257611a438183610c6d565b905f6118eb565b80611a8d5f611a9393610c6d565b806101e5565b5f6118a4565b611ab391935060203d602011611a5257611a438183610c6d565b915f6117e8565b611ad3915060203d602011611a5257611a438183610c6d565b5f61179d565b90604c1161002a576020602c6112619201611264565b905f806001600160a01b03611b7c95946040519582602088019663a9059cbb60e01b8852166024880152604487015260448652611b2d606487610c6d565b169260405194611b3e604087610c6d565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646020870152519082855af1611b76611296565b91611f0a565b80518015908115611b93575b50610c9f9150610f62565b6020915082908101031261002a5760200151801515810361002a57610c9f905f611b88565b90611bc2826115bf565b611bcf6040519182610c6d565b8281528092611be0601f19916115bf565b015f5b818110611bef57505050565b60405190606082019180831067ffffffffffffffff841117610c68576020926040525f81526060838201525f604082015282828601015201611be3565b8051821015611c405760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b6020815260608101918051926040602084015283518091526080830190602060808260051b8601019501915f905b828210611ca8575050505090604060206112619301519101906001600160a01b03169052565b90919295602080600192607f198982030185528951906001600160a01b038251168152604080611ce58585015160608786015260608501906116d5565b930151910152980192019201909291611c82565b92918351611d0e611d098261130a565b611bb8565b925f5b828110611ddf575060405163ef8738d360e01b60208201526001600160a01b0391821660248201529083166044820152939450611205936112619392611dd0929091611db49190611d6381606481018a565b611d6b610cb0565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681529060208201525f6040820152611dad8287611c2c565b5284611c2c565b50611dbd610cbf565b9283526001600160a01b03166020830152565b60405192839160208301611c54565b80611dfd611def6001938a611c2c565b51516001600160a01b031690565b6020611e09838b611c2c565b510151611e26611e17610cb0565b6001600160a01b039093168352565b60208201525f6040820152611e3b8288611c2c565b52611e468187611c2c565b5001611d11565b8115611e57570490565b634e487b7160e01b5f52601260045260245ffd5b818101809111610f9a57670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610f9a57808201809211610f9a575f198201918211610f9a57611eb491611e4d565b670de0b6b3a76400000390670de0b6b3a76400008211610f9a57670de0b6b3a7640000808202908282041482151715610f9a5782611f00611efb61126195611f0594611318565b610f8c565b611e4d565b610f9f565b91925015611f2657815115611f1d575090565b3b1561002a5790565b50805190811561002a57602001fdfe02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220df28c83b3158614bf8f5a69aea30425d8521d03aca0f27fc627521bc2ba562b564736f6c634300081e003360c0346100d157601f6162f938819003918201601f19168301916001600160401b038311848410176100d55780849260409485528339810103126100d157610052602061004b836100e9565b92016100e9565b6001600160a01b0390911660805260a0526040516161fb90816100fe82396080518181816108be01528181610bae015281816117540152818161198f01528181612a3d01528181614009015281816140ff015281816150e2015261531a015260a051818181610678015281816107f001528181610d5d01526143080152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100d15756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816301ffc9a7146125fb57508063037a06a4146123b057806304c73f6014612392578063057f0370146122d85780631f74a0b51461226657806321081d3c1461222b578063248a9ca3146121eb5780632e748b211461208f5780632f2ff15d14612044578063319adf9f14611c7c57806336568abe14611c3757806337710e2014611be25780633b1c6a011461188b5780633cf3a02514611856578063490e662f1461181b5780634b3b029b146117e0578063502a82e214611723578063521c98ba14610fe95780635956364d14610f9d57806369b97ac714610f7f57806379c7b60b14610f2a57806379c7f28914610e2b57806390a0827b14610df257806391d1485414610d9b5780639262e0fc14610d0257806396cc2cfb14610aae578063a217fddf14610a92578063a38d8fa6146108e2578063a4b672b61461089e578063af5de6f914610814578063c55dae63146107d0578063ccbedaec14610551578063d06e28ed14610464578063d4d35af814610429578063d547741f146103d5578063e38b73a9146103b9578063ea0aaf241461035b578063eb84e7f21461022b5763f7e02c21146101cb575f80fd5b3461022857610100366003190112610228576101e6366127bd565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10054156102195761021690614fb3565b80f35b63cd6d8f7d60e01b8252600482fd5b80fd5b50346102285760203660031901126102285760408160e09260c0835161025081612781565b82815282602082015282858201528260608201528260808201528260a0820152015260043581527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205220604051906102a982612781565b6001600160a01b03815416918281526001600160401b0360018301548160208401916001600160a01b038116835263ffffffff60026040870197828460a01c168952606088019360c01c84520154966001600160a01b036080880195858a16875260ff60c060a08b019a828d60401c1615158c52019a60481c1615158a526040519a8b52511660208a015251166040880152511660608601525116608084015251151560a083015251151560c0820152f35b50346102285760203660031901126102285760206103b061037a61264e565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0560205260405f2090565b54604051908152f35b5034610228578060031936011261022857602060405160068152f35b5034610228576040366003190112610228576104256004356103f5612664565b9061042061041b825f525f5160206161a65f395f51905f52602052600160405f20015490565b6130a9565b613885565b5080f35b503461022857806003193601126102285760206040517f472a9ff14edbbbd33e77edbff56fa59e95bbaaa0c893ed10c0330e1b4d8794998152f35b50346102285760403660031901126102285761047e61264e565b602435906fffffffffffffffffffffffffffffffff8216809203610542576104a461303a565b826104ae826131c5565b63ffffffff6001600160a01b03608083015116915116813b1561054257829160448392604051948593849263435354d360e01b845260048401528960248401525af180156105465761052d575b50506001600160a01b03167f02366c0d102495be1ee805b749be7baebab4fc0710c6d3f38751f1a22bd711648380a380f35b816105379161279c565b61054257825f6104fb565b8280fd5b6040513d84823e3d90fd5b5034610228576060366003190112610228578061056c61264e565b6105746126df565b61057c6126f5565b90610585612fcb565b6105bf836001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b544311156107245743610602846001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b556001600160a01b036001610647856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b015416926001600160401b038216610729575b50506001600160401b03811661066e575050f35b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683525f5160206161865f395f51905f526020526001600160401b0360046040852001541690823b1561072457604051633ded719760e11b81526001600160401b0392831660048201523360248201529116604482015263ffffffff60648201529082908290608490829084905af18015610546576107135750f35b8161071d9161279c565b6102285780f35b505050fd5b6001600160a01b031684525f5160206161865f395f51905f526020526001600160401b03600460408620015416833b156107cc57604051633ded719760e11b81526001600160401b0391821660048201523360248201529116604482015263ffffffff6064820152838160848183875af19081156107c15784911561065a57816107b29161279c565b6107bd57825f61065a565b5050fd5b6040513d86823e3d90fd5b8480fd5b503461022857806003193601126102285760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102285760203660031901126102285760206001600160a01b0361084061083b61264e565b6130f6565b610c236040516108528583018261279c565b818152848101916155638339519020604051908482019260ff60f81b84523060601b6021840152603583015260558201526055815261089260758261279c565b51902016604051908152f35b503461022857806003193601126102285760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461022857608036600319011261022857806108fd61264e565b6109056126df565b60443563ffffffff8116809103610724576001600160a01b0361092661268d565b9361092f612fcb565b1684525f5160206161865f395f51905f5260205263ffffffff6001600160401b03600460408720015416931663ffffffff811480610a85575b15610a2c5750506109b2916001600160401b036109c092604051923360208501526040840152166060820152606081526109a360808261279c565b60405192839160208301614f91565b03601f19810183528261279c565b7333333333333333333333333333333333333333333b15610a295781610a0291604051809381926317938e1360e01b835260206004840152602483019061270b565b0381837333333333333333333333333333333333333333335af18015610546576107135750f35b50fd5b610a80926109b2946001600160401b0392604051943360208701528860408701526060860152608085015260a08401521660c082015260c08152610a7160e08261279c565b60405192839160208301614f6e565b6109c0565b5063ffffffff8214610968565b5034610228578060031936011261022857602090604051908152f35b503461022857604036600319011261022857610ac861264e565b90610ad161303a565b610ada82612d3c565b610ae3836131c5565b92610af760e083510151840b602435614ee9565b946020840190610b206001600160401b03835116886001600160401b0360a089015116916137b0565b15610cd957859650610b62846001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b610b6d8482546128a5565b90556001600160a01b038416807f410b9a8c926b6c439cdceb39c0bb8f829838a25bc5a26af9d4c263d1313cc46b6020604051878152a26001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610cd55760405163f3fef3a360e01b81526001600160a01b0383166004820152602481018690529088908290604490829084905af18015610cca5785918991610cad575b50506001600160401b0391610c3d6001600160a01b0392608060e09601928484511690613229565b511692511694510151850b93813b15610ca957604051639c45c34b60e01b81526001600160a01b039490941660048501526001600160401b0316602484015260448301919091525f9290920b60648201529082908290608490829084905af18015610546576107135750f35b8580fd5b81925090610cba9161279c565b610cc65783875f610c15565b8680fd5b6040513d8a823e3d90fd5b8780fd5b6377e88bc960e11b86526001600160a01b0384166004526001600160401b038716602452604486fd5b50346102285761012036600319011261022857610d1e366127bd565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1005415610219576001600160a01b036060820151166001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145f14610d8d5761021690613938565b610216906101043590614306565b5034610228576040366003190112610228576001600160a01b036040610dbf612664565b9260043581525f5160206161a65f395f51905f526020522091165f52602052602060ff60405f2054166040519015158152f35b503461022857604036600319011261022857610216610e0f61264e565b610e17612fcb565b602435906001600160a01b03339116613229565b50346102285760203660031901126102285760a0610e89610e4a61264e565b610e52612d12565b506001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b6001600160a01b03600160405192610ea08461272f565b63ffffffff8154818116865260ff8160201c1615156020870152818160281c16604087015260481c1660608501520154166080820152610f2860405180926001600160a01b036080809263ffffffff815116855260208101511515602086015263ffffffff604082015116604086015263ffffffff6060820151166060860152015116910152565bf35b50346102285760203660031901126102285760206103b0610f4961264e565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b50346102285780600319360112610228576020604051620f42408152f35b50346102285761010036600319011261022857610fb9366127bd565b7fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d10054156102195761021690613938565b50346102285760a03660031901126102285761100361264e565b61100b61267a565b906110146126a0565b6064356001600160401b03811681036107cc57608435916001600160401b0383168303610ca957611043612f7c565b61104b612c59565b50611054612c1b565b508580604051602081019063ffffffff891682526020815261107760408261279c565b519061080c5afa611086612ce3565b9015611714578051810160208101916020818303126116f0576020810151906001600160401b0382116117105701906101009082900312610cd557604051916110ce83612765565b60208201516001600160401b0381116117105760209083010181601f8201121561171057898151916110ff83612cc8565b9261110d604051948561279c565b8084528460208284010111610542578060208093018386015e83010152835260408201516001600160401b038111611710576020908301019080601f83011215611710578151916001600160401b0383116116dc578260051b9060405193611178602084018661279c565b845260208085019282010192831161170c57602001905b8282106116f4575050506020830152610100906111ae606082016132a7565b60408401526111bf608082016154a2565b60608401526111d060a082016154a2565b60808401526111e160c082016154b6565b60a08401526111f260e082016154b6565b60c0840152015180880b8082036116f0576112129160e08401528461370e565b50604051916112208361274a565b825263ffffffff87166020830152821515604083015260608201526001600160401b03831660808201526001600160401b03841660a08201526001600160a01b03851687525f5160206161865f395f51905f5260205260408720815180518051906001600160401b0382116116dc5781908b61129c8654612c90565b601f81116116a1575b5050602090601f831160011461163f578c92611634575b50508160011b915f199060031b1c19161782555b6001820160208201518051906001600160401b03821161162057680100000000000000008211611620576020908c84548486558085106115d4575b505001918b5260208b20908b5b8160021c811061158f57506003198116810380611533575b505050506001600160a01b03947f12cf3d04179e82c834f3ee7169a5df80651aa65530127f9ddb04c8cd8224435397946001600160401b039460a06006868896600260809d9901888060408401511616891982541617815560608201517fffffffff0000000000000000000000000000000000000000ffffffffffffffff7bffffffffffffffffffffffffffffffffffffffff000000000000000083549260401b16911617905560038201908c808f83015116166001600160a01b0319835416178255848101519082547fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff74ff000000000000000000000000000000000000000060e075ff00000000000000000000000000000000000000000060c086015160a81b1694015160b01b76ff000000000000000000000000000000000000000000001694891b16911617171790556114c16004820188806020880151161689198254161781556040860151151568ff0000000000000000825491151560401b169068ff00000000000000001916179055565b60608401516005820155019185808c8301511616861984541617835501516fffffffffffffffff000000000000000082549160401b16906fffffffffffffffff0000000000000000191617905563ffffffff6040519a168a52151560208a01521660408801521660608601521692a280f35b928c938d5b8181106115515750505060021c015584848460a0611330565b90919460206115856001926001600160401b03895116908560031b6001600160401b03809160031b9316831b921b19161790565b9601929101611538565b8c8d5b600481106115a7575083820155600101611318565b85519095916001916020916001600160401b0360068a901b81811b199092169216901b1792019501611592565b838287611600945220600380870160021c820192601888831b1680611607575b500160021c0190613922565b8c5f61130b565b5f198501908154905f19908a03851b1c1690555f6115f4565b634e487b7160e01b8c52604160045260248cfd5b015190505f806112bc565b858d52818d209250601f1984168d5b8181106116895750908460019594939210611671575b505050811b0182556112d0565b01515f1960f88460031b161c191690555f8080611664565b9293602060018192878601518155019501930161164e565b602082886116cb945220601f850160051c810191602086106116d2575b601f0160051c0190613922565b8b5f6112a5565b90915081906116be565b634e487b7160e01b8b52604160045260248bfd5b8880fd5b60208091611701846132a7565b81520191019061118f565b8b80fd5b8980fd5b639b0c335d60e01b8752600487fd5b50346102285760403660031901126102285761173d61264e565b602435611748612fcb565b826001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016931692803b156117dc5760405163f3fef3a360e01b81526001600160a01b0385166004820152602481018490529082908290604490829084905af18015610546576117c7575b5050610216913390613229565b816117d19161279c565b61054257825f6117ba565b5080fd5b503461022857806003193601126102285760206040517f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef68152f35b503461022857806003193601126102285760206040517fc56a3250645180a53cd9e196b2ee0a634a4f54e2edf59ea457f2083917e4d1008152f35b503461022857602036600319011261022857611870612fcb565b80808080600435335af1611882612ce3565b50156102285780f35b5034610228576060366003190112610228576118a5612664565b6044356001600160a01b03811691828203611ad6576118c261303a565b6118cb82612d3c565b916118d58261313e565b6107cc576040830151156107cc5760016001600160401b0360808501511601906001600160401b038211611bce5790859161193961191a60e087510151850b8461370e565b509560208101936001600160401b0360a08187511693015116916137b0565b1561054257611978906001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0560205260405f2090565b6119838582546128a5565b90556001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156105425760405163f3fef3a360e01b81526001600160a01b0387166004820152602481018690529083908290604490829084905af1908115611bc3578391611bae575b5050516001600160401b031680611ada575050611a128284615204565b736b9e773128f453f5c2c60935ee2de2cbc5390a243b15611ad6578360405163611e2a2d60e11b81526001600160a01b038316600482015283602482015263ffffffff6044820152818160648183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561054657611ac1575b50506001600160a01b03905b60405192835216907f2b348084e891b20d449a69f90114c5ab7bf7c84d64c25445c8ab440d469a6b4d602060043592a480f35b81611acb9161279c565b611ad657835f611a82565b8380fd5b611b2281611af486611aee6109b29561519d565b896151c3565b604051906001600160a01b0386166020830152604082015260016060820152606081526109a360808261279c565b7333333333333333333333333333333333333333333b156117dc5781611b6491604051809381926317938e1360e01b835260206004840152602483019061270b565b0381837333333333333333333333333333333333333333335af1801561054657611b99575b50506001600160a01b0390611a8e565b81611ba39161279c565b611ad657835f611b89565b81611bb89161279c565b6117dc57815f6119f5565b6040513d85823e3d90fd5b634e487b7160e01b86526011600452602486fd5b50346102285760203660031901126102285760206103b0611c0161264e565b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b503461022857604036600319011261022857611c51612664565b336001600160a01b03821603611c6d5761042590600435613885565b63334bd91960e11b8252600482fd5b5034610228576020366003190112610228576001600160a01b03611c9e61264e565b611ca6612c59565b501681525f5160206161865f395f51905f52602052604081209060405190611ccd8261274a565b604051611cd981612765565b60405184548184611ce983612c90565b80835292600181169081156120255750600114611fe4575b611d0d9250038261279c565b815260018401604051808260208294549384815201908652602086209286905b806003830110611f9257611d63945491818110611f78575b818110611f5b575b818110611f3e575b10611f30575b50038261279c565b60208201526001600160a01b0360028501546001600160401b038116604084015260401c16606082015260038401546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c820b60e0820152825260048301549260208301906001600160401b038516825260ff604085019560401c161515855260066005820154916060860192835201549460808501926001600160401b03871684526001600160401b0360a087019760401c1687526040519560208752519460c06020880152611e4a865161010060e08a01526101e089019061270b565b60208088015189830360df19016101008b015280518084529282019892910190835b818110611f1157505050926001600160401b03809693899a969360e0878c610120866040819c0151169101528c6101406001600160a01b036060840151169101528c6101606001600160a01b036080840151169101528c61018060ff60a0840151169101528c6101a060ff60c0840151169101520151900b6101c08b0152511660408901525115156060880152516080870152511660a0850152511660c08301520390f35b82516001600160401b03168a526020998a019990920191600101611e6c565b60c01c81526020015f611d5b565b9260206001916001600160401b038560801c168152019301611d55565b9260206001916001600160401b038560401c168152019301611d4d565b9260206001916001600160401b0385168152019301611d45565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019401920184929391611d2d565b5090868552602085209085915b818310612009575050906020611d0d92820101611d01565b6020919350806001915483858801015201910190918392611ff1565b60209250611d0d94915060ff191682840152151560051b820101611d01565b503461022857604036600319011261022857610425600435612064612664565b9061208a61041b825f525f5160206161a65f395f51905f52602052600160405f20015490565b6137de565b5034610228576080366003190112610228576120a961264e565b6120b16126df565b6120b96126f5565b90606435926fffffffffffffffffffffffffffffffff84168094036107cc576120e061303a565b846120ea826131c5565b926001600160a01b0360808501511693843b15610542576121746101048492836001600160401b03806040519788968795636f0d192560e11b875260048701906001600160a01b036080809263ffffffff815116855260208101511515602086015263ffffffff604082015116604086015263ffffffff6060820151166060860152015116910152565b169a8b60a485015216988960c48401528b60e48401525af18015610546576121d6575b50506001600160a01b036040917f500d805a349357fe5d4759fe052d79bd744b82c8452837f52a7456ec7d3d751c93835195865260208601521692a380f35b816121e09161279c565b6107cc57845f612197565b50346102285760203660031901126102285760206122236004355f525f5160206161a65f395f51905f52602052600160405f20015490565b604051908152f35b503461022857806003193601126102285760206040517f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f8152f35b50346102285760603660031901126102285761228061264e565b6024356001600160401b0381116105425761229f9036906004016126af565b9092604435906001600160401b0382116102285760206122238686866122c836600489016126af565b9390926122d361303a565b6128b2565b503461238e57604036600319011261238e576122f261264e565b906024356122fe612fcb565b6001600160a01b036080612311856131c5565b015116803b1561238e576040516390a0827b60e01b81526001600160a01b038516600482015260248101839052905f908290604490829084905af180156123835761236d575b5061021691926001600160a01b03339116613229565b61021692505f61237c9161279c565b5f91612357565b6040513d5f823e3d90fd5b5f80fd5b3461238e575f36600319011261238e5760206040516305f5e1008152f35b3461238e5760a036600319011261238e576123c961264e565b6123d161267a565b6123d96126a0565b916123e261268d565b926084359163ffffffff831680930361238e576123fe81612d3c565b50612407612f7c565b6001600160a01b03600161244b836001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b0154169081156125aa575b63ffffffff604051956124688761272f565b16948581526001600160a01b03600181602084019615159586885263ffffffff604086019b1697888c52606086018a8152836080880193169c8d845263ffffffff6124e38a6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0160205260405f2090565b985116926cffffffff00000000000000000068ffffffff000000000064ff000000008b549351151560201b16935160281b16935160481b16936cffffffff000000000000000000199168ffffffffffffffffff1916171617171785555116920191166001600160a01b031982541617905561255d8661313e565b1561238e577ff0dcc8957a27613dd82c92382ad37254b9744169d0caa5f3873cfec7ba794eb9936080936001600160a01b03936040519788526020880152604087015260608601521692a3005b90506125b5816130f6565b604051610c238082018281106001600160401b038211176125e7578291615563833903905ff580156123835790612456565b634e487b7160e01b5f52604160045260245ffd5b3461238e57602036600319011261238e576004359063ffffffff60e01b821680920361238e57602091637965db0b60e01b811490811561263d575b5015158152f35b6301ffc9a760e01b14905083612636565b600435906001600160a01b038216820361238e57565b602435906001600160a01b038216820361238e57565b6024359063ffffffff8216820361238e57565b6064359063ffffffff8216820361238e57565b60443590811515820361238e57565b9181601f8401121561238e578235916001600160401b03831161238e576020808501948460051b01011161238e57565b602435906001600160401b038216820361238e57565b604435906001600160401b038216820361238e57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b60a081019081106001600160401b038211176125e757604052565b60c081019081106001600160401b038211176125e757604052565b61010081019081106001600160401b038211176125e757604052565b60e081019081106001600160401b038211176125e757604052565b90601f801991011681019081106001600160401b038211176125e757604052565b61010090600319011261238e57604051906127d782612765565b81600435815260243560208201526044356001600160a01b038116810361238e5760408201526064356001600160a01b038116810361238e57606082015260843563ffffffff8116810361238e57608082015260a435600281101561238e5760a082015260c43560c082015260e060e435910152565b919081101561285d5760051b0190565b634e487b7160e01b5f52603260045260245ffd5b906001600160401b03809116911601906001600160401b03821161289157565b634e487b7160e01b5f52601160045260245ffd5b9190820180921161289157565b9194935f935f9682810361238e576128fa856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b5443111561238e57929061290d85612d3c565b916080612919876131c5565b01916001600160a01b038351169461294060208601966001600160401b03885116906132bb565b965f975b818d10612bb0575b50508a159250612ba59150505743612994866001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0260205260405f2090565b556001600160401b038416806129ae575b50505050505050565b6129c36129e69560e0855101515f0b9061370e565b6001600160401b03869792975116906001600160401b0360a087015116916137b0565b15612b865750612a26856001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b612a318582546128a5565b90556001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166001600160a01b03861690803b1561238e5760405163f3fef3a360e01b81526001600160a01b038316600482015260248101879052905f908290604490829084905af1801561238357612b5a575b506001600160a01b0382612ace876001600160401b03948460e097511690613229565b511693511691510151850b93823b15610ca957604051639c45c34b60e01b81526001600160a01b0390911660048201526001600160401b03909116602482015260448101929092525f9290920b606482015290829082908183816084810103925af1801561054657612b45575b80808080806129a5565b612b5082809261279c565b6102285780612b3b565b6001600160401b0391975060e092612b7a5f6001600160a01b039361279c565b5f989093509150612aab565b6001600160a01b03866377e88bc960e11b5f521660045260245260445ffd5b505f96505050505050565b612bbf8d83879f9b969761284d565b3590612bcc8a858861284d565b356001600160401b038116810361238e57612bf592898d926001600160a01b038b51169261339d565b94909115612c1357600191612c0991612871565b98019b9392612944565b989c5061294c565b60405190612c2882612765565b5f60e08360608152606060208201528260408201528260608201528260808201528260a08201528260c08201520152565b60405190612c668261274a565b5f60a083612c72612c1b565b81528260208201528260408201528260608201528260808201520152565b90600182811c92168015612cbe575b6020831014612caa57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612c9f565b6001600160401b0381116125e757601f01601f191660200190565b3d15612d0d573d90612cf482612cc8565b91612d02604051938461279c565b82523d5f602084013e565b606090565b60405190612d1f8261272f565b5f6080838281528260208201528260408201528260608201520152565b6001600160a01b0390612d4d612c59565b50165f525f5160206161865f395f51905f5260205260405f2060405191612d738361274a565b60405191612d8083612765565b6040518154815f612d9083612c90565b8083529260018116908115612f5d5750600114612f1c575b612db49250038261279c565b8352600181019360405180602087549182815201965f5260205f20905f915b816003840110612ed05797612e149284926001600160a01b039798999a5491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208601528160028401546001600160401b038116604088015260401c1660608601526001600160401b0360066003850154946080880197858716895260ff8760a01c1660a082015260c081019660ff8160a81c16885260b01c5f0b60e0820152845260ff6004820154848116602087015260401c1615156040850152600581015460608501520154818116608084015260401c1660a082015293511615159081612ec2575b501561238e57565b60ff9150511615155f612eba565b97600160806004928b546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019901920191612dd3565b5090835f5260205f20905f915b818310612f41575050906020612db492820101612da8565b6020919350806001915483858801015201910190918392612f29565b60209250612db494915060ff191682840152151560051b820101612da8565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615612fb457565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527f176c3a4e1b4d1d61213187c0dde7f83e2e2c933a339cb5403b4090bc2f0aa49a602052604090205460ff161561300357565b63e2517d3f60e01b5f52336004527f880a9ba888678c7fe4e8c4f028c224f26ce12a3bed6e96025c61ef8a5db6312f60245260445ffd5b335f9081527fcf7720576cdb70176b3017d893bcb89ba0f36ed0261d4350fd0180e938b3bacd602052604090205460ff161561307257565b63e2517d3f60e01b5f52336004527f5300fde95a5e446527bf6aa7c91bd6661bef5398afc77061d9bc87efb80b7ef660245260445ffd5b805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0333165f5260205260ff60405f205416156130e05750565b63e2517d3f60e01b5f523360045260245260445ffd5b60405160208101913060601b83526bffffffffffffffffffffffff199060601b1660348201526028815261312b60488261279c565b51902090565b5190811515820361238e57565b5f80916040516001600160a01b0360208201921682526020815261316360408261279c565b51906108105afa613172612ce3565b90156131b65760208180518101031261238e5760405190602082018281106001600160401b038211176125e7576040526131ae90602001613131565b809152151590565b6313dd7ccd60e31b5f5260045ffd5b6131d190610e52612d12565b906001600160a01b036001604051936131e98561272f565b63ffffffff8154818116875260ff8160201c1615156020880152818160281c16604088015260481c16606086015201541691826080820152911561238e57565b916001600160a01b036040519263a9059cbb60e01b5f521660045260245260205f60448180865af19060015f5114821615613286575b6040521561326a5750565b6001600160a01b0390635274afe760e01b5f521660045260245ffd5b90600181151661329e57823b15153d1516169061325f565b503d5f823e3d90fd5b51906001600160401b038216820361238e57565b5f919082916001600160401b03604051916001600160a01b036020840194168452166040820152604081526132f160608261279c565b51906108015afa613300612ce3565b901561336e5760608180518101031261238e576040519060608201918083106001600160401b038411176125e7576001600160401b03926040526040613367606061334d602086016132a7565b9485855261335c8482016132a7565b6020860152016132a7565b9101521690565b639d2c8fcb60e01b5f5260045ffd5b906001600160401b03809116911603906001600160401b03821161289157565b959291909395805f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205260405f206001600160a01b0381541695861561369657600282019889549860ff8a60481c166136875760018401956001600160a01b03875493166001600160a01b03841603613674575f9161341e8b61313e565b15613654575b8360c01c9c8c60ff6001600160401b0382169160401c165f146135fa57508d8e966001600160401b03811682115f146135f2576134609161337d565b9c5b6001600160401b038086169716928784111561238e578f8f96613488906134909261337d565b969f82612871565b936001600160401b038516106135dd575069ff0000000000000000001916690100000000000000000017905560019c6134c89161337d565b99815160e001515f0b6134db908d61370e565b50986001600160a01b031691602001516001600160401b031691803b1561238e575f928360849263ffffffff6001600160401b036040519889978896633ded719760e11b885260048801526024870152169889604486015260a01c1660648401525af18015612383577f53b9d5645f8b7ccd861ebd6036860fd21716451d1f238cb3720f12f3c49b0c43946040946001600160a01b039384936135cd575b5080613594575b5054169554169582519182526020820152a4565b82825416887f5adc50a7f1e65d6b397176e0807a39bd0ba27293997500a57ca2cc1359583ccb6020868d5416948a51908152a45f613580565b5f6135d79161279c565b5f613579565b5f9f508f9e509c505050505050505050505050565b50505f613460565b909d95809d96806001600160401b038316105f14613649576136269161361f9161337d565b809e612871565b816001600160401b038216115f1461364257505b9c8d95613462565b905061363a565b50506136265f61361f565b915060408101511561238e576001600160401b0360808201511691613424565b8563358d72d160e01b5f5260045260245ffd5b63f7348a7960e01b5f5260045ffd5b631a40316d60e01b5f5260045ffd5b60ff16604d811161289157600a0a90565b9190820391821161289157565b81156136cd570490565b634e487b7160e01b5f52601260045260245ffd5b90620f4240820291808304620f4240149015171561289157565b8181029291811591840414171561289157565b9190805f0b80155f1461372c5750506001600160401b03821691905b565b5f81131561375757506137446137539160ff166136a5565b6001600160401b0384166136fb565b9190565b9050607f198114612891576001600160401b039261377c613785925f0360ff166136a5565b938491166128a5565b5f198101908111612891576137ac6137a5846001600160401b03936136c3565b93846136fb565b1690565b6137d66001600160401b0392936137d084936137cb8161519d565b6132bb565b94612871565b169116101590565b805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f205416155f1461387f57805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260405f20600160ff198254161790556001600160a01b03339216907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260ff60405f2054165f1461387f57805f525f5160206161a65f395f51905f5260205260405f206001600160a01b0383165f5260205260405f2060ff1981541690556001600160a01b03339216907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b81811061392d575050565b5f8155600101613922565b6060810151906001600160a01b035f921691825f525f5160206161865f395f51905f5260205260405f206040519061396f8261274a565b60405161397b81612765565b6040518254815f61398b83612c90565b80835292600181169081156142e757506001146142a6575b6139af9250038261279c565b815260018201604051808260208294549384815201905f5260205f20925f905b80600383011061425457613a01945491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208201526001600160a01b0360028301546001600160401b038116604084015260401c16606082015260038201546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e08201528252600481015492600660208401926001600160401b038616845260ff604086019660401c16151586526005810154606086015201549260808101936001600160401b03811685526001600160401b0360a083019160401c1681525f946040880196613ad66001600160a01b0389511661313e565b15614187575b5050865192612710613b02613af760e08b01968751906128a5565b60c08b0151906136fb565b049484519580871161417f575b50856140dd575b613b4e613b35613b27888c516128a5565b60e0875101515f0b90614ee9565b919094826001600160401b0380865116925116916137b0565b1561408e575085613fff575b6001600160401b0390613b9d8b6001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b613ba88882546128a5565b9055511692613bd460e06001600160a01b038a511692510151830b63ffffffff60808c01511694614ee9565b9390916001600160401b03891695866001600160401b0387161115613ff057908392918d97969594613cb6575b50505050507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c319161337d565b5080613c74575b5050613c6f6001600160a01b0360208701519551169551915192604051938493846040919493926060820195825260208201520152565b0390a4565b60208701517f5adc50a7f1e65d6b397176e0807a39bd0ba27293997500a57ca2cc1359583ccb60206001600160a01b0389511693604051908152a4855f613c38565b809791929394959697155f14613e47575083613cd191615204565b308103613d905750736b9e773128f453f5c2c60935ee2de2cbc5390a243b156105425760405191630acb7f4b60e21b835260048301526024820152818160448183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561054657908a94939291613d6d575b50507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c31915b9181975f80613c01565b818093949697989550613d7f9161279c565b610228579081899396959492613d3a565b91736b9e773128f453f5c2c60935ee2de2cbc5390a243b15611ad6576040519263611e2a2d60e11b8452600484015260248301526044820152818160648183736b9e773128f453f5c2c60935ee2de2cbc5390a245af1801561054657908a94939291613e24575b50507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c3191613d63565b818093949697989550613e369161279c565b610228579081899396959492613df7565b9096959493613e5c90611aee8395949561519d565b308314801590613fe2575b613e9b575b505050507fb021c853215aadb12b6fa8afa7b3158201517d9abf7f756cdbb67bd66abc5a1c95613c3191613d63565b90919293949550613eac898661337d565b9163ffffffff811480613fda575b15613f8b5750916001600160401b03613ef4926109b2946040519360208501526040840152166060820152606081526109a360808261279c565b7333333333333333333333333333333333333333333b156117dc5781613f3691604051809381926317938e1360e01b835260206004840152602483019061270b565b0381837333333333333333333333333333333333333333335af1801561054657908a94939291613f68575b8080613e6c565b818093949697989550613f7a9161279c565b610228579081899396959492613f61565b613fd5926109b294926001600160401b039260405194602086015287604086015263ffffffff6060860152608085015260a08401521660c082015260c08152610a7160e08261279c565b613ef4565b506001613eba565b5063ffffffff821415613e67565b6306506d5560e11b8552600485fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b1561238e5760405163f3fef3a360e01b81526001600160a01b038c16600482015260248101889052905f908290604490829084905af1801561238357614072575b50613b5a565b61407f9192505f9061279c565b5f906001600160401b0361406c565b989450505050507f8d61555dcf69ba745e97fdea78e2652d9cdd464ca521faad482fe796f6d5841c9350602092508291506140c881614fb3565b0151926001600160401b0360405191168152a3565b6140ec868b60208c015161530b565b613b16576040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660048201529095506020816024818d5afa908115612383575f9161414d575b5094613b16565b90506020813d602011614177575b816141686020938361279c565b8101031261238e57515f614146565b3d915061415b565b95505f613b0f565b9091955060a088015160028110156142405715908180614233575b61421657811561420c575b506141c457516001600160401b0316935f80613adc565b505050505061372a92507f31604f5790fbed7a37471cea010a8f08483441a6e1235ac48bb59337439a630d60206001600160a01b0381850151935116604051908152a2614fb3565b905051155f6141ad565b6001600160a01b038851166320a2097d60e11b5f5260045260245ffd5b5060c089015115156141a2565b634e487b7160e01b5f52602160045260245ffd5b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c60608201520194019201849293916139cf565b5090845f5260205f20905f915b8183106142cb5750509060206139af928201016139a3565b60209193508060019154838588010152019101909183926142b3565b602092506139af94915060ff191682840152151560051b8201016139a3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03811691825f525f5160206161865f395f51905f5260205260405f20604051936143578561274a565b60405161436381612765565b6040518354815f61437383612c90565b8083529260018116908115614eca5750600114614e89575b6143979250038261279c565b815260018301604051808260208294549384815201905f5260205f20925f905b806003830110614e37576143e9945491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208201526001600160a01b0360028401546001600160401b038116604084015260401c16606082015260038301546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e08201528552600660048301549260ff60208801946001600160401b038116865260401c1615156040880152600581015460608801520154956001600160401b03871660808701526001600160401b0360a087019760401c16875260608401936001600160a01b038551165f525f5160206161865f395f51905f5260205260405f2094604051956144d58761274a565b6040516144e181612765565b6040518254815f6144f183612c90565b8083529260018116908115614e185750600114614dd7575b6145159250038261279c565b815260018201604051808260208294549384815201905f5260205f20925f905b806003830110614d8557614567945491818110611f7857818110611f5b57818110611f3e5710611f305750038261279c565b60208201526001600160a01b0360028301546001600160401b038116604084015260401c16606082015260038201546001600160a01b038116608083015260ff8160a01c1660a083015260ff8160a81c1660c083015260b01c5f0b60e082015287526001600160401b03600660048301549282841660208b015260ff60408b019460401c1615158452600581015460608b0152015481811660808a015260401c1660a08801526146206001600160a01b038351166131c5565b9360408401916146396001600160a01b0384511661313e565b15614cd6575b5083519760e085019182519160c087019a8b5115159361465e916128a5565b8d5160e001515f0b61466f91614ee9565b90508d5160c0015160ff16825160c0015160ff169061468d926154d8565b9215614ca85782915b5f8063ffffffff8b511660405160208101918252602081526146b960408261279c565b51906108085afa6146c8612ce3565b9015614c995760208180518101031261238e57898f9360ff60a06147169260206001600160401b036146fe8261471c99016132a7565b16950197885115155f14614c8e5750510151166136a5565b906136fb565b825115614c445763ffffffff6147378160608d0151166153ee565b16620f4240019081620f4240116128915761476d620f4240916147166001600160401b039463ffffffff8f6040015116906128a5565b0416908c51908115155f14614c3c5750915b5115614bfb576305f5e100811015614bbb57505f5b6147b46147a186516136e1565b6147ae8a518851906128a5565b906128a5565b5f19810191908211612891576147ae6147da926147d48b518951906128a5565b906136c3565b6064808302838104821484151715612891578211614b415750505085518c5160e001515f0b61480891614ee9565b9d8e8b9c929c516001600160401b031691516001600160401b03169061482d926137b0565b15614af1579c8a9b9c9d85516001600160a01b03169287516001600160a01b03169460808a015163ffffffff16925115156040519561486b87612781565b8652602086019687526040860193845260608601916001600160401b03169586835260808101936001600160401b03169788855260a0820192835260c08201938d5f86526020019687515f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0360205260405f2093516001600160a01b03166001600160a01b031684546001600160a01b0319161784556001840192516001600160a01b03166001600160a01b031683546001600160a01b03191617835551908254905160c01b7fffffffffffffffff000000000000000000000000000000000000000000000000169160a01b77ffffffff000000000000000000000000000000000000000016906001600160a01b03161717905560020192516001600160401b03166001600160401b03166001600160401b03198454161783555115156149d490839068ff0000000000000000825491151560401b169068ff00000000000000001916179055565b51151581549060481b69ff000000000000000000169069ff00000000000000000019161790555194516001600160a01b031695516001600160a01b03169651935160405194855260208501526001600160401b031660408401526060830152608082015260a07f550576b2f9e0ac12dfd5dd2d5743b5b7f11f34302b5f6bec6ad60db81bd6a91891a4608001516001600160a01b03169283614a7592613229565b516001600160401b0316935160e001515f0b93813b1561238e57604051639c45c34b60e01b81526001600160a01b039490941660048501526001600160401b0316602484015260448301919091525f92830b60648301529091908290608490829084905af1801561238357614ae75750565b5f61372a9161279c565b505050505094509550509250508161372a947f8d61555dcf69ba745e97fdea78e2652d9cdd464ca521faad482fe796f6d5841c602080870151926001600160401b0360405191168152a352614fb3565b999c5099509c50505050509450809650602091500151906001600160a01b0384511692818101809111612891575f1981019081116128915781156136cd5761372a977fc8f90125c6a36c77a571201afc10310420481ab4895fadabb596d0ba71c22e3e92604092049082519182526020820152a352613938565b6305f5e0ff19016001600160401b03811161289157614bf5614bea6001600160401b036305f5e10093166136e1565b6305f5e0ff906128a5565b04614794565b6305f5e100811115614c0e57505f614794565b6305f5e100036001600160401b03811161289157614bf5614bea6001600160401b036305f5e10093166136e1565b90509161477f565b63ffffffff614c588160608d0151166153ee565b16620f42400390620f424082116128915761476d620f4240916147166001600160401b039463ffffffff8f6040015116906136b6565b9050510151166136a5565b635cffc5fb60e11b5f5260045ffd5b8161271003612710811161289157612710614ccd6001600160401b03928387166136fb565b04169291614696565b60a085015160028110156142405715908180614d78575b614d5b578115614d51575b50614d03575f61463f565b5094509450955050925061372a94507f31604f5790fbed7a37471cea010a8f08483441a6e1235ac48bb59337439a630d60206001600160a01b0381870151935116604051908152a252614fb3565b905051155f614cf8565b6001600160a01b038451166320a2097d60e11b5f5260045260245ffd5b5060c08601511515614ced565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c6060820152019401920184929391614535565b5090845f5260205f20905f915b818310614dfc57505090602061451592820101614509565b6020919350806001915483858801015201910190918392614de4565b6020925061451594915060ff191682840152151560051b820101614509565b916004919350608060019186546001600160401b03811682526001600160401b038160401c1660208301526001600160401b0381841c16604083015260c01c60608201520194019201849293916143b7565b5090855f5260205f20905f915b818310614eae5750509060206143979282010161438b565b6020919350806001915483858801015201910190918392614e96565b6020925061439794915060ff191682840152151560051b82010161438b565b9190805f0b9081155f14614f15575050815b6001600160401b03811161238e576001600160401b031690565b5f821315614f4d57614f2a915060ff166136a5565b9182156136cd57614f418184614f489306906136b6565b92836136c3565b614efb565b505f0380805f0b0361289157614f68614f489160ff166136a5565b836136fb565b630100000d60e01b8152815160049290919082906020018483015e01015f815290565b6280000360e11b8152815160049290919082906020018483015e01015f815290565b8051612710614fd6614fcb60e08501938451906128a5565b60c0850151906136fb565b0481518181115f146151955750905b8190602084019161500883519460608701956001600160a01b038751169061530b565b1561518e575b806150d8575b7f4755f239bb1b047245415cb917deced72a3ca8baebcef109c396ff332ea6f50f91613c6f6001600160a01b038061504d858a516128a5565b96615065828a51169860408c0199848b511690613229565b6150a2828a51166001600160a01b03165f527f6c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0460205260405f2090565b6150ad8782546128a5565b9055519651169651169651915192604051938493846040919493926060820195825260208201520152565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0385511692803b1561238e5760405163f3fef3a360e01b81526001600160a01b03949094166004850152602484018390525f908490604490829084905af1928315612383577f4755f239bb1b047245415cb917deced72a3ca8baebcef109c396ff332ea6f50f9361517e575b509150615014565b5f6151889161279c565b5f615176565b505f61500e565b905090614fe5565b6001600160401b03166001609d1b01806001609d1b11612891576001600160a01b031690565b60405163a9059cbb60e01b60208201526001600160a01b0392909216602483015260448083019390935291815261372a916151ff60648361279c565b615409565b9060405190602082019063095ea7b360e01b8252736b9e773128f453f5c2c60935ee2de2cbc5390a24602484015260448301526044825261524660648361279c565b5f806001600160a01b0385169284519082855af190615263612ce3565b826152d1575b50816152c6575b501561527a575050565b61372a916151ff60405163095ea7b360e01b6020820152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248201525f6044820152604481526152c060648261279c565b82615409565b90503b15155f615270565b805191925081159182156152e9575b5050905f615269565b819250906020918101031261238e5760206153049101613131565b5f806152e0565b6040516370a0823160e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811660048301529092169392909190602082602481885afa918215612383575f926153ba575b508082109485159561537b575b50505050565b7f5180f0ad9e9bd2296de2ee38c85d11c56613fa73f8ee66792f26ac318f1274749260609260405192835260208301526040820152a25f808080615375565b9091506020813d6020116153e6575b816153d66020938361279c565b8101031261238e5751905f615368565b3d91506153c9565b63ffffffff60649116029063ffffffff821691820361289157565b906001600160a01b0361546a92165f806040519361542860408661279c565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1615464612ce3565b91615537565b8051908115918215615480575b50501561238e57565b819250906020918101031261238e57602061549b9101613131565b5f80615477565b51906001600160a01b038216820361238e57565b519060ff8216820361238e57565b9060ff8091169116039060ff821161289157565b9160ff811660ff83168181145f146154f1575050505090565b6001600160401b03949291111561551f576155186155136137ac9486936154c4565b6136a5565b91166136fb565b61553061551385926137ac956154c4565b91166136c3565b919250156155535781511561554a575090565b3b1561238e5790565b50805190811561238e57602001fdfe60a080604052346100455733608052610bd9908161004a8239608051818181607b01528181610187015281816103590152818161065a0152818161070101526108d20152f35b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c8063435354d3146108905780637bdae32e1461069b57806390a0827b146106365780639c45c34b1461030d578063de1a324a146100a25763eba61c0e1461005c575f80fd5b3461009f578060031936011261009f5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b503461009f57366003190161010081126102f55760a01361009f5760405160a0810181811067ffffffffffffffff8211176102f9576040526100e2610961565b918282526024359182151583036102f5576020810192835260443563ffffffff811681036102f1576040820152610117610974565b6060820152608435906001600160a01b03821682036102f1576080015260a43567ffffffffffffffff81168091036102f55760c4359067ffffffffffffffff82168092036102f15760e435946fffffffffffffffffffffffffffffffff86168096036102ed576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102ed5763ffffffff6101bc91166109d3565b935115159281156102de5782156102cf57916102509391600493506040519263ffffffff60208501971687526040840152606083015260808201525f945f60a0830152600260c083015260e082015260e0815261021b6101008261099d565b6020604051948592630100000160e01b83850152518091602485015e8201018281015f8152500301601f19810183528261099d565b7333333333333333333333333333333333333333333b156102cb575f61028a91604051809381926317938e1360e01b835260048301610a00565b0381837333333333333333333333333333333333333333335af180156102c0576102b2575080f35b6102be91505f9061099d565b005b6040513d5f823e3d90fd5b5f80fd5b6313c0a8df60e01b8152600490fd5b63017461b760e71b8152600490fd5b8380fd5b8280fd5b5080fd5b634e487b7160e01b83526041600452602483fd5b503461009f57608036600319011261009f57610327610987565b6024359067ffffffffffffffff82168092036102f1576044359060643580850b90818103610632576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361063257816105b4575050815b67ffffffffffffffff81116105b05767ffffffffffffffff169283156105a15790829185936103c0575b836103bc86610b0c565b5080f35b8061055857506001600160a01b031660405183806020830163095ea7b360e01b8152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248501528560448501526044845261041160648561099d565b83519082865af1610420610b28565b81610529575b508061051f575b156104c7575b5050736b9e773128f453f5c2c60935ee2de2cbc5390a243b156102f55760405190630acb7f4b60e21b8252600482015263ffffffff6024820152818160448183736b9e773128f453f5c2c60935ee2de2cbc5390a245af180156104bc576104a7575b50506103bc905b9050815f80806103b2565b816104b19161099d565b6102f557815f610495565b6040513d84823e3d90fd5b6105189161051360405163095ea7b360e01b6020820152736b9e773128f453f5c2c60935ee2de2cbc5390a2460248201528660448201526044815261050d60648261099d565b82610a7b565b610a7b565b5f80610433565b50813b151561042d565b805180159250821561053e575b50505f610426565b6105519250602080918301019101610a63565b5f80610536565b909192506001609d1b01806001609d1b1161058d5791610588916001600160a01b03806103bc9695169116610a2a565b61049c565b634e487b7160e01b85526011600452602485fd5b6306506d5560e11b8552600485fd5b8480fd5b858213156105f6576105c9915060ff16610b67565b80156105e257808306830392831161058d578204610388565b634e487b7160e01b85526012600452602485fd5b5084038080860b0361058d5761060e9060ff16610b67565b82818102918183041490151761038857634e487b7160e01b85526011600452602485fd5b8580fd5b503461009f57604036600319011261009f57610650610987565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102f55761069890602435906001600160a01b03339116610a2a565b80f35b503461009f57608036600319011261009f578060043567ffffffffffffffff811680910361080d57602435906001600160a01b03821680920361088c576044359167ffffffffffffffff831680930361088a576106f6610974565b926001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036105b05763ffffffff602094169263ffffffff841480610882575b156108105761079b93506040519285840152604083015260608201526060815261076960808261099d565b6004604051938492818401906280000360e11b82528051928391018483015e01015f815203601f19810183528261099d565b7333333333333333333333333333333333333333333b1561080d57816107d591604051809381926317938e1360e01b835260048301610a00565b0381837333333333333333333333333333333333333333335af180156104bc576107fc5750f35b816108069161099d565b61009f5780f35b50fd5b61087d93604051938685015286604085015263ffffffff6060850152608084015260a083015260c082015260c0815261084a60e08261099d565b600460405193849281840190630100000d60e01b82528051928391018483015e01015f815203601f19810183528261099d565b61079b565b50600161073e565b505b5050fd5b50346102cb5760403660031901126102cb576108aa610961565b602435906fffffffffffffffffffffffffffffffff82168092036102cb576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036102cb576004610906610250926109d3565b926040519063ffffffff602083019516855260408201526040815261092c60608261099d565b6020604051948592630100000b60e01b83850152518091602485015e8201018281015f8152500301601f19810183528261099d565b6004359063ffffffff821682036102cb57565b6064359063ffffffff821682036102cb57565b600435906001600160a01b03821682036102cb57565b90601f8019910116810190811067ffffffffffffffff8211176109bf57604052565b634e487b7160e01b5f52604160045260245ffd5b63ffffffff6127109116019063ffffffff82116109ec57565b634e487b7160e01b5f52601160045260245ffd5b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b610a61926001600160a01b036040519363a9059cbb60e01b602086015216602484015260448301526044825261051360648361099d565b565b908160209103126102cb575180151581036102cb5790565b906001600160a01b03610adc92165f8060405193610a9a60408661099d565b602085527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564602086015260208151910182855af1610ad6610b28565b91610b78565b8051908115918215610af2575b5050156102cb57565b610b059250602080918301019101610a63565b5f80610ae9565b67ffffffffffffffff169067ffffffffffffffff82116109ec57565b3d15610b62573d9067ffffffffffffffff82116109bf5760405191610b57601f8201601f19166020018461099d565b82523d5f602084013e565b606090565b60ff16604d81116109ec57600a0a90565b91925015610b9457815115610b8b575090565b3b156102cb5790565b5080519081156102cb57602001fdfea2646970667358221220957eb92bf34977f1dbc400ded4a4688729e475d059af2473160b1dcd76c46a2064736f6c634300081e00336c70e510d36398bee89cc6e19ea6807a9915863d7d724712e0b3c15b01368b0002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220b56f4a53d59578206a94ce74308306388bc2e012cfdab9326bc08a23f28b503f64736f6c634300081e0033bd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ffb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800"}